diff --git a/docs/source/configuration.rst b/docs/source/configuration.rst index b77640933..719ac71de 100644 --- a/docs/source/configuration.rst +++ b/docs/source/configuration.rst @@ -146,3 +146,8 @@ campfire-regen * boost-require-line-of-sight - **default**: false - **description**: Only players within line of sight of the campfire will receive the regen buff when the campfire is in smoke signal mode + +allow-sign-colors +~~~~~~~~~~~~~~~~~ +* **default**: true +* **description**: Allow players to use color codes on signs diff --git a/patches/server/0029-Allow-color-codes-on-signs.patch b/patches/server/0029-Allow-color-codes-on-signs.patch new file mode 100644 index 000000000..db0dd6b81 --- /dev/null +++ b/patches/server/0029-Allow-color-codes-on-signs.patch @@ -0,0 +1,78 @@ +From 451f33404de41811024e4c4bfb235a75051f4f8b 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 691a2d094..c0a45bae5 100644 +--- a/src/main/java/net/minecraft/server/EntityPlayer.java ++++ b/src/main/java/net/minecraft/server/EntityPlayer.java +@@ -1109,6 +1109,7 @@ public class EntityPlayer extends EntityHuman implements ICrafting { + @Override + public void openSign(TileEntitySign tileentitysign) { + tileentitysign.a((EntityHuman) this); ++ 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 01c268a58..c2766940c 100644 +--- a/src/main/java/net/minecraft/server/PlayerConnection.java ++++ b/src/main/java/net/minecraft/server/PlayerConnection.java +@@ -2591,6 +2591,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 dd7889a4f..2f9db45a1 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 7f996591f..490c2ede6 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 +