Jump to content
Search In
  • More options...
Find results that contain...
Find results in...

How do I add nbt data to an item when outputted from a custom smithing table recipe? 1.16.5


Recommended Posts

I achieved a similiar result overriding the Item#onCraftedBy method inside my Item class.
Essentially I have a sword that should always be enchanted with FireAspect X. I made a recipe that if you upgrade a Netherite Sword with a mod material you get this sword, regardless of the existing sword enchantments.
By using the onCraftedBy method, as soon as the Player gets the Item, this is enchanted with FireAspect X.

Is not ideal, since you won't actually see the applied enchantment until you get out of the smithing table, but is way easier than implementing a custom recipe serializer (which is not hard, but sure is way more work than this)

Don't blame me if i always ask for your help. I just want to learn to be better :)

Link to comment
Share on other sites

3 minutes ago, JimiIT92 said:

I achieved a similiar result overriding the Item#onCraftedBy method inside my Item class.
Essentially I have a sword that should always be enchanted with FireAspect X. I made a recipe that if you upgrade a Netherite Sword with a mod material you get this sword, regardless of the existing sword enchantments.
By using the onCraftedBy method, as soon as the Player gets the Item, this is enchanted with FireAspect X.

Is not ideal, since you won't actually see the applied enchantment until you get out of the smithing table, but is way easier than implementing a custom recipe serializer (which is not hard, but sure is way more work than this)

This is abusing the event and you should absolutely not do this.

  • Sad 1
Link to comment
Share on other sites

I was also thinking: if you are NOT using a custom block, but rather you want to change the output from the vanilla smithing table, you could use a mixin. The smithing recipe JSON file actually can read NBT tags from the output, however they are straight up ignored in the UpgradeRecipe class, specifically the assemble method

public ItemStack assemble(Container pInv) {
  ItemStack itemstack = this.result.copy();
  CompoundTag compoundtag = pInv.getItem(0).getTag();
  if (compoundtag != null) {
    itemstack.setTag(compoundtag.copy());
  }

  return itemstack;
}

The Vanilla class essentially takes whatever tags the first Item has (the "base" ingredient), if any, and copy them to the output Item, ignoring whatever tags that Item could have.
By using a mixin for this method you can change how it work and make so the result Item tags are not ignored, but rather merged with the base ingredient tags. You can see how to configure the project for using mixins here: https://github.com/SpongePowered/Mixin/wiki/Mixins-on-Minecraft-Forge. You can also check this repository that contains an example of how to actually use it

Don't blame me if i always ask for your help. I just want to learn to be better :)

Link to comment
Share on other sites

1 hour ago, diesieben07 said:

There is zero reason to use a mixin. A custom recipe suffices.

If he's using a custom block, yes, absolutely no need for mixins. But since he didn't mention it I assume he's just using the Vanilla Smithing Table, in which specify the NBT Tags in the recipe JSON is not sufficient (unless there's a way to bind custom recipe serializer to Vanilla Blocks, which I'm not aware of)

Edited by JimiIT92

Don't blame me if i always ask for your help. I just want to learn to be better :)

Link to comment
Share on other sites

42 minutes ago, diesieben07 said:

The "binding" to the block depends on the RecipeType, not the serializer.

Didn't know you could actually do that! 😮

Don't blame me if i always ask for your help. I just want to learn to be better :)

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share



×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.