From c888bb2d841aa83de7cea50778cc9ed100e968cb Mon Sep 17 00:00:00 2001 From: Piotr Zych <77621271+P1otrulla@users.noreply.github.com> Date: Thu, 1 Oct 2026 03:45:31 +0200 Subject: [PATCH 1/4] Update ChatHandlerImpl.java --- .../formatter/ChatHandlerImpl.java | 154 ++++++++++-------- 1 file changed, 90 insertions(+), 64 deletions(-) diff --git a/chatformatter-core/src/main/java/com/eternalcode/formatter/ChatHandlerImpl.java b/chatformatter-core/src/main/java/com/eternalcode/formatter/ChatHandlerImpl.java index 6c671d5e..b71a9e01 100644 --- a/chatformatter-core/src/main/java/com/eternalcode/formatter/ChatHandlerImpl.java +++ b/chatformatter-core/src/main/java/com/eternalcode/formatter/ChatHandlerImpl.java @@ -8,6 +8,7 @@ import com.eternalcode.formatter.template.TemplateService; import com.google.common.collect.ImmutableMap; import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.TextComponent; import net.kyori.adventure.text.format.NamedTextColor; import net.kyori.adventure.text.format.TextDecoration; import net.kyori.adventure.text.minimessage.MiniMessage; @@ -16,7 +17,6 @@ import net.kyori.adventure.text.minimessage.tag.standard.StandardTags; import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer; import net.kyori.adventure.text.serializer.json.JSONOptions; -import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer; import org.bukkit.entity.Player; import java.util.ArrayList; @@ -27,56 +27,61 @@ class ChatHandlerImpl implements ChatHandler { private static final String PERMISSION_ALL = "chatformatter.*"; + + private static final String DISPLAY_NAME_PLACEHOLDER = "displayname"; + private static final String NAME_PLACEHOLDER = "name"; + private static final String MESSAGE_PLACEHOLDER = "message"; + private static final Map TAG_RESOLVERS_BY_PERMISSION = new ImmutableMap.Builder() - .put("chatformatter.decorations.*", StandardTags.decorations()) - .put("chatformatter.decorations.bold", StandardTags.decorations(TextDecoration.BOLD)) - .put("chatformatter.decorations.italic", StandardTags.decorations(TextDecoration.ITALIC)) - .put("chatformatter.decorations.underlined", StandardTags.decorations(TextDecoration.UNDERLINED)) - .put("chatformatter.decorations.strikethrough", StandardTags.decorations(TextDecoration.STRIKETHROUGH)) - .put("chatformatter.decorations.obfuscated", StandardTags.decorations(TextDecoration.OBFUSCATED)) - .put("chatformatter.reset", StandardTags.reset()) - .put("chatformatter.newline", StandardTags.newline()) - .put("chatformatter.shadow", StandardTags.shadowColor()) - .put("chatformatter.gradient", StandardTags.gradient()) - .put("chatformatter.rainbow", StandardTags.rainbow()) - .put("chatformatter.pride", StandardTags.pride()) - .put("chatformatter.transition", StandardTags.transition()) - .put("chatformatter.hover", StandardTags.hoverEvent()) - .put("chatformatter.click", StandardTags.clickEvent()) - .put("chatformatter.insertion", StandardTags.insertion()) - .put("chatformatter.color.*", StandardTags.color()) - .put("chatformatter.color.black", TextColorTagResolver.of(NamedTextColor.BLACK)) - .put("chatformatter.color.dark_blue", TextColorTagResolver.of(NamedTextColor.DARK_BLUE)) - .put("chatformatter.color.dark_green", TextColorTagResolver.of(NamedTextColor.DARK_GREEN)) - .put("chatformatter.color.dark_aqua", TextColorTagResolver.of(NamedTextColor.DARK_AQUA)) - .put("chatformatter.color.dark_red", TextColorTagResolver.of(NamedTextColor.DARK_RED)) - .put("chatformatter.color.dark_purple", TextColorTagResolver.of(NamedTextColor.DARK_PURPLE)) - .put("chatformatter.color.gold", TextColorTagResolver.of(NamedTextColor.GOLD)) - .put("chatformatter.color.gray", TextColorTagResolver.of(NamedTextColor.GRAY)) - .put("chatformatter.color.dark_gray", TextColorTagResolver.of(NamedTextColor.DARK_GRAY)) - .put("chatformatter.color.blue", TextColorTagResolver.of(NamedTextColor.BLUE)) - .put("chatformatter.color.green", TextColorTagResolver.of(NamedTextColor.GREEN)) - .put("chatformatter.color.aqua", TextColorTagResolver.of(NamedTextColor.AQUA)) - .put("chatformatter.color.red", TextColorTagResolver.of(NamedTextColor.RED)) - .put("chatformatter.color.light_purple", TextColorTagResolver.of(NamedTextColor.LIGHT_PURPLE)) - .put("chatformatter.color.yellow", TextColorTagResolver.of(NamedTextColor.YELLOW)) - .put("chatformatter.color.white", TextColorTagResolver.of(NamedTextColor.WHITE)) - .put("chatformatter.score", StandardTags.score()) - .put("chatformatter.selector", StandardTags.selector()) - .put("chatformatter.translatable", TagResolver.resolver(StandardTags.translatable(), StandardTags.translatableFallback())) - .put("chatformatter.font", StandardTags.font()) - .put("chatformatter.keybind", StandardTags.keybind()) - .put("chatformatter.nbt", StandardTags.nbt()) - .build(); + .put("chatformatter.decorations.*", StandardTags.decorations()) + .put("chatformatter.decorations.bold", StandardTags.decorations(TextDecoration.BOLD)) + .put("chatformatter.decorations.italic", StandardTags.decorations(TextDecoration.ITALIC)) + .put("chatformatter.decorations.underlined", StandardTags.decorations(TextDecoration.UNDERLINED)) + .put("chatformatter.decorations.strikethrough", StandardTags.decorations(TextDecoration.STRIKETHROUGH)) + .put("chatformatter.decorations.obfuscated", StandardTags.decorations(TextDecoration.OBFUSCATED)) + .put("chatformatter.reset", StandardTags.reset()) + .put("chatformatter.newline", StandardTags.newline()) + .put("chatformatter.shadow", StandardTags.shadowColor()) + .put("chatformatter.gradient", StandardTags.gradient()) + .put("chatformatter.rainbow", StandardTags.rainbow()) + .put("chatformatter.pride", StandardTags.pride()) + .put("chatformatter.transition", StandardTags.transition()) + .put("chatformatter.hover", StandardTags.hoverEvent()) + .put("chatformatter.click", StandardTags.clickEvent()) + .put("chatformatter.insertion", StandardTags.insertion()) + .put("chatformatter.color.*", StandardTags.color()) + .put("chatformatter.color.black", TextColorTagResolver.of(NamedTextColor.BLACK)) + .put("chatformatter.color.dark_blue", TextColorTagResolver.of(NamedTextColor.DARK_BLUE)) + .put("chatformatter.color.dark_green", TextColorTagResolver.of(NamedTextColor.DARK_GREEN)) + .put("chatformatter.color.dark_aqua", TextColorTagResolver.of(NamedTextColor.DARK_AQUA)) + .put("chatformatter.color.dark_red", TextColorTagResolver.of(NamedTextColor.DARK_RED)) + .put("chatformatter.color.dark_purple", TextColorTagResolver.of(NamedTextColor.DARK_PURPLE)) + .put("chatformatter.color.gold", TextColorTagResolver.of(NamedTextColor.GOLD)) + .put("chatformatter.color.gray", TextColorTagResolver.of(NamedTextColor.GRAY)) + .put("chatformatter.color.dark_gray", TextColorTagResolver.of(NamedTextColor.DARK_GRAY)) + .put("chatformatter.color.blue", TextColorTagResolver.of(NamedTextColor.BLUE)) + .put("chatformatter.color.green", TextColorTagResolver.of(NamedTextColor.GREEN)) + .put("chatformatter.color.aqua", TextColorTagResolver.of(NamedTextColor.AQUA)) + .put("chatformatter.color.red", TextColorTagResolver.of(NamedTextColor.RED)) + .put("chatformatter.color.light_purple", TextColorTagResolver.of(NamedTextColor.LIGHT_PURPLE)) + .put("chatformatter.color.yellow", TextColorTagResolver.of(NamedTextColor.YELLOW)) + .put("chatformatter.color.white", TextColorTagResolver.of(NamedTextColor.WHITE)) + .put("chatformatter.score", StandardTags.score()) + .put("chatformatter.selector", StandardTags.selector()) + .put("chatformatter.translatable", TagResolver.resolver(StandardTags.translatable(), StandardTags.translatableFallback())) + .put("chatformatter.font", StandardTags.font()) + .put("chatformatter.keybind", StandardTags.keybind()) + .put("chatformatter.nbt", StandardTags.nbt()) + .build(); private static final GsonComponentSerializer GSON = GsonComponentSerializer.builder() - .editOptions(builder -> builder.values(JSONOptions.compatibility())) - .build(); + .editOptions(builder -> builder.values(JSONOptions.compatibility())) + .build(); private static final MiniMessage EMPTY_MESSAGE_DESERIALIZER = MiniMessage.builder() - .postProcessor(new AdventureUrlPostProcessor()) - .tags(TagResolver.empty()) - .build(); + .postProcessor(new AdventureUrlPostProcessor()) + .tags(TagResolver.empty()) + .build(); private final MiniMessage miniMessage; @@ -102,8 +107,8 @@ public ChatRenderedMessage process(ChatMessage chatMessage) { format = this.templateService.applyTemplates(format); format = viewer.isEmpty() - ? this.placeholderRegistry.format(format, sender) - : this.placeholderRegistry.format(format, sender, viewer.get()); + ? this.placeholderRegistry.format(format, sender) + : this.placeholderRegistry.format(format, sender, viewer.get()); format = Legacy.legacyToAdventure(format); @@ -114,39 +119,60 @@ public ChatRenderedMessage process(ChatMessage chatMessage) { private TagResolver createTags(ChatMessage chatMessage) { Player sender = chatMessage.sender(); - Component message = GSON.deserialize(chatMessage.jsonMessage()); - String serialize = LegacyComponentSerializer.legacySection().serialize(message); - - TagResolver.Single displayNamePlaceholder = displayNamePlaceholder(sender); - TagResolver.Single namePlaceholder = namePlaceholder(sender); - TagResolver.Single messagePlaceholder = messagePlaceholder(sender, serialize); - return TagResolver.resolver(displayNamePlaceholder, namePlaceholder, messagePlaceholder); + return TagResolver.resolver( + this.displayNamePlaceholder(sender), + this.namePlaceholder(sender), + this.messagePlaceholder(sender, message) + ); } private TagResolver.Single displayNamePlaceholder(Player sender) { - return Placeholder.parsed("displayname", Legacy.legacyToAdventure(sender.getDisplayName())); + return Placeholder.parsed(DISPLAY_NAME_PLACEHOLDER, Legacy.legacyToAdventure(sender.getDisplayName())); } private TagResolver.Single namePlaceholder(Player sender) { - return Placeholder.parsed("name", sender.getName()); + return Placeholder.parsed(NAME_PLACEHOLDER, sender.getName()); } - private TagResolver.Single messagePlaceholder(Player sender, String rawMessage) { + private TagResolver.Single messagePlaceholder(Player sender, Component message) { TagResolver permittedTags = this.providePermittedTags(sender); - rawMessage = Legacy.legacyToAdventure(rawMessage, permission -> sender.hasPermission(permission)); - Component componentMessage = EMPTY_MESSAGE_DESERIALIZER.deserialize(rawMessage, permittedTags); - return Placeholder.component("message", componentMessage); + Component parsedMessage = this.parsePlayerText(message, sender, permittedTags); + + return Placeholder.component(MESSAGE_PLACEHOLDER, parsedMessage); } - private TagResolver providePermittedTags(Player player) { - List tagResolvers = new ArrayList<>(); + /** + * Parses only raw text content with permission-filtered tags. + * Styles already present on components (e.g. from AsyncChatDecorateEvent) are preserved. + */ + private Component parsePlayerText(Component component, Player sender, TagResolver permittedTags) { + List parsedChildren = component.children().stream() + .map(child -> this.parsePlayerText(child, sender, permittedTags)) + .toList(); + + if (!(component instanceof TextComponent textComponent)) { + return component.children(parsedChildren); + } + + String rawContent = Legacy.legacyToAdventure(textComponent.content(), sender::hasPermission); + Component parsedContent = EMPTY_MESSAGE_DESERIALIZER.deserialize(rawContent, permittedTags); + + return Component.text() + .style(textComponent.style()) + .append(parsedContent) + .append(parsedChildren) + .build(); + } + private TagResolver providePermittedTags(Player player) { if (player.hasPermission(PERMISSION_ALL)) { return TagResolver.standard(); } + List tagResolvers = new ArrayList<>(); + for (Map.Entry entry : TAG_RESOLVERS_BY_PERMISSION.entrySet()) { if (player.hasPermission(entry.getKey())) { tagResolvers.add(entry.getValue()); @@ -156,4 +182,4 @@ private TagResolver providePermittedTags(Player player) { return TagResolver.resolver(tagResolvers); } -} +} \ No newline at end of file From 5e93b979afd378c1025423b747d5d2a34f692cec Mon Sep 17 00:00:00 2001 From: Piotr Zych <77621271+P1otrulla@users.noreply.github.com> Date: Thu, 1 Oct 2026 22:56:10 +0200 Subject: [PATCH 2/4] Refactored ChatHandlerImpl code for clarity and removed placeholders --- .../eternalcode/formatter/ChatHandlerImpl.java | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/chatformatter-core/src/main/java/com/eternalcode/formatter/ChatHandlerImpl.java b/chatformatter-core/src/main/java/com/eternalcode/formatter/ChatHandlerImpl.java index b71a9e01..2aa30931 100644 --- a/chatformatter-core/src/main/java/com/eternalcode/formatter/ChatHandlerImpl.java +++ b/chatformatter-core/src/main/java/com/eternalcode/formatter/ChatHandlerImpl.java @@ -27,11 +27,6 @@ class ChatHandlerImpl implements ChatHandler { private static final String PERMISSION_ALL = "chatformatter.*"; - - private static final String DISPLAY_NAME_PLACEHOLDER = "displayname"; - private static final String NAME_PLACEHOLDER = "name"; - private static final String MESSAGE_PLACEHOLDER = "message"; - private static final Map TAG_RESOLVERS_BY_PERMISSION = new ImmutableMap.Builder() .put("chatformatter.decorations.*", StandardTags.decorations()) .put("chatformatter.decorations.bold", StandardTags.decorations(TextDecoration.BOLD)) @@ -85,6 +80,8 @@ class ChatHandlerImpl implements ChatHandler { private final MiniMessage miniMessage; + private final MiniMessage miniMessage; + private final ChatSettings settings; private final ChatRankProvider rankProvider; private final PlaceholderRegistry placeholderRegistry; @@ -129,18 +126,18 @@ private TagResolver createTags(ChatMessage chatMessage) { } private TagResolver.Single displayNamePlaceholder(Player sender) { - return Placeholder.parsed(DISPLAY_NAME_PLACEHOLDER, Legacy.legacyToAdventure(sender.getDisplayName())); + return Placeholder.parsed("displayname", Legacy.legacyToAdventure(sender.getDisplayName())); } private TagResolver.Single namePlaceholder(Player sender) { - return Placeholder.parsed(NAME_PLACEHOLDER, sender.getName()); + return Placeholder.parsed("name", sender.getName()); } private TagResolver.Single messagePlaceholder(Player sender, Component message) { TagResolver permittedTags = this.providePermittedTags(sender); Component parsedMessage = this.parsePlayerText(message, sender, permittedTags); - return Placeholder.component(MESSAGE_PLACEHOLDER, parsedMessage); + return Placeholder.component("message", parsedMessage); } /** @@ -170,9 +167,9 @@ private TagResolver providePermittedTags(Player player) { if (player.hasPermission(PERMISSION_ALL)) { return TagResolver.standard(); } - + List tagResolvers = new ArrayList<>(); - + for (Map.Entry entry : TAG_RESOLVERS_BY_PERMISSION.entrySet()) { if (player.hasPermission(entry.getKey())) { tagResolvers.add(entry.getValue()); @@ -181,5 +178,4 @@ private TagResolver providePermittedTags(Player player) { return TagResolver.resolver(tagResolvers); } - } \ No newline at end of file From 0106f496b47f9f0de7bbae5c24fe76f55466e8ad Mon Sep 17 00:00:00 2001 From: Piotr Zych <77621271+P1otrulla@users.noreply.github.com> Date: Thu, 1 Oct 2026 23:06:02 +0200 Subject: [PATCH 3/4] Refactored ChatHandlerImpl for code consistency and improved formatting alignment --- .../formatter/ChatHandlerImpl.java | 116 +++++++++--------- 1 file changed, 58 insertions(+), 58 deletions(-) diff --git a/chatformatter-core/src/main/java/com/eternalcode/formatter/ChatHandlerImpl.java b/chatformatter-core/src/main/java/com/eternalcode/formatter/ChatHandlerImpl.java index 2aa30931..14b60534 100644 --- a/chatformatter-core/src/main/java/com/eternalcode/formatter/ChatHandlerImpl.java +++ b/chatformatter-core/src/main/java/com/eternalcode/formatter/ChatHandlerImpl.java @@ -28,59 +28,58 @@ class ChatHandlerImpl implements ChatHandler { private static final String PERMISSION_ALL = "chatformatter.*"; private static final Map TAG_RESOLVERS_BY_PERMISSION = new ImmutableMap.Builder() - .put("chatformatter.decorations.*", StandardTags.decorations()) - .put("chatformatter.decorations.bold", StandardTags.decorations(TextDecoration.BOLD)) - .put("chatformatter.decorations.italic", StandardTags.decorations(TextDecoration.ITALIC)) - .put("chatformatter.decorations.underlined", StandardTags.decorations(TextDecoration.UNDERLINED)) - .put("chatformatter.decorations.strikethrough", StandardTags.decorations(TextDecoration.STRIKETHROUGH)) - .put("chatformatter.decorations.obfuscated", StandardTags.decorations(TextDecoration.OBFUSCATED)) - .put("chatformatter.reset", StandardTags.reset()) - .put("chatformatter.newline", StandardTags.newline()) - .put("chatformatter.shadow", StandardTags.shadowColor()) - .put("chatformatter.gradient", StandardTags.gradient()) - .put("chatformatter.rainbow", StandardTags.rainbow()) - .put("chatformatter.pride", StandardTags.pride()) - .put("chatformatter.transition", StandardTags.transition()) - .put("chatformatter.hover", StandardTags.hoverEvent()) - .put("chatformatter.click", StandardTags.clickEvent()) - .put("chatformatter.insertion", StandardTags.insertion()) - .put("chatformatter.color.*", StandardTags.color()) - .put("chatformatter.color.black", TextColorTagResolver.of(NamedTextColor.BLACK)) - .put("chatformatter.color.dark_blue", TextColorTagResolver.of(NamedTextColor.DARK_BLUE)) - .put("chatformatter.color.dark_green", TextColorTagResolver.of(NamedTextColor.DARK_GREEN)) - .put("chatformatter.color.dark_aqua", TextColorTagResolver.of(NamedTextColor.DARK_AQUA)) - .put("chatformatter.color.dark_red", TextColorTagResolver.of(NamedTextColor.DARK_RED)) - .put("chatformatter.color.dark_purple", TextColorTagResolver.of(NamedTextColor.DARK_PURPLE)) - .put("chatformatter.color.gold", TextColorTagResolver.of(NamedTextColor.GOLD)) - .put("chatformatter.color.gray", TextColorTagResolver.of(NamedTextColor.GRAY)) - .put("chatformatter.color.dark_gray", TextColorTagResolver.of(NamedTextColor.DARK_GRAY)) - .put("chatformatter.color.blue", TextColorTagResolver.of(NamedTextColor.BLUE)) - .put("chatformatter.color.green", TextColorTagResolver.of(NamedTextColor.GREEN)) - .put("chatformatter.color.aqua", TextColorTagResolver.of(NamedTextColor.AQUA)) - .put("chatformatter.color.red", TextColorTagResolver.of(NamedTextColor.RED)) - .put("chatformatter.color.light_purple", TextColorTagResolver.of(NamedTextColor.LIGHT_PURPLE)) - .put("chatformatter.color.yellow", TextColorTagResolver.of(NamedTextColor.YELLOW)) - .put("chatformatter.color.white", TextColorTagResolver.of(NamedTextColor.WHITE)) - .put("chatformatter.score", StandardTags.score()) - .put("chatformatter.selector", StandardTags.selector()) - .put("chatformatter.translatable", TagResolver.resolver(StandardTags.translatable(), StandardTags.translatableFallback())) - .put("chatformatter.font", StandardTags.font()) - .put("chatformatter.keybind", StandardTags.keybind()) - .put("chatformatter.nbt", StandardTags.nbt()) - .build(); + .put("chatformatter.decorations.*", StandardTags.decorations()) + .put("chatformatter.decorations.bold", StandardTags.decorations(TextDecoration.BOLD)) + .put("chatformatter.decorations.italic", StandardTags.decorations(TextDecoration.ITALIC)) + .put("chatformatter.decorations.underlined", StandardTags.decorations(TextDecoration.UNDERLINED)) + .put("chatformatter.decorations.strikethrough", StandardTags.decorations(TextDecoration.STRIKETHROUGH)) + .put("chatformatter.decorations.obfuscated", StandardTags.decorations(TextDecoration.OBFUSCATED)) + .put("chatformatter.reset", StandardTags.reset()) + .put("chatformatter.newline", StandardTags.newline()) + .put("chatformatter.shadow", StandardTags.shadowColor()) + .put("chatformatter.gradient", StandardTags.gradient()) + .put("chatformatter.rainbow", StandardTags.rainbow()) + .put("chatformatter.pride", StandardTags.pride()) + .put("chatformatter.transition", StandardTags.transition()) + .put("chatformatter.hover", StandardTags.hoverEvent()) + .put("chatformatter.click", StandardTags.clickEvent()) + .put("chatformatter.insertion", StandardTags.insertion()) + .put("chatformatter.color.*", StandardTags.color()) + .put("chatformatter.color.black", TextColorTagResolver.of(NamedTextColor.BLACK)) + .put("chatformatter.color.dark_blue", TextColorTagResolver.of(NamedTextColor.DARK_BLUE)) + .put("chatformatter.color.dark_green", TextColorTagResolver.of(NamedTextColor.DARK_GREEN)) + .put("chatformatter.color.dark_aqua", TextColorTagResolver.of(NamedTextColor.DARK_AQUA)) + .put("chatformatter.color.dark_red", TextColorTagResolver.of(NamedTextColor.DARK_RED)) + .put("chatformatter.color.dark_purple", TextColorTagResolver.of(NamedTextColor.DARK_PURPLE)) + .put("chatformatter.color.gold", TextColorTagResolver.of(NamedTextColor.GOLD)) + .put("chatformatter.color.gray", TextColorTagResolver.of(NamedTextColor.GRAY)) + .put("chatformatter.color.dark_gray", TextColorTagResolver.of(NamedTextColor.DARK_GRAY)) + .put("chatformatter.color.blue", TextColorTagResolver.of(NamedTextColor.BLUE)) + .put("chatformatter.color.green", TextColorTagResolver.of(NamedTextColor.GREEN)) + .put("chatformatter.color.aqua", TextColorTagResolver.of(NamedTextColor.AQUA)) + .put("chatformatter.color.red", TextColorTagResolver.of(NamedTextColor.RED)) + .put("chatformatter.color.light_purple", TextColorTagResolver.of(NamedTextColor.LIGHT_PURPLE)) + .put("chatformatter.color.yellow", TextColorTagResolver.of(NamedTextColor.YELLOW)) + .put("chatformatter.color.white", TextColorTagResolver.of(NamedTextColor.WHITE)) + .put("chatformatter.score", StandardTags.score()) + .put("chatformatter.selector", StandardTags.selector()) + .put("chatformatter.translatable", TagResolver.resolver(StandardTags.translatable(), StandardTags.translatableFallback())) + .put("chatformatter.font", StandardTags.font()) + .put("chatformatter.keybind", StandardTags.keybind()) + .put("chatformatter.nbt", StandardTags.nbt()) + .build(); private static final GsonComponentSerializer GSON = GsonComponentSerializer.builder() - .editOptions(builder -> builder.values(JSONOptions.compatibility())) - .build(); + .editOptions(builder -> builder.values(JSONOptions.compatibility())) + .build(); private static final MiniMessage EMPTY_MESSAGE_DESERIALIZER = MiniMessage.builder() - .postProcessor(new AdventureUrlPostProcessor()) - .tags(TagResolver.empty()) - .build(); + .postProcessor(new AdventureUrlPostProcessor()) + .tags(TagResolver.empty()) + .build(); private final MiniMessage miniMessage; - private final MiniMessage miniMessage; private final ChatSettings settings; private final ChatRankProvider rankProvider; @@ -104,8 +103,8 @@ public ChatRenderedMessage process(ChatMessage chatMessage) { format = this.templateService.applyTemplates(format); format = viewer.isEmpty() - ? this.placeholderRegistry.format(format, sender) - : this.placeholderRegistry.format(format, sender, viewer.get()); + ? this.placeholderRegistry.format(format, sender) + : this.placeholderRegistry.format(format, sender, viewer.get()); format = Legacy.legacyToAdventure(format); @@ -119,9 +118,9 @@ private TagResolver createTags(ChatMessage chatMessage) { Component message = GSON.deserialize(chatMessage.jsonMessage()); return TagResolver.resolver( - this.displayNamePlaceholder(sender), - this.namePlaceholder(sender), - this.messagePlaceholder(sender, message) + this.displayNamePlaceholder(sender), + this.namePlaceholder(sender), + this.messagePlaceholder(sender, message) ); } @@ -145,9 +144,10 @@ private TagResolver.Single messagePlaceholder(Player sender, Component message) * Styles already present on components (e.g. from AsyncChatDecorateEvent) are preserved. */ private Component parsePlayerText(Component component, Player sender, TagResolver permittedTags) { - List parsedChildren = component.children().stream() - .map(child -> this.parsePlayerText(child, sender, permittedTags)) - .toList(); + List parsedChildren = component.children() + .stream() + .map(child -> this.parsePlayerText(child, sender, permittedTags)) + .toList(); if (!(component instanceof TextComponent textComponent)) { return component.children(parsedChildren); @@ -157,10 +157,10 @@ private Component parsePlayerText(Component component, Player sender, TagResolve Component parsedContent = EMPTY_MESSAGE_DESERIALIZER.deserialize(rawContent, permittedTags); return Component.text() - .style(textComponent.style()) - .append(parsedContent) - .append(parsedChildren) - .build(); + .style(textComponent.style()) + .append(parsedContent) + .append(parsedChildren) + .build(); } private TagResolver providePermittedTags(Player player) { From b1843a229fdd4836809543e4ad61665fbaae141e Mon Sep 17 00:00:00 2001 From: Piotr Zych <77621271+P1otrulla@users.noreply.github.com> Date: Thu, 1 Oct 2026 23:06:28 +0200 Subject: [PATCH 4/4] Refactored ChatHandlerImpl for code consistency and improved formatting alignment --- .../src/main/java/com/eternalcode/formatter/ChatHandlerImpl.java | 1 - 1 file changed, 1 deletion(-) diff --git a/chatformatter-core/src/main/java/com/eternalcode/formatter/ChatHandlerImpl.java b/chatformatter-core/src/main/java/com/eternalcode/formatter/ChatHandlerImpl.java index 14b60534..27383e3a 100644 --- a/chatformatter-core/src/main/java/com/eternalcode/formatter/ChatHandlerImpl.java +++ b/chatformatter-core/src/main/java/com/eternalcode/formatter/ChatHandlerImpl.java @@ -80,7 +80,6 @@ class ChatHandlerImpl implements ChatHandler { private final MiniMessage miniMessage; - private final ChatSettings settings; private final ChatRankProvider rankProvider; private final PlaceholderRegistry placeholderRegistry;