From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Dreeam <61569423+Dreeam-qwq@users.noreply.github.com> Date: Sun, 2 Jun 2024 01:21:36 +0800 Subject: [PATCH] Configurable connection message diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java index 2cdfd22baf31df99e2c2b1d114c47cb88569538f..8e3bbc7a0cf2a3e5999738c0f764544f5e64ef4a 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java @@ -452,7 +452,7 @@ public abstract class PlayerList { // Ensure that player inventory is populated with its viewer player.containerMenu.transferTo(player.containerMenu, bukkitPlayer); - PlayerJoinEvent playerJoinEvent = new PlayerJoinEvent(bukkitPlayer, io.papermc.paper.adventure.PaperAdventure.asAdventure(ichatmutablecomponent)); // Paper - Adventure + PlayerJoinEvent playerJoinEvent = new PlayerJoinEvent(bukkitPlayer, getJoinMsg(io.papermc.paper.adventure.PaperAdventure.asAdventure(ichatmutablecomponent), bukkitPlayer)); // Paper - Adventure // Leaf - Configurable connection message - join message this.cserver.getPluginManager().callEvent(playerJoinEvent); if (!player.connection.isAcceptingMessages()) { @@ -465,7 +465,7 @@ public abstract class PlayerList { final net.kyori.adventure.text.Component jm = playerJoinEvent.joinMessage(); - if (jm != null && !jm.equals(net.kyori.adventure.text.Component.empty())) { // Paper - Adventure + if (org.dreeam.leaf.config.modules.misc.ConnectionMessage.joinEnabled && jm != null && !jm.equals(net.kyori.adventure.text.Component.empty())) { // Paper - Adventure // Leaf - Configurable connection message - join message joinMessage = io.papermc.paper.adventure.PaperAdventure.asVanilla(jm); // Paper - Adventure this.server.getPlayerList().broadcastSystemMessage(joinMessage, false); // Paper - Adventure } @@ -767,7 +767,7 @@ public abstract class PlayerList { entityplayer.closeContainer(org.bukkit.event.inventory.InventoryCloseEvent.Reason.DISCONNECT); // Paper - Inventory close reason } - PlayerQuitEvent playerQuitEvent = new PlayerQuitEvent(entityplayer.getBukkitEntity(), leaveMessage, entityplayer.quitReason); // Paper - Adventure & Add API for quit reason + PlayerQuitEvent playerQuitEvent = new PlayerQuitEvent(entityplayer.getBukkitEntity(), getQuitMsg(leaveMessage, entityplayer.getBukkitEntity()), entityplayer.quitReason); // Paper - Adventure & Add API for quit reason // Leaf - Configurable connection message - quit message this.cserver.getPluginManager().callEvent(playerQuitEvent); entityplayer.getBukkitEntity().disconnect(playerQuitEvent.getQuitMessage()); @@ -1812,4 +1812,29 @@ public abstract class PlayerList { public boolean isAllowCommandsForAllPlayers() { return this.allowCommandsForAllPlayers; } + + // Leaf start - Configurable connection message + private net.kyori.adventure.text.Component getJoinMsg(net.kyori.adventure.text.Component defaultJoinMsg, Player player) { + if (org.dreeam.leaf.config.modules.misc.ConnectionMessage.joinEnabled) { + return "default".equals(org.dreeam.leaf.config.modules.misc.ConnectionMessage.joinMessage) + ? defaultJoinMsg + : net.kyori.adventure.text.minimessage.MiniMessage.miniMessage().deserialize(org.dreeam.leaf.config.modules.misc.ConnectionMessage.joinMessage) + .replaceText(net.kyori.adventure.text.TextReplacementConfig.builder().matchLiteral("%player_name%").replacement(player.getName()).build()) + .replaceText(net.kyori.adventure.text.TextReplacementConfig.builder().matchLiteral("%player_displayname%").replacement(player.displayName()).build()); + } + + return net.kyori.adventure.text.Component.empty(); + } + private net.kyori.adventure.text.Component getQuitMsg(net.kyori.adventure.text.Component defaultQuitMsg, Player player) { + if (org.dreeam.leaf.config.modules.misc.ConnectionMessage.quitEnabled) { + return "default".equals(org.dreeam.leaf.config.modules.misc.ConnectionMessage.quitMessage) + ? defaultQuitMsg + : net.kyori.adventure.text.minimessage.MiniMessage.miniMessage().deserialize(org.dreeam.leaf.config.modules.misc.ConnectionMessage.quitMessage) + .replaceText(net.kyori.adventure.text.TextReplacementConfig.builder().matchLiteral("%player_name%").replacement(player.getName()).build()) + .replaceText(net.kyori.adventure.text.TextReplacementConfig.builder().matchLiteral("%player_displayname%").replacement(player.displayName()).build()); + } + + return net.kyori.adventure.text.Component.empty(); + } + // Leaf end - Configurable connection message } diff --git a/src/main/java/org/dreeam/leaf/config/modules/misc/ConnectionMessage.java b/src/main/java/org/dreeam/leaf/config/modules/misc/ConnectionMessage.java new file mode 100644 index 0000000000000000000000000000000000000000..72782ef6159a718b4d751a65db92812402cfab61 --- /dev/null +++ b/src/main/java/org/dreeam/leaf/config/modules/misc/ConnectionMessage.java @@ -0,0 +1,41 @@ +package org.dreeam.leaf.config.modules.misc; + +import org.dreeam.leaf.config.ConfigModules; +import org.dreeam.leaf.config.EnumConfigCategory; + +public class ConnectionMessage extends ConfigModules { + + public String getBasePath() { + return EnumConfigCategory.MISC.getBaseKeyName() + ".connection-message"; + } + + public static boolean joinEnabled = true; + public static String joinMessage = "default"; + public static boolean quitEnabled = true; + public static String quitMessage = "default"; + + @Override + public void onLoaded() { + config.addCommentRegionBased(getBasePath(), """ + Connection message, using MiniMessage format, set to "default" to use vanilla join message. + available placeholders: + %player_name% - player name + %player_displayname% - player display name""", + """ + 自定义加入 & 退出消息 (MiniMessage 格式), 设置为 'default' 将使用原版消息. + 可用的内置变量: + %player_name% - 玩家名称 + %player_displayname% - 玩家显示名称"""); + + joinEnabled = config.getBoolean(getBasePath() + ".join.enabled", joinEnabled); + joinMessage = config.getString(getBasePath() + ".join.message", joinMessage, config.pickStringRegionBased( + "Join message of player", + "玩家加入服务器时的消息" + )); + + quitEnabled = config.getBoolean(getBasePath() + ".quit.enabled", quitEnabled); + quitMessage = config.getString(getBasePath() + ".quit.message", quitMessage, config.pickStringRegionBased( + "Quit message of player", + "玩家退出服务器时的消息")); + } +}