From 0dee4799f2b29f3159f6272fd4c97f44fb9ec9d0 Mon Sep 17 00:00:00 2001 From: Corwis Date: Wed, 24 Dec 2025 23:56:35 +0100 Subject: [PATCH] Refactor VisualChatRenderer --- .../renderer/VisualChatRenderer.java | 84 ++++++++++++++----- 1 file changed, 64 insertions(+), 20 deletions(-) diff --git a/src/main/java/net/corwis/kissenpvp/renderer/VisualChatRenderer.java b/src/main/java/net/corwis/kissenpvp/renderer/VisualChatRenderer.java index b778a66..4a37f32 100644 --- a/src/main/java/net/corwis/kissenpvp/renderer/VisualChatRenderer.java +++ b/src/main/java/net/corwis/kissenpvp/renderer/VisualChatRenderer.java @@ -1,40 +1,84 @@ -package net.corwis.kissenpvp.renderer; +package net.corwis.kissenpvp; import io.papermc.paper.chat.ChatRenderer; -import net.corwis.kissenpvp.Visual; -import net.corwis.kissenpvp.VisualConfig; +import net.corwis.kissenpvp.suffix.PlayerSuffixData; +import net.corwis.kissenpvp.suffix.SuffixManager; import net.kyori.adventure.audience.Audience; import net.kyori.adventure.text.Component; -import net.kyori.adventure.text.format.NamedTextColor; +import net.kyori.adventure.text.minimessage.MiniMessage; import org.bukkit.Sound; import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; -import java.util.Objects; public final class VisualChatRenderer implements ChatRenderer { + private final VisualManager visualManager; + private final SuffixManager suffixManager; + private final Visual plugin; + private final MiniMessage mm = MiniMessage.miniMessage(); + + public VisualChatRenderer(VisualManager visualManager, + SuffixManager suffixManager, + Visual plugin) { + this.visualManager = visualManager; + this.suffixManager = suffixManager; + this.plugin = plugin; + } + @Override - public @NotNull Component render(@NotNull Player source, @NotNull Component sourceDisplayName, @NotNull Component message, @NotNull Audience viewer) { - VisualConfig config = ((Visual) Visual.getProvidingPlugin(Visual.class)).config(); - Component out = message; + public @NotNull Component render(@NotNull Player source, + @NotNull Component sourceDisplayName, @NotNull Component message, + @NotNull Audience viewer) { - if (config.mentionsEnabled() && viewer instanceof Player target && !Objects.equals(source, target)) { + VisualData visual = visualManager.get(source); + Component prefix = visual != null && visual.prefix() != null + ? visual.prefix() + : Component.empty(); - Component altered = out.replaceText(builder -> { - builder.match(target.getName()); - builder.replacement(Component.text("@" + target.getName()).color(NamedTextColor.YELLOW)); - }); + Component suffix = Component.empty(); + PlayerSuffixData suffixData = suffixManager.get(source.getUniqueId()); + if (suffixData.isChatEnabled() && suffixData.getSelectedSuffix() != null) { + String raw = suffixData.getSuffixes().get(suffixData.getSelectedSuffix()); + if (raw != null) { + suffix = mm.deserialize(raw); + } + + } - if (!altered.equals(out)) { - out = altered; - if (config.mentionSoundEnabled()) - { - target.playSound(target, Sound.ENTITY_ARROW_HIT_PLAYER, .5f, 1f); + Component splitter = mm.deserialize(plugin.getConfig().getString("chat.splitter", "ยป")); + Component name = mm.deserialize(plugin.getConfig().getString("chat.name-color", "")) + .append(Component.text(source.getName())); + + Component msg = mm.deserialize(plugin.getConfig().getString("chat.message-color", "")) + .append(message); + + Component line = Component.empty() + .append(prefix) + .append(name) + .append(suffix) + .appendSpace() + .append(splitter) + .appendSpace() + .append(msg); + + if (viewer instanceof Player target && !target.equals(source)) { + Component altered = line.replaceText(builder -> { + builder.match("@" + target.getName()); + builder.replacement(mm.deserialize( + plugin.getConfig().getString("chat.mention-color", "") + + "@" + target.getName() + )); + }); + if (!altered.equals(line)) { + line = altered; + if (plugin.getConfig().getBoolean("chat.mention-sound", true)) { + plugin.getServer().getScheduler().runTask(plugin, () -> + target.playSound(target, Sound.ENTITY_ARROW_HIT_PLAYER, .5f, 1f) + ); } } } - - return out; + return line; } }