9
0
mirror of https://github.com/Xiao-MoMi/craft-engine.git synced 2025-12-19 15:09:15 +00:00

修正潜影贝和收纳袋

This commit is contained in:
XiaoMoMi
2025-10-08 04:00:31 +08:00
parent 652a9db91c
commit 4c7b109f5a
4 changed files with 44 additions and 4 deletions

View File

@@ -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() {}

View File

@@ -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<ItemSt
@Override
public Item<ItemStack> c2s(Item<ItemStack> wrapped) {
if (wrapped.hasComponent(ComponentTypes.BUNDLE_CONTENTS)) {
Object bundleContents = wrapped.getExactComponent(ComponentTypes.BUNDLE_CONTENTS);
List<Object> 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<Object> 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<CustomItem<ItemStack>> optionalCustomItem = wrapped.getCustomItem();
if (optionalCustomItem.isPresent()) {
@@ -67,7 +88,25 @@ public final class ModernNetworkItemHandler implements NetworkItemHandler<ItemSt
@Override
public Item<ItemStack> s2c(Item<ItemStack> wrapped, Player player) {
// todo 处理bundle和container
if (wrapped.hasComponent(ComponentTypes.BUNDLE_CONTENTS)) {
Object bundleContents = wrapped.getExactComponent(ComponentTypes.BUNDLE_CONTENTS);
List<Object> 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<Object> 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

View File

@@ -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();

View File

@@ -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