|
| 1 | +--- a/net/minecraft/world/level/block/entity/SignBlockEntity.java |
| 2 | ++++ b/net/minecraft/world/level/block/entity/SignBlockEntity.java |
| 3 | +@@ -163,16 +_,32 @@ |
| 4 | + return this.setText(updater.apply(text), isFrontText); |
| 5 | + } |
| 6 | + |
| 7 | ++ // Purpur start - Signs allow color codes |
| 8 | ++ private Component translateColors(org.bukkit.entity.Player player, String line, Style style) { |
| 9 | ++ if (level.purpurConfig.signAllowColors) { |
| 10 | ++ if (player.hasPermission("purpur.sign.color")) line = line.replaceAll("(?i)&([0-9a-fr])", "\u00a7$1"); |
| 11 | ++ if (player.hasPermission("purpur.sign.style")) line = line.replaceAll("(?i)&([l-or])", "\u00a7$1"); |
| 12 | ++ if (player.hasPermission("purpur.sign.magic")) line = line.replaceAll("(?i)&([kr])", "\u00a7$1"); |
| 13 | ++ |
| 14 | ++ return io.papermc.paper.adventure.PaperAdventure.asVanilla(net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer.legacySection().deserialize(line)); |
| 15 | ++ } else { |
| 16 | ++ return Component.literal(line).setStyle(style); |
| 17 | ++ } |
| 18 | ++ } |
| 19 | ++ // Purpur end - Signs allow color codes |
| 20 | ++ |
| 21 | + private SignText setMessages(Player player, List<FilteredText> filteredText, SignText text, boolean front) { // CraftBukkit |
| 22 | + SignText originalText = text; // CraftBukkit |
| 23 | + for (int i = 0; i < filteredText.size(); i++) { |
| 24 | + FilteredText filteredText1 = filteredText.get(i); |
| 25 | + Style style = text.getMessage(i, player.isTextFilteringEnabled()).getStyle(); |
| 26 | ++ |
| 27 | ++ org.bukkit.entity.Player craftPlayer = (org.bukkit.craftbukkit.entity.CraftPlayer) player.getBukkitEntity(); // Purpur - Signs allow color codes |
| 28 | + if (player.isTextFilteringEnabled()) { |
| 29 | +- text = text.setMessage(i, Component.literal(net.minecraft.util.StringUtil.filterText(filteredText1.filteredOrEmpty())).setStyle(style)); // Paper - filter sign text to chat only |
| 30 | ++ text = text.setMessage(i, translateColors(craftPlayer, net.minecraft.util.StringUtil.filterText(filteredText1.filteredOrEmpty()), style)); // Paper - filter sign text to chat only // Purpur - Signs allow color codes |
| 31 | + } else { |
| 32 | + text = text.setMessage( |
| 33 | +- i, Component.literal(filteredText1.raw()).setStyle(style), Component.literal(net.minecraft.util.StringUtil.filterText(filteredText1.filteredOrEmpty())).setStyle(style) // Paper - filter sign text to chat only |
| 34 | ++ i, translateColors(craftPlayer, net.minecraft.util.StringUtil.filterText(filteredText1.raw()), style), translateColors(craftPlayer, net.minecraft.util.StringUtil.filterText(filteredText1.filteredOrEmpty()), style) // Paper - filter sign text to chat only // Purpur - Signs allow color codes |
| 35 | + ); |
| 36 | + } |
| 37 | + } |
| 38 | +@@ -310,6 +_,28 @@ |
| 39 | + // CraftBukkit - this |
| 40 | + return new CommandSourceStack(commandSource, Vec3.atCenterOf(pos), Vec2.ZERO, (ServerLevel) world, 2, string, component, world.getServer(), player); // Paper - Fix commands from signs not firing command events |
| 41 | + } |
| 42 | ++ |
| 43 | ++ // Purpur start - Signs allow color codes |
| 44 | ++ public ClientboundBlockEntityDataPacket getTranslatedUpdatePacket(boolean filtered, boolean front) { |
| 45 | ++ final CompoundTag nbt = new CompoundTag(); |
| 46 | ++ this.saveAdditional(nbt, this.getLevel().registryAccess()); |
| 47 | ++ final Component[] lines = front ? frontText.getMessages(filtered) : backText.getMessages(filtered); |
| 48 | ++ final String side = front ? "front_text" : "back_text"; |
| 49 | ++ for (int i = 0; i < 4; i++) { |
| 50 | ++ final var component = io.papermc.paper.adventure.PaperAdventure.asAdventure(lines[i]); |
| 51 | ++ final String line = net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer.legacyAmpersand().serialize(component); |
| 52 | ++ final var text = net.kyori.adventure.text.Component.text(line); |
| 53 | ++ final String json = net.kyori.adventure.text.serializer.gson.GsonComponentSerializer.gson().serialize(text); |
| 54 | ++ if (!nbt.contains(side)) nbt.put(side, new CompoundTag()); |
| 55 | ++ final CompoundTag sideNbt = nbt.getCompound(side); |
| 56 | ++ if (!sideNbt.contains("messages")) sideNbt.put("messages", new net.minecraft.nbt.ListTag()); |
| 57 | ++ final net.minecraft.nbt.ListTag messagesNbt = sideNbt.getList("messages", Tag.TAG_STRING); |
| 58 | ++ messagesNbt.set(i, net.minecraft.nbt.StringTag.valueOf(json)); |
| 59 | ++ } |
| 60 | ++ nbt.putString("PurpurEditor", "true"); |
| 61 | ++ return ClientboundBlockEntityDataPacket.create(this, (blockEntity, registryAccess) -> nbt); |
| 62 | ++ } |
| 63 | ++ // Purpur end - Signs allow color codes |
| 64 | + |
| 65 | + @Override |
| 66 | + public ClientboundBlockEntityDataPacket getUpdatePacket() { |
0 commit comments