From 908ebbecf1d8643506936ee087d3ce6e6fbe7e27 Mon Sep 17 00:00:00 2001 From: rain <76555708+rainnvfx@users.noreply.github.com> Date: Sat, 17 Jan 2026 03:15:36 +0400 Subject: [PATCH 1/4] Update LocalChatManager.java added formatConnectionMessage method supports ChatUtils and Placeholder formatting --- .../allaychat/chat/LocalChatManager.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/main/java/net/voxelarc/allaychat/chat/LocalChatManager.java b/src/main/java/net/voxelarc/allaychat/chat/LocalChatManager.java index bafef2a..64a1b97 100644 --- a/src/main/java/net/voxelarc/allaychat/chat/LocalChatManager.java +++ b/src/main/java/net/voxelarc/allaychat/chat/LocalChatManager.java @@ -177,6 +177,23 @@ public Component formatMessage(Player player, Component message) { return component; } + public Component formatConnectionMessage(Player player, String type) { + if (!plugin.getFormatConfig().getBoolean("connection.enabled", false)) { + return null; + } + + String format = plugin.getFormatConfig().getString(type); + if (format == null || format.isEmpty()) { + return null; + } + + return ChatUtils.format( + PlaceholderAPI.setPlaceholders(player, format), + Placeholder.unparsed("player_name", player.getName()), + ChatUtils.papiTag(player) + ); + } + @Override public boolean handleMessage(Player player, String message) { for (ChatFilter filter : plugin.getFilters()) { From 9a475f89e85d09365276a99789a943afafa01dc9 Mon Sep 17 00:00:00 2001 From: rain <76555708+rainnvfx@users.noreply.github.com> Date: Sat, 17 Jan 2026 03:18:18 +0400 Subject: [PATCH 2/4] Update ChatManager.java added the new method to the interface. --- .../main/java/net/voxelarc/allaychat/api/chat/ChatManager.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/API/src/main/java/net/voxelarc/allaychat/api/chat/ChatManager.java b/API/src/main/java/net/voxelarc/allaychat/api/chat/ChatManager.java index da687d2..492d6f3 100644 --- a/API/src/main/java/net/voxelarc/allaychat/api/chat/ChatManager.java +++ b/API/src/main/java/net/voxelarc/allaychat/api/chat/ChatManager.java @@ -61,6 +61,8 @@ public interface ChatManager { Component handleMentions(Player player, String messageContent, Component messageComponent); + Component formatConnectionMessage(Player player, String type); + enum InventoryType { SHULKER, INVENTORY, From e356dd306889144c2a382b25435392cc564166a7 Mon Sep 17 00:00:00 2001 From: rain <76555708+rainnvfx@users.noreply.github.com> Date: Sat, 17 Jan 2026 03:20:40 +0400 Subject: [PATCH 3/4] Update ConnectionListener.java Calls ChatManager to format player join/leave messages Falls back to default messages if the config is missing or disabled. --- .../allaychat/listener/ConnectionListener.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/main/java/net/voxelarc/allaychat/listener/ConnectionListener.java b/src/main/java/net/voxelarc/allaychat/listener/ConnectionListener.java index d3e632f..e6fce33 100644 --- a/src/main/java/net/voxelarc/allaychat/listener/ConnectionListener.java +++ b/src/main/java/net/voxelarc/allaychat/listener/ConnectionListener.java @@ -1,6 +1,7 @@ package net.voxelarc.allaychat.listener; import lombok.RequiredArgsConstructor; +import net.kyori.adventure.text.Component; import net.voxelarc.allaychat.AllayChatPlugin; import net.voxelarc.allaychat.api.user.ChatUser; import org.bukkit.entity.Player; @@ -19,6 +20,12 @@ public class ConnectionListener implements Listener { @EventHandler(ignoreCancelled = true) public void onJoin(PlayerJoinEvent event) { Player player = event.getPlayer(); + + Component joinMessage = plugin.getChatManager().formatConnectionMessage(player, "connection.join"); + if (joinMessage != null) { + event.joinMessage(joinMessage); + } + // Delay the loading of user data to ensure that the player is fully connected plugin.getScheduler().runLaterAsync(() -> { plugin.getDatabase().loadPlayerAsync(player.getUniqueId()).whenComplete((user, throwable) -> { @@ -46,6 +53,11 @@ public void onJoin(PlayerJoinEvent event) { public void onQuit(PlayerQuitEvent event) { Player player = event.getPlayer(); + Component quitMessage = plugin.getChatManager().formatConnectionMessage(player, "connection.leave"); + if (quitMessage != null) { + event.quitMessage(quitMessage); + } + ChatUser chatUser = plugin.getUserManager().getUser(player.getUniqueId()); if (chatUser == null) return; From ec9d7e4343b1f5217cb9e0587c70edb33d5d7435 Mon Sep 17 00:00:00 2001 From: rain <76555708+rainnvfx@users.noreply.github.com> Date: Sat, 17 Jan 2026 03:23:37 +0400 Subject: [PATCH 4/4] Update format.yml Added the new "connection" section. has a toggle to disable the custom join/leave format. falls back to default messages if the config is missing. --- src/main/resources/format.yml | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/main/resources/format.yml b/src/main/resources/format.yml index 02b756e..f5ea123 100644 --- a/src/main/resources/format.yml +++ b/src/main/resources/format.yml @@ -2,6 +2,12 @@ # %your_placeholder% # you can also use legacy formatting codes like &c, &6, &l, etc. +# Customize join/leave messages +connection: + enabled: true # Set to "false" to use default messages + join: "<#38ff38>→ %player_name% joined" + leave: "<#ff3838>← %player_name% left" + format: # If no group was found for the player, this format will be used. default: @@ -17,4 +23,4 @@ format: # group name admin: - format: "%luckperms_prefix% %player_name%: " \ No newline at end of file + format: "%luckperms_prefix% %player_name%: "