// priority: 0
"use strict";

function registerTFCMaterialsRecipes(event) {

	forEachMaterial(material => {
		let tfcProperty = material.getProperty(TFGPropertyKey.TFC_PROPERTY)

		if (tfcProperty === null) {
			return;
		}
		
		let outputMaterial = (tfcProperty.getOutputMaterial() === null) ? material : tfcProperty.getOutputMaterial()

		// Ingots
		let ingotItem = ChemicalHelper.get(TagPrefix.ingot, material, 1)
		if (!ingotItem.isEmpty()) {

			// Декрафт слитка в жидкость
			event.recipes.tfc.heating(ingotItem, tfcProperty.getMeltTemp())
				.resultFluid(Fluid.of(outputMaterial.getFluid(), 144))
				.id(`tfc:heating/metal/${material.getName()}_ingot`)

			if (material !== GTMaterials.WroughtIron) {

				// Отливка слитка в обычной форме
				event.recipes.tfc.casting(ingotItem, 'tfc:ceramic/ingot_mold', Fluid.of(outputMaterial.getFluid(), 144), 0.1)
					.id(`tfc:casting/${material.getName()}_ingot`)

				// Отливка слитка в огнеупорной форме
				event.recipes.tfc.casting(ingotItem, 'tfc:ceramic/fire_ingot_mold', Fluid.of(outputMaterial.getFluid(), 144), 0.01)
					.id(`tfc:casting/${material.getName()}_fire_ingot`)

				event.recipes.create.filling(
					Item.of('tfc:ceramic/ingot_mold', getFillingNBT(outputMaterial, 144)),
					[
						Fluid.of(outputMaterial.getFluid(), 144),
						Item.of('tfc:ceramic/ingot_mold').strongNBT()
					]
				).id(`tfg:tfc/filling/${material.getName()}_ingot`)

				event.recipes.create.filling(
					Item.of('tfc:ceramic/fire_ingot_mold', getFillingNBT(outputMaterial, 144)),
					[
						Fluid.of(outputMaterial.getFluid(), 144),
						Item.of('tfc:ceramic/fire_ingot_mold').strongNBT()
					]
				).id(`tfg:tfc/filling/${material.getName()}_fire_ingot`)
			}

			// Double Ingots
			let doubleIngotItem = ChemicalHelper.get(TFGTagPrefix.ingotDouble, material, 1)
			if (!doubleIngotItem.isEmpty()) {

				// Декрафт двойного слитка в жидкость
				event.recipes.tfc.heating(doubleIngotItem, tfcProperty.getMeltTemp())
					.resultFluid(Fluid.of(outputMaterial.getFluid(), 288))
					.id(`tfc:heating/metal/${material.getName()}_double_ingot`)

				// 2 слитка -> Двойной слиток
				event.recipes.tfc.welding(doubleIngotItem, ingotItem, ingotItem, tfcProperty.getTier() - 1)
					.id(`tfc:welding/${material.getName()}_double_ingot`)

				event.recipes.greate.compacting(doubleIngotItem, [ingotItem, ingotItem, 'tfc:powder/flux'])
					.heated()
					.recipeTier(tfcProperty.getTier() < 5 ? 0 : 1)
					.circuitNumber(0)
					.id(`greate:compacting/${material.getName()}_double_ingot`)

				// Plates
				let plateItem = ChemicalHelper.get(TagPrefix.plate, material, 1)
				if (!plateItem.isEmpty()) {

					// Декрафт пластины в жидкость
					event.recipes.tfc.heating(plateItem, tfcProperty.getMeltTemp())
						.resultFluid(Fluid.of(outputMaterial.getFluid(), 144))
						.id(`tfc:heating/metal/${material.getName()}_sheet`)

					// Двойной слиток -> Пластина
					event.recipes.tfc.anvil(plateItem, doubleIngotItem, ['hit_last', 'hit_second_last', 'hit_third_last'])
						.tier(tfcProperty.getTier())
						.id(`tfc:anvil/${material.getName()}_sheet`)

					// Double Plate
					let doublePlateItem = ChemicalHelper.get(TagPrefix.plateDouble, material, 1)
					if (!doublePlateItem.isEmpty()) {

						// Декрафт двойных пластин
						event.recipes.tfc.heating(doublePlateItem, tfcProperty.getMeltTemp())
							.resultFluid(Fluid.of(outputMaterial.getFluid(), 288))
							.id(`tfc:heating/metal/${material.getName()}_double_sheet`)

						// Две пластины -> Двойная пластина
						event.recipes.tfc.welding(doublePlateItem, plateItem, plateItem)
							.tier(tfcProperty.getTier())
							.id(`tfc:welding/${material.getName()}_double_sheet`)

						event.recipes.greate.compacting(doublePlateItem, [plateItem, plateItem, 'tfc:powder/flux'])
							.heated()
							.recipeTier(tfcProperty.getTier() < 4 ? 0 : 1)
							.id(`greate:compacting/${material.getName()}_double_sheet`)

						// Armor
						if (material.hasFlag(TFGMaterialFlags.HAS_TFC_ARMOR)) {
							//#region Шлем

							// Декрафт незавершенного шлема в жидкость
							event.recipes.tfc.heating(`tfc:metal/unfinished_helmet/${material.getName()}`, tfcProperty.getMeltTemp())
								.resultFluid(Fluid.of(outputMaterial.getFluid(), 288))
								.id(`tfc:heating/metal/${material.getName()}_unfinished_helmet`)

							// Незавершенный шлем
							event.recipes.tfc.anvil(`tfc:metal/unfinished_helmet/${material.getName()}`, doublePlateItem, ['hit_last', 'bend_second_last', 'bend_third_last'])
								.tier(tfcProperty.getTier())
								.id(`tfc:anvil/${material.getName()}_unfinished_helmet`)

							// Декрафт шлема в жидкость
							event.recipes.tfc.heating(`tfc:metal/helmet/${material.getName()}`, tfcProperty.getMeltTemp())
								.resultFluid(Fluid.of(outputMaterial.getFluid(), 432))
								.useDurability(true)
								.id(`tfc:heating/metal/${material.getName()}_helmet`)

							// Шлем
							event.recipes.tfc.welding(`tfc:metal/helmet/${material.getName()}`, `tfc:metal/unfinished_helmet/${material.getName()}`, plateItem)
								.tier(tfcProperty.getTier())
								.id(`tfc:welding/${material.getName()}_helmet`)

							event.recipes.greate.compacting(`tfc:metal/helmet/${material.getName()}`, [`tfc:metal/unfinished_helmet/${material.getName()}`, plateItem, 'tfc:powder/flux'])
								.heated()
								.recipeTier(tfcProperty.getTier() < 4 ? 0 : 1)
								.id(`greate:compacting/${material.getName()}_helmet`)

							//#endregion

							//#region Нагрудник

							// Декрафт незавершенного нагрудника в жидкость
							event.recipes.tfc.heating(`tfc:metal/unfinished_chestplate/${material.getName()}`, tfcProperty.getMeltTemp())
								.resultFluid(Fluid.of(outputMaterial.getFluid(), 288))
								.id(`tfc:heating/metal/${material.getName()}_unfinished_chestplate`)

							// Незавершенный нагрудник
							event.recipes.tfc.anvil(`tfc:metal/unfinished_chestplate/${material.getName()}`, doublePlateItem, ['hit_last', 'hit_second_last', 'upset_third_last'])
								.tier(tfcProperty.getTier())
								.id(`tfc:anvil/${material.getName()}_unfinished_chestplate`)

							// Декрафт нагрудника в жидкость
							event.recipes.tfc.heating(`tfc:metal/chestplate/${material.getName()}`, tfcProperty.getMeltTemp())
								.resultFluid(Fluid.of(outputMaterial.getFluid(), 576))
								.useDurability(true)
								.id(`tfc:heating/metal/${material.getName()}_chestplate`)

							// Нагрудник
							event.recipes.tfc.welding(`tfc:metal/chestplate/${material.getName()}`, `tfc:metal/unfinished_chestplate/${material.getName()}`, doublePlateItem)
								.tier(tfcProperty.getTier())
								.id(`tfc:welding/${material.getName()}_chestplate`)

							event.recipes.greate.compacting(`tfc:metal/chestplate/${material.getName()}`, [`tfc:metal/unfinished_chestplate/${material.getName()}`, doublePlateItem, 'tfc:powder/flux'])
								.heated()
								.recipeTier(tfcProperty.getTier() < 4 ? 0 : 1)
								.id(`greate:compacting/${material.getName()}_chestplate`)

							//#endregion

							//#region Поножи

							// Декрафт незавершенных поножей в жидкость
							event.recipes.tfc.heating(`tfc:metal/unfinished_greaves/${material.getName()}`, tfcProperty.getMeltTemp())
								.resultFluid(Fluid.of(outputMaterial.getFluid(), 288))
								.id(`tfc:heating/metal/${material.getName()}_unfinished_greaves`)

							// Незавершенные поножи
							event.recipes.tfc.anvil(`tfc:metal/unfinished_greaves/${material.getName()}`, doublePlateItem, ['bend_any', 'draw_any', 'hit_any'])
								.tier(tfcProperty.getTier())
								.id(`tfc:anvil/${material.getName()}_unfinished_greaves`)

							// Декрафт поножей в жидкость
							event.recipes.tfc.heating(`tfc:metal/greaves/${material.getName()}`, tfcProperty.getMeltTemp())
								.resultFluid(Fluid.of(outputMaterial.getFluid(), 432))
								.useDurability(true)
								.id(`tfc:heating/metal/${material.getName()}_greaves`)

							// Поножи
							event.recipes.tfc.welding(`tfc:metal/greaves/${material.getName()}`, `tfc:metal/unfinished_greaves/${material.getName()}`, plateItem)
								.tier(tfcProperty.getTier())
								.id(`tfc:welding/${material.getName()}_greaves`)

							event.recipes.greate.compacting(`tfc:metal/greaves/${material.getName()}`, [`tfc:metal/unfinished_greaves/${material.getName()}`, plateItem, 'tfc:powder/flux'])
								.heated()
								.recipeTier(tfcProperty.getTier() < 4 ? 0 : 1)
								.id(`greate:compacting/${material.getName()}_greaves`)

							//#endregion

							//#region Ботинки

							// Декрафт незавершенных ботинок в жидкость
							event.recipes.tfc.heating(`tfc:metal/unfinished_boots/${material.getName()}`, tfcProperty.getMeltTemp())
								.resultFluid(Fluid.of(outputMaterial.getFluid(), 144))
								.id(`tfc:heating/metal/${material.getName()}_unfinished_boots`)

							// Незавершенные ботинки
							event.recipes.tfc.anvil(`tfc:metal/unfinished_boots/${material.getName()}`, plateItem, ['bend_last', 'bend_second_last', 'shrink_third_last'])
								.tier(tfcProperty.getTier())
								.id(`tfc:anvil/${material.getName()}_unfinished_boots`)

							// Декрафт ботинок в жидкость
							event.recipes.tfc.heating(`tfc:metal/boots/${material.getName()}`, tfcProperty.getMeltTemp())
								.resultFluid(Fluid.of(outputMaterial.getFluid(), 288))
								.useDurability(true)
								.id(`tfc:heating/metal/${material.getName()}_boots`)

							// Ботинки
							event.recipes.tfc.welding(`tfc:metal/boots/${material.getName()}`, `tfc:metal/unfinished_boots/${material.getName()}`, plateItem)
								.tier(tfcProperty.getTier())
								.id(`tfc:welding/${material.getName()}_boots`)

							event.recipes.greate.compacting(`tfc:metal/boots/${material.getName()}`, [`tfc:metal/unfinished_boots/${material.getName()}`, plateItem, 'tfc:powder/flux'])
								.heated()
								.recipeTier(tfcProperty.getTier() < 4 ? 0 : 1)
								.id(`greate:compacting/${material.getName()}_boots`)

							//#endregion
						}

						// Tools (From Double Plate)
						if (material.hasFlag(TFGMaterialFlags.HAS_TFC_TOOL)) {
							//#region Фурма

							// Декрафт инструмента в жидкость
							event.recipes.tfc.heating(`tfc:metal/tuyere/${material.getName()}`, tfcProperty.getMeltTemp())
								.resultFluid(Fluid.of(outputMaterial.getFluid(), 288))
								.useDurability(true)
								.id(`tfc:heating/metal/${material.getName()}_tuyere`)

							// Фурма
							event.recipes.tfc.anvil(`tfc:metal/tuyere/${material.getName()}`, doublePlateItem, ['bend_last', 'bend_second_last'])
								.tier(tfcProperty.getTier())
								.id(`tfc:anvil/${material.getName()}_tuyere`)

							// These aren't TFC recipes but they go here since they don't have a tag prefix
							// and I'm too lazy to make them one
							event.custom({
								type: 'vintageimprovements:curving',
								ingredients: [doublePlateItem],
								// tuyeres are roughly bottle shaped, right?
								// (there's no other mold that wouldn't conflict and this seems close enough)
								itemAsHead: 'gtceu:bottle_extruder_mold',
								results: [{ item: `tfc:metal/tuyere/${material.getName()}` }],
								processingTime: material.getMass() * 6 * global.VINTAGE_IMPROVEMENTS_DURATION_MULTIPLIER
							}).id(`tfg:vi/curving/${material.getName()}_tuyere`)

							event.recipes.gtceu.extruder(`tfg:${material.getName()}_tuyere`)
								.itemInputs(doublePlateItem)
								.notConsumable('gtceu:bottle_extruder_mold')
								.itemOutputs(`tfc:metal/tuyere/${material.getName()}`)
								.duration(material.getMass() * 6)
								.EUt(GTValues.VA[GTValues.LV])
							//#endregion

							//#region Щит

							// Декрафт щита в жидкость
							event.recipes.tfc.heating(`tfc:metal/shield/${material.getName()}`, tfcProperty.getMeltTemp())
								.resultFluid(Fluid.of(outputMaterial.getFluid(), 288))
								.useDurability(true)
								.id(`tfc:heating/metal/${material.getName()}_shield`)

							// Щит
							event.recipes.tfc.anvil(`tfc:metal/shield/${material.getName()}`, doublePlateItem, ['upset_last', 'bend_second_last', 'bend_third_last'])
								.tier(tfcProperty.getTier())
								.id(`tfc:anvil/${material.getName()}_shield`)

							//#endregion

							//#region Конская броня

							// Декрафт конской брони в жидкость
							event.recipes.tfc.heating(`tfc:metal/horse_armor/${material.getName()}`, tfcProperty.getMeltTemp())
								.resultFluid(Fluid.of(outputMaterial.getFluid(), 864))
								.useDurability(true)
								.id(`tfc:heating/metal/${material.getName()}_horse_armor`)

							//#endregion
						}

						// Buzzsaw blade
						let buzzsawBladeItem = ChemicalHelper.get(TagPrefix.toolHeadBuzzSaw, material, 1)
						if (!buzzsawBladeItem.isEmpty()) {
							event.recipes.tfc.heating(buzzsawBladeItem, tfcProperty.getMeltTemp())
								.resultFluid(Fluid.of(outputMaterial.getFluid(), 288))
								.id(`tfc:heating/metal/${material.getName()}_buzzsaw_blade`)

							event.recipes.tfc.anvil(buzzsawBladeItem, doublePlateItem, ['bend_last', 'hit_second_last', 'draw_third_last'])
								.tier(tfcProperty.getTier())
								.id(`tfc:anvil/${material.getName()}_buzzsaw_blade`)
						}
					}

					// Tools (From Plate)
					if (material.hasFlag(TFGMaterialFlags.HAS_TFC_TOOL)) {
						//#region Удочка

						// Декрафт оголовья в жидкость
						event.recipes.tfc.heating(`tfc:metal/fish_hook/${material.getName()}`, tfcProperty.getMeltTemp())
							.resultFluid(Fluid.of(outputMaterial.getFluid(), 144))
							.id(`tfc:heating/metal/${material.getName()}_fish_hook`)

						// Крюк удочки
						event.recipes.tfc.anvil(`tfc:metal/fish_hook/${material.getName()}`, plateItem, ['bend_any', 'hit_any', 'draw_not_last'])
							.tier(tfcProperty.getTier())
							.bonus(true)
							.id(`tfc:anvil/${material.getName()}_fish_hook`)

						// Декрафт инструмента в жидкость
						event.recipes.tfc.heating(`tfc:metal/fishing_rod/${material.getName()}`, tfcProperty.getMeltTemp())
							.resultFluid(Fluid.of(outputMaterial.getFluid(), 144))
							.useDurability(true)
							.id(`tfc:heating/metal/${material.getName()}_fishing_rod`)

						//#endregion
					}

					generatePlatedBlockRecipe(event, material);
				}

				// Tools (From Double Ingots)
				if (material.hasFlag(TFGMaterialFlags.HAS_TFC_TOOL) || material.hasFlag(TFGMaterialFlags.HAS_GT_TOOL)) {
					//#region Меч

					// Крафт инструмента
					event.remove({ id: `tfc:crafting/metal/sword/${material.getName()}` })

					// Декрафт инструмента в жидкость
					let swordItem = ToolHelper.get(GTToolType.SWORD, material)
					if (!swordItem.isEmpty()) {

						event.recipes.tfc.heating(swordItem, tfcProperty.getMeltTemp())
							.resultFluid(Fluid.of(outputMaterial.getFluid(), 288))
							.useDurability(true)
							.id(`tfc:heating/metal/${material.getName()}_sword`)

					}

					let swordHeadItem = ChemicalHelper.get(TFGTagPrefix.toolHeadSword, material, 1)
					if (!swordHeadItem.isEmpty()) {

						// Декрафт оголовья в жидкость
						event.recipes.tfc.heating(swordHeadItem, tfcProperty.getMeltTemp())
							.resultFluid(Fluid.of(outputMaterial.getFluid(), 288))
							.id(`tfc:heating/metal/${material.getName()}_sword_blade`)

						// Крафт оголовья
						event.recipes.tfc.anvil(swordHeadItem, doubleIngotItem, ['punch_last', 'bend_not_last', 'draw_not_last'])
							.tier(tfcProperty.getTier())
							.bonus(true)
							.id(`tfc:anvil/${material.getName()}_sword_blade`)

						// Металл + Форма -> Оголовье
						if (material.hasFlag(TFGMaterialFlags.CAN_BE_UNMOLDED)) {
							event.recipes.tfc.casting(swordHeadItem, 'tfc:ceramic/sword_blade_mold', Fluid.of(outputMaterial.getFluid(), 288), 1)
								.id(`tfc:casting/${material.getName()}_sword_blade`)

							event.recipes.create.filling(
								Item.of('tfc:ceramic/sword_blade_mold', getFillingNBT(outputMaterial, 288)),
								[
									Fluid.of(outputMaterial.getFluid(), 288),
									Item.of('tfc:ceramic/sword_blade_mold').strongNBT()
								]
							).id(`tfg:tfc/filling/${material.getName()}_sword_blade`)
						}
					}

					//#endregion

					//#region Дубина

					if (!material.hasFlag(TFGMaterialFlags.HAS_GT_TOOL)) {
						// Декрафт инструмента в жидкость
						event.recipes.tfc.heating(`tfc:metal/mace/${material.getName()}`, tfcProperty.getMeltTemp())
							.resultFluid(Fluid.of(outputMaterial.getFluid(), 288))
							.useDurability(true)
							.id(`tfc:heating/metal/${material.getName()}_mace`)

						// Металл + Форма -> Оголовье
						if (material.hasFlag(TFGMaterialFlags.CAN_BE_UNMOLDED)) {
							event.recipes.tfc.casting(`tfc:metal/mace_head/${material.getName()}`, 'tfc:ceramic/mace_head_mold', Fluid.of(outputMaterial.getFluid(), 288), 1)
								.id(`tfc:casting/${material.getName()}_mace_head`)

							event.recipes.create.filling(
								Item.of('tfc:ceramic/mace_head_mold', getFillingNBT(outputMaterial, 288)),
								[
									Fluid.of(outputMaterial.getFluid(), 288),
									Item.of('tfc:ceramic/mace_head_mold').strongNBT()
								]
							).id(`tfg:tfc/filling/${material.getName()}_mace_head`)
						}

						// Декрафт оголовья в жидкость
						event.recipes.tfc.heating(`tfc:metal/mace_head/${material.getName()}`, tfcProperty.getMeltTemp())
							.resultFluid(Fluid.of(outputMaterial.getFluid(), 288))
							.id(`tfc:heating/metal/${material.getName()}_mace_head`)
					}
					//#endregion

					//#region Мясницкий нож

					// Декрафт инструмента в жидкость
					let butcheryKnifeItem = ToolHelper.get(GTToolType.BUTCHERY_KNIFE, material)
					if (!butcheryKnifeItem.isEmpty()) {

						event.recipes.tfc.heating(butcheryKnifeItem, tfcProperty.getMeltTemp())
							.resultFluid(Fluid.of(outputMaterial.getFluid(), 144))
							.useDurability(true)
							.id(`tfc:heating/metal/${material.getName()}_butchery_knife`)

					}

					let butcheryKnifeHeadItem = ChemicalHelper.get(TFGTagPrefix.toolHeadButcheryKnife, material, 1)
					if (!butcheryKnifeHeadItem.isEmpty()) {

						// Декрафт оголовья в жидкость
						event.recipes.tfc.heating(butcheryKnifeHeadItem, tfcProperty.getMeltTemp())
							.resultFluid(Fluid.of(outputMaterial.getFluid(), 144))
							.id(`tfc:heating/metal/${material.getName()}_knife_butchery_head`)

						// Крафт оголовья
						event.recipes.tfc.anvil(butcheryKnifeHeadItem, `#forge:ingots/${material.getName()}`, ['punch_last', 'bend_not_last', 'bend_not_last'])
							.tier(tfcProperty.getTier())
							.bonus(true)
							.id(`tfc:anvil/${material.getName()}_knife_butchery_head`)

					}

					//#endregion

					//#region Молот шахтера

					// Декрафт инструмента в жидкость
					let miningHammerItem = ToolHelper.get(GTToolType.MINING_HAMMER, material)
					if (!miningHammerItem.isEmpty()) {

						event.recipes.tfc.heating(miningHammerItem, tfcProperty.getMeltTemp())
							.resultFluid(Fluid.of(outputMaterial.getFluid(), 288))
							.useDurability(true)
							.id(`tfc:heating/metal/${material.getName()}_mining_hammer`)

					}


					let miningHammerHeadItem = ChemicalHelper.get(TFGTagPrefix.toolHeadMiningHammer, material, 1)
					if (!miningHammerHeadItem.isEmpty()) {

						// Декрафт оголовья в жидкость
						event.recipes.tfc.heating(miningHammerHeadItem, tfcProperty.getMeltTemp())
							.resultFluid(Fluid.of(outputMaterial.getFluid(), 288))
							.id(`tfc:heating/metal/${material.getName()}_mining_hammer_head`)

						// Крафт оголовья
						event.recipes.tfc.anvil(miningHammerHeadItem, doubleIngotItem, ['punch_last', 'shrink_not_last'])
							.tier(tfcProperty.getTier())
							.bonus(true)
							.id(`tfc:anvil/${material.getName()}_mining_hammer_head`)

					}

					//#endregion

					//#region Большая лопата

					// Декрафт инструмента в жидкость
					let spadeItem = ToolHelper.get(GTToolType.SPADE, material)
					if (!spadeItem.isEmpty()) {

						event.recipes.tfc.heating(spadeItem, tfcProperty.getMeltTemp())
							.resultFluid(Fluid.of(outputMaterial.getFluid(), 288))
							.useDurability(true)
							.id(`tfc:heating/metal/${material.getName()}_spade`)

					}

					let spadeHeadItem = ChemicalHelper.get(TFGTagPrefix.toolHeadSpade, material, 1)
					if (!spadeHeadItem.isEmpty()) {

						// Крафт оголовья
						event.recipes.tfc.anvil(spadeHeadItem, doubleIngotItem, ['punch_last', 'hit_not_last'])
							.tier(tfcProperty.getTier())
							.bonus(true)
							.id(`tfc:anvil/${material.getName()}_spade_head`)

						// Декрафт оголовья в жидкость
						event.recipes.tfc.heating(spadeHeadItem, tfcProperty.getMeltTemp())
							.resultFluid(Fluid.of(outputMaterial.getFluid(), 288))
							.id(`tfc:heating/metal/${material.getName()}_spade_head`)

					}

					//#endregion
				}

			}

			// Rods
			let rodItem = ChemicalHelper.get(TagPrefix.rod, material, 1)
			if (!rodItem.isEmpty()) {

				// Декрафт стержня в жидкость
				event.recipes.tfc.heating(rodItem, tfcProperty.getMeltTemp())
					.resultFluid(Fluid.of(outputMaterial.getFluid(), 72))
					.id(`tfc:heating/metal/${material.getName()}_rod`)

				// Слиток -> 2 Стержня
				event.recipes.tfc.anvil(rodItem.withCount(2), ingotItem, ['draw_last'])
					.tier(tfcProperty.getTier())
					.id(`tfc:anvil/${material.getName()}_rod`)

				// Long Rods
				let longRodItem = ChemicalHelper.get(TagPrefix.rodLong, material, 1)
				if (!longRodItem.isEmpty()) {

					// Декрафт длинного стержня в жидкость
					event.recipes.tfc.heating(longRodItem, tfcProperty.getMeltTemp())
						.resultFluid(Fluid.of(outputMaterial.getFluid(), 144))
						.id(`tfc:heating/metal/${material.getName()}_long_rod`)

					// Стержни -> Длинный стержень
					event.recipes.tfc.welding(longRodItem, rodItem, rodItem)
						.tier(tfcProperty.getTier())
						.id(`tfc:anvil/${material.getName()}_long_rod`)

					event.recipes.greate.compacting(longRodItem, [rodItem, rodItem, 'tfc:powder/flux'])
						.heated()
						.recipeTier(tfcProperty.getTier() < 4 ? 0 : 1)
						.id(`greate:compacting/${material.getName()}_long_rod`)
				}

				// Bolt
				let boltItem = ChemicalHelper.get(TagPrefix.bolt, material, 1)
				if (!boltItem.isEmpty()) {

					// Болт -> Металл
					event.recipes.tfc.heating(boltItem, tfcProperty.getMeltTemp())
						.resultFluid(Fluid.of(outputMaterial.getFluid(), 18))
						.id(`tfc:heating/metal/${material.getName()}_bolt`)

					// Стержень -> Болт
					event.recipes.tfc.anvil(boltItem.withCount(2), rodItem, ['punch_last', 'draw_second_last', 'draw_third_last'])
						.tier(tfcProperty.getTier())
						.id(`tfc:anvil/${material.getName()}_bolt`)

				}

				// Screw
				let screwItem = ChemicalHelper.get(TagPrefix.screw, material, 1)
				if (!screwItem.isEmpty()) {

					// Винт -> Металл
					event.recipes.tfc.heating(screwItem, tfcProperty.getMeltTemp())
						.resultFluid(Fluid.of(outputMaterial.getFluid(), 16))
						.id(`tfc:heating/metal/${material.getName()}_screw`)

					// Стержень -> Винт
					event.recipes.tfc.anvil(screwItem, rodItem, ['punch_last', 'punch_second_last', 'shrink_third_last'])
						.tier(tfcProperty.getTier())
						.id(`tfc:anvil/${material.getName()}_screw`)

				}

				// Ring
				let ringItem = ChemicalHelper.get(TagPrefix.ring, material, 1)
				if (!ringItem.isEmpty()) {

					// Кольцо -> Металл
					event.recipes.tfc.heating(ringItem, tfcProperty.getMeltTemp())
						.resultFluid(Fluid.of(outputMaterial.getFluid(), 36))
						.id(`tfc:heating/metal/${material.getName()}_ring`)

					// Стержень -> Кольцо
					event.recipes.tfc.anvil(ringItem, rodItem, ['hit_last', 'hit_second_last', 'hit_third_last'])
						.tier(tfcProperty.getTier())
						.id(`tfc:anvil/${material.getName()}_ring`)

				}

				// Spring
				let springItem = ChemicalHelper.get(TagPrefix.spring, material, 1)
				if (!springItem.isEmpty() && !longRodItem.isEmpty()) {

					event.recipes.tfc.heating(springItem, tfcProperty.getMeltTemp())
						.resultFluid(Fluid.of(outputMaterial.getFluid(), 144))
						.id(`tfc:heating/metal/${material.getName()}_spring`)

					event.recipes.tfc.anvil(springItem, longRodItem, ['hit_last', 'bend_second_last', 'bend_third_last'])
						.tier(tfcProperty.getTier())
						.id(`tfc:anvil/${material.getName()}_spring`)
				}

				// Small spring
				let smallSpringItem = ChemicalHelper.get(TagPrefix.springSmall, material, 1)
				if (!smallSpringItem.isEmpty() && !rodItem.isEmpty()) {

					event.recipes.tfc.heating(smallSpringItem, tfcProperty.getMeltTemp())
						.resultFluid(Fluid.of(outputMaterial.getFluid(), 36))
						.id(`tfc:heating/metal/${material.getName()}_small_spring`)

					event.recipes.tfc.anvil(smallSpringItem, rodItem, ['hit_last', 'bend_second_last', 'bend_third_last'])
						.tier(tfcProperty.getTier())
						.id(`tfc:anvil/${material.getName()}_small_spring`)
				}

				// Nugget
				let nuggetItem = ChemicalHelper.get(TagPrefix.nugget, material, 6)
				if (!nuggetItem.isEmpty()) {

					event.recipes.tfc.heating(`#forge:nuggets/${material.getName()}`, tfcProperty.getMeltTemp())
						.resultFluid(Fluid.of(outputMaterial.getFluid(), 144/9))
						.id(`tfc:heating/metal/${material.getName()}_nugget`)

					event.recipes.tfc.anvil(nuggetItem, ingotItem, ['punch_last', 'hit_second_last', 'punch_third_last'])
						.tier(tfcProperty.getTier())
						.id(`tfc:anvil/${material.getName()}_nugget`)
				}
			}

			// Small Gears
			let smallGearItem = ChemicalHelper.get(TagPrefix.gearSmall, material, 1)
			if (!smallGearItem.isEmpty()) {

				if (tfcProperty.getMeltTemp() <= 1540) {
					event.recipes.tfc.heating(`gtceu:small_${material.getName()}_gear`, tfcProperty.getMeltTemp())
					.resultFluid(Fluid.of(`gtceu:${material.getName()}`, 144))
					.id(`tfc:heating/small_${material.getName()}_gear`)
				}

				if (material.hasFlag(MaterialFlags.GENERATE_SMALL_GEAR)) {
					event.recipes.tfc.anvil(`gtceu:small_${material.getName()}_gear`, `#forge:ingots/${material.getName()}`, ['hit_last', 'shrink_second_last', 'draw_third_last'])
					.tier(tfcProperty.getTier())
					.id(`tfc:anvil/small_${material.getName()}_gear`)
				}
			}

			// Tools (From Ingot)
			if (material.hasFlag(TFGMaterialFlags.HAS_TFC_TOOL) || material.hasFlag(TFGMaterialFlags.HAS_GT_TOOL)) {

				//#region pickaxe

				// Крафт инструмента
				event.remove({ id: `tfc:crafting/metal/pickaxe/${material.getName()}` })

				// Декрафт инструмента в жидкость
				let pickaxeItem = ToolHelper.get(GTToolType.PICKAXE, material)
				if (!pickaxeItem.isEmpty()) {

					event.recipes.tfc.heating(`gtceu:${material.getName()}_pickaxe`, tfcProperty.getMeltTemp())
						.resultFluid(Fluid.of(outputMaterial.getFluid(), 144))
						.useDurability(true)
						.id(`tfc:heating/metal/${material.getName()}_pickaxe`)

				}

				let pickaxeHeadItem = ChemicalHelper.get(TFGTagPrefix.toolHeadPickaxe, material, 1)
				if (!pickaxeHeadItem.isEmpty()) {

					// Декрафт оголовья в жидкость
					event.recipes.tfc.heating(pickaxeHeadItem, tfcProperty.getMeltTemp())
						.resultFluid(Fluid.of(outputMaterial.getFluid(), 144))
						.id(`tfc:heating/metal/${material.getName()}_pickaxe_head`)

					// Крафт оголовья
					event.recipes.tfc.anvil(pickaxeHeadItem, ingotItem, ['punch_last', 'bend_not_last', 'draw_not_last'])
						.tier(tfcProperty.getTier())
						.bonus(true)
						.id(`tfc:anvil/${material.getName()}_pickaxe_head`)

					// Металл + Форма -> Оголовье
					if (material.hasFlag(TFGMaterialFlags.CAN_BE_UNMOLDED)) {
						event.recipes.tfc.casting(pickaxeHeadItem, 'tfc:ceramic/pickaxe_head_mold', Fluid.of(outputMaterial.getFluid(), 144), 1)
							.id(`tfc:casting/${material.getName()}_pickaxe_head`)

						event.recipes.create.filling(
							Item.of('tfc:ceramic/pickaxe_head_mold', getFillingNBT(outputMaterial, 144)),
							[
								Fluid.of(outputMaterial.getFluid(), 144),
								Item.of('tfc:ceramic/pickaxe_head_mold').strongNBT()
							]
						).id(`tfg:tfc/filling/${material.getName()}_pickaxe_head`)
					}

				}
				//#endregion
					
				// #region mattock
				if (!material.hasFlag(TFGMaterialFlags.HAS_GT_TOOL)) {
					event.recipes.tfc.heating(`rnr:metal/mattock/${material.getName()}`, tfcProperty.getMeltTemp())
						.resultFluid(Fluid.of(outputMaterial.getFluid(), 144))
						.useDurability(true)
						.id(`rnr:heating/metal/${material.getName()}_mattock`)

					event.recipes.tfc.heating(`rnr:metal/mattock_head/${material.getName()}`, tfcProperty.getMeltTemp())
						.resultFluid(Fluid.of(outputMaterial.getFluid(), 144))
						.id(`rnr:heating/metal/${material.getName()}_mattock_head`)
				}
				//#endregion
				
				// #region screwdriver
				event.recipes.tfc.heating(`gtceu:${material.getName()}_screwdriver`, tfcProperty.getMeltTemp())
					.resultFluid(Fluid.of(outputMaterial.getFluid(), 144))
					.useDurability(true)
					.id(`gtceu:heating/metal/${material.getName()}_screwdriver`)

				event.recipes.tfc.heating(`gtceu:${material.getName()}_screwdriver_tip`, tfcProperty.getMeltTemp())
					.resultFluid(Fluid.of(outputMaterial.getFluid(), 144))
					.id(`gtceu:heating/metal/${material.getName()}_screwdriver_tip`)
					
				event.recipes.tfc.anvil(`gtceu:${material.getName()}_screwdriver_tip`, ingotItem, ['draw_last', 'hit_second_last', 'hit_third_last'])
					.tier(tfcProperty.getTier())
					.id(`gtceu:anvil/${material.getName()}_screwdriver_tip`)
				//#endregion
				
				//#region wrench
				event.recipes.tfc.heating(`gtceu:${material.getName()}_wrench`, tfcProperty.getMeltTemp())
					.resultFluid(Fluid.of(outputMaterial.getFluid(), 288 + 144 + 18))
					.useDurability(true)
					.id(`gtceu:heating/metal/${material.getName()}_wrench`)

				event.recipes.tfc.heating(`gtceu:${material.getName()}_wrench_tip`, tfcProperty.getMeltTemp())
					.resultFluid(Fluid.of(outputMaterial.getFluid(), 288))
					.id(`gtceu:heating/metal/${material.getName()}_wrench_tip`)

				event.recipes.tfc.anvil(`gtceu:${material.getName()}_wrench_tip`, doubleIngotItem, ['draw_last', 'hit_second_last', 'hit_third_last'])
					.tier(tfcProperty.getTier())
					.id(`gtceu:anvil/${material.getName()}_wrench_tip`)
				//#endregion
				
				//#region wire cutters
				event.recipes.tfc.heating(`gtceu:${material.getName()}_wire_cutter`, tfcProperty.getMeltTemp())
					.resultFluid(Fluid.of(outputMaterial.getFluid(), 288 + 144 + 18))
					.useDurability(true)
					.id(`gtceu:heating/metal/${material.getName()}_wire_cutter`)

				event.recipes.tfc.heating(`gtceu:${material.getName()}_wire_cutter_head`, tfcProperty.getMeltTemp())
					.resultFluid(Fluid.of(outputMaterial.getFluid(), 288))
					.id(`gtceu:heating/metal/${material.getName()}_wire_cutter_head`)

				event.recipes.tfc.anvil(`gtceu:${material.getName()}_wire_cutter_head`, doubleIngotItem, ['draw_last', 'hit_second_last', 'hit_third_last'])
					.tier(tfcProperty.getTier())
					.id(`gtceu:anvil/${material.getName()}_wire_cutter_head`)
				//#endregion
				
				//#region axe

				// Крафт инструмента
				event.remove({ id: `tfc:crafting/metal/axe/${material.getName()}` })

				// Декрафт инструмента в жидкость
				let axeItem = ToolHelper.get(GTToolType.AXE, material)
				if (!axeItem.isEmpty()) {

					event.recipes.tfc.heating(axeItem, tfcProperty.getMeltTemp())
						.resultFluid(Fluid.of(outputMaterial.getFluid(), 144))
						.useDurability(true)
						.id(`tfc:heating/metal/${material.getName()}_axe`)

				}

				let axeHeadItem = ChemicalHelper.get(TFGTagPrefix.toolHeadAxe, material, 1)
				if (!axeHeadItem.isEmpty()) {
					// Декрафт оголовья в жидкость
					event.recipes.tfc.heating(axeHeadItem, tfcProperty.getMeltTemp())
						.resultFluid(Fluid.of(outputMaterial.getFluid(), 144))
						.id(`tfc:heating/metal/${material.getName()}_axe_head`)

					// Крафт оголовья
					event.recipes.tfc.anvil(axeHeadItem, ingotItem, ['punch_last', 'hit_second_last', 'upset_third_last'])
						.tier(tfcProperty.getTier())
						.bonus(true)
						.id(`tfc:anvil/${material.getName()}_axe_head`)

					// Металл + Форма -> Оголовье
					if (material.hasFlag(TFGMaterialFlags.CAN_BE_UNMOLDED)) {
						event.recipes.tfc.casting(axeHeadItem, 'tfc:ceramic/axe_head_mold', Fluid.of(outputMaterial.getFluid(), 144), 1)
							.id(`tfc:casting/${material.getName()}_axe_head`)

						event.recipes.create.filling(
							Item.of('tfc:ceramic/axe_head_mold', getFillingNBT(outputMaterial, 144)),
							[
								Fluid.of(outputMaterial.getFluid(), 144),
								Item.of('tfc:ceramic/axe_head_mold').strongNBT()
							]
						).id(`tfg:tfc/filling/${material.getName()}_axe_head`)
					}
				}

				//#endregion

				//#region shovel

				// Крафт инструмента
				event.remove({ id: `tfc:crafting/metal/shovel/${material.getName()}` })

				// Декрафт инструмента в жидкость
				let shovelItem = ToolHelper.get(GTToolType.SHOVEL, material)
				if (!shovelItem.isEmpty()) {

					event.recipes.tfc.heating(shovelItem, tfcProperty.getMeltTemp())
						.resultFluid(Fluid.of(outputMaterial.getFluid(), 144))
						.useDurability(true)
						.id(`tfc:heating/metal/${material.getName()}_shovel`)

				}

				let shovelHeadItem = ChemicalHelper.get(TFGTagPrefix.toolHeadShovel, material, 1)
				if (!shovelHeadItem.isEmpty()) {

					// Декрафт оголовья в жидкость
					event.recipes.tfc.heating(shovelHeadItem, tfcProperty.getMeltTemp())
						.resultFluid(Fluid.of(outputMaterial.getFluid(), 144))
						.id(`tfc:heating/metal/${material.getName()}_shovel_head`)

					// Крафт оголовья
					event.recipes.tfc.anvil(shovelHeadItem, ingotItem, ['punch_last', 'hit_not_last'])
						.tier(tfcProperty.getTier())
						.bonus(true)
						.id(`tfc:anvil/${material.getName()}_shovel_head`)

					// Металл + Форма -> Оголовье
					if (material.hasFlag(TFGMaterialFlags.CAN_BE_UNMOLDED)) {
						event.recipes.tfc.casting(shovelHeadItem, 'tfc:ceramic/shovel_head_mold', Fluid.of(outputMaterial.getFluid(), 144), 1)
							.id(`tfc:casting/${material.getName()}_shovel_head`)

						event.recipes.create.filling(
							Item.of('tfc:ceramic/shovel_head_mold', getFillingNBT(outputMaterial, 144)),
							[
								Fluid.of(outputMaterial.getFluid(), 144),
								Item.of('tfc:ceramic/shovel_head_mold').strongNBT()
							]
						).id(`tfg:tfc/filling/${material.getName()}_shovel_head_mold`)
					}

				}

				//#endregion

				//#region hoe

				// Крафт инструмента
				event.remove({ id: `tfc:crafting/metal/hoe/${material.getName()}` })

				// Декрафт инструмента в жидкость
				let hoeItem = ToolHelper.get(GTToolType.HOE, material)
				if (!hoeItem.isEmpty()) {
					event.recipes.tfc.heating(hoeItem, tfcProperty.getMeltTemp())
						.resultFluid(Fluid.of(outputMaterial.getFluid(), 144))
						.useDurability(true)
						.id(`tfc:heating/metal/${material.getName()}_hoe`)
				}

				let hoeHeadItem = ChemicalHelper.get(TFGTagPrefix.toolHeadHoe, material, 1)
				if (!hoeHeadItem.isEmpty()) {

					// Декрафт оголовья в жидкость
					event.recipes.tfc.heating(hoeHeadItem, tfcProperty.getMeltTemp())
						.resultFluid(Fluid.of(outputMaterial.getFluid(), 144))
						.id(`tfc:heating/metal/${material.getName()}_hoe_head`)

					// Крафт оголовья
					event.recipes.tfc.anvil(hoeHeadItem, ingotItem, ['punch_last', 'hit_not_last', 'bend_not_last'])
						.tier(tfcProperty.getTier())
						.bonus(true)
						.id(`tfc:anvil/${material.getName()}_hoe_head`)

					// Металл + Форма -> Оголовье
					if (material.hasFlag(TFGMaterialFlags.CAN_BE_UNMOLDED)) {
						event.recipes.tfc.casting(hoeHeadItem, 'tfc:ceramic/hoe_head_mold', Fluid.of(outputMaterial.getFluid(), 144), 1)
							.id(`tfc:casting/${material.getName()}_hoe_head`)

						event.recipes.create.filling(
							Item.of('tfc:ceramic/hoe_head_mold', getFillingNBT(outputMaterial, 144)),
							[
								Fluid.of(outputMaterial.getFluid(), 144),
								Item.of('tfc:ceramic/hoe_head_mold').strongNBT()
							]
						).id(`tfg:tfc/filling/${material.getName()}_hoe_head_mold`)
					}

				}

				//#endregion

				//#region crafting hammer

				// Крафт инструмента
				event.remove({ id: `tfc:crafting/metal/hammer/${material.getName()}` })

				// Декрафт инструмента в жидкость
				let hammerItem = ToolHelper.get(GTToolType.HARD_HAMMER, material)
				if (!hammerItem.isEmpty()) {

					event.recipes.tfc.heating(hammerItem, tfcProperty.getMeltTemp())
						.resultFluid(Fluid.of(outputMaterial.getFluid(), 144))
						.useDurability(true)
						.id(`tfc:heating/metal/${material.getName()}_hammer`)

				}

				let hammerHeadItem = ChemicalHelper.get(TFGTagPrefix.toolHeadHammer, material, 1)
				if (!hammerHeadItem.isEmpty()) {

					// Декрафт оголовья в жидкость
					event.recipes.tfc.heating(hammerHeadItem, tfcProperty.getMeltTemp())
						.resultFluid(Fluid.of(outputMaterial.getFluid(), 144))
						.id(`tfc:heating/metal/${material.getName()}_hammer_head`)

					// Крафт оголовья
					event.recipes.tfc.anvil(hammerHeadItem, ingotItem, ['punch_last', 'shrink_not_last'])
						.tier(tfcProperty.getTier())
						.bonus(true)
						.id(`tfc:anvil/${material.getName()}_hammer_head`)

					// Металл + Форма -> Оголовье
					if (material.hasFlag(TFGMaterialFlags.CAN_BE_UNMOLDED)) {
						event.recipes.tfc.casting(hammerHeadItem, 'tfc:ceramic/hammer_head_mold', Fluid.of(outputMaterial.getFluid(), 144), 1)
							.id(`tfc:casting/${material.getName()}_hammer_head`)

						event.recipes.create.filling(
							Item.of('tfc:ceramic/hammer_head_mold', getFillingNBT(outputMaterial, 144)),
							[
								Fluid.of(outputMaterial.getFluid(), 144),
								Item.of('tfc:ceramic/hammer_head_mold').strongNBT()
							]
						).id(`tfg:tfc/filling/${material.getName()}_hammer_head_mold`)
					}

				}

				//#endregion

				//#region saw

				// Крафт инструмента
				event.remove({ id: `tfc:crafting/metal/saw/${material.getName()}` })

				// Декрафт инструмента в жидкость
				let sawItem = ToolHelper.get(GTToolType.SAW, material)
				if (!sawItem.isEmpty()) {

					event.recipes.tfc.heating(sawItem, tfcProperty.getMeltTemp())
						.resultFluid(Fluid.of(outputMaterial.getFluid(), 144))
						.useDurability(true)
						.id(`tfc:heating/metal/${material.getName()}_saw`)

				}

				let sawHeadItem = ChemicalHelper.get(TFGTagPrefix.toolHeadSaw, material, 1)
				if (!sawHeadItem.isEmpty()) {

					// Декрафт оголовья в жидкость
					event.recipes.tfc.heating(sawHeadItem, tfcProperty.getMeltTemp())
						.resultFluid(Fluid.of(outputMaterial.getFluid(), 144))
						.id(`tfc:heating/metal/${material.getName()}_saw_blade`)

					// Крафт оголовья
					event.recipes.tfc.anvil(sawHeadItem, ingotItem, ['hit_last', 'hit_second_last'])
						.tier(tfcProperty.getTier())
						.bonus(true)
						.id(`tfc:anvil/${material.getName()}_saw_blade`)

					// Металл + Форма -> Оголовье
					if (material.hasFlag(TFGMaterialFlags.CAN_BE_UNMOLDED)) {
						event.recipes.tfc.casting(sawHeadItem, 'tfc:ceramic/saw_blade_mold', Fluid.of(outputMaterial.getFluid(), 144), 1)
							.id(`tfc:casting/${material.getName()}_saw_blade`)

						event.recipes.create.filling(
							Item.of('tfc:ceramic/saw_blade_mold', getFillingNBT(outputMaterial, 144)),
							[
								Fluid.of(outputMaterial.getFluid(), 144),
								Item.of('tfc:ceramic/saw_blade_mold').strongNBT()
							]
						).id(`tfg:tfc/filling/${material.getName()}_saw_blade_mold`)
					}

				}

				//#endregion

				//#region scythe

				// Крафт инструмента
				event.remove({ id: `tfc:crafting/metal/scythe/${material.getName()}` })

				// Декрафт инструмента в жидкость
				let scytheItem = ToolHelper.get(GTToolType.SCYTHE, material)
				if (!scytheItem.isEmpty()) {
					event.recipes.tfc.heating(scytheItem, tfcProperty.getMeltTemp())
						.resultFluid(Fluid.of(outputMaterial.getFluid(), 144))
						.useDurability(true)
						.id(`tfc:heating/metal/${material.getName()}_scythe`)
				}

				let scytheHeadItem = ChemicalHelper.get(TFGTagPrefix.toolHeadScythe, material, 1)
				if (!scytheHeadItem.isEmpty()) {

					// Декрафт оголовья в жидкость
					event.recipes.tfc.heating(scytheHeadItem, tfcProperty.getMeltTemp())
						.resultFluid(Fluid.of(outputMaterial.getFluid(), 144))
						.id(`tfc:heating/metal/${material.getName()}_scythe_blade`)

					// Крафт оголовья
					event.recipes.tfc.anvil(scytheHeadItem, ingotItem, ['punch_last', 'bend_not_last', 'draw_not_last'])
						.tier(tfcProperty.getTier())
						.bonus(true)
						.id(`tfc:anvil/${material.getName()}_scythe_blade`)

					// Металл + Форма -> Оголовье
					if (material.hasFlag(TFGMaterialFlags.CAN_BE_UNMOLDED)) {
						event.recipes.tfc.casting(scytheHeadItem, 'tfc:ceramic/scythe_blade_mold', Fluid.of(outputMaterial.getFluid(), 144), 1)
							.id(`tfc:casting/${material.getName()}_scythe_blade`)

						event.recipes.create.filling(
							Item.of('tfc:ceramic/scythe_blade_mold', getFillingNBT(outputMaterial, 144)),
							[
								Fluid.of(outputMaterial.getFluid(), 144),
								Item.of('tfc:ceramic/scythe_blade_mold').strongNBT()
							]
						).id(`tfg:tfc/filling/${material.getName()}_scythe_blade_mold`)
					}

				}

				//#endregion

				//#region file

				// Декрафт инструмента в жидкость
				let fileItem = ToolHelper.get(GTToolType.FILE, material)
				if (!fileItem.isEmpty()) {
					event.recipes.tfc.heating(fileItem, tfcProperty.getMeltTemp())
						.resultFluid(Fluid.of(outputMaterial.getFluid(), 144))
						.useDurability(true)
						.id(`tfc:heating/metal/${material.getName()}_file`)
				}

				let fileHeadItem = ChemicalHelper.get(TFGTagPrefix.toolHeadFile, material, 1)
				if (!fileHeadItem.isEmpty()) {

					// Декрафт оголовья в жидкость
					event.recipes.tfc.heating(fileHeadItem, tfcProperty.getMeltTemp())
						.resultFluid(Fluid.of(outputMaterial.getFluid(), 144))
						.id(`tfc:heating/metal/${material.getName()}_file_head`)

					// Крафт оголовья
					event.recipes.tfc.anvil(fileHeadItem, ingotItem, ['upset_last', 'bend_not_last', 'punch_not_last'])
						.tier(tfcProperty.getTier())
						.bonus(true)
						.id(`tfc:anvil/${material.getName()}_file_head`)

				}

				//#endregion

				//#region knife

				// Крафт инструмента
				event.remove({ id: `tfc:crafting/metal/knife/${material.getName()}` })

				// Декрафт инструмента в жидкость
				let knifeItem = ToolHelper.get(GTToolType.KNIFE, material)
				if (!knifeItem.isEmpty()) {
					event.recipes.tfc.heating(knifeItem, tfcProperty.getMeltTemp())
						.resultFluid(Fluid.of(outputMaterial.getFluid(), 144))
						.useDurability(true)
						.id(`tfc:heating/metal/${material.getName()}_knife`)
				}

				let knifeHeadItem = ChemicalHelper.get(TFGTagPrefix.toolHeadKnife, material, 1)
				if (!knifeHeadItem.isEmpty()) {

					// Декрафт оголовья в жидкость
					event.recipes.tfc.heating(knifeHeadItem, tfcProperty.getMeltTemp())
						.resultFluid(Fluid.of(outputMaterial.getFluid(), 144))
						.id(`tfc:heating/metal/${material.getName()}_knife_blade`)

					// Крафт оголовья
					event.recipes.tfc.anvil(knifeHeadItem, ingotItem, ['punch_last', 'bend_not_last', 'draw_not_last'])
						.tier(tfcProperty.getTier())
						.bonus(true)
						.id(`tfc:anvil/${material.getName()}_knife_blade`)

					// Металл + Форма -> Оголовье
					if (material.hasFlag(TFGMaterialFlags.CAN_BE_UNMOLDED)) {
						event.recipes.tfc.casting(knifeHeadItem, 'tfc:ceramic/knife_blade_mold', Fluid.of(outputMaterial.getFluid(), 144), 1)
							.id(`tfc:casting/${material.getName()}_knife_blade`)

						event.recipes.create.filling(
							Item.of('tfc:ceramic/knife_blade_mold', getFillingNBT(outputMaterial, 144)),
							[
								Fluid.of(outputMaterial.getFluid(), 144),
								Item.of('tfc:ceramic/knife_blade_mold').strongNBT()
							]
						).id(`tfg:tfc/filling/${material.getName()}_knife_blade_mold`)
					}

					//#region shears 

					// Сварка оголовий
					if (!material.hasFlag(TFGMaterialFlags.HAS_GT_TOOL)) {
						event.recipes.tfc.welding(`tfc:metal/shears/${material.getName()}`, knifeHeadItem, knifeHeadItem, tfcProperty.getTier())
							.id(`tfc:welding/${material.getName()}_shears`)

						event.recipes.greate.compacting(`tfc:metal/shears/${material.getName()}`, [knifeHeadItem, knifeHeadItem, 'tfc:powder/flux'])
							.heated()
							.recipeTier(tfcProperty.getTier() < 4 ? 0 : 1)
							.id(`greate:compacting/${material.getName()}_shears`)

						// Декрафт инструмента в жидкость
						event.recipes.tfc.heating(`tfc:metal/shears/${material.getName()}`, tfcProperty.getMeltTemp())
							.resultFluid(Fluid.of(outputMaterial.getFluid(), 288))
							.useDurability(true)
							.id(`tfc:heating/metal/${material.getName()}_shears`)

						event.recipes.gtceu.forge_hammer(`tfc:metal/shears/${material.getName()}`)
							.itemInputs(knifeHeadItem.withCount(2))
							.itemOutputs(`tfc:metal/shears/${material.getName()}`)
							.duration(40)
							.EUt(7)
					}
					//#endregion

				}

				//#endregion

				//#region prospector pick

				if (!material.hasFlag(TFGMaterialFlags.HAS_GT_TOOL)) {
					// Декрафт инструмента в жидкость
					event.recipes.tfc.heating(`tfc:metal/propick/${material.getName()}`, tfcProperty.getMeltTemp())
						.resultFluid(Fluid.of(outputMaterial.getFluid(), 144))
						.useDurability(true)
						.id(`tfc:heating/metal/${material.getName()}_propick`)

					// Декрафт оголовья в жидкость
					event.recipes.tfc.heating(`tfc:metal/propick_head/${material.getName()}`, tfcProperty.getMeltTemp())
						.resultFluid(Fluid.of(outputMaterial.getFluid(), 144))
						.id(`tfc:heating/metal/${material.getName()}_propick_head`)

					// Металл + Форма -> Оголовье
					if (material.hasFlag(TFGMaterialFlags.CAN_BE_UNMOLDED)) {
						event.recipes.tfc.casting(`tfc:metal/propick_head/${material.getName()}`, 'tfc:ceramic/propick_head_mold', Fluid.of(outputMaterial.getFluid(), 144), 1)
							.id(`tfc:casting/${material.getName()}_propick_head`)

						event.recipes.create.filling(
							Item.of('tfc:ceramic/propick_head_mold', getFillingNBT(outputMaterial, 144)),
							[
								Fluid.of(outputMaterial.getFluid(), 144),
								Item.of('tfc:ceramic/propick_head_mold').strongNBT()
							]
						).id(`tfg:tfc/filling/${material.getName()}_propick_head_mold`)
					}
				}
				//#endregion

				//#region chisel
				if (!material.hasFlag(TFGMaterialFlags.HAS_GT_TOOL)) {
					// Декрафт инструмента в жидкость
					event.recipes.tfc.heating(`tfc:metal/chisel/${material.getName()}`, tfcProperty.getMeltTemp())
						.resultFluid(Fluid.of(outputMaterial.getFluid(), 144))
						.useDurability(true)
						.id(`tfc:heating/metal/${material.getName()}_chisel`)

					// Декрафт оголовья в жидкость
					event.recipes.tfc.heating(`tfc:metal/chisel_head/${material.getName()}`, tfcProperty.getMeltTemp())
						.resultFluid(Fluid.of(outputMaterial.getFluid(), 144))
						.id(`tfc:heating/metal/${material.getName()}_chisel_head`)

					// Металл + Форма -> Оголовье
					if (material.hasFlag(TFGMaterialFlags.CAN_BE_UNMOLDED)) {
						event.recipes.tfc.casting(`tfc:metal/chisel_head/${material.getName()}`, 'tfc:ceramic/chisel_head_mold', Fluid.of(outputMaterial.getFluid(), 144), 1)
							.id(`tfc:casting/${material.getName()}_chisel_head`)

						event.recipes.create.filling(
							Item.of('tfc:ceramic/chisel_head_mold', getFillingNBT(outputMaterial, 144)),
							[
								Fluid.of(outputMaterial.getFluid(), 144),
								Item.of('tfc:ceramic/chisel_head_mold').strongNBT()
							]
						).id(`tfg:tfc/filling/${material.getName()}_chisel_head_mold`)
					}
				}
				//#endregion

				//#region javelin
				if (!material.hasFlag(TFGMaterialFlags.HAS_GT_TOOL)) {
					// Декрафт инструмента в жидкость
					event.recipes.tfc.heating(`tfc:metal/javelin/${material.getName()}`, tfcProperty.getMeltTemp())
						.resultFluid(Fluid.of(outputMaterial.getFluid(), 144))
						.useDurability(true)
						.id(`tfc:heating/metal/${material.getName()}_javelin`)

					// Декрафт оголовья в жидкость
					event.recipes.tfc.heating(`tfc:metal/javelin_head/${material.getName()}`, tfcProperty.getMeltTemp())
						.resultFluid(Fluid.of(outputMaterial.getFluid(), 144))
						.id(`tfc:heating/metal/${material.getName()}_javelin_head`)

					// Металл + Форма -> Оголовье
					if (material.hasFlag(TFGMaterialFlags.CAN_BE_UNMOLDED)) {
						event.recipes.tfc.casting(`tfc:metal/javelin_head/${material.getName()}`, 'tfc:ceramic/javelin_head_mold', Fluid.of(outputMaterial.getFluid(), 144), 1)
							.id(`tfc:casting/${material.getName()}_javelin_head`)

						event.recipes.create.filling(
							Item.of('tfc:ceramic/javelin_head_mold', getFillingNBT(outputMaterial, 144)),
							[
								Fluid.of(outputMaterial.getFluid(), 144),
								Item.of('tfc:ceramic/javelin_head_mold').strongNBT()
							]
						).id(`tfg:tfc/filling/${material.getName()}_javelin_head_mold`)
					}
				}
				//#endregion
			}
		}

		// Blocks
		let blockItem = ChemicalHelper.get(TagPrefix.block, material, 1)
		if (!blockItem.isEmpty()) {

			// Декрафт блока в жидкость
			event.recipes.tfc.heating(`#forge:storage_blocks/${material.getName()}`, tfcProperty.getMeltTemp())
				.resultFluid(Fluid.of(outputMaterial.getFluid(), 1296))
				.id(`tfc:heating/metal/${material.getName()}_storage_block`)

		}

		// Anvils, Lamps, Trapdors, Chains
		if (material.hasFlag(TFGMaterialFlags.HAS_TFC_UTILITY)) {

			// Декрафт незавершенной лампы в жидкость
			event.recipes.tfc.heating(`tfc:metal/unfinished_lamp/${material.getName()}`, tfcProperty.getMeltTemp())
				.resultFluid(Fluid.of(outputMaterial.getFluid(), 144))
				.id(`tfc:heating/metal/${material.getName()}_unfinished_lamp`)

			// Декрафт лампы в жидкость
			event.recipes.tfc.heating(`tfc:metal/lamp/${material.getName()}`, tfcProperty.getMeltTemp())
				.resultFluid(Fluid.of(outputMaterial.getFluid(), 144))
				.id(`tfc:heating/metal/${material.getName()}_lamp`)

			// Декрафт люка в жидкость
			event.recipes.tfc.heating(`tfc:metal/trapdoor/${material.getName()}`, tfcProperty.getMeltTemp())
				.resultFluid(Fluid.of(outputMaterial.getFluid(), 144))
				.id(`tfc:heating/metal/${material.getName()}_trapdoor`)

			let plateItem = ChemicalHelper.get(TagPrefix.plate, material, 1);

			// Люк
			event.recipes.tfc.anvil(`tfc:metal/trapdoor/${material.getName()}`, plateItem,
				['bend_last', 'draw_second_last', 'draw_third_last'])
				.tier(tfcProperty.getTier())
				.id(`tfc:anvil/${material.getName()}_trapdoor`)

			// Декрафт решетки в жидкость
			event.recipes.tfc.heating(`tfc:metal/bars/${material.getName()}`, tfcProperty.getMeltTemp())
				.resultFluid(Fluid.of(outputMaterial.getFluid(), 18))
				.id(`tfc:heating/metal/${material.getName()}_bars`)

			// 8x Решетка
			event.recipes.tfc.anvil(`4x tfc:metal/bars/${material.getName()}`, ingotItem,
				['upset_last', 'punch_second_last', 'punch_third_last'])
				.tier(tfcProperty.getTier())
				.id(`tfc:anvil/${material.getName()}_bars`)

			// 16x Решетка
			event.recipes.tfc.anvil(`8x tfc:metal/bars/${material.getName()}`, ChemicalHelper.get(TFGTagPrefix.ingotDouble, material, 1),
				['upset_last', 'punch_second_last', 'punch_third_last'])
				.tier(tfcProperty.getTier())
				.id(`tfc:anvil/${material.getName()}_bars_double`)

			// Декрафт цепи в жидкость
			event.recipes.tfc.heating(`tfc:metal/chain/${material.getName()}`, tfcProperty.getMeltTemp())
				.resultFluid(Fluid.of(outputMaterial.getFluid(), 9))
				.id(`tfc:heating/metal/${material.getName()}_chain`)

			// Декрафт наковальни в жидкость
			event.recipes.tfc.heating(`tfc:metal/anvil/${material.getName()}`, tfcProperty.getMeltTemp())
				.resultFluid(Fluid.of(outputMaterial.getFluid(), 2016))
				.id(`tfc:heating/metal/${material.getName()}_anvil`)
		}

		//#region tongs
		let tongsStack = Item.of(`tfchotornot:tongs/${material.getName()}`)
		let tongPartStack = Item.of(`tfchotornot:tong_part/${material.getName()}`)

		if (!tongsStack.isEmpty() && !tongPartStack.isEmpty() && material !== GTMaterials.Iron) {
			event.recipes.tfc.advanced_shaped_crafting(
				TFC.isp.of(tongsStack).copyForgingBonus(), [
					'AA',
					'BC'
				], {
					A: tongPartStack,
					B: '#forge:bolts',
					C: '#forge:tools/hammers'
				}, 0, 0).id(`tfchotornot:crafting/tongs/${material.getName()}`)

			// tong parts
			event.recipes.tfc.heating(tongPartStack, tfcProperty.getMeltTemp())
				.resultFluid(Fluid.of(outputMaterial.getFluid(), 144))
				.id(`tfchotornot:heating/tong_part/${material.getName()}`)

			// tong heating
			event.recipes.tfc.heating(tongsStack, tfcProperty.getMeltTemp())
				.resultFluid(Fluid.of(outputMaterial.getFluid(), 288))
				.useDurability(true)
				.id(`tfchotornot:heating/tongs/${material.getName()}`)
		}
		//#endregion

		// Small TFC Ores
		if (material.hasFlag(TFGMaterialFlags.HAS_SMALL_TFC_ORE)) {

			// Workaround for limonite/bismuth
			let materialName = material.getName();
			if (materialName === "yellow_limonite") {
				materialName = "limonite";
			} else if (materialName === "bismuth") {
				materialName = "bismuthinite";
			}

			// Декрафт мелкого кусочка в жидкость
			event.recipes.tfc.heating(`tfc:ore/small_${materialName}`, tfcProperty.getMeltTemp())
				.resultFluid(Fluid.of(outputMaterial.getFluid(), 16))
				.id(`tfc:heating/ore/small_${materialName}`)
		}

		// Small Native TFC Ores
		if (material.hasFlag(TFGMaterialFlags.HAS_SMALL_NATIVE_TFC_ORE)) {
			// Декрафт мелкого кусочка в жидкость
			event.recipes.tfc.heating(`tfc:ore/small_native_${material.getName()}`, tfcProperty.getMeltTemp())
				.resultFluid(Fluid.of(outputMaterial.getFluid(), 16))
				.id(`tfc:heating/ore/small_native_${material.getName()}`)
		}

		// Any Dusts from GTCEu
		if (material.hasProperty(PropertyKey.DUST)) {

			// Декрафт мелкой пыли
			let tinyDust = ChemicalHelper.get(TagPrefix.dustTiny, material, 1)
			if (!tinyDust.isEmpty()) {

				event.recipes.tfc.heating(tinyDust, tfcProperty.getMeltTemp())
					.resultFluid(Fluid.of(outputMaterial.getFluid(), global.calcAmountOfMetalProcessed(16, tfcProperty.getPercentOfMaterial())))
					.id(`tfg:heating/tiny_dust/${material.getName()}`)

			}

			// Декрафт средней пыли
			let smallDust = ChemicalHelper.get(TagPrefix.dustSmall, material, 1)
			if (!smallDust.isEmpty()) {

				event.recipes.tfc.heating(smallDust, tfcProperty.getMeltTemp())
					.resultFluid(Fluid.of(outputMaterial.getFluid(), global.calcAmountOfMetalProcessed(36, tfcProperty.getPercentOfMaterial())))
					.id(`tfg:heating/small_dust/${material.getName()}`)

			}

			// Декрафт пыли
			let dust = ChemicalHelper.get(TagPrefix.dust, material, 1)
			if (!dust.isEmpty()) {

				event.recipes.tfc.heating(dust, tfcProperty.getMeltTemp())
					.resultFluid(Fluid.of(outputMaterial.getFluid(), global.calcAmountOfMetalProcessed(144, tfcProperty.getPercentOfMaterial())))
					.id(`tfg:heating/dust/${material.getName()}`)

			}

			// Декрафт грязной пыли
			let impureDust = ChemicalHelper.get(TagPrefix.dustImpure, material, 1)
			if (!impureDust.isEmpty()) {

				event.recipes.tfc.heating(impureDust, tfcProperty.getMeltTemp())
					.resultFluid(Fluid.of(outputMaterial.getFluid(), global.calcAmountOfMetalProcessed(80, tfcProperty.getPercentOfMaterial())))
					.id(`tfg:heating/impure_dust/${material.getName()}`)

			}

			// Декрафт очищенной пыли
			let purifiedDust = ChemicalHelper.get(TagPrefix.dustPure, material, 1)
			if (!purifiedDust.isEmpty()) {

				event.recipes.tfc.heating(purifiedDust, tfcProperty.getMeltTemp())
					.resultFluid(Fluid.of(outputMaterial.getFluid(), global.calcAmountOfMetalProcessed(120, tfcProperty.getPercentOfMaterial())))
					.id(`tfg:heating/purified_dust/${material.getName()}`)

			}

		}

		// Any Ores from GTCEu
		if (material.hasProperty(PropertyKey.ORE)) {

			// Декрафт ломанной руды
			let crushedOre = ChemicalHelper.get(TagPrefix.crushed, material, 1)
			if (!crushedOre.isEmpty()) {

				event.recipes.tfc.heating(crushedOre, tfcProperty.getMeltTemp())
					.resultFluid(Fluid.of(outputMaterial.getFluid(), global.calcAmountOfMetalProcessed(80, tfcProperty.getPercentOfMaterial())))
					.id(`tfg:heating/crushed_ore/${material.getName()}`)

			}

			// Декрафт ломанной очищенной руды
			let crushedPurifiedOre = ChemicalHelper.get(TagPrefix.crushedPurified, material, 1)
			if (!crushedPurifiedOre.isEmpty()) {

				event.recipes.tfc.heating(crushedPurifiedOre, tfcProperty.getMeltTemp())
					.resultFluid(Fluid.of(outputMaterial.getFluid(), global.calcAmountOfMetalProcessed(100, tfcProperty.getPercentOfMaterial())))
					.id(`tfg:heating/crushed_purified_ore/${material.getName()}`)

			}

			// Декрафт центрифугированной ломанной руды
			let crushedRefinedOre = ChemicalHelper.get(TagPrefix.crushedRefined, material, 1)
			if (!crushedRefinedOre.isEmpty()) {

				event.recipes.tfc.heating(crushedRefinedOre, tfcProperty.getMeltTemp())
					.resultFluid(Fluid.of(outputMaterial.getFluid(), global.calcAmountOfMetalProcessed(110, tfcProperty.getPercentOfMaterial())))
					.id(`tfg:heating/crushed_refined_ore/${material.getName()}`)

			}

			// Декрафт богатого куска руды
			let richRawOre = ChemicalHelper.get(TFGTagPrefix.richRawOre, material, 1)
			if (!richRawOre.isEmpty()) {

				event.recipes.tfc.heating(richRawOre, tfcProperty.getMeltTemp())
					.resultFluid(Fluid.of(outputMaterial.getFluid(), global.calcAmountOfMetal(48, tfcProperty.getPercentOfMaterial())))
					.id(`tfg:heating/rich_raw/${material.getName()}`)
			}

			// Декрафт нормального куска руды
			let normalRawOre = ChemicalHelper.get(TagPrefix.rawOre, material, 1)
			if (!normalRawOre.isEmpty()) {

				event.recipes.tfc.heating(normalRawOre, tfcProperty.getMeltTemp())
					.resultFluid(Fluid.of(outputMaterial.getFluid(), global.calcAmountOfMetal(36, tfcProperty.getPercentOfMaterial())))
					.id(`tfg:heating/raw/${material.getName()}`)
			}

			// Декрафт бедного куска руды
			let poorRawOre = ChemicalHelper.get(TFGTagPrefix.poorRawOre, material, 1)
			if (!poorRawOre.isEmpty()) {
				event.recipes.tfc.heating(poorRawOre, tfcProperty.getMeltTemp())
					.resultFluid(Fluid.of(outputMaterial.getFluid(), global.calcAmountOfMetal(24, tfcProperty.getPercentOfMaterial())))
					.id(`tfg:heating/poor_raw/${material.getName()}`)
			}
		}

		// Nuggets
		let nuggetItem = ChemicalHelper.get(TagPrefix.nugget, material, 1)
		if (!nuggetItem.isEmpty()) {

			// Декрафт самородков пыли
			event.recipes.tfc.heating(nuggetItem, tfcProperty.getMeltTemp())
				.resultFluid(Fluid.of(outputMaterial.getFluid(), global.calcAmountOfMetal(16, tfcProperty.getPercentOfMaterial())))
				.id(`tfg:heating/nugget/${material.getName()}`)
		}
	})
}
