9
0
mirror of https://github.com/Xiao-MoMi/craft-engine.git synced 2025-12-27 10:59:07 +00:00

添加其他物品的名称拦截

This commit is contained in:
XiaoMoMi
2025-05-28 01:11:17 +08:00
parent e491b28722
commit 4e81a63d03
2 changed files with 55 additions and 1 deletions

View File

@@ -74,10 +74,13 @@ public class ModernNetworkItemHandler implements NetworkItemHandler {
public Optional<ItemStack> 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<String> optionalItemName = this.item.itemNameJson();
if (optionalItemName.isPresent()) {
String line = optionalItemName.get();
Map<String, Component> 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<String, Component> 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<String> optionalCustomName = this.item.customNameJson();
if (optionalCustomName.isPresent()) {
String line = optionalCustomName.get();
Map<String, Component> 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<String, Component> 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;

View File

@@ -40,6 +40,7 @@ public class BukkitNetworkManager implements NetworkManager, Listener, PluginMes
private static BukkitNetworkManager instance;
private static final Map<Class<?>, TriConsumer<NetWorkUser, NMSPacketEvent, Object>> NMS_PACKET_HANDLERS = new HashMap<>();
// only for game stage for the moment
// todo 优化成 数组
private static final Map<Integer, BiConsumer<NetWorkUser, ByteBufPacketEvent>> S2C_BYTE_BUFFER_PACKET_HANDLERS = new HashMap<>();
private static final Map<Integer, BiConsumer<NetWorkUser, ByteBufPacketEvent>> C2S_BYTE_BUFFER_PACKET_HANDLERS = new HashMap<>();