From 1a644f69ef278dd7f7f04d49fbdfc9ad3958f3c3 Mon Sep 17 00:00:00 2001 From: XiaoMoMi Date: Tue, 22 Apr 2025 01:52:32 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0emoji=E4=BD=9C=E7=94=A8?= =?UTF-8?q?=E8=8C=83=E5=9B=B4=E9=80=89=E9=A1=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bukkit/loader/src/main/resources/config.yml | 8 +++-- .../bukkit/font/BukkitFontManager.java | 34 +++++++++++++------ .../core/plugin/config/Config.java | 27 +++++++++++++++ gradle.properties | 2 +- 4 files changed, 57 insertions(+), 14 deletions(-) diff --git a/bukkit/loader/src/main/resources/config.yml b/bukkit/loader/src/main/resources/config.yml index 91ef6eea5..a856e873c 100644 --- a/bukkit/loader/src/main/resources/config.yml +++ b/bukkit/loader/src/main/resources/config.yml @@ -177,6 +177,12 @@ furniture: # - Recommended to keep enabled for better performance hide-base-entity: true +emoji: + chat: true + book: true + anvil: true + sign: true + image: # Block image tags using minecraft:default font in these interfaces # Permission bypass: craftengine.filter.bypass.xxx (replace xxx with context: anvil/book/chat/etc) @@ -252,8 +258,6 @@ image: 128: '\uf844' 256: '\uf845' -emoji: {} - recipe: # Master switch for custom recipes # NOTE: When enabled, plugin recipes will OVERRIDE vanilla recipes diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/font/BukkitFontManager.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/font/BukkitFontManager.java index d39ef7e35..2a8aa4fbe 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/font/BukkitFontManager.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/font/BukkitFontManager.java @@ -131,7 +131,7 @@ public class BukkitFontManager extends AbstractFontManager implements Listener { @SuppressWarnings("UnstableApiUsage") @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void onAnvilRename(PrepareAnvilEvent event) { - if (super.emojiKeywordTrie == null) { + if (!Config.allowEmojiAnvil() || super.emojiKeywordTrie == null) { return; } ItemStack result = event.getResult(); @@ -164,6 +164,7 @@ public class BukkitFontManager extends AbstractFontManager implements Listener { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onSignChange(SignChangeEvent event) { + if (!Config.allowEmojiSign()) return; Player player = event.getPlayer(); List lines = event.lines(); for (int i = 0; i < lines.size(); i++) { @@ -193,6 +194,7 @@ public class BukkitFontManager extends AbstractFontManager implements Listener { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onPlayerEditBook(PlayerEditBookEvent event) { if (!event.isSigning()) return; + if (!Config.allowEmojiBook()) return; Player player = event.getPlayer(); BookMeta newBookMeta = event.getNewBookMeta(); List pages = newBookMeta.pages(); @@ -222,20 +224,30 @@ public class BukkitFontManager extends AbstractFontManager implements Listener { try { Object originalMessage = Reflections.field$AsyncChatDecorateEvent$originalMessage.get(event); String rawJsonMessage = ComponentUtils.paperAdventureToJson(originalMessage); - EmojiTextProcessResult processResult = replaceJsonEmoji(rawJsonMessage, this.plugin.adapt(player)); - boolean hasChanged = processResult.replaced(); - if (!player.hasPermission(FontManager.BYPASS_CHAT)) { - IllegalCharacterProcessResult result = processIllegalCharacters(processResult.text()); - if (result.has()) { - Object component = ComponentUtils.jsonToPaperAdventure(result.text()); - Reflections.method$AsyncChatDecorateEvent$result.invoke(event, component); + if (Config.allowEmojiChat()) { + EmojiTextProcessResult processResult = replaceJsonEmoji(rawJsonMessage, this.plugin.adapt(player)); + boolean hasChanged = processResult.replaced(); + if (!player.hasPermission(FontManager.BYPASS_CHAT)) { + IllegalCharacterProcessResult result = processIllegalCharacters(processResult.text()); + if (result.has()) { + Object component = ComponentUtils.jsonToPaperAdventure(result.text()); + Reflections.method$AsyncChatDecorateEvent$result.invoke(event, component); + } else if (hasChanged) { + Object component = ComponentUtils.jsonToPaperAdventure(processResult.text()); + Reflections.method$AsyncChatDecorateEvent$result.invoke(event, component); + } } else if (hasChanged) { Object component = ComponentUtils.jsonToPaperAdventure(processResult.text()); Reflections.method$AsyncChatDecorateEvent$result.invoke(event, component); } - } else if (hasChanged) { - Object component = ComponentUtils.jsonToPaperAdventure(processResult.text()); - Reflections.method$AsyncChatDecorateEvent$result.invoke(event, component); + } else { + if (!player.hasPermission(FontManager.BYPASS_CHAT)) { + IllegalCharacterProcessResult result = processIllegalCharacters(rawJsonMessage); + if (result.has()) { + Object component = ComponentUtils.jsonToPaperAdventure(result.text()); + Reflections.method$AsyncChatDecorateEvent$result.invoke(event, component); + } + } } } catch (IllegalAccessException | InvocationTargetException e) { throw new RuntimeException(e); diff --git a/core/src/main/java/net/momirealms/craftengine/core/plugin/config/Config.java b/core/src/main/java/net/momirealms/craftengine/core/plugin/config/Config.java index 98a3275e6..f423f8265 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/plugin/config/Config.java +++ b/core/src/main/java/net/momirealms/craftengine/core/plugin/config/Config.java @@ -133,6 +133,11 @@ public class Config { protected boolean image$intercept_packets$player_info; protected boolean image$intercept_packets$set_score; + protected boolean emoji$chat; + protected boolean emoji$book; + protected boolean emoji$anvil; + protected boolean emoji$sign; + public Config(CraftEngine plugin) { this.plugin = plugin; this.configVersion = PluginProperties.getValue("config"); @@ -309,6 +314,12 @@ public class Config { image$intercept_packets$player_info = config.getBoolean("image.intercept-packets.player-info", true); image$intercept_packets$set_score = config.getBoolean("image.intercept-packets.set-score", true); + // emoji + emoji$chat = config.getBoolean("emoji.chat", true); + emoji$anvil = config.getBoolean("emoji.anvil", true); + emoji$book = config.getBoolean("emoji.book", true); + emoji$sign = config.getBoolean("emoji.sign", true); + Class modClazz = ReflectionUtils.getClazz(CraftEngine.MOD_CLASS); if (modClazz != null) { Method setMaxChainMethod = ReflectionUtils.getStaticMethod(modClazz, void.class, new String[] {"setMaxChainUpdate"}, int.class); @@ -648,6 +659,22 @@ public class Config { return instance.block$extended_interaction_range; } + public static boolean allowEmojiSign() { + return instance.emoji$sign; + } + + public static boolean allowEmojiChat() { + return instance.emoji$chat; + } + + public static boolean allowEmojiAnvil() { + return instance.emoji$anvil; + } + + public static boolean allowEmojiBook() { + return instance.emoji$book; + } + public YamlDocument loadOrCreateYamlData(String fileName) { File file = new File(this.plugin.dataFolderFile(), fileName); if (!file.exists()) { diff --git a/gradle.properties b/gradle.properties index 5b44e3876..001a6ca89 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,7 +3,7 @@ org.gradle.jvmargs=-Xmx1G # Project settings # Rule: [major update].[feature update].[bug fix] project_version=0.0.50-beta.1 -config_version=29 +config_version=30 lang_version=7 project_group=net.momirealms latest_supported_version=1.21.5