From d736e466b337199c0f0b5589cb644af8bf9d37d6 Mon Sep 17 00:00:00 2001 From: XiaoMoMi Date: Mon, 14 Jul 2025 16:26:35 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E6=94=AF=E6=8C=81=E4=BD=8E=E7=89=88?= =?UTF-8?q?=E6=9C=AC=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 From 45464da22a6be0d2172a890799051f6c0c2e864d Mon Sep 17 00:00:00 2001 From: XiaoMoMi Date: Mon, 14 Jul 2025 17:03:23 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E4=BF=AE=E5=A4=8D?= 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 ------------------- 2 files changed, 3 insertions(+), 31 deletions(-) delete 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 6058717f7..975c2a42d 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 @@ -371,13 +371,14 @@ public class BukkitRecipeManager extends AbstractRecipeManager { @Override protected void registerPlatformRecipe(Key id, Recipe recipe) { if (recipe instanceof CustomBrewingRecipe brewingRecipe) { + if (!VersionHelper.isOrAbove1_20_2()) return; PotionMix potionMix = new PotionMix(new NamespacedKey(id.namespace(), id.value()), brewingRecipe.result(ItemBuildContext.EMPTY), - new PredicateChoice(container -> { + PotionMix.createPredicateChoice(container -> { Item wrapped = this.plugin.itemManager().wrap(container); return brewingRecipe.container().test(new UniqueIdItem<>(wrapped.recipeIngredientId(), wrapped)); }), - new PredicateChoice(ingredient -> { + PotionMix.createPredicateChoice(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 deleted file mode 100644 index f2cfa6c20..000000000 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/recipe/PredicateChoice.java +++ /dev/null @@ -1,29 +0,0 @@ -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); - } -}