diff --git a/common/src/main/java/org/cneko/toneko/bukkit/ToNeko.java b/common/src/main/java/org/cneko/toneko/bukkit/ToNeko.java index 8096268a..05e31de6 100644 --- a/common/src/main/java/org/cneko/toneko/bukkit/ToNeko.java +++ b/common/src/main/java/org/cneko/toneko/bukkit/ToNeko.java @@ -9,7 +9,9 @@ import org.cneko.toneko.bukkit.events.WorldEvents; import org.cneko.toneko.bukkit.msic.Metrics; import org.cneko.toneko.bukkit.util.PlaceHolderUtil; +import org.cneko.toneko.bukkit.util.PlayerUtil; import org.cneko.toneko.common.Bootstrap; +import org.cneko.toneko.common.api.Messaging; import org.cneko.toneko.common.api.NekoQuery; import org.cneko.toneko.common.mod.impl.FabricConfigImpl; import org.cneko.toneko.common.mod.impl.FabricLanguageImpl; @@ -27,6 +29,7 @@ public void onEnable() { ConfigUtil.INSTANCE = new FabricConfigImpl(); LanguageUtil.INSTANCE = new FabricLanguageImpl(); Bootstrap.bootstrap(); + Messaging.GET_PLAYER_UUID_INSTANCE = PlayerUtil::getPlayerUUIDByName; // common end // util start diff --git a/common/src/main/java/org/cneko/toneko/bukkit/events/ChatEvent.java b/common/src/main/java/org/cneko/toneko/bukkit/events/ChatEvent.java index 3a600471..4e2642e3 100644 --- a/common/src/main/java/org/cneko/toneko/bukkit/events/ChatEvent.java +++ b/common/src/main/java/org/cneko/toneko/bukkit/events/ChatEvent.java @@ -7,14 +7,13 @@ import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.cneko.ctlib.common.file.JsonConfiguration; -import org.cneko.ctlib.common.util.ChatPrefix; import org.cneko.toneko.bukkit.api.NekoStatus; import org.cneko.toneko.bukkit.util.PlaceHolderUtil; import org.cneko.toneko.common.Stats; import org.cneko.toneko.common.api.NekoQuery; import org.cneko.toneko.common.util.ConfigUtil; import org.cneko.toneko.common.util.LanguageUtil; -import org.cneko.toneko.common.util.Messaging; +import org.cneko.toneko.common.api.Messaging; import java.util.List; import java.util.UUID; @@ -36,11 +35,8 @@ public void onChat(AsyncChatEvent event) { // 获取昵称 String nickname = neko.getNickName(); message = modify(message, neko); - // 获取前缀 - List prefix = NekoStatus.getPlayerPrefixes(player); - String p = formatPrefixes(prefix); // 格式化消息 - message = format(message, player, nickname, p); + message = format(message, player, nickname); sendMessage(message); // 消息中喵的数量 int count = Stats.getMeow(message); @@ -49,9 +45,9 @@ public void onChat(AsyncChatEvent event) { if(ConfigUtil.STATS) Stats.meowInChat(player.getName(),count); } - private String format(String message, Player player, String nickname,String prefix){ + private String format(String message, Player player, String nickname){ String format = PlaceHolderUtil.replace(player,ConfigUtil.CHAT_FORMAT); - return Messaging.format(message,player.getName(),nickname,prefix,format); + return Messaging.format(message,player.getName(),nickname,format); } public static String formatPrefixes(List prefixes) { diff --git a/common/src/main/java/org/cneko/toneko/bukkit/util/PlayerUtil.java b/common/src/main/java/org/cneko/toneko/bukkit/util/PlayerUtil.java new file mode 100644 index 00000000..07ef5de1 --- /dev/null +++ b/common/src/main/java/org/cneko/toneko/bukkit/util/PlayerUtil.java @@ -0,0 +1,17 @@ +package org.cneko.toneko.bukkit.util; + +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; + +import java.util.UUID; + +public class PlayerUtil { + public static Player getPlayerByName(String playerName) { + return Bukkit.getPlayer(playerName); + } + + public static UUID getPlayerUUIDByName(String name) { + return Bukkit.getPlayerUniqueId(name); + } + +} diff --git a/common/src/main/java/org/cneko/toneko/common/api/EventBase.java b/common/src/main/java/org/cneko/toneko/common/api/EventBase.java new file mode 100644 index 00000000..67c25ec5 --- /dev/null +++ b/common/src/main/java/org/cneko/toneko/common/api/EventBase.java @@ -0,0 +1,4 @@ +package org.cneko.toneko.common.api; + +public class EventBase { +} diff --git a/common/src/main/java/org/cneko/toneko/common/util/Messaging.java b/common/src/main/java/org/cneko/toneko/common/api/Messaging.java similarity index 59% rename from common/src/main/java/org/cneko/toneko/common/util/Messaging.java rename to common/src/main/java/org/cneko/toneko/common/api/Messaging.java index 31d692e0..a2b5dfb4 100644 --- a/common/src/main/java/org/cneko/toneko/common/util/Messaging.java +++ b/common/src/main/java/org/cneko/toneko/common/api/Messaging.java @@ -1,33 +1,51 @@ -package org.cneko.toneko.common.util; +package org.cneko.toneko.common.api; -import org.cneko.ctlib.common.util.ChatPrefix; +import org.cneko.toneko.common.util.ConfigUtil; +import org.cneko.toneko.common.util.LanguageUtil; +import org.jetbrains.annotations.ApiStatus; +import java.util.ArrayList; import java.util.List; import java.util.Random; - +import java.util.UUID; public class Messaging { + @ApiStatus.Internal + public static GetPlayerUUID GET_PLAYER_UUID_INSTANCE; public static String format(String msg, String player, String nickname){ - return format(msg,player,nickname,ChatPrefix.getPrivatePrefix(player) + ChatPrefix.getAllPublicPrefixValues()); + return format(msg,player,nickname, getChatPrefixes(player)); + } + + public static String format(String message, String playerName, String nickname, String format) { + return format(message,playerName,nickname,getChatPrefixes(playerName),format); } - public static String format(String msg, String player, String nickname, String prefix, String chatFormat){ + public static String format(String msg, String player, String nickname, List prefix, String chatFormat){ // 修改昵称 - if(nickname.isEmpty()){ + if(nickname.isEmpty() || nickname.isBlank()){ nickname = player; }else { nickname = "§6~§f"+nickname; } return chatFormat. - replace("${prefix}",prefix). + replace("${prefix}",formatPrefixes(prefix)). replace("${msg}",msg). replace("${name}",nickname). replace("${c}","§"); } - public static String format(String msg, String player, String nickname, String prefix){ - return format(msg,player,nickname,prefix,ConfigUtil.CHAT_FORMAT); + public static String format(String msg, String player, String nickname, List prefixes){ + return format(msg,player,nickname,prefixes, ConfigUtil.CHAT_FORMAT); + } + + public static List getChatPrefixes(String playerName){ + UUID uuid = GET_PLAYER_UUID_INSTANCE.get(playerName); + List prefixes = new ArrayList<>(); + if (NekoQuery.isNeko(uuid)){ + prefixes.add(LanguageUtil.prefix); + } + return prefixes; } public static String replacePhrase(String message, String phrase){ @@ -35,6 +53,15 @@ public static String replacePhrase(String message, String phrase){ return message; } + private static String formatPrefixes(List prefixes){ + StringBuilder formatted = new StringBuilder(); + for (String prefix : prefixes) { + // 将每个前缀格式化为 [§a前缀§f§r] + formatted.append("[§a").append(prefix).append("§f§r]"); + } + return formatted.toString(); + } + /* 以下代码来源于 https://github.com/CSneko/kawai-text/blob/main/js/petPhrase.js @@ -82,4 +109,8 @@ public static String runPetPhrases(String text, String petPhrase) { return text; } + + public interface GetPlayerUUID { + UUID get(String playerName); + } } diff --git a/common/src/main/java/org/cneko/toneko/common/mod/ModBootstrap.java b/common/src/main/java/org/cneko/toneko/common/mod/ModBootstrap.java new file mode 100644 index 00000000..185971f4 --- /dev/null +++ b/common/src/main/java/org/cneko/toneko/common/mod/ModBootstrap.java @@ -0,0 +1,10 @@ +package org.cneko.toneko.common.mod; + +import org.cneko.toneko.common.api.Messaging; +import org.cneko.toneko.common.mod.util.PlayerUtil; + +public class ModBootstrap { + public static void bootstrap() { + Messaging.GET_PLAYER_UUID_INSTANCE = PlayerUtil::getPlayerUUIDByName; + } +} diff --git a/common/src/main/java/org/cneko/toneko/common/mod/events/CommonChatEvent.java b/common/src/main/java/org/cneko/toneko/common/mod/events/CommonChatEvent.java index aa8a2841..62184619 100644 --- a/common/src/main/java/org/cneko/toneko/common/mod/events/CommonChatEvent.java +++ b/common/src/main/java/org/cneko/toneko/common/mod/events/CommonChatEvent.java @@ -12,7 +12,7 @@ import org.cneko.toneko.common.mod.util.TextUtil; import org.cneko.toneko.common.util.ConfigUtil; import org.cneko.toneko.common.util.LanguageUtil; -import org.cneko.toneko.common.util.Messaging; +import org.cneko.toneko.common.api.Messaging; import java.util.List; import java.util.UUID; diff --git a/common/src/main/java/org/cneko/toneko/common/mod/util/PlayerUtil.java b/common/src/main/java/org/cneko/toneko/common/mod/util/PlayerUtil.java index 8c41e012..a6ade8d5 100644 --- a/common/src/main/java/org/cneko/toneko/common/mod/util/PlayerUtil.java +++ b/common/src/main/java/org/cneko/toneko/common/mod/util/PlayerUtil.java @@ -11,6 +11,9 @@ public class PlayerUtil { public static Player getPlayerByName(String name) { return ModMeta.INSTANCE.getServer().getPlayerList().getPlayerByName(name); } + public static UUID getPlayerUUIDByName(String name) { + return getPlayerByName(name).getUUID(); + } public static Player getPlayerByUUID(UUID uuid) { return ModMeta.INSTANCE.getServer().getPlayerList().getPlayer(uuid); } diff --git a/fabric/src/main/java/org/cneko/toneko/fabric/ToNeko.java b/fabric/src/main/java/org/cneko/toneko/fabric/ToNeko.java index c7744ace..ee320cb5 100644 --- a/fabric/src/main/java/org/cneko/toneko/fabric/ToNeko.java +++ b/fabric/src/main/java/org/cneko/toneko/fabric/ToNeko.java @@ -3,6 +3,7 @@ import net.fabricmc.api.ModInitializer; import net.fabricmc.fabric.api.event.lifecycle.v1.ServerLifecycleEvents; import org.cneko.toneko.common.Bootstrap; +import org.cneko.toneko.common.mod.ModBootstrap; import org.cneko.toneko.common.mod.ModMeta; import org.cneko.toneko.common.mod.commands.NekoCommand; import org.cneko.toneko.common.mod.commands.QuirkCommand; @@ -60,6 +61,7 @@ public void onInitialize() { PermissionUtil.init(); // 通用的启动 Bootstrap.bootstrap(); + ModBootstrap.bootstrap(); }); } } diff --git a/neoforge/src/main/java/org/cneko/toneko/neoforge/ToNekoNeoForge.java b/neoforge/src/main/java/org/cneko/toneko/neoforge/ToNekoNeoForge.java index 3542a833..5d8699d2 100644 --- a/neoforge/src/main/java/org/cneko/toneko/neoforge/ToNekoNeoForge.java +++ b/neoforge/src/main/java/org/cneko/toneko/neoforge/ToNekoNeoForge.java @@ -15,6 +15,7 @@ import net.neoforged.neoforge.event.server.ServerStartedEvent; import net.neoforged.neoforge.registries.DeferredRegister; import org.cneko.toneko.common.Bootstrap; +import org.cneko.toneko.common.mod.ModBootstrap; import org.cneko.toneko.common.mod.ModMeta; import org.cneko.toneko.common.mod.commands.NekoCommand; import org.cneko.toneko.common.mod.commands.QuirkCommand; @@ -85,7 +86,7 @@ public ToNekoNeoForge(IEventBus bus, ModContainer container) { ConfigUtil.INSTANCE = new FabricConfigImpl(); // 通用的启动 Bootstrap.bootstrap(); - + ModBootstrap.bootstrap(); ServerLifecycleEvents.SERVER_STARTED.register(server -> { ModMeta.INSTANCE.setServer(server); });