From d736e466b337199c0f0b5589cb644af8bf9d37d6 Mon Sep 17 00:00:00 2001 From: XiaoMoMi Date: Mon, 14 Jul 2025 16:26:35 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=AF=E6=8C=81=E4=BD=8E=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E7=9A=84=E9=85=BF=E9=80=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../item/recipe/BukkitRecipeManager.java | 5 ++-- .../bukkit/item/recipe/PredicateChoice.java | 29 +++++++++++++++++++ .../plugin/network/PacketConsumers.java | 9 ++++-- gradle.properties | 2 +- 4 files changed, 39 insertions(+), 6 deletions(-) create mode 100644 bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/recipe/PredicateChoice.java 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 ac76df75b..6058717f7 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 @@ -274,7 +274,6 @@ public class BukkitRecipeManager extends AbstractRecipeManager { private Object stolenFeatureFlagSet; // Some delayed tasks on main thread private final List delayedTasksOnMainThread = new ArrayList<>(); - private final Map brewingRecipes = new HashMap<>(); public BukkitRecipeManager(BukkitCraftEngine plugin) { instance = this; @@ -374,11 +373,11 @@ public class BukkitRecipeManager extends AbstractRecipeManager { if (recipe instanceof CustomBrewingRecipe brewingRecipe) { PotionMix potionMix = new PotionMix(new NamespacedKey(id.namespace(), id.value()), brewingRecipe.result(ItemBuildContext.EMPTY), - PotionMix.createPredicateChoice(container -> { + new PredicateChoice(container -> { Item wrapped = this.plugin.itemManager().wrap(container); return brewingRecipe.container().test(new UniqueIdItem<>(wrapped.recipeIngredientId(), wrapped)); }), - PotionMix.createPredicateChoice(ingredient -> { + new PredicateChoice(ingredient -> { Item wrapped = this.plugin.itemManager().wrap(ingredient); return brewingRecipe.ingredient().test(new UniqueIdItem<>(wrapped.recipeIngredientId(), wrapped)); }) diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/recipe/PredicateChoice.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/recipe/PredicateChoice.java new file mode 100644 index 000000000..f2cfa6c20 --- /dev/null +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/recipe/PredicateChoice.java @@ -0,0 +1,29 @@ +package net.momirealms.craftengine.bukkit.item.recipe; + +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.RecipeChoice; +import org.jetbrains.annotations.NotNull; + +import java.util.function.Predicate; + +public record PredicateChoice(Predicate predicate) implements RecipeChoice { + + @Override + public @NotNull RecipeChoice clone() { + try { + return (PredicateChoice) super.clone(); + } catch (final CloneNotSupportedException ex) { + throw new AssertionError(ex); + } + } + + @Override + public @NotNull ItemStack getItemStack() { + throw new UnsupportedOperationException("PredicateChoice doesn't support getItemStack()"); + } + + @Override + public boolean test(@NotNull ItemStack itemStack) { + return this.predicate.test(itemStack); + } +} diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/PacketConsumers.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/PacketConsumers.java index e9bc5537b..61622c379 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/PacketConsumers.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/PacketConsumers.java @@ -2219,8 +2219,13 @@ public class PacketConsumers { FriendlyByteBuf buf = event.getBuffer(); Object friendlyBuf = FastNMS.INSTANCE.constructor$FriendlyByteBuf(buf); short slotNum = buf.readShort(); - ItemStack itemStack = VersionHelper.isOrAbove1_20_5() ? - FastNMS.INSTANCE.method$FriendlyByteBuf$readUntrustedItem(friendlyBuf) : FastNMS.INSTANCE.method$FriendlyByteBuf$readItem(friendlyBuf); + ItemStack itemStack; + try { + itemStack = VersionHelper.isOrAbove1_20_5() ? + FastNMS.INSTANCE.method$FriendlyByteBuf$readUntrustedItem(friendlyBuf) : FastNMS.INSTANCE.method$FriendlyByteBuf$readItem(friendlyBuf); + } catch (Exception e) { + return; + } BukkitItemManager.instance().c2s(itemStack).ifPresent((newItemStack) -> { event.setChanged(true); buf.clear(); diff --git a/gradle.properties b/gradle.properties index fd689d2ad..15f69b2fb 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.60 +project_version=0.0.60.1 config_version=41 lang_version=22 project_group=net.momirealms