Youseegaming Posted June 22, 2022 Posted June 22, 2022 How would I add nbt data do a custom smithing table recipe? for example an enchantment or the name. I've scoured the internet and found many things about this but nothing is helpful enough. Hoping someone could help! Quote
Youseegaming Posted June 22, 2022 Author Posted June 22, 2022 Ok, I understand what I have to do but I was wondering if you could explain it slightly better?l I haven’t dived this deep into modding at all so it’s a little confusing. Quote
JimiIT92 Posted June 23, 2022 Posted June 23, 2022 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) Quote Don't blame me if i always ask for your help. I just want to learn to be better
Youseegaming Posted June 23, 2022 Author Posted June 23, 2022 Just now, diesieben07 said: Which part? Specifically how to set up a custom SmithingRecipe subclass and custom IRecipeSerializer Quote
Youseegaming Posted June 23, 2022 Author Posted June 23, 2022 I feel really dumb now but everyone’s got to start somewhere. Where could I find information on Subclassing and implementing interfaces and learn how to? Quote
Youseegaming Posted June 23, 2022 Author Posted June 23, 2022 Didn’t think to look here, Thanks! Quote
JimiIT92 Posted June 24, 2022 Posted June 24, 2022 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 Quote Don't blame me if i always ask for your help. I just want to learn to be better
JimiIT92 Posted June 24, 2022 Posted June 24, 2022 (edited) 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 June 24, 2022 by JimiIT92 Quote Don't blame me if i always ask for your help. I just want to learn to be better
JimiIT92 Posted June 24, 2022 Posted June 24, 2022 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! 😮 Quote Don't blame me if i always ask for your help. I just want to learn to be better
Recommended Posts
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.