Allow color codes on signs

This commit is contained in:
William Blake Galbreath 2019-06-06 18:20:40 -05:00
parent 3467a5be84
commit 6030a8aa23
2 changed files with 83 additions and 0 deletions

View File

@ -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

View File

@ -0,0 +1,78 @@
From 451f33404de41811024e4c4bfb235a75051f4f8b Mon Sep 17 00:00:00 2001
From: William Blake Galbreath <blake.galbreath@gmail.com>
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