Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Option to prevent NBT copy in smithing recipes (#6671)
- Loading branch information
1 parent
8ee9bdd
commit fce7905
Showing
2 changed files
with
140 additions
and
0 deletions.
There are no files selected for viewing
56 changes: 56 additions & 0 deletions
56
patches/api/0332-Option-to-prevent-NBT-copy-in-smithing-recipes.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,56 @@ | ||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 | ||
From: Jake Potrebic <jake.m.potrebic@gmail.com> | ||
Date: Sun, 26 Sep 2021 12:57:35 -0700 | ||
Subject: [PATCH] Option to prevent NBT copy in smithing recipes | ||
|
||
|
||
diff --git a/src/main/java/org/bukkit/inventory/SmithingRecipe.java b/src/main/java/org/bukkit/inventory/SmithingRecipe.java | ||
index af04071d37e70b8cc9837d57477c8493be8afb9f..00000f1399b053bb3c7b6d4792559b630d414b81 100644 | ||
--- a/src/main/java/org/bukkit/inventory/SmithingRecipe.java | ||
+++ b/src/main/java/org/bukkit/inventory/SmithingRecipe.java | ||
@@ -13,6 +13,7 @@ public class SmithingRecipe implements Recipe, Keyed { | ||
private final ItemStack result; | ||
private final RecipeChoice base; | ||
private final RecipeChoice addition; | ||
+ private final boolean copyNbt; // Paper | ||
|
||
/** | ||
* Create a smithing recipe to produce the specified result ItemStack. | ||
@@ -23,6 +24,21 @@ public class SmithingRecipe implements Recipe, Keyed { | ||
* @param addition The addition ingredient | ||
*/ | ||
public SmithingRecipe(@NotNull NamespacedKey key, @NotNull ItemStack result, @NotNull RecipeChoice base, @NotNull RecipeChoice addition) { | ||
+ // Paper start | ||
+ this(key, result, base, addition, true); | ||
+ } | ||
+ /** | ||
+ * Create a smithing recipe to produce the specified result ItemStack. | ||
+ * | ||
+ * @param key The unique recipe key | ||
+ * @param result The item you want the recipe to create. | ||
+ * @param base The base ingredient | ||
+ * @param addition The addition ingredient | ||
+ * @param copyNbt whether to copy the nbt from the input base item to the output | ||
+ */ | ||
+ public SmithingRecipe(@NotNull NamespacedKey key, @NotNull ItemStack result, @NotNull RecipeChoice base, @NotNull RecipeChoice addition, boolean copyNbt) { | ||
+ this.copyNbt = copyNbt; | ||
+ // Paper end | ||
this.key = key; | ||
this.result = result; | ||
this.base = base; | ||
@@ -60,4 +76,15 @@ public class SmithingRecipe implements Recipe, Keyed { | ||
public NamespacedKey getKey() { | ||
return this.key; | ||
} | ||
+ | ||
+ // Paper start | ||
+ /** | ||
+ * Whether or not to copy the NBT of the input base item to the output. | ||
+ * | ||
+ * @return true to copy the NBT (default for vanilla smithing recipes) | ||
+ */ | ||
+ public boolean willCopyNbt() { | ||
+ return copyNbt; | ||
+ } | ||
+ // Paper end | ||
} |
84 changes: 84 additions & 0 deletions
84
patches/server/0809-Option-to-prevent-NBT-copy-in-smithing-recipes.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,84 @@ | ||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 | ||
From: Jake Potrebic <jake.m.potrebic@gmail.com> | ||
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/UpgradeRecipe.java b/src/main/java/net/minecraft/world/item/crafting/UpgradeRecipe.java | ||
index 21e9ce106cb7c1cdeabbad38a83d2439570e452b..88d99451748bfbd2cd24b1f29971a275dc6df597 100644 | ||
--- a/src/main/java/net/minecraft/world/item/crafting/UpgradeRecipe.java | ||
+++ b/src/main/java/net/minecraft/world/item/crafting/UpgradeRecipe.java | ||
@@ -26,8 +26,15 @@ public class UpgradeRecipe implements net.minecraft.world.item.crafting.Recipe<C | ||
final Ingredient addition; | ||
final ItemStack result; | ||
private final ResourceLocation id; | ||
+ final boolean copyNbt; // Paper | ||
|
||
public UpgradeRecipe(ResourceLocation id, Ingredient base, Ingredient addition, ItemStack result) { | ||
+ // Paper start | ||
+ this(id, base, addition, result, true); | ||
+ } | ||
+ public UpgradeRecipe(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 UpgradeRecipe implements net.minecraft.world.item.crafting.Recipe<C | ||
@Override | ||
public ItemStack assemble(Container inventory) { | ||
ItemStack itemstack = this.result.copy(); | ||
+ if (copyNbt) { // Paper - copy nbt conditionally | ||
CompoundTag nbttagcompound = inventory.getItem(0).getTag(); | ||
|
||
if (nbttagcompound != null) { | ||
itemstack.setTag(nbttagcompound.copy()); | ||
} | ||
+ } // Paper | ||
|
||
return itemstack; | ||
} | ||
@@ -97,7 +106,7 @@ public class UpgradeRecipe implements net.minecraft.world.item.crafting.Recipe<C | ||
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 0353ba44015cb72efa3892c527568902c9fa626b..bfd6b859fcfed89d0ebaca5200b7ca6f5d353d04 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.UpgradeRecipe(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.UpgradeRecipe(CraftNamespacedKey.toMinecraft(this.getKey()), toNMS(this.getBase(), true), toNMS(this.getAddition(), true), CraftItemStack.asNMSCopy(result), this.willCopyNbt())); // Paper | ||
} | ||
} |