From ac6a72989f4f3fe763131ecf735207e7c763c3e2 Mon Sep 17 00:00:00 2001 From: XiaoMoMi Date: Sun, 13 Jul 2025 04:03:48 +0800 Subject: [PATCH] =?UTF-8?q?Trim=E9=80=9A=E8=BF=87=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../craftengine/bukkit/item/BukkitItemManager.java | 5 +++-- .../craftengine/bukkit/item/recipe/BukkitRecipeManager.java | 2 +- .../bukkit/plugin/reflection/minecraft/CoreReflections.java | 4 +++- .../core/item/recipe/CustomSmithingTrimRecipe.java | 2 +- 4 files changed, 8 insertions(+), 5 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 c612d9bec..2158202eb 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 @@ -402,7 +402,7 @@ public class BukkitItemManager extends AbstractItemManager { public Item applyTrim(Item base, Item addition, Item template, Key pattern) { Optional optionalMaterial = FastNMS.INSTANCE.method$TrimMaterials$getFromIngredient(addition.getLiteralObject()); Optional optionalPattern = VersionHelper.isOrAbove1_21_5() ? - FastNMS.INSTANCE.method$Registry$getHolderByResourceLocation(FastNMS.INSTANCE.method$RegistryAccess$lookupOrThrow(FastNMS.INSTANCE.registryAccess(), MRegistries.TRIM_MATERIAL), KeyUtils.toResourceLocation(pattern)) : + FastNMS.INSTANCE.method$Registry$getHolderByResourceLocation(FastNMS.INSTANCE.method$RegistryAccess$lookupOrThrow(FastNMS.INSTANCE.registryAccess(), MRegistries.TRIM_PATTERN), KeyUtils.toResourceLocation(pattern)) : FastNMS.INSTANCE.method$TrimPatterns$getFromTemplate(template.getLiteralObject()); if (optionalMaterial.isPresent() && optionalPattern.isPresent()) { Object armorTrim = FastNMS.INSTANCE.constructor$ArmorTrim(optionalMaterial.get(), optionalPattern.get()); @@ -427,12 +427,13 @@ public class BukkitItemManager extends AbstractItemManager { newItem.setExactComponent(ComponentKeys.TRIM, armorTrim); } else { try { - CoreReflections.method$ArmorTrim$setTrim.invoke(null, FastNMS.INSTANCE.registryAccess(), base.getLiteralObject(), armorTrim); + CoreReflections.method$ArmorTrim$setTrim.invoke(null, FastNMS.INSTANCE.registryAccess(), newItem.getLiteralObject(), armorTrim); } catch (ReflectiveOperationException e) { this.plugin.logger().warn("Failed to set armor trim", e); return this.emptyItem; } } + return newItem; } return this.emptyItem; } 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 d732280d4..3968ed84b 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 @@ -965,7 +965,7 @@ public class BukkitRecipeManager extends AbstractRecipeManager { toMinecraftIngredient(recipe.template()), toMinecraftIngredient(recipe.base()), toMinecraftIngredient(recipe.addition()), - FastNMS.INSTANCE.method$Registry$getHolderByResourceLocation(registry, KeyUtils.toResourceLocation(recipe.pattern())) + FastNMS.INSTANCE.method$Registry$getHolderByResourceLocation(registry, KeyUtils.toResourceLocation(recipe.pattern())).orElseThrow(() -> new RuntimeException("Pattern " + recipe.pattern() + " doesn't exist.")) ); } else if (VersionHelper.isOrAbove1_21_2()) { return CoreReflections.constructor$SmithingTrimRecipe.newInstance( 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 9b876328a..927ff1e16 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 @@ -2305,6 +2305,8 @@ public final class CoreReflections { public static final Constructor constructor$SmithingTrimRecipe = requireNonNull( VersionHelper.isOrAbove1_21_5() ? ReflectionUtils.getConstructor(clazz$SmithingTrimRecipe, clazz$Ingredient, clazz$Ingredient, clazz$Ingredient, clazz$Holder) : + VersionHelper.isOrAbove1_21_2() ? + ReflectionUtils.getConstructor(clazz$SmithingTrimRecipe, Optional.class, Optional.class, Optional.class) : VersionHelper.isOrAbove1_20_2() ? ReflectionUtils.getConstructor(clazz$SmithingTrimRecipe, clazz$Ingredient, clazz$Ingredient, clazz$Ingredient) : ReflectionUtils.getConstructor(clazz$SmithingTrimRecipe, clazz$ResourceLocation, clazz$Ingredient, clazz$Ingredient, clazz$Ingredient) @@ -3787,7 +3789,7 @@ public final class CoreReflections { public static final Class clazz$ArmorTrim = requireNonNull( ReflectionUtils.getClazz( VersionHelper.isOrAbove1_21_2() ? - BukkitReflectionUtils.assembleCBClass("world.item.equipment.trim.ArmorTrim") : + BukkitReflectionUtils.assembleMCClass("world.item.equipment.trim.ArmorTrim") : BukkitReflectionUtils.assembleMCClass("world.item.armortrim.ArmorTrim") ) ); diff --git a/core/src/main/java/net/momirealms/craftengine/core/item/recipe/CustomSmithingTrimRecipe.java b/core/src/main/java/net/momirealms/craftengine/core/item/recipe/CustomSmithingTrimRecipe.java index d643b0274..dd9382a5c 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/item/recipe/CustomSmithingTrimRecipe.java +++ b/core/src/main/java/net/momirealms/craftengine/core/item/recipe/CustomSmithingTrimRecipe.java @@ -41,7 +41,7 @@ public class CustomSmithingTrimRecipe implements Recipe { @Override public T assemble(RecipeInput input, ItemBuildContext context) { SmithingInput smithingInput = (SmithingInput) input; - Item processed = (Item) CraftEngine.instance().itemManager().applyTrim((Item) smithingInput.base(), (Item) smithingInput.addition(), (Item) smithingInput.template(), this.pattern); + Item processed = (Item) CraftEngine.instance().itemManager().applyTrim((Item) smithingInput.base().item(), (Item) smithingInput.addition().item(), (Item) smithingInput.template().item(), this.pattern); return processed.getItem(); }