From 4e81a63d035bc988fa284bb911378147eb2f1bc7 Mon Sep 17 00:00:00 2001 From: XiaoMoMi Date: Wed, 28 May 2025 01:11:17 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=85=B6=E4=BB=96=E7=89=A9?= =?UTF-8?q?=E5=93=81=E7=9A=84=E5=90=8D=E7=A7=B0=E6=8B=A6=E6=88=AA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bukkit/item/ModernNetworkItemHandler.java | 55 ++++++++++++++++++- .../plugin/network/BukkitNetworkManager.java | 1 + 2 files changed, 55 insertions(+), 1 deletion(-) diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/ModernNetworkItemHandler.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/ModernNetworkItemHandler.java index fadbbe8ce..f6f3197a1 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/ModernNetworkItemHandler.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/ModernNetworkItemHandler.java @@ -74,10 +74,13 @@ public class ModernNetworkItemHandler implements NetworkItemHandler { public Optional process() { if (VersionHelper.isOrAbove1_21_5()) { processModernLore(); + processModernCustomName(); + processModernItemName(); } else { processLore(); + processCustomName(); + processItemName(); } - if (this.globalChanged) { CompoundTag customData = Optional.ofNullable(this.item.getNBTComponent(ComponentTypes.CUSTOM_DATA)).map(CompoundTag.class::cast).orElse(new CompoundTag()); customData.put(NETWORK_ITEM_TAG, getOrCreateTag()); @@ -115,6 +118,56 @@ public class ModernNetworkItemHandler implements NetworkItemHandler { } } + private void processItemName() { + Optional optionalItemName = this.item.itemNameJson(); + if (optionalItemName.isPresent()) { + String line = optionalItemName.get(); + Map tokens = CraftEngine.instance().fontManager().matchTags(line); + if (!tokens.isEmpty()) { + this.item.itemNameJson(AdventureHelper.componentToJson(AdventureHelper.replaceText(AdventureHelper.jsonToComponent(line), tokens))); + this.globalChanged = true; + getOrCreateTag().put(ComponentKeys.ITEM_NAME.asString(), NetworkItemHandler.pack(Operation.ADD, new StringTag(line))); + } + } + } + + private void processModernItemName() { + Tag nameTag = this.item.getNBTComponent(ComponentTypes.ITEM_NAME); + if (nameTag == null) return; + String tagStr = nameTag.getAsString(); + Map tokens = CraftEngine.instance().fontManager().matchTags(tagStr); + if (!tokens.isEmpty()) { + this.item.setNBTComponent(ComponentKeys.ITEM_NAME, AdventureHelper.componentToNbt(AdventureHelper.replaceText(AdventureHelper.nbtToComponent(nameTag), tokens))); + this.globalChanged = true; + getOrCreateTag().put(ComponentKeys.ITEM_NAME.asString(), NetworkItemHandler.pack(Operation.ADD, nameTag)); + } + } + + private void processCustomName() { + Optional optionalCustomName = this.item.customNameJson(); + if (optionalCustomName.isPresent()) { + String line = optionalCustomName.get(); + Map tokens = CraftEngine.instance().fontManager().matchTags(line); + if (!tokens.isEmpty()) { + this.item.customNameJson(AdventureHelper.componentToJson(AdventureHelper.replaceText(AdventureHelper.jsonToComponent(line), tokens))); + this.globalChanged = true; + getOrCreateTag().put(ComponentKeys.CUSTOM_NAME.asString(), NetworkItemHandler.pack(Operation.ADD, new StringTag(line))); + } + } + } + + private void processModernCustomName() { + Tag nameTag = this.item.getNBTComponent(ComponentTypes.CUSTOM_NAME); + if (nameTag == null) return; + String tagStr = nameTag.getAsString(); + Map tokens = CraftEngine.instance().fontManager().matchTags(tagStr); + if (!tokens.isEmpty()) { + this.item.setNBTComponent(ComponentKeys.CUSTOM_NAME, AdventureHelper.componentToNbt(AdventureHelper.replaceText(AdventureHelper.nbtToComponent(nameTag), tokens))); + this.globalChanged = true; + getOrCreateTag().put(ComponentKeys.CUSTOM_NAME.asString(), NetworkItemHandler.pack(Operation.ADD, nameTag)); + } + } + private void processModernLore() { Tag loreTag = this.item.getNBTComponent(ComponentTypes.LORE); if (loreTag == null) return; diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/BukkitNetworkManager.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/BukkitNetworkManager.java index 623f5c11f..1bb9a7944 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/BukkitNetworkManager.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/BukkitNetworkManager.java @@ -40,6 +40,7 @@ public class BukkitNetworkManager implements NetworkManager, Listener, PluginMes private static BukkitNetworkManager instance; private static final Map, TriConsumer> NMS_PACKET_HANDLERS = new HashMap<>(); // only for game stage for the moment + // todo 优化成 数组 private static final Map> S2C_BYTE_BUFFER_PACKET_HANDLERS = new HashMap<>(); private static final Map> C2S_BYTE_BUFFER_PACKET_HANDLERS = new HashMap<>();