From eb5257d3a5ca26e9bdc303a22dd2881da62b0165 Mon Sep 17 00:00:00 2001 From: Owen1212055 <23108066+Owen1212055@users.noreply.github.com> Date: Thu, 13 Jul 2023 16:59:49 -0400 Subject: [PATCH] Suppress Item Meta Validation Checks (#9331) Stops item meta from aggressively throwing exceptions. --- ...Suppress-Item-Meta-Validation-Checks.patch | 86 +++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 patches/server/Suppress-Item-Meta-Validation-Checks.patch diff --git a/patches/server/Suppress-Item-Meta-Validation-Checks.patch b/patches/server/Suppress-Item-Meta-Validation-Checks.patch new file mode 100644 index 0000000000..945fd5c81f --- /dev/null +++ b/patches/server/Suppress-Item-Meta-Validation-Checks.patch @@ -0,0 +1,86 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Owen1212055 <23108066+Owen1212055@users.noreply.github.com> +Date: Mon, 12 Jun 2023 14:42:49 -0400 +Subject: [PATCH] Suppress Item Meta Validation Checks + +In some cases ItemMeta could validate tags in an ItemStack. This suppresses those warnings and ignores reading the value. + +diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaArmor.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaArmor.java +index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 +--- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaArmor.java ++++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaArmor.java +@@ -0,0 +0,0 @@ public class CraftMetaArmor extends CraftMetaItem implements ArmorMeta { + CompoundTag trimCompound = tag.getCompound(TRIM.NBT); + + if (trimCompound.contains(TRIM_MATERIAL.NBT, net.minecraft.nbt.Tag.TAG_STRING) && trimCompound.contains(TRIM_PATTERN.NBT, net.minecraft.nbt.Tag.TAG_STRING)) { // Paper - for now, ignore inline definitions of trim material & pattern +- TrimMaterial trimMaterial = Registry.TRIM_MATERIAL.get(NamespacedKey.fromString(trimCompound.getString(TRIM_MATERIAL.NBT))); +- TrimPattern trimPattern = Registry.TRIM_PATTERN.get(NamespacedKey.fromString(trimCompound.getString(TRIM_PATTERN.NBT))); ++ // Paper start ++ TrimMaterial trimMaterial = getRegistry(Registry.TRIM_MATERIAL, trimCompound.getString(TRIM_MATERIAL.NBT)); ++ TrimPattern trimPattern = getRegistry(Registry.TRIM_PATTERN, trimCompound.getString(TRIM_PATTERN.NBT)); ++ // Paper end + +- this.trim = new ArmorTrim(trimMaterial, trimPattern); ++ this.trim = trimMaterial == null || trimPattern == null ? null : new ArmorTrim(trimMaterial, trimPattern); // Paper + } + } + } ++ // Paper start ++ public <T extends org.bukkit.Keyed> T getRegistry(Registry<T> registry, String value) { ++ if (value == null || value.isEmpty()) { ++ return null; ++ } ++ NamespacedKey namespacedKey = NamespacedKey.fromString(value); ++ if (namespacedKey == null) { ++ return null; ++ } ++ ++ T registryValue = registry.get(namespacedKey); ++ if (registryValue == null) { ++ return null; ++ } ++ ++ return registryValue; ++ } ++ // Paper end + + CraftMetaArmor(Map<String, Object> map) { + super(map); +diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java +index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 +--- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java ++++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java +@@ -0,0 +0,0 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta { + continue; + } + +- Attribute attribute = CraftAttributeMap.fromMinecraft(attributeName); ++ // Paper start ++ Attribute attribute; ++ try { ++ attribute = CraftAttributeMap.fromMinecraft(attributeName); ++ } catch (IllegalArgumentException e) { ++ attribute = null; ++ } ++ // Paper end + if (attribute == null) { + continue; + } +diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaSkull.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaSkull.java +index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 +--- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaSkull.java ++++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaSkull.java +@@ -0,0 +0,0 @@ class CraftMetaSkull extends CraftMetaItem implements SkullMeta { + CraftMetaSkull(CompoundTag tag) { + super(tag); + ++ try { // Paper - Ignore invalid game profiles + if (tag.contains(SKULL_OWNER.NBT, CraftMagicNumbers.NBT.TAG_COMPOUND)) { + this.setProfile(NbtUtils.readGameProfile(tag.getCompound(SKULL_OWNER.NBT))); + } else if (tag.contains(SKULL_OWNER.NBT, CraftMagicNumbers.NBT.TAG_STRING) && !tag.getString(SKULL_OWNER.NBT).isEmpty()) { + this.setProfile(new GameProfile(null, tag.getString(SKULL_OWNER.NBT))); + } ++ } catch (Exception ignored) {} // Paper + + if (tag.contains(BLOCK_ENTITY_TAG.NBT, CraftMagicNumbers.NBT.TAG_COMPOUND)) { + CompoundTag nbtTagCompound = tag.getCompound(BLOCK_ENTITY_TAG.NBT).copy();