From c6b4d5a87fa1293e40ca0f3c56a687d7025839a5 Mon Sep 17 00:00:00 2001 From: Doc Date: Mon, 10 Jun 2024 14:06:34 +1000 Subject: [PATCH] SPIGOT-7731: Spawn eggs cannot have damage --- .../inventory/CraftItemFactory.java | 5 -- .../craftbukkit/inventory/CraftItemStack.java | 6 -- .../craftbukkit/inventory/CraftMetaItem.java | 4 -- .../inventory/CraftMetaSpawnEgg.java | 69 +------------------ .../craftbukkit/legacy/CraftLegacy.java | 2 +- .../legacy/MaterialReroutingTest.java | 2 +- 6 files changed, 4 insertions(+), 84 deletions(-) diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemFactory.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemFactory.java index 10a0e392e80a8..afa2ad4771c5d 100644 --- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemFactory.java +++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemFactory.java @@ -459,11 +459,6 @@ public ItemStack createItemStack(String input) throws IllegalArgumentException { } } - @Override - public Material updateMaterial(ItemMeta meta, Material material) throws IllegalArgumentException { - return ((CraftMetaItem) meta).updateMaterial(material); - } - @Override public Material getSpawnEgg(EntityType type) { if (type == EntityType.UNKNOWN) { diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemStack.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemStack.java index 2240ef38da052..1705b3ed58031 100644 --- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemStack.java +++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemStack.java @@ -626,12 +626,6 @@ public static boolean setItemMeta(net.minecraft.world.item.ItemStack item, ItemM itemMeta = CraftItemFactory.instance().asMetaFor(itemMeta, getType(item)); if (itemMeta == null) return true; - Item oldItem = item.getItem(); - Item newItem = CraftItemType.bukkitToMinecraft(CraftItemFactory.instance().updateMaterial(itemMeta, CraftItemType.minecraftToBukkit(oldItem))); - if (oldItem != newItem) { - item.setItem(newItem); - } - if (!((CraftMetaItem) itemMeta).isEmpty()) { CraftMetaItem.Applicator tag = new CraftMetaItem.Applicator(); diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java index 12beb5d6362bd..f125452376a6c 100644 --- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java +++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java @@ -1691,10 +1691,6 @@ ImmutableMap.Builder serialize(ImmutableMap.Builder unhandledTags) { } - Material updateMaterial(Material material) { - return material; - } - static void serializeEnchantments(Map enchantments, ImmutableMap.Builder builder, ItemMetaKey key) { if (enchantments == null || enchantments.isEmpty()) { return; diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaSpawnEgg.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaSpawnEgg.java index b799b65b8cae2..c5e879d538c53 100644 --- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaSpawnEgg.java +++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaSpawnEgg.java @@ -13,12 +13,9 @@ import org.bukkit.Material; import org.bukkit.configuration.serialization.DelegateDeserialization; import org.bukkit.craftbukkit.entity.CraftEntitySnapshot; -import org.bukkit.craftbukkit.entity.CraftEntityType; -import org.bukkit.craftbukkit.util.CraftLegacy; import org.bukkit.entity.EntitySnapshot; import org.bukkit.entity.EntityType; import org.bukkit.inventory.meta.SpawnEggMeta; -import org.bukkit.material.MaterialData; @DelegateDeserialization(SerializableMeta.class) public class CraftMetaSpawnEgg extends CraftMetaItem implements SpawnEggMeta { @@ -110,19 +107,10 @@ public class CraftMetaSpawnEgg extends CraftMetaItem implements SpawnEggMeta { @ItemMetaKey.Specific(ItemMetaKey.Specific.To.NBT) static final ItemMetaKey ENTITY_ID = new ItemMetaKey("id"); - private EntityType spawnedType; private NBTTagCompound entityTag; CraftMetaSpawnEgg(CraftMetaItem meta) { super(meta); - - if (!(meta instanceof CraftMetaSpawnEgg egg)) { - return; - } - - this.spawnedType = egg.spawnedType; - - updateMaterial(null); // Trigger type population } CraftMetaSpawnEgg(DataComponentPatch tag) { @@ -135,11 +123,6 @@ public class CraftMetaSpawnEgg extends CraftMetaItem implements SpawnEggMeta { CraftMetaSpawnEgg(Map map) { super(map); - - String entityType = SerializableMeta.getString(map, ENTITY_ID.BUKKIT, true); - if (entityType != null) { - this.spawnedType = CraftEntityType.stringToBukkit(entityType); - } } @Override @@ -149,31 +132,11 @@ void deserializeInternal(NBTTagCompound tag, Object context) { if (tag.contains(ENTITY_TAG.NBT)) { entityTag = tag.getCompound(ENTITY_TAG.NBT); - if (context instanceof Map) { - Map map = (Map) context; - - // Duplicated from constructor - String entityType = SerializableMeta.getString(map, ENTITY_ID.BUKKIT, true); - if (entityType != null) { - this.spawnedType = CraftEntityType.stringToBukkit(entityType); - } - } - - if (this.spawnedType != null) { - // We have a valid spawn type, just remove the ID now - entityTag.remove(ENTITY_ID.NBT); - } - // Tag still has some other data, lets try our luck with a conversion if (!entityTag.isEmpty()) { // SPIGOT-4128: This is hopeless until we start versioning stacks. RIP data. // entityTag = (NBTTagCompound) MinecraftServer.getServer().dataConverterManager.update(DataConverterTypes.ENTITY, new Dynamic(DynamicOpsNBT.a, entityTag), -1, CraftMagicNumbers.DATA_VERSION).getValue(); } - - // See if we can read a converted ID tag - if (entityTag.contains(ENTITY_ID.NBT)) { - this.spawnedType = CraftEntityType.stringToBukkit(entityTag.getString(ENTITY_ID.NBT)); - } } } @@ -208,11 +171,7 @@ boolean isEmpty() { } boolean isSpawnEggEmpty() { - return !(hasSpawnedType() || entityTag != null); - } - - boolean hasSpawnedType() { - return spawnedType != null; + return entityTag != null; } @Override @@ -244,8 +203,7 @@ boolean equalsCommon(CraftMetaItem meta) { if (meta instanceof CraftMetaSpawnEgg) { CraftMetaSpawnEgg that = (CraftMetaSpawnEgg) meta; - return hasSpawnedType() ? that.hasSpawnedType() && this.spawnedType.equals(that.spawnedType) : !that.hasSpawnedType() - && entityTag != null ? that.entityTag != null && this.entityTag.equals(that.entityTag) : entityTag == null; + return entityTag != null ? that.entityTag != null && this.entityTag.equals(that.entityTag) : entityTag == null; } return true; } @@ -260,9 +218,6 @@ int applyHash() { final int original; int hash = original = super.applyHash(); - if (hasSpawnedType()) { - hash = 73 * hash + spawnedType.hashCode(); - } if (entityTag != null) { hash = 73 * hash + entityTag.hashCode(); } @@ -281,30 +236,10 @@ Builder serialize(Builder builder) { public CraftMetaSpawnEgg clone() { CraftMetaSpawnEgg clone = (CraftMetaSpawnEgg) super.clone(); - clone.spawnedType = spawnedType; if (entityTag != null) { clone.entityTag = entityTag.copy(); } return clone; } - - @Override - final Material updateMaterial(Material material) { - if (spawnedType == null) { - spawnedType = EntityType.fromId(getDamage()); - setDamage(0); - } - - if (spawnedType != null) { - if (entityTag != null) { - // Remove ID tag as it is now in the material - entityTag.remove("id"); - } - - return CraftLegacy.fromLegacy(new MaterialData(Material.LEGACY_MONSTER_EGG, (byte) spawnedType.getTypeId())); - } - - return super.updateMaterial(material); - } } diff --git a/src/main/java/org/bukkit/craftbukkit/legacy/CraftLegacy.java b/src/main/java/org/bukkit/craftbukkit/legacy/CraftLegacy.java index bf30ca8784bcf..7c0914ecb2a5a 100644 --- a/src/main/java/org/bukkit/craftbukkit/legacy/CraftLegacy.java +++ b/src/main/java/org/bukkit/craftbukkit/legacy/CraftLegacy.java @@ -269,7 +269,7 @@ public static void init() { new Exception().printStackTrace(); } - SPAWN_EGGS.put((byte) 0, Material.PIG_SPAWN_EGG); // Will be fixed by updateMaterial if possible + SPAWN_EGGS.put((byte) 0, Material.PIG_SPAWN_EGG); SPAWN_EGGS.put((byte) EntityType.BAT.getTypeId(), Material.BAT_SPAWN_EGG); SPAWN_EGGS.put((byte) EntityType.BLAZE.getTypeId(), Material.BLAZE_SPAWN_EGG); diff --git a/src/test/java/org/bukkit/craftbukkit/legacy/MaterialReroutingTest.java b/src/test/java/org/bukkit/craftbukkit/legacy/MaterialReroutingTest.java index fa4bd5aba18f8..496574d9a1736 100644 --- a/src/test/java/org/bukkit/craftbukkit/legacy/MaterialReroutingTest.java +++ b/src/test/java/org/bukkit/craftbukkit/legacy/MaterialReroutingTest.java @@ -88,7 +88,7 @@ public void testBukkitClasses(InputStream inputStream) throws IOException { if (methodNode.desc.contains("Lorg/bukkit/Material;") || signature.contains("Lorg/bukkit/Material;")) { // Add method exceptions here switch (methodNode.name) { - case "", "updateMaterial", "setItemMeta0" -> { + case "", "setItemMeta0" -> { continue; } }