From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Jake Potrebic Date: Sun, 26 Sep 2021 12:57:28 -0700 Subject: [PATCH] Option to prevent NBT copy in smithing recipes diff --git a/src/main/java/net/minecraft/world/item/crafting/LegacyUpgradeRecipe.java b/src/main/java/net/minecraft/world/item/crafting/LegacyUpgradeRecipe.java index 9c8ca33327e2e54c1c9d7f5a3a9a6648b5422737..7292702141a216a426a3acd3561a3927b0584708 100644 --- a/src/main/java/net/minecraft/world/item/crafting/LegacyUpgradeRecipe.java +++ b/src/main/java/net/minecraft/world/item/crafting/LegacyUpgradeRecipe.java @@ -26,8 +26,15 @@ public class LegacyUpgradeRecipe implements SmithingRecipe { final Ingredient addition; final ItemStack result; private final ResourceLocation id; + final boolean copyNBT; // Paper public LegacyUpgradeRecipe(ResourceLocation id, Ingredient base, Ingredient addition, ItemStack result) { + // Paper start + this(id, base, addition, result, true); + } + public LegacyUpgradeRecipe(ResourceLocation id, Ingredient base, Ingredient addition, ItemStack result, boolean copyNBT) { + this.copyNBT = copyNBT; + // Paper end this.id = id; this.base = base; this.addition = addition; @@ -42,11 +49,13 @@ public class LegacyUpgradeRecipe implements SmithingRecipe { @Override public ItemStack assemble(Container inventory, RegistryAccess registryManager) { ItemStack itemstack = this.result.copy(); + if (this.copyNBT) { // Paper - copy nbt conditionally CompoundTag nbttagcompound = inventory.getItem(0).getTag(); if (nbttagcompound != null) { itemstack.setTag(nbttagcompound.copy()); } + } // Paper return itemstack; } @@ -98,7 +107,7 @@ public class LegacyUpgradeRecipe implements SmithingRecipe { public Recipe toBukkitRecipe() { CraftItemStack result = CraftItemStack.asCraftMirror(this.result); - CraftSmithingRecipe recipe = new CraftSmithingRecipe(CraftNamespacedKey.fromMinecraft(this.id), result, CraftRecipe.toBukkit(this.base), CraftRecipe.toBukkit(this.addition)); + CraftSmithingRecipe recipe = new CraftSmithingRecipe(CraftNamespacedKey.fromMinecraft(this.id), result, CraftRecipe.toBukkit(this.base), CraftRecipe.toBukkit(this.addition), this.copyNbt); // Paper return recipe; } diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftSmithingRecipe.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftSmithingRecipe.java index d3e149d9d9b514f0d5b06799cc5dc9b790de5085..1c133200eb9efac6ae6eef553e5a69d3d3a8df83 100644 --- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftSmithingRecipe.java +++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftSmithingRecipe.java @@ -8,15 +8,21 @@ import org.bukkit.inventory.RecipeChoice; import org.bukkit.inventory.SmithingRecipe; public class CraftSmithingRecipe extends SmithingRecipe implements CraftRecipe { + @Deprecated // Paper public CraftSmithingRecipe(NamespacedKey key, ItemStack result, RecipeChoice base, RecipeChoice addition) { super(key, result, base, addition); } + // Paper start + public CraftSmithingRecipe(NamespacedKey key, ItemStack result, RecipeChoice base, RecipeChoice addition, boolean copyNbt) { + super(key, result, base, addition, copyNbt); + } + // Paper end public static CraftSmithingRecipe fromBukkitRecipe(SmithingRecipe recipe) { if (recipe instanceof CraftSmithingRecipe) { return (CraftSmithingRecipe) recipe; } - CraftSmithingRecipe ret = new CraftSmithingRecipe(recipe.getKey(), recipe.getResult(), recipe.getBase(), recipe.getAddition()); + CraftSmithingRecipe ret = new CraftSmithingRecipe(recipe.getKey(), recipe.getResult(), recipe.getBase(), recipe.getAddition(), recipe.willCopyNbt()); // Paper return ret; } @@ -24,6 +30,6 @@ public class CraftSmithingRecipe extends SmithingRecipe implements CraftRecipe { public void addToCraftingManager() { ItemStack result = this.getResult(); - MinecraftServer.getServer().getRecipeManager().addRecipe(new net.minecraft.world.item.crafting.LegacyUpgradeRecipe(CraftNamespacedKey.toMinecraft(this.getKey()), toNMS(this.getBase(), true), toNMS(this.getAddition(), true), CraftItemStack.asNMSCopy(result))); + MinecraftServer.getServer().getRecipeManager().addRecipe(new net.minecraft.world.item.crafting.LegacyUpgradeRecipe(CraftNamespacedKey.toMinecraft(this.getKey()), toNMS(this.getBase(), true), toNMS(this.getAddition(), true), CraftItemStack.asNMSCopy(result), this.willCopyNbt())); // Paper } }