Tinkers' Construct
scripts/gen_schema_pages.py instead.Tinkers’ Construct recipes (1.20.1), pkl4mc dialect.
Covers the smeltery (melting/casting/alloying), tool building/part builder, and modifier recipe families. Field shapes verified against TConstruct’s and Mantle’s real RecordLoadable definitions (both cloned to temp/ during authoring), not docs or JEI.
Out of scope for this schema (see TODO.md roadmap notes): - allowed_materials / modifier_predicate restrictions always default to “any”, the mod’s MaterialPredicate/ModifierPredicate JSON grammars support AND/OR/tag compounds we don’t expose. - ToolCastingRecipe, ShapedMaterialsRecipe, ShapelessMaterialsRecipe, TippedToolTransformRecipe, deep custom parsers, need a dedicated pass. - Material stat/trait/tool-definition JSON (data/tconstruct/tinkering/**), a separate non-recipe datapack registry entirely. - Cosmetic id-only recipes with zero JSON fields (armor dyeing/banner/trim, beheading/shearing, tinker station/crafting table repair), nothing for a user to author.
Usage
amends "@pkl4mc/tconstruct_recipes.pkl"Example
recipes
// Tinkers' Construct recipes - one example per type.
// Each entry becomes `<name>.json` under this file's directory.
amends "@pkl4mc/tconstruct_recipes.pkl"
melting {
new {
name = "example_melting_iron"
ingredient { tag = "forge:ingots/iron" }
result { fluid = "tconstruct:molten_iron"; amount = 90 }
temperature = 800
time = 60
}
}
ore_melting {
new {
name = "example_ore_melting_diamond"
ingredient { tag = "forge:ores/diamond" }
result { fluid = "tconstruct:molten_diamond"; amount = 300 }
temperature = 1450
time = 355
rate = "gem"
byproducts { new { fluid = "tconstruct:molten_debris"; amount = 270 } }
}
}
damagable_melting {
new {
name = "example_damagable_melting_iron_sword"
ingredient { item = "minecraft:iron_sword" }
result { fluid = "tconstruct:molten_iron"; amount = 180 }
temperature = 800
time = 60
unitSize = 90
}
}
material_melting {
new {
name = "example_material_melting_iron"
input = "tconstruct:iron"
temperature = 800
result { fluid = "tconstruct:molten_iron"; amount = 10 }
}
}
melting_fuel {
new {
name = "example_melting_fuel_lava"
fluid { fluid = "minecraft:lava"; amount = 1 }
duration = 20
temperature = 1300
rate = 20
}
}
entity_melting {
new {
name = "example_entity_melting_blaze"
entity = "minecraft:blaze"
result { fluid = "tconstruct:blazing_blood"; amount = 20 }
damage = 2
}
}
alloy {
new {
name = "example_alloy_bronze"
inputs {
new { fluid = "forge:molten_copper"; amount = 270 }
new { fluid = "forge:molten_tin"; amount = 90 }
}
result { fluid = "tconstruct:molten_bronze"; amount = 360 }
temperature = 700
}
}
casting_basin {
new {
name = "example_casting_basin_iron_ingot"
cast { tag = "tconstruct:casts/multi_use/ingot" }
fluid { fluid = "tconstruct:molten_iron"; amount = 90 }
result { item = "minecraft:iron_ingot" }
coolingTime = 60
}
}
casting_table {
new {
name = "example_casting_table_iron_ingot"
cast { tag = "tconstruct:casts/multi_use/ingot" }
fluid { fluid = "tconstruct:molten_iron"; amount = 90 }
result { item = "minecraft:iron_ingot" }
coolingTime = 60
}
}
container_filling_basin {
new {
name = "example_container_filling_basin_bucket"
fluidAmount = 1000
container = "minecraft:bucket"
}
}
container_filling_table {
new {
name = "example_container_filling_table_bucket"
fluidAmount = 1000
container = "minecraft:bucket"
}
}
cast_duplication_basin {
new {
name = "example_cast_duplication_basin_ingot"
cast { tag = "tconstruct:casts/multi_use/ingot" }
fluid { fluid = "tconstruct:molten_gold"; amount = 90 }
coolingTime = 30
}
}
cast_duplication_table {
new {
name = "example_cast_duplication_table_ingot"
cast { tag = "tconstruct:casts/multi_use/ingot" }
fluid { fluid = "tconstruct:molten_gold"; amount = 90 }
coolingTime = 30
}
}
potion_casting_basin {
new {
name = "example_potion_casting_basin_bottle"
bottle { item = "minecraft:glass_bottle" }
fluid { tag = "forge:potion" }
result = "minecraft:potion"
}
}
potion_casting_table {
new {
name = "example_potion_casting_table_bottle"
bottle { item = "minecraft:glass_bottle" }
fluid { tag = "forge:potion" }
result = "minecraft:potion"
}
}
tipping_basin {
new {
name = "example_tipping_basin_arrow"
tools { item = "tconstruct:tipped_arrow" }
fluid { tag = "forge:potion" }
modifier = "tconstruct:potion"
}
}
tipping_table {
new {
name = "example_tipping_table_arrow"
tools { item = "tconstruct:tipped_arrow" }
fluid { tag = "forge:potion" }
modifier = "tconstruct:potion"
}
}
tip_clearing_basin {
new {
name = "example_tip_clearing_basin_arrow"
tools { item = "tconstruct:tipped_arrow" }
fluid { fluid = "minecraft:water"; amount = 1 }
modifier = "tconstruct:potion"
}
}
tip_clearing_table {
new {
name = "example_tip_clearing_table_arrow"
tools { item = "tconstruct:tipped_arrow" }
fluid { fluid = "minecraft:water"; amount = 1 }
modifier = "tconstruct:potion"
}
}
material_casting_basin {
new {
name = "example_material_casting_basin_pick_head"
cast { tag = "tconstruct:casts/multi_use/pick_head" }
itemCost = 2
result = "tconstruct:pick_head"
}
}
material_casting_table {
new {
name = "example_material_casting_table_pick_head"
cast { tag = "tconstruct:casts/multi_use/pick_head" }
itemCost = 2
result = "tconstruct:pick_head"
}
}
composite_casting_basin {
new {
name = "example_composite_casting_basin_pick_head"
itemCost = 2
result = "tconstruct:pick_head"
}
}
composite_casting_table {
new {
name = "example_composite_casting_table_pick_head"
itemCost = 2
result = "tconstruct:pick_head"
}
}
part_swap_casting_basin {
new {
name = "example_part_swap_casting_basin_pickaxe"
tools { item = "tconstruct:pick_axe" }
itemCost = 2
index = 0
}
}
part_swap_casting_table {
new {
name = "example_part_swap_casting_table_pickaxe"
tools { item = "tconstruct:pick_axe" }
itemCost = 2
index = 0
}
}
molding_basin {
new {
name = "example_molding_basin_clay"
material { item = "minecraft:clay_ball" }
pattern { item = "tconstruct:pick_head_pattern" }
result { item = "tconstruct:pick_head_cast" }
}
}
molding_table {
new {
name = "example_molding_table_clay"
material { item = "minecraft:clay_ball" }
pattern { item = "tconstruct:pick_head_pattern" }
result { item = "tconstruct:pick_head_cast" }
}
}
material_fluid {
new {
name = "example_material_fluid_iron"
fluid { fluid = "tconstruct:molten_iron"; amount = 10 }
temperature = 800
output = "tconstruct:iron"
}
}
material {
new {
name = "example_material_iron"
ingredient { tag = "forge:ingots/iron" }
value = 1
needed = 1
material = "tconstruct:iron"
}
}
tool_building {
new {
name = "example_tool_building_pickaxe"
result = "tconstruct:pick_axe"
}
}
tinker_station_part_swapping {
new {
name = "example_tinker_station_part_swapping_pickaxe"
tools { tag = "tconstruct:modifiable/harvest" }
}
}
tinker_station_damaging {
new {
name = "example_tinker_station_damaging_flint"
ingredient { item = "minecraft:flint" }
damageAmount = 10
}
}
fixed_material_swapping {
new {
name = "example_fixed_material_swapping_pickaxe"
tools { tag = "tconstruct:modifiable/harvest" }
ingredient { tag = "forge:ingots/iron" }
material = "tconstruct:iron"
index { 0 }
}
}
part_swapping_override {
new {
name = "example_part_swapping_override_pickaxe"
tools { tag = "tconstruct:modifiable/harvest" }
part = "tconstruct:pick_head"
index { 0 }
}
}
tool_material_swapping {
new {
name = "example_tool_material_swapping_pickaxe"
tools { tag = "tconstruct:modifiable/harvest" }
}
}
part_builder {
new {
name = "example_part_builder_adze_head"
pattern = "tconstruct:adze_head"
cost = 2
output { item = "tconstruct:adze_head" }
}
}
item_part_builder {
new {
name = "example_item_part_builder_stick"
pattern = "tconstruct:tool_rod"
output { item = "minecraft:stick" }
}
}
part_builder_tool_recycling {
new {
name = "example_part_builder_tool_recycling"
pattern { item = "tconstruct:pick_head_pattern" }
}
}
part_builder_recycling {
new {
name = "example_part_builder_recycling_shovel"
tool { item = "minecraft:iron_shovel" }
pattern { item = "tconstruct:shovel_head_pattern" }
results {
["tconstruct:shovel_head_cast"] { item = "tconstruct:shovel_head"; count = 1 }
}
}
}
modifier {
new {
name = "example_modifier_autosmelt"
inputs {
new { tag = "forge:storage_blocks/coal" }
}
tools { tag = "tconstruct:modifiable/harvest" }
result = "tconstruct:autosmelt"
slots { slot = "abilities"; count = 1 }
}
}
incremental_modifier {
new {
name = "example_incremental_modifier_reinforced"
input { tag = "forge:ingots/iron" }
neededPerLevel = 1
tools { tag = "tconstruct:modifiable/harvest" }
result = "tconstruct:reinforced"
}
}
swappable_modifier {
new {
name = "example_swappable_modifier_wood_type"
inputs {
new { item = "minecraft:oak_planks" }
}
tools { tag = "tconstruct:modifiable/harvest" }
resultModifier = "tconstruct:extra"
resultValue = "oak"
}
}
multilevel_modifier {
new {
name = "example_multilevel_modifier_reinforced"
inputs {
new { tag = "forge:ingots/iron" }
}
tools { tag = "tconstruct:modifiable/harvest" }
result = "tconstruct:reinforced"
levels {
new { level = 1 }
new { level = new LevelRange { min = 2; max = 3 } }
}
}
}
multilevel_incremental_modifier {
new {
name = "example_multilevel_incremental_modifier_reinforced"
input { tag = "forge:ingots/iron" }
neededPerLevel = 1
tools { tag = "tconstruct:modifiable/harvest" }
result = "tconstruct:reinforced"
levels {
new { level = 1 }
new { level = new LevelRange { min = 2; max = 3 } }
}
}
}
overslime_modifier {
new {
name = "example_overslime_modifier_slimy"
ingredient { tag = "forge:slimeballs" }
restoreAmount = 100
}
}
crafting_overslime_modifier {
new {
name = "example_crafting_overslime_modifier_slimy"
ingredient { tag = "forge:slimeballs" }
restoreAmount = 100
}
}
modifier_salvage {
new {
name = "example_modifier_salvage_autosmelt"
tools { tag = "tconstruct:modifiable/harvest" }
modifier = "tconstruct:autosmelt"
slots { slot = "abilities"; count = 1 }
}
}
modifier_repair {
new {
name = "example_modifier_repair_wooden"
modifier = "tconstruct:wooden"
ingredient { tag = "minecraft:planks" }
repairAmount = 50
}
}
crafting_modifier_repair {
new {
name = "example_crafting_modifier_repair_wooden"
modifier = "tconstruct:wooden"
ingredient { tag = "minecraft:planks" }
repairAmount = 50
}
}
remove_modifier {
new {
name = "example_remove_modifier"
inputs {
new { item = "minecraft:shears" }
}
}
}
extract_modifier {
new {
name = "example_extract_modifier"
inputs {
new { item = "minecraft:shears" }
}
}
}
modifier_sorting {
new {
name = "example_modifier_sorting"
inputs {
new { item = "minecraft:redstone" }
}
}
}
modifier_set_worktable {
new {
name = "example_modifier_set_worktable"
dataKey = "tconstruct:persistent_data_key"
inputs {
new { item = "minecraft:paper" }
}
addToSet = true
}
}
enchantment_converting {
new {
name = "example_enchantment_converting"
groupName = "enchantment_converting"
inputs {
new { tag = "minecraft:enchanting_books" }
}
matchBook = true
returnUnenchanted = false
}
}
toggle_interaction {
new {
name = "example_toggle_interaction"
inputs {
new { item = "minecraft:redstone" }
}
}
}
severing {
new {
name = "example_severing_cave_spider"
entity = "minecraft:cave_spider"
result { item = "tconstruct:cave_spider_head" }
}
}
ageable_severing {
new {
name = "example_ageable_severing_cow"
entity = "minecraft:cow"
adultResult { item = "minecraft:beef" }
childResult { item = "minecraft:leather" }
}
}