Skip to content

Commit 8b35361

Browse files
tal5Owen1212055
andauthored
Add UnsafeValues#deserializeItemHover (#13067)
Co-authored-by: Owen1212055 <[email protected]>
1 parent 1d3d820 commit 8b35361

File tree

3 files changed

+27
-1
lines changed

3 files changed

+27
-1
lines changed

paper-api/src/main/java/org/bukkit/UnsafeValues.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import com.google.common.collect.Multimap;
44
import io.papermc.paper.entity.EntitySerializationFlag;
55
import io.papermc.paper.registry.RegistryKey;
6+
import net.kyori.adventure.text.event.HoverEvent;
67
import org.bukkit.advancement.Advancement;
78
import org.bukkit.attribute.Attribute;
89
import org.bukkit.attribute.AttributeModifier;
@@ -384,4 +385,12 @@ default com.destroystokyo.paper.util.VersionFetcher getVersionFetcher() {
384385
@NotNull Map<String, Object> serializeStack(ItemStack itemStack);
385386

386387
@NotNull ItemStack deserializeStack(@NotNull Map<String, Object> args);
388+
389+
/**
390+
* Deserializes a {@link HoverEvent.ShowItem} hover event value into an {@code ItemStack}.
391+
*
392+
* @param itemHover the hover to deserialize
393+
* @return the deserialized {@code ItemStack}
394+
*/
395+
@NotNull ItemStack deserializeItemHover(HoverEvent.@NotNull ShowItem itemHover);
387396
}

paper-server/src/main/java/io/papermc/paper/adventure/AdventureCodecs.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -194,7 +194,7 @@ public String getSerializedName() {
194194
COMPONENT_CODEC.lenientOptionalFieldOf("name").forGetter(a -> Optional.ofNullable(a.value().name()))
195195
).apply(instance, (key, uuid, component) -> HoverEvent.showEntity(key, uuid, component.orElse(null))));
196196

197-
static final MapCodec<HoverEvent<HoverEvent.ShowItem>> SHOW_ITEM_CODEC = net.minecraft.network.chat.HoverEvent.ShowItem.CODEC.xmap(internal -> {
197+
public static final MapCodec<HoverEvent<HoverEvent.ShowItem>> SHOW_ITEM_CODEC = net.minecraft.network.chat.HoverEvent.ShowItem.CODEC.xmap(internal -> {
198198
@Subst("key") final String typeKey = internal.item().getItemHolder().unwrapKey().orElseThrow().identifier().toString();
199199
return HoverEvent.showItem(Key.key(typeKey), internal.item().getCount(), PaperAdventure.asAdventure(internal.item().getComponentsPatch()));
200200
}, adventure -> {

paper-server/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,10 @@
1111
import com.mojang.brigadier.exceptions.CommandSyntaxException;
1212
import com.mojang.logging.LogUtils;
1313
import com.mojang.serialization.Dynamic;
14+
import com.mojang.serialization.JavaOps;
1415
import com.mojang.serialization.JsonOps;
16+
import io.papermc.paper.adventure.AdventureCodecs;
17+
import io.papermc.paper.adventure.PaperAdventure;
1518
import io.papermc.paper.registry.RegistryKey;
1619
import java.io.File;
1720
import java.io.IOException;
@@ -26,6 +29,7 @@
2629
import java.util.logging.Level;
2730
import java.util.stream.Stream;
2831
import io.papermc.paper.entity.EntitySerializationFlag;
32+
import net.kyori.adventure.text.event.HoverEvent;
2933
import net.minecraft.SharedConstants;
3034
import net.minecraft.advancements.AdvancementHolder;
3135
import net.minecraft.commands.Commands;
@@ -39,6 +43,7 @@
3943
import net.minecraft.nbt.Tag;
4044
import net.minecraft.nbt.TagParser;
4145
import net.minecraft.resources.Identifier;
46+
import net.minecraft.resources.RegistryOps;
4247
import net.minecraft.server.MinecraftServer;
4348
import net.minecraft.server.level.ServerLevel;
4449
import net.minecraft.util.ProblemReporter;
@@ -56,6 +61,7 @@
5661
import org.bukkit.Keyed;
5762
import org.bukkit.Material;
5863
import org.bukkit.NamespacedKey;
64+
import org.bukkit.Registry;
5965
import org.bukkit.UnsafeValues;
6066
import org.bukkit.World;
6167
import org.bukkit.advancement.Advancement;
@@ -860,4 +866,15 @@ public io.papermc.paper.plugin.lifecycle.event.LifecycleEventManager<org.bukkit.
860866
public org.bukkit.inventory.ItemStack createEmptyStack() {
861867
return CraftItemStack.asCraftMirror(null);
862868
}
869+
870+
@Override
871+
public ItemStack deserializeItemHover(final HoverEvent.ShowItem itemHover) {
872+
final RegistryOps<Object> ops = CraftRegistry.getMinecraftRegistry().createSerializationContext(JavaOps.INSTANCE);
873+
final Object encoded = AdventureCodecs.SHOW_ITEM_CODEC.codec()
874+
.encodeStart(ops, HoverEvent.showItem(itemHover)).getOrThrow(IllegalStateException::new);
875+
876+
return CraftItemStack.asBukkitCopy(net.minecraft.network.chat.HoverEvent.ShowItem.CODEC.codec()
877+
.parse(ops, encoded).getOrThrow(IllegalStateException::new)
878+
.item());
879+
}
863880
}

0 commit comments

Comments
 (0)