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, 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()) { 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; 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%: "