From 5e8e7cbaf48cafd8e96db3748a17ea80d2e67304 Mon Sep 17 00:00:00 2001 From: TheMode Date: Sat, 10 Apr 2021 00:24:29 +0200 Subject: [PATCH] Rename nbt method to remove confusion about the object being mutable or not --- .../minestom/server/chat/ChatHoverEvent.java | 2 +- .../net/minestom/server/item/ItemMeta.java | 18 +++++++++++++----- .../server/item/metadata/CrossbowMeta.java | 2 +- .../net/minestom/server/utils/NBTUtils.java | 4 ++-- .../server/world/biomes/BiomeParticles.java | 2 +- 5 files changed, 18 insertions(+), 10 deletions(-) diff --git a/src/main/java/net/minestom/server/chat/ChatHoverEvent.java b/src/main/java/net/minestom/server/chat/ChatHoverEvent.java index a1e4dbd00..162447c38 100644 --- a/src/main/java/net/minestom/server/chat/ChatHoverEvent.java +++ b/src/main/java/net/minestom/server/chat/ChatHoverEvent.java @@ -93,7 +93,7 @@ public class ChatHoverEvent { JsonObject obj = GsonComponentSerializer.gson().serializer().toJsonTree(Component.empty().hoverEvent(event)).getAsJsonObject(); obj = obj.get("hoverEvent").getAsJsonObject().get("contents").getAsJsonObject(); - NBTCompound compound = itemStack.getMeta().nbt(); + NBTCompound compound = itemStack.getMeta().toNBT(); obj.add("tag", new JsonPrimitive(compound.toSNBT())); return new ChatHoverEvent("show_item", obj); diff --git a/src/main/java/net/minestom/server/item/ItemMeta.java b/src/main/java/net/minestom/server/item/ItemMeta.java index 7c9439fc6..acd62a6fa 100644 --- a/src/main/java/net/minestom/server/item/ItemMeta.java +++ b/src/main/java/net/minestom/server/item/ItemMeta.java @@ -7,6 +7,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jglrxavpok.hephaistos.nbt.NBTCompound; +import java.lang.ref.SoftReference; import java.util.Collections; import java.util.List; import java.util.Map; @@ -28,6 +29,8 @@ public class ItemMeta { private final NBTCompound nbt; private final ItemMetaBuilder emptyBuilder; + private SoftReference nbtCache; + protected ItemMeta(@NotNull ItemMetaBuilder metaBuilder) { this.damage = metaBuilder.damage; this.unbreakable = metaBuilder.unbreakable; @@ -92,18 +95,23 @@ public class ItemMeta { public T getOrDefault(@NotNull ItemTag tag, @Nullable T defaultValue) { var key = tag.getKey(); if (nbt.containsKey(key)) { - return tag.read(nbt); + return tag.read(toNBT()); } else { return defaultValue; } } public @Nullable T get(@NotNull ItemTag tag) { - return tag.read(nbt); + return tag.read(toNBT()); } - public @NotNull NBTCompound nbt() { - return nbt; + public @NotNull NBTCompound toNBT() { + NBTCompound cache = nbtCache.get(); + if (cache == null) { + cache = nbt.deepClone(); + nbtCache = new SoftReference<>(cache); + } + return cache; } @Override @@ -112,7 +120,7 @@ public class ItemMeta { if (o == null || getClass() != o.getClass()) return false; ItemMeta itemMeta = (ItemMeta) o; - return nbt.equals(itemMeta.nbt()); + return nbt.equals(itemMeta.nbt); } @Override diff --git a/src/main/java/net/minestom/server/item/metadata/CrossbowMeta.java b/src/main/java/net/minestom/server/item/metadata/CrossbowMeta.java index 657fd2543..908af5183 100644 --- a/src/main/java/net/minestom/server/item/metadata/CrossbowMeta.java +++ b/src/main/java/net/minestom/server/item/metadata/CrossbowMeta.java @@ -193,7 +193,7 @@ public class CrossbowMeta extends ItemMeta { @NotNull private NBTCompound getItemCompound(@NotNull ItemStack itemStack) { - NBTCompound compound = itemStack.getMeta().nbt(); + NBTCompound compound = itemStack.getMeta().toNBT(); compound.setByte("Count", (byte) itemStack.getAmount()); compound.setString("id", itemStack.getMaterial().getName()); return compound; diff --git a/src/main/java/net/minestom/server/utils/NBTUtils.java b/src/main/java/net/minestom/server/utils/NBTUtils.java index 6267073f2..2d640de38 100644 --- a/src/main/java/net/minestom/server/utils/NBTUtils.java +++ b/src/main/java/net/minestom/server/utils/NBTUtils.java @@ -88,7 +88,7 @@ public final class NBTUtils { final ItemStack stack = inventory.getItemStack(i); NBTCompound nbt = new NBTCompound(); - NBTCompound tag = stack.getMeta().nbt(); + NBTCompound tag = stack.getMeta().toNBT(); nbt.set("tag", tag); nbt.setByte("Slot", (byte) i); @@ -288,7 +288,7 @@ public final class NBTUtils { packet.writeVarInt(itemStack.getMaterial().getId()); packet.writeByte((byte) itemStack.getAmount()); - packet.writeNBT("", itemStack.getMeta().nbt()); + packet.writeNBT("", itemStack.getMeta().toNBT()); } } diff --git a/src/main/java/net/minestom/server/world/biomes/BiomeParticles.java b/src/main/java/net/minestom/server/world/biomes/BiomeParticles.java index 5ab2ec118..721e89790 100644 --- a/src/main/java/net/minestom/server/world/biomes/BiomeParticles.java +++ b/src/main/java/net/minestom/server/world/biomes/BiomeParticles.java @@ -100,7 +100,7 @@ public class BiomeParticles { @Override public NBTCompound toNbt() { //todo test count might be wrong type - NBTCompound nbtCompound = item.getMeta().nbt(); + NBTCompound nbtCompound = item.getMeta().toNBT(); nbtCompound.setString("type", type); return nbtCompound; }