From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath 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 3828eab1a..3ccfc969f 100644 --- a/src/main/java/net/minecraft/server/EntityPlayer.java +++ b/src/main/java/net/minecraft/server/EntityPlayer.java @@ -1269,6 +1269,7 @@ public class EntityPlayer extends EntityHuman implements ICrafting { public void openSign(TileEntitySign tileentitysign) { tileentitysign.a((EntityHuman) this); this.playerConnection.sendPacket(new PacketPlayOutOpenSignEditor(tileentitysign.getPosition())); + if (world.purpurConfig.signAllowColors) this.playerConnection.sendPacket(tileentitysign.getTranslatedUpdatePacket()); // Purpur } public int nextContainerCounter() { // CraftBukkit - void -> int diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java index bbe56cefe..bf94d3146 100644 --- a/src/main/java/net/minecraft/server/PlayerConnection.java +++ b/src/main/java/net/minecraft/server/PlayerConnection.java @@ -2714,6 +2714,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 e1ab29975..1778c5474 100644 --- a/src/main/java/net/minecraft/server/TileEntitySign.java +++ b/src/main/java/net/minecraft/server/TileEntitySign.java @@ -1,6 +1,14 @@ package net.minecraft.server; import com.mojang.brigadier.exceptions.CommandSyntaxException; +import net.md_5.bungee.api.chat.BaseComponent; +import net.md_5.bungee.api.chat.TextComponent; +import net.md_5.bungee.chat.BaseComponentSerializer; +import net.md_5.bungee.chat.ComponentSerializer; +import net.md_5.bungee.chat.TextComponentSerializer; +import org.bukkit.craftbukkit.util.CraftChatMessage; + +import java.util.List; import java.util.UUID; import javax.annotation.Nullable; @@ -93,6 +101,21 @@ 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 = CraftChatMessage.fromComponent(lines[i]).replace("\u00a7", "&"); + if (line.endsWith("&r")) { + line = line.substring(0, line.length() - 2); + } + nbt.setString("Text" + (i + 1), CraftChatMessage.toJSON(CraftChatMessage.fromString(line)[0])); + } + 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 227436226..21a2c0c43 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -102,9 +102,12 @@ 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); + } public boolean turtleEggsBreakFromExpOrbs = true;