Files
Purpur/patches/server/0033-Signs-allow-color-codes.patch
William Blake Galbreath fc7824b3a8 Updated Upstream (Paper)
Upstream has released updates that appears to apply and compile correctly

Paper Changes:
f29c7ebd Improve async login (#3189)
9fd36824 Fix Citizens Player NPC tracking issue - Fixes #3186
0e72de1c Fix Player Tracking issue during join process.
f26362af Load Spawn Chunks Asynchronously and Spiral Out
54f762e2 Load Chunks for Login Asynchronously
f2d1b6e5 Clean up duplicate PlayerInitialSpawnEvent
c2d022d7 Fix Longstanding Broken behavior of PlayerJoinEvent
d0a348b9 Broadcast join messages to console
1ef687a4 Don't crash if player is attempted to be removed from untracked chunk.
c11668ac Make sure the chunk conversion task is executed immediately
26fb7cc3 Fix Chunk Post Processing deadlock risk
2020-04-19 17:06:16 -05:00

87 lines
4.4 KiB
Diff

From abe8e5ddf2923cb0bd3b4baa90f0ea4c46f49897 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] Signs allow color codes
---
.../java/net/minecraft/server/EntityPlayer.java | 1 +
.../net/minecraft/server/PlayerConnection.java | 8 ++++++++
.../java/net/minecraft/server/TileEntitySign.java | 14 ++++++++++++++
.../java/net/pl3x/purpur/PurpurWorldConfig.java | 2 ++
4 files changed, 25 insertions(+)
diff --git a/src/main/java/net/minecraft/server/EntityPlayer.java b/src/main/java/net/minecraft/server/EntityPlayer.java
index 81c1a9a045..f0639c23c4 100644
--- a/src/main/java/net/minecraft/server/EntityPlayer.java
+++ b/src/main/java/net/minecraft/server/EntityPlayer.java
@@ -1134,6 +1134,7 @@ public class EntityPlayer extends EntityHuman implements ICrafting {
@Override
public void openSign(TileEntitySign tileentitysign) {
tileentitysign.a((EntityHuman) this);
+ if (world.purpurConfig.signAllowColors) 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 7929fcc800..895e34ed34 100644
--- a/src/main/java/net/minecraft/server/PlayerConnection.java
+++ b/src/main/java/net/minecraft/server/PlayerConnection.java
@@ -2580,6 +2580,14 @@ public class PlayerConnection implements PacketListenerPlayIn {
}
}
// Paper end
+ // Purpur start
+ if (worldserver.purpurConfig.signAllowColors) {
+ lines[i] = astring[i];
+ if (player.hasPermission("purpur.sign.color")) lines[i] = lines[i].replaceAll("(?i)&([0-9a-fr])", "\u00a7$1");
+ if (player.hasPermission("purpur.sign.style")) lines[i] = lines[i].replaceAll("(?i)&([l-or])", "\u00a7$1");
+ if (player.hasPermission("purpur.sign.magic")) lines[i] = lines[i].replaceAll("(?i)&([kr])", "\u00a7$1");
+ } else
+ // Purpur end
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 099d98e04c..19d76c8cce 100644
--- a/src/main/java/net/minecraft/server/TileEntitySign.java
+++ b/src/main/java/net/minecraft/server/TileEntitySign.java
@@ -89,6 +89,20 @@ public class TileEntitySign extends TileEntity implements ICommandListener { //
this.g[i] = null;
}
+ // Purpur start
+ public PacketPlayOutTileEntityData getTranslatedUpdatePacket() {
+ NBTTagCompound nbt = save(new NBTTagCompound());
+ for (int i = 0; i < 4; ++i) {
+ String line = lines[i].getLegacyString().replace("\u00a7", "&");
+ if (line.endsWith("&r")) {
+ line = line.substring(0, line.length() - 2);
+ }
+ nbt.setString("Text" + (i + 1), IChatBaseComponent.ChatSerializer.toJson(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 0894523d72..3c7f545e2e 100644
--- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
+++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
@@ -76,8 +76,10 @@ public class PurpurWorldConfig {
farmlandGetsMoistFromBelow = getBoolean("blocks.farmland.gets-moist-from-below", farmlandGetsMoistFromBelow);
}
+ public boolean signAllowColors = false;
public boolean signRightClickEdit = false;
private void signSettings() {
+ signAllowColors = getBoolean("blocks.sign.allow-colors", signAllowColors);
signRightClickEdit = getBoolean("blocks.sign.right-click-edit", signRightClickEdit);
}
--
2.24.0