From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Tue, 3 Nov 2020 01:25:06 -0600 Subject: [PATCH] Allow color codes in books diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java index 7676659f4..bd206f181 100644 --- a/src/main/java/net/minecraft/server/PlayerConnection.java +++ b/src/main/java/net/minecraft/server/PlayerConnection.java @@ -1003,7 +1003,8 @@ public class PlayerConnection implements PacketListenerPlayIn { if (itemstack.getItem() == Items.WRITABLE_BOOK) { NBTTagList nbttaglist = new NBTTagList(); - list.stream().map(NBTTagString::a).forEach(nbttaglist::add); + boolean hasPerm = getPlayer().hasPermission("purpur.book.color.edit"); // Purpur - edit book + list.stream().map(s -> s = color(s, hasPerm, false)).map(NBTTagString::a).forEach(nbttaglist::add); // Purpur - edit book ItemStack old = itemstack.cloneItemStack(); // CraftBukkit itemstack.a("pages", (NBTBase) nbttaglist); CraftEventFactory.handleEditBookEvent(player, i, old, itemstack); // CraftBukkit @@ -1021,13 +1022,14 @@ public class PlayerConnection implements PacketListenerPlayIn { itemstack1.setTag(nbttagcompound.clone()); } + boolean hasPerm = getPlayer().hasPermission("purpur.book.color.edit") || getPlayer().hasPermission("purpur.book.color.sign"); // Purpur itemstack1.a("author", (NBTBase) NBTTagString.a(this.player.getDisplayName().getString())); - itemstack1.a("title", (NBTBase) NBTTagString.a(s)); + itemstack1.a("title", (NBTBase) NBTTagString.a(color(s, hasPerm))); // Purpur - sign book NBTTagList nbttaglist = new NBTTagList(); Iterator iterator = list.iterator(); while (iterator.hasNext()) { - String s1 = (String) iterator.next(); + String s1 = color((String) iterator.next(), hasPerm);// Purpur - sign book ChatComponentText chatcomponenttext = new ChatComponentText(s1); String s2 = IChatBaseComponent.ChatSerializer.a((IChatBaseComponent) chatcomponenttext); @@ -1039,6 +1041,16 @@ public class PlayerConnection implements PacketListenerPlayIn { } } + // Purpur start + private String color(String str, boolean hasPerm) { + return color(str, hasPerm, true); + } + + private String color(String str, boolean hasPerm, boolean parseHex) { + return hasPerm ? org.bukkit.ChatColor.color(str, parseHex) : str; + } + // Purpur end + @Override public void a(PacketPlayInEntityNBTQuery packetplayinentitynbtquery) { PlayerConnectionUtils.ensureMainThread(packetplayinentitynbtquery, this, this.player.getWorldServer());