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

fix(bukkit): 修复1.21.6上配方和家具异常

This commit is contained in:
jhqwqmc
2025-06-16 19:09:31 +08:00
parent 3f6c157e65
commit 4a9b595db7
4 changed files with 31 additions and 8 deletions

View File

@@ -1,6 +1,5 @@
package net.momirealms.craftengine.bukkit.item;
import com.saicone.rtag.item.ItemTagStream;
import net.momirealms.craftengine.bukkit.item.behavior.BucketItemBehavior;
import net.momirealms.craftengine.bukkit.item.behavior.FlintAndSteelItemBehavior;
import net.momirealms.craftengine.bukkit.item.behavior.WaterBucketItemBehavior;
@@ -13,7 +12,6 @@ import net.momirealms.craftengine.bukkit.plugin.BukkitCraftEngine;
import net.momirealms.craftengine.bukkit.plugin.reflection.minecraft.CoreReflections;
import net.momirealms.craftengine.bukkit.plugin.reflection.minecraft.MBuiltInRegistries;
import net.momirealms.craftengine.bukkit.plugin.reflection.minecraft.MRegistries;
import net.momirealms.craftengine.bukkit.plugin.reflection.minecraft.MRegistryOps;
import net.momirealms.craftengine.bukkit.util.ItemUtils;
import net.momirealms.craftengine.bukkit.util.KeyUtils;
import net.momirealms.craftengine.core.entity.player.Player;
@@ -26,7 +24,6 @@ import net.momirealms.craftengine.core.registry.BuiltInRegistries;
import net.momirealms.craftengine.core.registry.Holder;
import net.momirealms.craftengine.core.registry.WritableRegistry;
import net.momirealms.craftengine.core.util.Key;
import net.momirealms.craftengine.core.util.ResourceConfigUtils;
import net.momirealms.craftengine.core.util.ResourceKey;
import net.momirealms.craftengine.core.util.VersionHelper;
import org.bukkit.Bukkit;
@@ -141,7 +138,7 @@ public class BukkitItemManager extends AbstractItemManager<ItemStack> {
@Override
public Item<ItemStack> fromByteArray(byte[] bytes) {
return this.factory.wrap(ItemTagStream.INSTANCE.fromBytes(bytes));
return this.factory.wrap(ItemStack.deserializeBytes(bytes));
}
@Override

View File

@@ -1,8 +1,6 @@
package net.momirealms.craftengine.bukkit.item.factory;
import com.google.gson.JsonElement;
import com.saicone.rtag.item.ItemTagStream;
import net.momirealms.craftengine.bukkit.item.ComponentItemWrapper;
import net.momirealms.craftengine.bukkit.plugin.reflection.minecraft.CoreReflections;
import net.momirealms.craftengine.bukkit.util.ItemTags;
import net.momirealms.craftengine.core.item.ItemFactory;
@@ -50,7 +48,7 @@ public abstract class BukkitItemFactory<W extends ItemWrapper<ItemStack>> extend
@Override
protected byte[] toByteArray(W item) {
return ItemTagStream.INSTANCE.toBytes(item.getItem());
return item.getItem().serializeAsBytes();
}
@Override

View File

@@ -11,6 +11,7 @@ import net.momirealms.craftengine.bukkit.plugin.BukkitCraftEngine;
import net.momirealms.craftengine.bukkit.plugin.reflection.bukkit.CraftBukkitReflections;
import net.momirealms.craftengine.bukkit.plugin.reflection.minecraft.CoreReflections;
import net.momirealms.craftengine.bukkit.plugin.reflection.minecraft.MRegistries;
import net.momirealms.craftengine.bukkit.plugin.reflection.minecraft.MRegistryOps;
import net.momirealms.craftengine.bukkit.util.KeyUtils;
import net.momirealms.craftengine.bukkit.util.MaterialUtils;
import net.momirealms.craftengine.bukkit.util.RecipeUtils;
@@ -666,7 +667,14 @@ public class BukkitRecipeManager extends AbstractRecipeManager<ItemStack> {
jsonObject.addProperty("id", result.id());
jsonObject.addProperty("count", result.count());
jsonObject.add("components", result.components());
Object nmsStack = ItemObject.newItem(TagCompound.newTag(jsonObject.toString()));
Object nmsTag = TagCompound.newTag(jsonObject.toString());
Object nmsStack;
if (VersionHelper.isOrAbove1_21_6()) {
nmsStack = CoreReflections.instance$ItemStack$CODEC.parse(MRegistryOps.NBT, nmsTag)
.resultOrPartial((itemId) -> plugin.logger().severe("Tried to load invalid item: '" + itemId + "'")).orElse(null);
} else {
nmsStack = ItemObject.newItem(nmsTag);
}
try {
itemStack = FastNMS.INSTANCE.method$CraftItemStack$asCraftMirror(nmsStack);
} catch (Exception e) {

View File

@@ -2,6 +2,7 @@ package net.momirealms.craftengine.bukkit.plugin.reflection.minecraft;
import com.google.common.collect.ImmutableList;
import com.google.gson.JsonElement;
import com.mojang.serialization.Codec;
import com.mojang.serialization.DynamicOps;
import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelFuture;
@@ -3323,4 +3324,23 @@ public final class CoreReflections {
"world.inventory.EnchantmentMenu"
)
);
// 1.20.5+
public static final Field field$ItemStack$CODEC = ReflectionUtils.getDeclaredField(
clazz$ItemStack, "CODEC", "b"
);
public static final Codec<?> instance$ItemStack$CODEC;
static {
try {
if (VersionHelper.isOrAbove1_20_5()) {
instance$ItemStack$CODEC = (Codec<?>) field$ItemStack$CODEC.get(null);
} else {
instance$ItemStack$CODEC = null;
}
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}