From b252252f673aa20d595976740254bf3a61637ca4 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Thu, 6 Jun 2019 17:40:30 -0500 Subject: [PATCH] Allow color codes on signs --- .../java/net/minecraft/server/EntityPlayer.java | 1 + .../net/minecraft/server/PlayerConnection.java | 1 + .../java/net/minecraft/server/TileEntitySign.java | 14 ++++++++++++++ .../java/net/pl3x/purpur/PurpurWorldConfig.java | 5 +++++ 4 files changed, 21 insertions(+) diff --git a/src/main/java/net/minecraft/server/EntityPlayer.java b/src/main/java/net/minecraft/server/EntityPlayer.java index 633fe836dd..160c03efd8 100644 --- a/src/main/java/net/minecraft/server/EntityPlayer.java +++ b/src/main/java/net/minecraft/server/EntityPlayer.java @@ -1114,6 +1114,7 @@ public class EntityPlayer extends EntityHuman implements ICrafting { @Override public void openSign(TileEntitySign tileentitysign) { tileentitysign.a((EntityHuman) this); + if (world.purpurConfig.allowSignColors) this.playerConnection.sendPacket(tileentitysign.getTranslatedUpdatePacket()); // Purpur this.playerConnection.sendPacket(new PacketPlayOutOpenSignEditor(tileentitysign.getPosition())); } diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java index c900e32cd4..f55e19c9b0 100644 --- a/src/main/java/net/minecraft/server/PlayerConnection.java +++ b/src/main/java/net/minecraft/server/PlayerConnection.java @@ -2598,6 +2598,7 @@ public class PlayerConnection implements PacketListenerPlayIn { } } // Paper end + if (worldserver.purpurConfig.allowSignColors) lines[i] = org.bukkit.ChatColor.translateAlternateColorCodes('&', astring[i]); else // Purpur - allow sign colors lines[i] = SharedConstants.a(astring[i]); //Paper - Replaced with anvil color stripping method to stop exploits that allow colored signs to be created. } SignChangeEvent event = new SignChangeEvent((org.bukkit.craftbukkit.block.CraftBlock) player.getWorld().getBlockAt(x, y, z), this.server.getPlayer(this.player), lines); diff --git a/src/main/java/net/minecraft/server/TileEntitySign.java b/src/main/java/net/minecraft/server/TileEntitySign.java index 7e5d815938..f5e3b0b30d 100644 --- a/src/main/java/net/minecraft/server/TileEntitySign.java +++ b/src/main/java/net/minecraft/server/TileEntitySign.java @@ -122,6 +122,20 @@ public class TileEntitySign extends TileEntity implements ICommandListener { // this.k[i] = null; } + // Purpur start + public PacketPlayOutTileEntityData getTranslatedUpdatePacket() { + NBTTagCompound nbt = this.b(); + for (int i = 0; i < 4; ++i) { + String line = lines[i].e().replace("\u00a7", "&"); + if (line.endsWith("&r")) { + line = line.substring(0, line.length() - 2); + } + nbt.setString("Text" + (i + 1), IChatBaseComponent.ChatSerializer.a(new ChatMessage(line))); + } + return new PacketPlayOutTileEntityData(position, 9, nbt); + } + // Purpur end + @Nullable @Override public PacketPlayOutTileEntityData getUpdatePacket() { diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java index ee92fd26e6..1238864e7c 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -91,4 +91,9 @@ public class PurpurWorldConfig { campfireRegenBoostAmp = getInt("campfire-regen.boost-amplifier", campfireRegenBoostAmp); campfireRegenBoostRequireLineOfSight = getBoolean("campfire-regen.boost-require-line-of-sight", campfireRegenBoostRequireLineOfSight); } + + public boolean allowSignColors = true; + private void allowSignColors() { + allowSignColors = getBoolean("allow-sign-colors", allowSignColors); + } } -- 2.20.1