mirror of
https://github.com/Xiao-MoMi/craft-engine.git
synced 2025-12-19 15:09:15 +00:00
修正潜影贝和收纳袋
This commit is contained in:
@@ -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() {}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user