85 Zeilen
4.7 KiB
Diff
85 Zeilen
4.7 KiB
Diff
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/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
|
|
}
|
|
}
|