Closed CalenXwX closed 9 months ago
又遇到了一个和之前拔刀剑那个很像的问题XwX 植物魔法的采花袋在背包里被移动后NBT会丢失()然后里面存的花就无了()
触发这个问题的部分StackTrace:
org.bukkit.craftbukkit.v1_18_R2.inventory.CraftMetaItem::getCustomTags(org.bukkit.craftbukkit.v1_18_R2.inventory.CraftMetaItem.java:282) org.bukkit.craftbukkit.v1_18_R2.inventory.CraftMetaItem::<init>(org.bukkit.craftbukkit.v1_18_R2.inventory.CraftMetaItem.java:393) org.bukkit.craftbukkit.v1_18_R2.inventory.CraftItemStack::getItemMeta(org.bukkit.craftbukkit.v1_18_R2.inventory.CraftItemStack.java:556) org.bukkit.craftbukkit.v1_18_R2.inventory.CraftItemStack::asBukkitCopy(org.bukkit.craftbukkit.v1_18_R2.inventory.CraftItemStack.java:66) net.minecraft.server.network.ServerGamePacketListenerImpl::m_5964_/handleSetCreativeModeSlot(patches/minecraft/net/minecraft/server/network/ServerGamePacketListenerImpl.java.patch:3610)
植物魔法的采花袋使用了和MC原版收纳袋(Bundle)相同的NBT标签「Items」,在CraftMetaItem的构造方法里
Set<String> keys = tag.getAllKeys(); for (String key : keys) { if (!getHandledTags().contains(key)) { unhandledTags.put(key, tag.get(key).copy()); } // CatServer start - handle mod custom nbt else { if (getClass() == CraftMetaItem.class && getCustomTags().contains(key)) { unhandledTags.put(key, tag.get(key)); } } // CatServer end }
由于「Items」是原版存在的NBT标签,getHandledTags().contains(key)被判断为true,未执行Bukkit的保存标签代码;getCustomTags()获取的标签仍未包含「Items」,CatServer插入的保存标签代码再次被跳过,导致getCustomTags().contains(key)为false,「Items」没有被放入unhandledTags,然后袋子里存的花就无了……
getHandledTags().contains(key)
getCustomTags()
getCustomTags().contains(key)
看起来这里是从1.16.5迁移到1.18.2的时候漏掉了XwX 如图↓ Bukkit1.16.5的HANDLED_TAGS / CatServer1.16.5的CUSTOM_TAGS ↓ Bukkit1.18.2的HANDLED_TAGS / CatServer1.18.2的CUSTOM_TAGS ↓ CatServer1.16.5的CUSTOM_TAGS / CatServer1.18.2的CUSTOM_TAGS ↓
给你花花 细心喵
欸嘿w
又遇到了一个和之前拔刀剑那个很像的问题XwX 植物魔法的采花袋在背包里被移动后NBT会丢失()然后里面存的花就无了()
触发这个问题的部分StackTrace:
植物魔法的采花袋使用了和MC原版收纳袋(Bundle)相同的NBT标签「Items」,在CraftMetaItem的构造方法里
由于「Items」是原版存在的NBT标签,
getHandledTags().contains(key)
被判断为true,未执行Bukkit的保存标签代码;getCustomTags()
获取的标签仍未包含「Items」,CatServer插入的保存标签代码再次被跳过,导致getCustomTags().contains(key)
为false,「Items」没有被放入unhandledTags,然后袋子里存的花就无了……看起来这里是从1.16.5迁移到1.18.2的时候漏掉了XwX 如图↓ Bukkit1.16.5的HANDLED_TAGS / CatServer1.16.5的CUSTOM_TAGS ↓ Bukkit1.18.2的HANDLED_TAGS / CatServer1.18.2的CUSTOM_TAGS ↓ CatServer1.16.5的CUSTOM_TAGS / CatServer1.18.2的CUSTOM_TAGS ↓