diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/ComponentTypes.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/ComponentTypes.java index 079dae018..f1e8c09b4 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/ComponentTypes.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/ComponentTypes.java @@ -31,6 +31,7 @@ public class ComponentTypes { public static final Object DEATH_PROTECTION = getComponentType(ComponentKeys.DEATH_PROTECTION); public static final Object FIREWORK_EXPLOSION = getComponentType(ComponentKeys.FIREWORK_EXPLOSION); public static final Object BUNDLE_CONTENTS = getComponentType(ComponentKeys.BUNDLE_CONTENTS); + public static final Object CONTAINER = getComponentType(ComponentKeys.CONTAINER); private ComponentTypes() {} 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 36c16d889..107c11a60 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 @@ -18,6 +18,7 @@ import net.momirealms.sparrow.nbt.CompoundTag; import net.momirealms.sparrow.nbt.ListTag; import net.momirealms.sparrow.nbt.StringTag; import net.momirealms.sparrow.nbt.Tag; +import org.bukkit.block.Block; import org.bukkit.inventory.ItemStack; import java.util.ArrayList; @@ -31,6 +32,26 @@ public final class ModernNetworkItemHandler implements NetworkItemHandler c2s(Item wrapped) { + if (wrapped.hasComponent(ComponentTypes.BUNDLE_CONTENTS)) { + Object bundleContents = wrapped.getExactComponent(ComponentTypes.BUNDLE_CONTENTS); + List newItems = new ArrayList<>(); + for (Object previousItem : FastNMS.INSTANCE.method$BundleContents$items(bundleContents)) { + ItemStack itemStack = BukkitItemManager.instance().c2s(FastNMS.INSTANCE.method$CraftItemStack$asCraftMirror(previousItem)); + newItems.add(FastNMS.INSTANCE.field$CraftItemStack$handle(itemStack)); + } + wrapped.setExactComponent(ComponentTypes.BUNDLE_CONTENTS, FastNMS.INSTANCE.constructor$BundleContents(newItems)); + } + + if (wrapped.hasComponent(ComponentTypes.CONTAINER)) { + Object containerContents = wrapped.getExactComponent(ComponentTypes.CONTAINER); + List newItems = new ArrayList<>(); + for (Object previousItem : FastNMS.INSTANCE.field$ItemContainerContents$items(containerContents)) { + ItemStack itemStack = BukkitItemManager.instance().c2s(FastNMS.INSTANCE.method$CraftItemStack$asCraftMirror(previousItem)); + newItems.add(FastNMS.INSTANCE.field$CraftItemStack$handle(itemStack)); + } + wrapped.setExactComponent(ComponentTypes.CONTAINER, FastNMS.INSTANCE.method$ItemContainerContents$fromItems(newItems)); + } + // 先尝试恢复client-bound-material Optional> optionalCustomItem = wrapped.getCustomItem(); if (optionalCustomItem.isPresent()) { @@ -67,7 +88,25 @@ public final class ModernNetworkItemHandler implements NetworkItemHandler s2c(Item wrapped, Player player) { - // todo 处理bundle和container + if (wrapped.hasComponent(ComponentTypes.BUNDLE_CONTENTS)) { + Object bundleContents = wrapped.getExactComponent(ComponentTypes.BUNDLE_CONTENTS); + List newItems = new ArrayList<>(); + for (Object previousItem : FastNMS.INSTANCE.method$BundleContents$items(bundleContents)) { + ItemStack itemStack = BukkitItemManager.instance().s2c(FastNMS.INSTANCE.method$CraftItemStack$asCraftMirror(previousItem), player); + newItems.add(FastNMS.INSTANCE.field$CraftItemStack$handle(itemStack)); + } + wrapped.setExactComponent(ComponentTypes.BUNDLE_CONTENTS, FastNMS.INSTANCE.constructor$BundleContents(newItems)); + } + + if (wrapped.hasComponent(ComponentTypes.CONTAINER)) { + Object containerContents = wrapped.getExactComponent(ComponentTypes.CONTAINER); + List newItems = new ArrayList<>(); + for (Object previousItem : FastNMS.INSTANCE.field$ItemContainerContents$items(containerContents)) { + ItemStack itemStack = BukkitItemManager.instance().s2c(FastNMS.INSTANCE.method$CraftItemStack$asCraftMirror(previousItem), player); + newItems.add(FastNMS.INSTANCE.field$CraftItemStack$handle(itemStack)); + } + wrapped.setExactComponent(ComponentTypes.CONTAINER, FastNMS.INSTANCE.method$ItemContainerContents$fromItems(newItems)); + } // todo 处理book 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 37e785884..4cf2c974a 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 @@ -3320,7 +3320,7 @@ public class BukkitNetworkManager implements NetworkManager, Listener, PluginMes } catch (Exception e) { return; } - itemStack = BukkitItemManager.instance().s2c(itemStack, serverPlayer); + itemStack = BukkitItemManager.instance().c2s(itemStack); event.setChanged(true); buf.clear(); diff --git a/gradle.properties b/gradle.properties index 59a3bb79c..f60be246d 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ org.gradle.jvmargs=-Xmx1G # Project settings # Rule: [major update].[feature update].[bug fix] -project_version=0.0.64.1 +project_version=0.0.64.2 config_version=47 lang_version=34 project_group=net.momirealms @@ -50,7 +50,7 @@ byte_buddy_version=1.17.5 ahocorasick_version=0.6.3 snake_yaml_version=2.5 anti_grief_version=1.0.2 -nms_helper_version=1.0.106 +nms_helper_version=1.0.107 evalex_version=3.5.0 reactive_streams_version=1.0.4 amazon_awssdk_version=2.34.5