From 02c7ce39040b64cdb7a60779a3e32ceee5d50ed3 Mon Sep 17 00:00:00 2001 From: XiaoMoMi Date: Thu, 13 Feb 2025 05:10:29 +0800 Subject: [PATCH] Clear placement info --- .../bukkit/item/recipe/BukkitRecipeManager.java | 9 ++++++++- .../craftengine/bukkit/util/Reflections.java | 17 +++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) 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 18be4b45d..65e4e8768 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 @@ -533,7 +533,11 @@ public class BukkitRecipeManager implements RecipeManager { .map(Optional::get) .toList(); - List ingredients = RecipeUtils.getIngredientsFromShapedRecipe(getNMSRecipe(id)); + Object shapedRecipe = getNMSRecipe(id); + if (VersionHelper.isVersionNewerThan1_21_2()) { + Reflections.field$ShapedRecipe$placementInfo.set(shapedRecipe, null); + } + List ingredients = RecipeUtils.getIngredientsFromShapedRecipe(shapedRecipe); injectIngredients(ingredients, actualIngredients); } @@ -541,6 +545,9 @@ public class BukkitRecipeManager implements RecipeManager { private static void injectShapelessRecipe(Key id, Recipe recipe) throws ReflectiveOperationException { List> actualIngredients = ((CustomShapelessRecipe) recipe).ingredients(); Object shapelessRecipe = getNMSRecipe(id); + if (VersionHelper.isVersionNewerThan1_21_2()) { + Reflections.field$ShapelessRecipe$placementInfo.set(shapelessRecipe, null); + } List ingredients = (List) Reflections.field$ShapelessRecipe$ingredients.get(shapelessRecipe); injectIngredients(ingredients, actualIngredients); } diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/util/Reflections.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/util/Reflections.java index d0536315e..8c68d1442 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/util/Reflections.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/util/Reflections.java @@ -4007,6 +4007,23 @@ public class Reflections { ) ); + public static final Class clazz$PlacementInfo = requireNonNull( + ReflectionUtils.getClazz( + BukkitReflectionUtils.assembleMCClass("world.item.crafting.PlacementInfo") + ) + ); + + // 1.21.2+ + public static final Field field$ShapelessRecipe$placementInfo = + ReflectionUtils.getDeclaredField( + clazz$ShapelessRecipe, clazz$PlacementInfo, 0 + ); + + public static final Field field$ShapedRecipe$placementInfo = + ReflectionUtils.getDeclaredField( + clazz$ShapedRecipe, clazz$PlacementInfo, 0 + ); + public static final Field field$ShapelessRecipe$ingredients = Optional.ofNullable(ReflectionUtils.getDeclaredField(clazz$ShapelessRecipe, List.class, 0)) .orElse(ReflectionUtils.getDeclaredField(clazz$ShapelessRecipe, clazz$NonNullList, 0));