From 7963288c1d710c27e90ec126e9e081ddf7c183b1 Mon Sep 17 00:00:00 2001 From: jhqwqmc <2110242767@qq.com> Date: Thu, 10 Apr 2025 22:00:53 +0800 Subject: [PATCH] =?UTF-8?q?refactor(bukkit):=20=E4=BC=98=E5=8C=96=E5=AD=97?= =?UTF-8?q?=E4=BD=93=E7=AE=A1=E7=90=86=E5=99=A8=E4=B8=AD=E8=A1=A8=E6=83=85?= =?UTF-8?q?=E8=A7=A3=E6=9E=90=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bukkit/font/BukkitFontManager.java | 55 ++++++++++--------- 1 file changed, 30 insertions(+), 25 deletions(-) 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 0151e87e6..b433afe87 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 @@ -129,13 +129,13 @@ public class BukkitFontManager extends AbstractFontManager implements Listener { if (renameText == null || renameText.isEmpty()) return; Component itemName = Component.text(renameText); - final int[] parsedCount = {0}; - processComponent(itemName, player, parsedCount[0], (text) -> { - if (parsedCount[0]++ >= Config.maxEmojiParsed()) return; + MutableInt parsedCount = new MutableInt(0); + processComponent(itemName, player, parsedCount, (text) -> { + if (parsedCount.value >= Config.maxEmojiParsed()) return; Item wrapped = this.plugin.itemManager().wrap(result); wrapped.customName(AdventureHelper.componentToJson(text)); event.setResult(wrapped.loadCopy()); - }, (count) -> parsedCount[0]++); + }); } @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) @@ -144,8 +144,8 @@ public class BukkitFontManager extends AbstractFontManager implements Listener { Player player = event.getPlayer(); BookMeta newBookMeta = event.getNewBookMeta(); List pages = newBookMeta.pages(); - final boolean[] replacedBookMeta = {false}; - final int[] parsedCount = {0}; + MutableBoolean replacedBookMeta = new MutableBoolean(false); + MutableInt parsedCount = new MutableInt(0); for (int i = 0; i < pages.size(); i++) { int finalIndex = i; JsonElement json = ComponentUtils.paperAdventureToJsonElement(pages.get(i)); @@ -153,9 +153,9 @@ public class BukkitFontManager extends AbstractFontManager implements Listener { if (primitive.isString() && primitive.getAsString().isEmpty()) continue; } Component page = AdventureHelper.jsonElementToComponent(json); - processComponent(page, player, parsedCount[0], (text) -> { + processComponent(page, player, parsedCount, (text) -> { try { - replacedBookMeta[0] = true; + replacedBookMeta.value = true; Reflections.method$BookMeta$page.invoke( newBookMeta, finalIndex + 1, ComponentUtils.jsonElementToPaperAdventure(AdventureHelper.componentToJsonElement(text)) @@ -163,10 +163,10 @@ public class BukkitFontManager extends AbstractFontManager implements Listener { } catch (IllegalAccessException | InvocationTargetException e) { this.plugin.logger().warn("Failed to set book page", e); } - }, (count) -> parsedCount[0]++); - if (parsedCount[0] > Config.maxEmojiParsed()) break; + }); + if (parsedCount.value > Config.maxEmojiParsed()) break; } - if (replacedBookMeta[0]) { + if (replacedBookMeta.value) { event.setNewBookMeta(newBookMeta); } } @@ -175,13 +175,13 @@ public class BukkitFontManager extends AbstractFontManager implements Listener { public void onSignChange(SignChangeEvent event) { Player player = event.getPlayer(); List lines = event.lines(); - final int[] parsedCount = {0}; + MutableInt parsedCount = new MutableInt(0); for (int i = 0; i < lines.size(); i++) { int finalIndex = i; JsonElement json = ComponentUtils.paperAdventureToJsonElement(lines.get(i)); if (json.toString().isEmpty()) continue; Component line = AdventureHelper.jsonElementToComponent(json); - processComponent(line, player, parsedCount[0], (text) -> { + processComponent(line, player, parsedCount, (text) -> { try { Reflections.method$SignChangeEvent$line.invoke( event, finalIndex, @@ -190,28 +190,22 @@ public class BukkitFontManager extends AbstractFontManager implements Listener { } catch (IllegalAccessException | InvocationTargetException e) { plugin.logger().warn("Failed to set sign line", e); } - }, (count) -> parsedCount[0]++); - if (parsedCount[0] > Config.maxEmojiParsed()) break; + }); + if (parsedCount.value > Config.maxEmojiParsed()) break; } } - private void processComponent(Component text, Player player, int parsedCount, Consumer consumer, Consumer parsedCountConsumer) { - if (parsedCount > Config.maxEmojiParsed()) return; + private void processComponent(Component text, Player player, MutableInt parsedCount, Consumer consumer) { + if (parsedCount.value > Config.maxEmojiParsed()) return; Component textReplaced = text; Set processedKeywords = new HashSet<>(); for (Token token : super.emojiKeywordTrie.tokenize(AdventureHelper.componentToJson(text))) { - if (!token.isMatch()) continue; + if (!token.isMatch() || parsedCount.value > Config.maxEmojiParsed()) continue; String keyword = token.getFragment(); - parsedCountConsumer.accept(parsedCount++); - if (parsedCount > Config.maxEmojiParsed()) return; if (processedKeywords.contains(keyword)) continue; Emoji emoji = super.emojiMapper.get(keyword); - if (emoji == null) { - parsedCountConsumer.accept(parsedCount--); - continue; - } + if (emoji == null) continue; if (emoji.permission() != null && !player.hasPermission(Objects.requireNonNull(emoji.permission()))) { - parsedCountConsumer.accept(parsedCount--); continue; } textReplaced = textReplaced.replaceText(builder -> { @@ -226,9 +220,20 @@ public class BukkitFontManager extends AbstractFontManager implements Listener { }); consumer.accept(textReplaced); processedKeywords.add(keyword); + parsedCount.value++; } } + private static final class MutableInt { + int value; + MutableInt(int value) { this.value = value; } + } + + private static final class MutableBoolean { + boolean value; + MutableBoolean(boolean value) { this.value = value; } + } + @SuppressWarnings("UnstableApiUsage") private void processChatEvent(AsyncChatDecorateEvent event) { Player player = event.player();