From 4c7b109f5acebae206cfbd3e0b3d0dbfedc84ad7 Mon Sep 17 00:00:00 2001 From: XiaoMoMi <972454774@qq.com> Date: Wed, 8 Oct 2025 04:00:31 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E6=BD=9C=E5=BD=B1=E8=B4=9D?= =?UTF-8?q?=E5=92=8C=E6=94=B6=E7=BA=B3=E8=A2=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bukkit/item/ComponentTypes.java | 1 + .../bukkit/item/ModernNetworkItemHandler.java | 41 ++++++++++++++++++- .../plugin/network/BukkitNetworkManager.java | 2 +- gradle.properties | 4 +- 4 files changed, 44 insertions(+), 4 deletions(-) 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