Option to prevent data components copy in smithing recipes

This commit is contained in:
Jake Potrebic 2021-09-26 12:57:35 -07:00
parent ec4a7e5d87
commit c8e36cb205
3 changed files with 71 additions and 0 deletions

View file

@ -14,6 +14,7 @@ public class SmithingRecipe implements Recipe, Keyed {
private final ItemStack result;
private final RecipeChoice base;
private final RecipeChoice addition;
private final boolean copyDataComponents; // Paper
/**
* Create a smithing recipe to produce the specified result ItemStack.
@ -29,6 +30,23 @@ public class SmithingRecipe implements Recipe, Keyed {
*/
@Deprecated(since = "1.20.1")
public SmithingRecipe(@NotNull NamespacedKey key, @NotNull ItemStack result, @Nullable RecipeChoice base, @Nullable 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 copyDataComponents whether to copy the data components from the input base item to the output
* @deprecated use {@link SmithingTrimRecipe} or {@link SmithingTransformRecipe}
*/
@Deprecated
public SmithingRecipe(@NotNull NamespacedKey key, @NotNull ItemStack result, @Nullable RecipeChoice base, @Nullable RecipeChoice addition, boolean copyDataComponents) {
this.copyDataComponents = copyDataComponents;
// Paper end
this.key = key;
this.result = result;
this.base = base;
@ -66,4 +84,26 @@ public class SmithingRecipe implements Recipe, Keyed {
public NamespacedKey getKey() {
return this.key;
}
// Paper start
/**
* Whether to copy the NBT of the input base item to the output.
*
* @return true to copy the NBT (default for vanilla smithing recipes)
* @apiNote use {@link #willCopyDataComponents()}
*/
@org.jetbrains.annotations.ApiStatus.Obsolete(since = "1.20.5")
public boolean willCopyNbt() {
return this.willCopyDataComponents();
}
/**
* Whether to copy the data components of the input base item to the output.
*
* @return true to copy the data components (default for vanilla smithing recipes)
*/
public boolean willCopyDataComponents() {
return this.copyDataComponents;
}
// Paper end
}

View file

@ -24,6 +24,22 @@ public class SmithingTransformRecipe extends SmithingRecipe {
super(key, result, base, addition);
this.template = template;
}
// Paper start
/**
* 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 template The template item.
* @param base The base ingredient
* @param addition The addition ingredient
* @param copyDataComponents whether to copy the data components from the input base item to the output
*/
public SmithingTransformRecipe(@NotNull NamespacedKey key, @NotNull ItemStack result, @Nullable RecipeChoice template, @Nullable RecipeChoice base, @Nullable RecipeChoice addition, boolean copyDataComponents) {
super(key, result, base, addition, copyDataComponents);
this.template = template;
}
// Paper end
/**
* Get the template recipe item.

View file

@ -24,6 +24,21 @@ public class SmithingTrimRecipe extends SmithingRecipe implements ComplexRecipe
super(key, new ItemStack(Material.AIR), base, addition);
this.template = template;
}
// Paper start
/**
* Create a smithing recipe to produce the specified result ItemStack.
*
* @param key The unique recipe key
* @param template The template item.
* @param base The base ingredient
* @param addition The addition ingredient
* @param copyDataComponents whether to copy the data components from the input base item to the output
*/
public SmithingTrimRecipe(@NotNull NamespacedKey key, @NotNull RecipeChoice template, @NotNull RecipeChoice base, @NotNull RecipeChoice addition, boolean copyDataComponents) {
super(key, new ItemStack(Material.AIR), base, addition, copyDataComponents);
this.template = template;
}
// Paper end
/**
* Get the template recipe item.