Compatibility
Minecraft: Java Edition
Platforms
Supported environments
Links
Tags
Creators
Details
Smithing Extended
Prototype NeoForge 1.21.1 mod that adds an ingredient for matching item variants which rely on data stored inside minecraft:custom_data.
The initial use case was for the Webmind modpack, allowing TaCZ guns to be upgraded into other guns via the smithing table. Every TaCZ gun uses the same parent item tacz:modern_kinetic_gun, and are only distinguished by a GunId string in their custom data, which doesn't play nice with the smithing table. It's such a niche problem, but I figured this tool might be useful to someone else at some point, so generalizing it felt like the polite thing to do.
All this does is add smithingextended:smithing_bridge, which allows items that rely on custom data to be matched as smithing ingredients without returning "This item cannot be upgraded in this way".
Smithing Extended does not replace Minecraft's smithing recipe serializer; It supplies a component-aware ingredient, and lets the smithing transform perform the upgrade. Because vanilla transform smithing copies the base stack's components, this is intended to preserve compatible enchantments/affixes while allowing the result to set a new data key value (such as TaCZ's GunId).
A specific example:
{
"type": "smithingextended:smithing_bridge",
"item": "tacz:modern_kinetic_gun",
"data_key": "GunId",
"values": [
"create_armorer:shotgun_db_stone",
"create_armorer:pistol_revolver_torque",
"create_armorer:rifle_assult_crane"
]
}
This example allows any of the three listed guns from Create Armorer to be used as an ingredient.
It checks the registry item's ID, the specified custom_data key, and whether or not the key's value is listed in values. It ignores all other custom data, so ammo count, fire mode, chamber state, Apotheosis affixes,
Modern Ragnarok enchantments, custom names, etc. don't affect ingredient matching.
A generalized example:
{
"type": "smithingextended:smithing_bridge",
"item": "mod_name:item_name",
"data_key": "VariantId",
"values": [
"addon_pack:item_a",
"addon_pack:item_b"
]
}


