From 4a9b595db7e047ec9ec4b36bcd165bbb418d62f9 Mon Sep 17 00:00:00 2001 From: jhqwqmc <2110242767@qq.com> Date: Mon, 16 Jun 2025 19:09:31 +0800 Subject: [PATCH] =?UTF-8?q?fix(bukkit):=20=E4=BF=AE=E5=A4=8D1.21.6?= =?UTF-8?q?=E4=B8=8A=E9=85=8D=E6=96=B9=E5=92=8C=E5=AE=B6=E5=85=B7=E5=BC=82?= =?UTF-8?q?=E5=B8=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bukkit/item/BukkitItemManager.java | 5 +---- .../item/factory/BukkitItemFactory.java | 4 +--- .../item/recipe/BukkitRecipeManager.java | 10 +++++++++- .../reflection/minecraft/CoreReflections.java | 20 +++++++++++++++++++ 4 files changed, 31 insertions(+), 8 deletions(-) diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/BukkitItemManager.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/BukkitItemManager.java index a74547ea7..20c326586 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/BukkitItemManager.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/BukkitItemManager.java @@ -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 { @Override public Item fromByteArray(byte[] bytes) { - return this.factory.wrap(ItemTagStream.INSTANCE.fromBytes(bytes)); + return this.factory.wrap(ItemStack.deserializeBytes(bytes)); } @Override diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/factory/BukkitItemFactory.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/factory/BukkitItemFactory.java index 2d283d73f..5cf774fd7 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/factory/BukkitItemFactory.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/factory/BukkitItemFactory.java @@ -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> extend @Override protected byte[] toByteArray(W item) { - return ItemTagStream.INSTANCE.toBytes(item.getItem()); + return item.getItem().serializeAsBytes(); } @Override diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/recipe/BukkitRecipeManager.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/recipe/BukkitRecipeManager.java index f37e0118c..7956395c6 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/recipe/BukkitRecipeManager.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/recipe/BukkitRecipeManager.java @@ -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 { 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) { diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/reflection/minecraft/CoreReflections.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/reflection/minecraft/CoreReflections.java index ef984cf72..c8deb96cd 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/reflection/minecraft/CoreReflections.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/reflection/minecraft/CoreReflections.java @@ -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); + } + } }