From e76a666910d5881406c1a08f06971db765451e4c Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Mon, 29 Jun 2020 10:40:23 -0500 Subject: [PATCH] Convert legacy item text --- .../0096-Convert-legacy-item-text.patch | 118 ++++++++++++++++++ 1 file changed, 118 insertions(+) create mode 100644 patches/server/0096-Convert-legacy-item-text.patch diff --git a/patches/server/0096-Convert-legacy-item-text.patch b/patches/server/0096-Convert-legacy-item-text.patch new file mode 100644 index 000000000..ee316d5a0 --- /dev/null +++ b/patches/server/0096-Convert-legacy-item-text.patch @@ -0,0 +1,118 @@ +From 76efcfb3e7f410e243bd132bd2378456d1bab25a Mon Sep 17 00:00:00 2001 +From: William Blake Galbreath +Date: Mon, 29 Jun 2020 08:56:53 -0500 +Subject: [PATCH] Convert legacy item text + +--- + .../java/net/minecraft/server/ItemStack.java | 30 +++++++++++++++++-- + .../craftbukkit/inventory/CraftMetaItem.java | 2 +- + .../craftbukkit/util/CraftChatMessage.java | 18 +++++++++++ + 3 files changed, 46 insertions(+), 4 deletions(-) + +diff --git a/src/main/java/net/minecraft/server/ItemStack.java b/src/main/java/net/minecraft/server/ItemStack.java +index 54421c56c1..ec9a891ed1 100644 +--- a/src/main/java/net/minecraft/server/ItemStack.java ++++ b/src/main/java/net/minecraft/server/ItemStack.java +@@ -127,6 +127,7 @@ public final class ItemStack { + if (nbttagcompound.hasKeyOfType("tag", 10)) { + // CraftBukkit start - make defensive copy as this data may be coming from the save thread + this.tag = (NBTTagCompound) nbttagcompound.getCompound("tag").clone(); ++ processLore(); // Purpur + processEnchantOrder(this.tag); // Paper + this.getItem().b(this.tag); + // CraftBukkit end +@@ -138,6 +139,29 @@ public final class ItemStack { + + } + ++ // Purpur start ++ public void processLore() { ++ NBTTagCompound display = getSubTag("display"); ++ if (display != null && display.hasKeyOfType("Lore", 9)) { ++ NBTTagList list = display.getList("Lore", 8); ++ try { ++ for (int i = 0; i < list.size(); i++) { ++ try { ++ String line = org.spigotmc.ValidateUtils.limit(list.getString(i), 8192); ++ IChatBaseComponent component = IChatBaseComponent.ChatSerializer.jsonToComponent(line); ++ if (component != null) { ++ list.set(i, NBTTagString.create(org.bukkit.craftbukkit.util.CraftChatMessage.convertToJson(component))); ++ } ++ } catch (JsonParseException ignore) { ++ } ++ } ++ } catch (JsonParseException e) { ++ display.remove("Lore"); ++ } ++ } ++ } ++ // Purpur end ++ + private ItemStack(NBTTagCompound nbttagcompound) { + this.load(nbttagcompound); + // CraftBukkit end +@@ -632,8 +656,8 @@ public final class ItemStack { + } + } + +- @Nullable +- public NBTTagCompound b(String s) { ++ @Nullable public NBTTagCompound getSubTag(String s) { return b(s); } // Purpur - OBFHELPER ++ @Nullable public NBTTagCompound b(String s) { + return this.tag != null && this.tag.hasKeyOfType(s, 10) ? this.tag.getCompound(s) : null; + } + +@@ -686,7 +710,7 @@ public final class ItemStack { + IChatMutableComponent ichatmutablecomponent = IChatBaseComponent.ChatSerializer.a(nbttagcompound.getString("Name")); + + if (ichatmutablecomponent != null) { +- return ichatmutablecomponent; ++ return org.bukkit.craftbukkit.util.CraftChatMessage.convert(ichatmutablecomponent); // Purpur + } + + nbttagcompound.remove("Name"); +diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java +index 79d8d60ea2..2b2163db33 100644 +--- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java ++++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java +@@ -376,7 +376,7 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta { + for (int index = 0; index < list.size(); index++) { + String line = limit( list.getString(index), 8192 ); // Spigot + try { +- lore.add(IChatBaseComponent.ChatSerializer.a(line)); ++ lore.add(CraftChatMessage.convert(IChatBaseComponent.ChatSerializer.jsonToComponent(line))); // Purpur + } catch (JsonParseException ex) { + // Ignore (stripped like Vanilla) + } +diff --git a/src/main/java/org/bukkit/craftbukkit/util/CraftChatMessage.java b/src/main/java/org/bukkit/craftbukkit/util/CraftChatMessage.java +index 3b79ae44c5..85cccba6a6 100644 +--- a/src/main/java/org/bukkit/craftbukkit/util/CraftChatMessage.java ++++ b/src/main/java/org/bukkit/craftbukkit/util/CraftChatMessage.java +@@ -248,6 +248,24 @@ public final class CraftChatMessage { + return out.toString(); + } + ++ // Purpur start ++ public static IChatBaseComponent convert(IChatBaseComponent component) { ++ String txt = component.getText(); ++ if (txt != null && txt.contains("\u00A7")) { ++ return IChatBaseComponent.ChatSerializer.jsonToComponent(CraftChatMessage.toJSON(CraftChatMessage.fromString(txt)[0])); ++ } ++ return component; ++ } ++ ++ public static String convertToJson(IChatBaseComponent component) { ++ String txt = component.getText(); ++ if (txt != null && txt.contains("\u00A7")) { ++ return CraftChatMessage.toJSON(CraftChatMessage.fromString(txt)[0]); ++ } ++ return CraftChatMessage.toJSON(component); ++ } ++ // Purpur end ++ + public static IChatBaseComponent fixComponent(IChatBaseComponent component) { + Matcher matcher = LINK_PATTERN.matcher(""); + return fixComponent(component, matcher); +-- +2.26.2 +