From 21d5f75d6c7b2f13faf8815b20ba877681a0f47f Mon Sep 17 00:00:00 2001 From: md_5 Date: Thu, 19 Apr 2018 08:03:39 +1000 Subject: [PATCH] SPIGOT-3908: Fix signed books incorrect defaulting to unresolved --- .../craftbukkit/inventory/CraftMetaBook.java | 6 ++++- .../inventory/CraftMetaBookSigned.java | 25 ++++++++++++++++++- 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaBook.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaBook.java index 0b5078e59f..9c9ef2951d 100644 --- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaBook.java +++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaBook.java @@ -52,6 +52,10 @@ public class CraftMetaBook extends CraftMetaItem implements BookMeta { } CraftMetaBook(NBTTagCompound tag) { + this(tag, true); + } + + CraftMetaBook(NBTTagCompound tag, boolean handlePages) { super(tag); if (tag.hasKey(BOOK_TITLE.NBT)) { @@ -71,7 +75,7 @@ public class CraftMetaBook extends CraftMetaItem implements BookMeta { generation = tag.getInt(GENERATION.NBT); } - if (tag.hasKey(BOOK_PAGES.NBT)) { + if (tag.hasKey(BOOK_PAGES.NBT) && handlePages) { NBTTagList pages = tag.getList(BOOK_PAGES.NBT, CraftMagicNumbers.NBT.TAG_STRING); for (int i = 0; i < Math.min(pages.size(), MAX_PAGES); i++) { diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaBookSigned.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaBookSigned.java index ef8bedd67f..bffbe9013b 100644 --- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaBookSigned.java +++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaBookSigned.java @@ -8,6 +8,7 @@ import net.minecraft.server.NBTTagList; import org.bukkit.Material; import org.bukkit.configuration.serialization.DelegateDeserialization; import org.bukkit.craftbukkit.inventory.CraftMetaItem.SerializableMeta; +import org.bukkit.craftbukkit.util.CraftMagicNumbers; import org.bukkit.inventory.meta.BookMeta; import com.google.common.collect.ImmutableMap.Builder; @@ -23,7 +24,29 @@ class CraftMetaBookSigned extends CraftMetaBook implements BookMeta { } CraftMetaBookSigned(NBTTagCompound tag) { - super(tag); + super(tag, false); + + boolean resolved = true; + if (tag.hasKey(RESOLVED.NBT)) { + resolved = tag.getBoolean(RESOLVED.NBT); + } + + if (tag.hasKey(BOOK_PAGES.NBT)) { + NBTTagList pages = tag.getList(BOOK_PAGES.NBT, CraftMagicNumbers.NBT.TAG_STRING); + + for (int i = 0; i < Math.min(pages.size(), MAX_PAGES); i++) { + String page = pages.getString(i); + if (resolved) { + try { + this.pages.add(ChatSerializer.a(page)); + continue; + } catch (Exception e) { + // Ignore and treat as an old book + } + } + addPage(page); + } + } } CraftMetaBookSigned(Map map) {