Files
Purpur/patches/server/0045-Signs-allow-color-codes.patch
jmp 34f0e578c6 Updated Upstream (Paper)
Upstream has released updates that appear to apply and compile correctly

Paper Changes:
9907cedec New chat events for better Adventure support (#5289)
06900aef5 Fix username connecting with no texture being overwritten by usercache (#4970)
df4c68b66 fix #5279 - clickable links again
ff5ff3af4 Print command usage for /paper entity list at more places (#5282)
2021-03-01 19:40:57 -08:00

85 lines
4.8 KiB
Diff

From 0000000000000000000000000000000000000000 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
diff --git a/src/main/java/net/minecraft/server/EntityPlayer.java b/src/main/java/net/minecraft/server/EntityPlayer.java
index 599d7fbc4db928a9825e154c09c9a74d39a39a03..8bfff671ed779991b8ef5433cfec61b405a184ba 100644
--- a/src/main/java/net/minecraft/server/EntityPlayer.java
+++ b/src/main/java/net/minecraft/server/EntityPlayer.java
@@ -1449,6 +1449,7 @@ public class EntityPlayer extends EntityHuman implements ICrafting {
@Override
public void openSign(TileEntitySign tileentitysign) {
+ if (world.purpurConfig.signAllowColors) this.playerConnection.sendPacket(tileentitysign.getTranslatedUpdatePacket()); // Purpur
tileentitysign.a((EntityHuman) this);
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 41d7c78e93e1b60c6fbef1da6329012724389633..fd0c49173c0ae6324489f8152117c95aec8d43e8 100644
--- a/src/main/java/net/minecraft/server/PlayerConnection.java
+++ b/src/main/java/net/minecraft/server/PlayerConnection.java
@@ -2902,6 +2902,15 @@ public class PlayerConnection implements PacketListenerPlayIn {
}
}
// Paper end
+ // Purpur start
+ if (worldserver.purpurConfig.signAllowColors) {
+ final org.bukkit.entity.Player bukkitPlayer = player.getBukkitEntity();
+ if (bukkitPlayer.hasPermission("purpur.sign.color")) currentLine = currentLine.replaceAll("(?i)&([0-9a-fr])", "\u00a7$1");
+ if (bukkitPlayer.hasPermission("purpur.sign.style")) currentLine = currentLine.replaceAll("(?i)&([l-or])", "\u00a7$1");
+ if (bukkitPlayer.hasPermission("purpur.sign.magic")) currentLine = currentLine.replaceAll("(?i)&([kr])", "\u00a7$1");
+ lines.add(net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer.legacySection().deserialize(currentLine));
+ } else
+ // Purpur end
lines.add(net.kyori.adventure.text.Component.text(SharedConstants.filterAllowedChatCharacters(currentLine))); // 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.at(worldserver, blockposition), this.getPlayer(), lines);
diff --git a/src/main/java/net/minecraft/server/TileEntitySign.java b/src/main/java/net/minecraft/server/TileEntitySign.java
index 316766970243e8ac00e4c82f6c710de5edc3fa51..23706010e6419821709cdaf34c0b1bbb91671d01 100644
--- a/src/main/java/net/minecraft/server/TileEntitySign.java
+++ b/src/main/java/net/minecraft/server/TileEntitySign.java
@@ -1,6 +1,7 @@
package net.minecraft.server;
import com.mojang.brigadier.exceptions.CommandSyntaxException;
+import io.papermc.paper.adventure.PaperAdventure; // Purpur
import java.util.UUID;
import javax.annotation.Nullable;
@@ -93,6 +94,18 @@ 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 = PaperAdventure.LEGACY_AMPERSAND.serialize(PaperAdventure.asAdventure(lines[i]));
+ nbt.setString("Text" + (i + 1), net.kyori.adventure.text.serializer.gson.GsonComponentSerializer.gson().serialize(net.kyori.adventure.text.Component.text(line)));
+ }
+ nbt.setString("PurpurEditor", "true");
+ 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 8393a0253ac16a8f15f78288d6cc31f8688c403c..484da2bf267cab4e4569c98111398af64c834eed 100644
--- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
+++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
@@ -109,8 +109,10 @@ public class PurpurWorldConfig {
});
}
+ 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);
}