From 33088aa174b900219611a52032da7b753793eb4d Mon Sep 17 00:00:00 2001 From: Pyritie Date: Tue, 10 Jun 2025 20:13:03 +0100 Subject: [PATCH 01/23] rearranged food recipes into hopefully a good format? --- kubejs/server_scripts/firmalife/recipes.js | 301 --------- kubejs/server_scripts/tfc/recipes.js | 47 -- kubejs/server_scripts/tfc/recipes.machines.js | 165 +---- kubejs/server_scripts/tfg/recipes.food.js | 627 ++++++++++++++++++ kubejs/startup_scripts/firmalife/constants.js | 22 +- kubejs/startup_scripts/tfc/constants.js | 6 + 6 files changed, 652 insertions(+), 516 deletions(-) create mode 100644 kubejs/server_scripts/tfg/recipes.food.js diff --git a/kubejs/server_scripts/firmalife/recipes.js b/kubejs/server_scripts/firmalife/recipes.js index 90d2e64f0..195b9745d 100644 --- a/kubejs/server_scripts/firmalife/recipes.js +++ b/kubejs/server_scripts/firmalife/recipes.js @@ -454,276 +454,6 @@ const registerFirmaLifeRecipes = (event) => { //#endregion - //#region Рецепты муки - - global.FIRMALIFE_QUERN_FLOUR_RECIPE_COMPONENTS.forEach(element => { - event.recipes.gtceu.macerator(`tfg:${element.name}`) - .itemInputs(element.input) - .itemOutputs(element.output) - .duration(200) - .EUt(2) - }) - - //#endregion - - //#region Рецепты теста - - global.FIRMALIFE_MIXER_FLATBREAD_DOUGH_RECIPE_COMPONENTS.forEach(element => { - event.recipes.gtceu.mixer(element.name) - .itemInputs(element.input, '#tfc:sweetener') - .inputFluids(Fluid.of('firmalife:yeast_starter', 100)) - .itemOutputs(element.output) - .duration(300) - .EUt(16) - .circuit(2) - }) - - //#endregion - - //#region Рецепты плоского хлеба - - global.FIRMALIFE_FURNACE_FLATBREAD_RECIPE_COMPONENTS.forEach(element => { - event.smelting(element.output, element.input) - .id(`tfg:smelting/${element.name}`) - }) - - //#endregion - - //#region Смешивание в миске - - // Тесто для пиццы - event.recipes.gtceu.mixer('firmalife:food/pizza_dough_olive_oil') - .itemInputs('firmalife:spice/basil_leaves', '#tfc:foods/dough', 'tfc:powder/salt') - .inputFluids(Fluid.of('tfc:olive_oil', 1000)) - .itemOutputs('4x firmalife:food/pizza_dough') - .duration(300) - .EUt(16) - - event.recipes.gtceu.mixer('firmalife:food/pizza_dough_soybean_oil') - .itemInputs('firmalife:spice/basil_leaves', '#tfc:foods/dough', 'tfc:powder/salt') - .inputFluids(Fluid.of('firmalife:soybean_oil', 1000)) - .itemOutputs('4x firmalife:food/pizza_dough') - .duration(300) - .EUt(16) - - // Vanilla Ice Cream - event.recipes.gtceu.mixer('firmalife:food/vanilla_ice_cream') - .itemInputs('firmalife:ice_shavings', '#tfc:sweetener', 'firmalife:spice/vanilla') - .inputFluids(Fluid.of('firmalife:cream', 1000)) - .itemOutputs('2x firmalife:food/vanilla_ice_cream') - .duration(300) - .EUt(16) - - // Pumpkin Pie Dough - event.recipes.gtceu.mixer('firmalife:food/pumpkin_pie_dough') - .itemInputs('#tfc:sweetener', '#forge:eggs', '2x tfc:food/pumpkin_chunks', '#tfc:foods/flour') - .inputFluids(Fluid.of('minecraft:water', 1000)) - .itemOutputs('firmalife:food/pumpkin_pie_dough') - .duration(300) - .EUt(16) - .circuit(2) - - // Butter - event.recipes.gtceu.mixer('firmalife:food/butter') - .itemInputs('tfc:powder/salt') - .inputFluids(Fluid.of('firmalife:cream', 1000)) - .itemOutputs('firmalife:food/butter') - .duration(300) - .EUt(16) - - // Pie Dough - event.recipes.gtceu.mixer('firmalife:food/pie_dough') - .itemInputs('#tfc:sweetener', 'firmalife:food/butter', '#tfc:foods/flour') - .inputFluids(Fluid.of('minecraft:water', 1000)) - .itemOutputs('firmalife:food/pie_dough') - .duration(300) - .EUt(16) - .circuit(2) - - // Cookie Dough - event.recipes.gtceu.mixer('firmalife:food/cookie_dough') - .itemInputs('#tfc:sweetener', 'firmalife:food/butter', '#tfc:foods/flour', '#forge:eggs', 'firmalife:spice/vanilla') - .itemOutputs('4x firmalife:food/cookie_dough') - .duration(300) - .EUt(16) - - // Hardtack Dough - event.recipes.gtceu.mixer('firmalife:food/hardtack_dough') - .itemInputs('tfc:powder/salt', '#tfc:foods/flour') - .inputFluids(Fluid.of('minecraft:water', 1000)) - .itemOutputs('4x firmalife:food/hardtack_dough') - .duration(300) - .EUt(16) - .circuit(2) - - // Yeast starter - event.recipes.gtceu.mixer('firmalife:yeast_starter') - .inputFluids(Fluid.of('firmalife:yeast_starter', 100)) - .itemInputs('#tfc:foods/flour') - .outputFluids(Fluid.of('firmalife:yeast_starter', 600)) - .duration(1200) - .EUt(8) - .circuit(1) - - // Cocoa Powder - event.recipes.gtceu.macerator('firmalife:food/cocoa_powder') - .itemInputs('gtceu:cocoa_dust') - .itemOutputs('4x firmalife:food/cocoa_powder') - .duration(100) - .EUt(2) - - event.recipes.tfc.quern('4x firmalife:food/cocoa_powder', 'gtceu:cocoa_dust') - .id(`tfg:quern/cocoa_powder`) - - event.recipes.tfc.quern('gtceu:cocoa_dust', 'firmalife:food/roasted_cocoa_beans') - .id('tfg:quern/cocoa_dust'); - - // Chocolate Ice Cream - event.recipes.gtceu.mixer('firmalife:food/chocolate_ice_cream') - .itemInputs('firmalife:food/vanilla_ice_cream') - .inputFluids(Fluid.of('firmalife:chocolate', 1000)) - .itemOutputs('firmalife:food/chocolate_ice_cream') - .duration(300) - .EUt(16) - - // White Chocolate Blend - event.recipes.gtceu.mixer('firmalife:food/white_chocolate_blend/milk') - .itemInputs('2x firmalife:food/cocoa_butter', '#tfc:sweetener') - .inputFluids(Fluid.of('minecraft:milk', 1000)) - .itemOutputs('2x firmalife:food/white_chocolate_blend') - .duration(300) - .EUt(16) - - event.recipes.gtceu.mixer('firmalife:food/white_chocolate_blend/yak_milk') - .itemInputs('2x firmalife:food/cocoa_butter', '#tfc:sweetener') - .inputFluids(Fluid.of('firmalife:yak_milk', 1000)) - .itemOutputs('2x firmalife:food/white_chocolate_blend') - .duration(300) - .EUt(16) - - event.recipes.gtceu.mixer('firmalife:food/white_chocolate_blend/goat_milk') - .itemInputs('2x firmalife:food/cocoa_butter', '#tfc:sweetener') - .inputFluids(Fluid.of('firmalife:goat_milk', 1000)) - .itemOutputs('2x firmalife:food/white_chocolate_blend') - .duration(300) - .EUt(16) - - event.recipes.gtceu.mixer('firmalife:food/white_chocolate_blend/coconut_milk') - .itemInputs('2x firmalife:food/cocoa_butter', '#tfc:sweetener') - .inputFluids(Fluid.of('firmalife:coconut_milk', 1000)) - .itemOutputs('2x firmalife:food/white_chocolate_blend') - .duration(300) - .EUt(16) - - event.smelting('firmalife:food/white_chocolate', 'firmalife:food/white_chocolate_blend') - - // Dark Chocolate Blend - event.recipes.gtceu.mixer('firmalife:food/dark_chocolate_blend/milk') - .itemInputs('2x firmalife:food/cocoa_powder', '#tfc:sweetener') - .inputFluids(Fluid.of('minecraft:milk', 1000)) - .itemOutputs('2x firmalife:food/dark_chocolate_blend') - .duration(300) - .EUt(16) - - event.recipes.gtceu.mixer('firmalife:food/dark_chocolate_blend/yak_milk') - .itemInputs('2x firmalife:food/cocoa_powder', '#tfc:sweetener') - .inputFluids(Fluid.of('firmalife:yak_milk', 1000)) - .itemOutputs('2x firmalife:food/dark_chocolate_blend') - .duration(300) - .EUt(16) - - event.recipes.gtceu.mixer('firmalife:food/dark_chocolate_blend/goat_milk') - .itemInputs('2x firmalife:food/cocoa_powder', '#tfc:sweetener') - .inputFluids(Fluid.of('firmalife:goat_milk', 1000)) - .itemOutputs('2x firmalife:food/dark_chocolate_blend') - .duration(300) - .EUt(16) - - - event.recipes.gtceu.mixer('firmalife:food/dark_chocolate_blend/coconut_milk') - .itemInputs('2x firmalife:food/cocoa_powder', '#tfc:sweetener') - .inputFluids(Fluid.of('firmalife:coconut_milk', 1000)) - .itemOutputs('2x firmalife:food/dark_chocolate_blend') - .duration(300) - .EUt(16) - - event.smelting('firmalife:food/dark_chocolate', 'firmalife:food/dark_chocolate_blend') - - // Milk Chocolate Blend - event.recipes.gtceu.mixer('firmalife:food/milk_chocolate_blend/milk') - .itemInputs('firmalife:food/cocoa_powder', 'firmalife:food/cocoa_butter', '#tfc:sweetener') - .inputFluids(Fluid.of('minecraft:milk', 1000)) - .itemOutputs('2x firmalife:food/milk_chocolate_blend') - .duration(300) - .EUt(16) - - event.recipes.gtceu.mixer('firmalife:food/milk_chocolate_blend/yak_milk') - .itemInputs('firmalife:food/cocoa_powder', 'firmalife:food/cocoa_butter', '#tfc:sweetener') - .inputFluids(Fluid.of('firmalife:yak_milk', 1000)) - .itemOutputs('2x firmalife:food/milk_chocolate_blend') - .duration(300) - .EUt(16) - - event.recipes.gtceu.mixer('firmalife:food/milk_chocolate_blend/goat_milk') - .itemInputs('firmalife:food/cocoa_powder', 'firmalife:food/cocoa_butter', '#tfc:sweetener') - .inputFluids(Fluid.of('firmalife:goat_milk', 1000)) - .itemOutputs('2x firmalife:food/milk_chocolate_blend') - .duration(300) - .EUt(16) - - event.recipes.gtceu.mixer('firmalife:food/milk_chocolate_blend/coconut_milk') - .itemInputs('firmalife:food/cocoa_powder', 'firmalife:food/cocoa_butter', '#tfc:sweetener') - .inputFluids(Fluid.of('firmalife:coconut_milk', 1000)) - .itemOutputs('2x firmalife:food/milk_chocolate_blend') - .duration(300) - .EUt(16) - - event.smelting('firmalife:food/milk_chocolate', 'firmalife:food/milk_chocolate_blend') - - // Strawberry Ice Cream - event.recipes.gtceu.mixer('firmalife:food/strawberry_ice_cream') - .itemInputs('firmalife:food/vanilla_ice_cream', '2x tfc:food/strawberry') - .itemOutputs('firmalife:food/strawberry_ice_cream') - .duration(300) - .EUt(16) - - // Hardtack Dough - event.recipes.gtceu.mixer('firmalife:food/chocolate_chip_cookie_dough') - .itemInputs('4x firmalife:food/cookie_dough', '#firmalife:chocolate_blends') - .itemOutputs('4x firmalife:food/chocolate_chip_cookie_dough') - .duration(300) - .EUt(16) - - //#endregion - - //#region Обжарка некоторой еды - - // Cooked Pizza - event.smelting('firmalife:food/cooked_pizza', 'firmalife:food/raw_pizza') - - // Taco Shell - event.smelting('firmalife:food/taco_shell', 'firmalife:food/corn_tortilla') - - // Sugar Cookie - event.smelting('firmalife:food/sugar_cookie', 'firmalife:food/cookie_dough') - - // Chocolate Chip Cookie - event.smelting('firmalife:food/chocolate_chip_cookie', 'firmalife:food/chocolate_chip_cookie_dough') - - // Hardtack - event.smelting('firmalife:food/hardtack', 'firmalife:food/hardtack_dough') - - // Cooked Pie - event.smelting('firmalife:food/cooked_pie', 'firmalife:food/filled_pie') - - // Roasted Cocoa Beans - event.smelting('firmalife:food/roasted_cocoa_beans', 'firmalife:food/cocoa_beans') - - // Pumpkin Pie - event.smelting('minecraft:pumpkin_pie', 'firmalife:food/raw_pumpkin_pie') - - //#endregion - //#region Sticky Resin by Vat event.recipes.firmalife.vat() @@ -759,28 +489,6 @@ const registerFirmaLifeRecipes = (event) => { // #endregion - // #region Smashed food - - event.recipes.gtceu.forge_hammer('firmalife:soybean_paste') - .itemInputs('firmalife:food/dehydrated_soybeans') - .itemOutputs('firmalife:food/soybean_paste') - .duration(20) - .EUt(7) - - event.recipes.gtceu.forge_hammer('firmalife:red_grapes') - .itemInputs('firmalife:food/red_grapes') - .itemOutputs('firmalife:food/smashed_red_grapes') - .duration(20) - .EUt(7) - - event.recipes.gtceu.forge_hammer('firmalife:white_grapes') - .itemInputs('firmalife:food/white_grapes') - .itemOutputs('firmalife:food/smashed_white_grapes') - .duration(20) - .EUt(7) - - // #endregion - // #region Drying mat alternatives event.shaped('firmalife:drying_mat', ['AAA'], { A: 'tfc:plant/leafy_kelp' }).id('tfg:shaped/drying_mat_leafy_kelp') @@ -795,13 +503,4 @@ const registerFirmaLifeRecipes = (event) => { .circuit(5) .EUt(GTValues.VA[GTValues.ULV]) .duration(200) - - event.smelting('firmalife:food/dehydrated_soybeans', 'tfc:food/soybean') - - event.recipes.gtceu.fermenter('soybean_oil') - .itemInputs('firmalife:food/soybean_paste') - .inputFluids(Fluid.of('minecraft:water', 100)) - .outputFluids(Fluid.of('firmalife:soybean_oil', 250)) - .EUt(GTValues.VA[GTValues.ULV]) - .duration(600) } diff --git a/kubejs/server_scripts/tfc/recipes.js b/kubejs/server_scripts/tfc/recipes.js index d23cb4aad..064774d05 100644 --- a/kubejs/server_scripts/tfc/recipes.js +++ b/kubejs/server_scripts/tfc/recipes.js @@ -34,44 +34,6 @@ const registerTFCRecipes = (event) => { //#endregion - //#region Рецепты зерен - - global.TFC_QUERN_GRAIN_RECIPE_COMPONENTS.forEach(element => { - - event.recipes.gtceu.macerator(`tfg:${element.name}`) - .itemInputs(element.input) - .itemOutputs(element.output) - .chancedOutput('tfc:straw', 7000, 500) - .duration(200) - .EUt(2) - - event.recipes.tfc.quern(element.output, element.input) - .id(`tfg:quern/${element.name}`) - }) - - //#endregion - - //#region Рецепты муки - - global.TFC_QUERN_FLOUR_RECIPE_COMPONENTS.forEach(element => { - event.recipes.gtceu.macerator(`tfg:${element.name}`) - .itemInputs(element.input) - .itemOutputs(element.output) - .duration(200) - .EUt(2) - }) - - //#endregion - - //#region Рецепты обжарки мяса - - global.TFC_FURNACE_MEAT_RECIPE_COMPONENTS.forEach(element => { - event.smelting(element.output, element.input) - .id(`tfg:smelting/${element.name}`) - }) - - //#endregion - //#region Рецепты обжарки форм global.TFC_FURNACE_MOLD_RECIPE_COMPONENTS.forEach(element => { @@ -126,15 +88,6 @@ const registerTFCRecipes = (event) => { //#endregion - //#region Рецепты хлеба - - global.TFC_FURNACE_BREAD_RECIPE_COMPONENTS.forEach(element => { - event.smelting(element.output, element.input) - .id(`tfg:smelting/${element.name}`) - }) - - //#endregion - event.shapeless('tfc:crucible', ['tfc:crucible']).id('tfg:empty_crucible') event.shapeless('2x minecraft:stick', ['#minecraft:saplings', '#forge:tools/knives']).id('tfg:strip_saplings') diff --git a/kubejs/server_scripts/tfc/recipes.machines.js b/kubejs/server_scripts/tfc/recipes.machines.js index ac2370124..44df72c83 100644 --- a/kubejs/server_scripts/tfc/recipes.machines.js +++ b/kubejs/server_scripts/tfc/recipes.machines.js @@ -117,20 +117,6 @@ function registerTFCMachineRecipes(event) { .duration(3200) .EUt(16) - //#region Рецепты плоского теста - - global.TFC_MIXER_FLATBREAD_DOUGH_RECIPE_COMPONENTS.forEach(element => { - event.recipes.gtceu.mixer(element.name) - .itemInputs(element.input) - .inputFluids(Fluid.of('minecraft:water', 100)) - .itemOutputs(element.output) - .duration(300) - .EUt(16) - .circuit(3) - }) - - //#endregion - //#region Молды в ассемблере for (let i = 0; i < global.TFC_CLAY_TO_UNFIRED_MOLD_RECIPE_COMPONENTS.length; i++) { @@ -174,158 +160,9 @@ function registerTFCMachineRecipes(event) { .duration(2400) .EUt(16) - // Curdled milk - event.recipes.gtceu.fermenter('tfg:fermenter/curdled_milk') - .inputFluids(Fluid.of('minecraft:milk', 2000)) - .itemInputs('firmalife:rennet') - .outputFluids(Fluid.of('tfc:curdled_milk', 2000)) - .duration(2400) - .EUt(16) - - event.recipes.gtceu.fermenter('tfg:fermenter/curdled_yak_milk') - .inputFluids(Fluid.of('firmalife:yak_milk', 2000)) - .itemInputs('firmalife:rennet') - .outputFluids(Fluid.of('firmalife:curdled_yak_milk', 2000)) - .duration(2400) - .EUt(16) - - event.recipes.gtceu.fermenter('tfg:fermenter/curdled_goat_milk') - .inputFluids(Fluid.of('firmalife:goat_milk', 2000)) - .itemInputs('firmalife:rennet') - .outputFluids(Fluid.of('firmalife:curdled_goat_milk', 2000)) - .duration(2400) - .EUt(16) - - //Curds - event.recipes.gtceu.fermenter('tfg:fermenter/milk_curd') - .inputFluids(Fluid.of('tfc:curdled_milk', 1000)) - .itemOutputs('firmalife:food/milk_curd') - .duration(1200) - .EUt(16) - - event.recipes.gtceu.fermenter('tfg:fermenter/yak_curd') - .inputFluids(Fluid.of('firmalife:curdled_yak_milk', 1000)) - .itemOutputs('firmalife:food/yak_curd') - .duration(1200) - .EUt(16) - - event.recipes.gtceu.fermenter('tfg:fermenter/goat_curd') - .inputFluids(Fluid.of('firmalife:curdled_goat_milk', 1000)) - .itemOutputs('firmalife:food/goat_curd') - .duration(1200) - .EUt(16) - - // Cheese wheels - event.recipes.gtceu.fermenter('tfg:fermenter/gouda_wheel') - .inputFluids(Fluid.of('tfc:salt_water', 750)) - .itemInputs('3x firmalife:food/milk_curd') - .itemOutputs('firmalife:gouda_wheel') - .duration(12000) - .EUt(24) - - event.recipes.gtceu.fermenter('tfg:fermenter/shosha_wheel') - .inputFluids(Fluid.of('tfc:salt_water', 750)) - .itemInputs('3x firmalife:food/yak_curd') - .itemOutputs('firmalife:shosha_wheel') - .duration(12000) - .EUt(24) - - event.recipes.gtceu.fermenter('tfg:fermenter/feta_wheel') - .inputFluids(Fluid.of('tfc:salt_water', 750)) - .itemInputs('3x firmalife:food/goat_curd') - .itemOutputs('firmalife:feta_wheel') - .duration(12000) - .EUt(24) - - // Cutting - event.recipes.gtceu.cutter('tfg:cutter/gouda') - .itemInputs('firmalife:gouda_wheel') - .itemOutputs('4x firmalife:food/gouda') - .duration(40) - .EUt(7) - - event.recipes.gtceu.cutter('tfg:cutter/shosha') - .itemInputs('firmalife:shosha_wheel') - .itemOutputs('4x firmalife:food/shosha') - .duration(40) - .EUt(7) - - event.recipes.gtceu.cutter('tfg:cutter/feta') - .itemInputs('firmalife:feta_wheel') - .itemOutputs('4x firmalife:food/feta') - .duration(40) - .EUt(7) - - event.recipes.gtceu.cutter('tfg:cutter/cheddar') - .itemInputs('firmalife:cheddar_wheel') - .itemOutputs('4x firmalife:food/cheddar') - .duration(40) - .EUt(7) - - event.recipes.gtceu.cutter('tfg:cutter/chevre') - .itemInputs('firmalife:chevre_wheel') - .itemOutputs('4x firmalife:food/chevre') - .duration(40) - .EUt(7) - - event.recipes.gtceu.cutter('tfg:cutter/rajya_metok') - .itemInputs('firmalife:rajya_metok_wheel') - .itemOutputs('4x firmalife:food/rajya_metok') - .duration(40) - .EUt(7) - - // Misc - global.TFC_MILKS.forEach(milk => { - event.recipes.gtceu.fermenter(`tfg:fermenter/cream_from_${milk.id.replace(':', '_')}`) - .inputFluids(Fluid.of(milk.id, 1000)) - .outputFluids(Fluid.of('firmalife:cream')) - .circuit(6) - .duration(1200) - .EUt(24) - }) - - event.recipes.gtceu.mixer('tfg:mixer/tomato_sauce') - .itemInputs('firmalife:food/tomato_sauce_mix') - .inputFluids(Fluid.of('minecraft:water', 200)) - .itemOutputs('firmalife:food/tomato_sauce') - .duration(200) - .EUt(24) - //#endregion - //#region Оливки - - event.recipes.gtceu.macerator(`tfg:tfc/olive_paste`) - .itemInputs('tfc:food/olive') - .itemOutputs('2x tfc:olive_paste') - .duration(60) - .EUt(2) - - event.recipes.gtceu.mixer('tfg:tfc/olive_oil_water') - .inputFluids(Fluid.of('water', 200)) - .itemInputs('1x tfc:olive_paste') - .outputFluids(Fluid.of('tfc:olive_oil_water', 200)) - .duration(200) - .EUt(28) - - event.recipes.gtceu.distillery('tfg:tfc/olive_oil') - .inputFluids(Fluid.of('tfc:olive_oil_water', 250)) - .outputFluids(Fluid.of('tfc:olive_oil', 50)) - .duration(600) - .EUt(28) - - //#endregion - - // Vinegar and Brine - - global.TFC_ALCOHOL.forEach(alcohol => { - event.recipes.gtceu.fermenter(`tfg:tfc/vinegar/${alcohol.id.replace(':', '_')}`) - .itemInputs('#tfc:foods/fruits') - .inputFluids(Fluid.of(alcohol.id, 250)) - .outputFluids(Fluid.of('tfc:vinegar', 250)) - .duration(600) - .EUt(28) - }) + // Brine event.recipes.gtceu.mixer('tfg:tfc/brine') .inputFluids(Fluid.of('tfc:salt_water', 900)) diff --git a/kubejs/server_scripts/tfg/recipes.food.js b/kubejs/server_scripts/tfg/recipes.food.js new file mode 100644 index 000000000..d88c10d10 --- /dev/null +++ b/kubejs/server_scripts/tfg/recipes.food.js @@ -0,0 +1,627 @@ +// priority: 0 + +function registerTFGFoodRecipes(event) { + + //#region ================= Meat cooking ================= + + global.TFC_FURNACE_MEAT_RECIPE_COMPONENTS.forEach(item => { + + registerTFCRecipeProperties(item.name, + [ TFC.ingredient.notRotten(item.input) ], + TFC.isp.of(item.output).copyFood().addTrait('firmalife:oven_baked') + ) + + event.recipes.gtceu.electric_oven(item.name) + .itemInputs(item.input) + .itemOutputs(item.output) + .duration(300) + .EUt(16) + }) + + //#endregion + //#region ================= Cutting grains ================= + + global.TFC_QUERN_GRAIN_RECIPE_COMPONENTS.forEach(item => { + + registerTFCRecipeProperties(item.name, + [ TFC.ingredient.notRotten(item.input) ], + TFC.isp.of(item.output).copyFood() + ) + + event.recipes.gtceu.food_processor(item.name) + .itemInputs(item.input) + .itemOutputs(item.output) + .duration(100) + .EUt(2) + }) + + //#endregion + //#region ================= Grains to flour ================= + + global.TFC_QUERN_FLOUR_RECIPE_COMPONENTS.forEach(item => { + + registerTFCRecipeProperties(item.name, + [ TFC.ingredient.notRotten(item.input) ], + TFC.isp.of(item.output).copyFood() + ) + + event.recipes.gtceu.food_processor(item.name) + .itemInputs(item.input) + .itemOutputs(item.output) + .duration(100) + .EUt(2) + }) + + global.FIRMALIFE_QUERN_FLOUR_RECIPE_COMPONENTS.forEach(item => { + + registerTFCRecipeProperties(item.name, + [ TFC.ingredient.notRotten(item.input) ], + TFC.isp.of(item.output).copyFood() + ) + + event.recipes.gtceu.food_processor(item.name) + .itemInputs(item.input) + .itemOutputs(item.output) + .duration(100) + .EUt(2) + }) + + //#endregion + //#region ================= Dough ================= + + global.TFC_MIXER_FLATBREAD_DOUGH_RECIPE_COMPONENTS.forEach(item => { + registerTFCRecipeProperties(item.name, + [ TFC.ingredient.notRotten(item.input) ], + TFC.isp.of(item.output).copyOldestFood() + ) + + event.recipes.gtceu.food_processor(item.name) + .itemInputs(item.input) + .inputFluids(Fluid.of('minecraft:water', 100)) + .itemOutputs(item.output) + .duration(300) + .EUt(16) + }) + + global.FIRMALIFE_MIXER_FLATBREAD_DOUGH_RECIPE_COMPONENTS.forEach(item => { + registerTFCRecipeProperties(item.name, + [ TFC.ingredient.notRotten(item.input) ], + TFC.isp.of(item.output).copyOldestFood() + ) + + event.recipes.gtceu.food_processor(item.name) + .itemInputs(item.input) + .inputFluids(Fluid.of('minecraft:water', 100)) + .itemOutputs(item.output) + .duration(300) + .EUt(16) + }) + + //#endregion + //#region ================= Baking bread ================= + + global.TFC_FURNACE_BREAD_RECIPE_COMPONENTS.forEach(item => { + registerTFCRecipeProperties(item.name, + [ TFC.ingredient.notRotten(item.input) ], + TFC.isp.of(item.output).copyFood().addTrait('firmalife:oven_baked') + ) + + event.recipes.gtceu.electric_oven(item.name) + .itemInputs(item.input) + .itemOutputs(item.output) + .duration(300) + .EUt(16) + }) + + global.FIRMALIFE_FURNACE_FLATBREAD_RECIPE_COMPONENTS.forEach(item => { + registerTFCRecipeProperties(item.name, + [ TFC.ingredient.notRotten(item.input) ], + TFC.isp.of(item.output).copyFood().addTrait('firmalife:oven_baked') + ) + + event.recipes.gtceu.electric_oven(item.name) + .itemInputs(item.input) + .itemOutputs(item.output) + .duration(300) + .EUt(16) + }) + + //#endregion + //#region ================= Firmalife ================= + + global.FIRMALIFE_COOKING_RECIPE_COMPONENTS.forEach(item => { + + registerTFCRecipeProperties(item.name, + [ TFC.ingredient.notRotten(item.input) ], + TFC.isp.of(item.output).firmaLifeCopyDynamicFood() + ) + + event.recipes.gtceu.electric_oven(item.name) + .itemInputs(item.input) + .itemOutputs(item.output) + .duration(300) + .EUt(16) + }) + + //#endregion + //#region ================= Dairy ================= + + global.TFC_CURDS_AND_CHEESES.forEach(item => { + + // Curds + registerTFCRecipeProperties(`${item.id}_curd`, + [], TFC.isp.of(item.curd).resetFood() + ) + + event.recipes.gtceu.food_processor(`${item.id}_curd`) + .inputFluids(Fluid.of(item.input_fluid, 1000)) + .itemOutputs(item.curd) + .duration(1200) + .EUt(16) + + // Sealed barrel cheese wheels + registerTFCRecipeProperties(`${item.id}_cheese_wheel_1`, + [ TFC.ingredient.notRotten(item.curd) ], + TFC.isp.of(`firmalife:${item.cheese1}_wheel`).copyOldestFood() + ) + + event.recipes.gtceu.food_processor(`${item.id}_cheese_wheel_1`) + .itemInputs(Item.of(item.curd, 3)) + .inputFluids(Fluid.of('tfc:salt_water', 750)) + .itemOutputs(`firmalife:${item.cheese1}_wheel`) + .circuit(1) + .duration(8000) + .EUt(16) + + // Crafting table cheese wheels + registerTFCRecipeProperties(`${item.id}_cheese_wheel_2`, + [ TFC.ingredient.notRotten(item.curd) ], + TFC.isp.of(`firmalife:${item.cheese2}_wheel`).copyOldestFood() + ) + + event.recipes.gtceu.food_processor(`${item.id}_cheese_wheel_2`) + .itemInputs(Item.of(item.curd, 6), '3x tfc:powder/salt') + .itemOutputs(`firmalife:${item.cheese2}_wheel`) + .circuit(2) + .duration(300) + .EUt(16) + + // Cheese cutting + registerTFCRecipeProperties(`${item.cheese1}_cheese_cutting_1`, + [ TFC.ingredient.notRotten(`firmalife:${item.cheese1}_wheel`) ], + TFC.isp.of(`firmalife:food/${item.cheese1}`).copyOldestFood() + ) + + event.recipes.gtceu.food_processor(`${item.cheese1}_cheese_cutting_1`) + .itemInputs(`firmalife:${item.cheese1}_wheel`) + .itemOutputs(`4x firmalife:food/${item.cheese1}`) + .duration(100) + .EUt(7) + + registerTFCRecipeProperties(`${item.cheese2}_cheese_cutting_2`, + [ TFC.ingredient.notRotten(`firmalife:${item.cheese2}_wheel`) ], + TFC.isp.of(`firmalife:food/${item.cheese2}`).copyOldestFood() + ) + + event.recipes.gtceu.food_processor(`${item.cheese2}_cheese_cutting_2`) + .itemInputs(`firmalife:${item.cheese2}_wheel`) + .itemOutputs(`4x firmalife:food/${item.cheese2}`) + .duration(100) + .EUt(7) + }) + + // White Chocolate Blend + registerTFCRecipeProperties(`white_chocolate_blend`, + [ TFC.ingredient.notRotten('firmalife:food/cocoa_butter') ], + TFC.isp.of('firmalife:food/white_chocolate_blend').copyOldestFood()) + + event.recipes.gtceu.food_processor(`white_chocolate_blend`) + .itemInputs('2x firmalife:food/cocoa_butter', '#tfc:sweetener') + .inputFluids(Fluid.of('#tfc:milks', 1000)) + .itemOutputs('2x firmalife:food/white_chocolate_blend') + .circuit(1) + .duration(300) + .EUt(16) + + // Dark Chocolate Blend + registerTFCRecipeProperties(`dark_chocolate_blend`, + [], TFC.isp.of('firmalife:food/dark_chocolate_blend').resetFood()) + + event.recipes.gtceu.food_processor(`dark_chocolate_blend`) + .itemInputs('2x firmalife:food/cocoa_powder', '#tfc:sweetener') + .inputFluids(Fluid.of('#tfc:milks', 1000)) + .itemOutputs('2x firmalife:food/dark_chocolate_blend') + .circuit(1) + .duration(300) + .EUt(16) + + // Milk Chocolate Blend + registerTFCRecipeProperties(`milk_chocolate_blend`, + [ TFC.ingredient.notRotten('firmalife:food/cocoa_butter') ], + TFC.isp.of('firmalife:food/milk_chocolate_blend').copyOldestFood()) + + event.recipes.gtceu.food_processor(`milk_chocolate_blend`) + .itemInputs('firmalife:food/cocoa_powder', 'firmalife:food/cocoa_butter', '#tfc:sweetener') + .inputFluids(Fluid.of('#tfc:milks', 1000)) + .itemOutputs('2x firmalife:food/milk_chocolate_blend') + .circuit(2) + .duration(300) + .EUt(16) + + //#endregion + + //#region ================= Misc ================= + + registerTFCRecipeProperties('tomato_sauce', + [ TFC.ingredient.notRotten('tfc:food/tomato'), TFC.ingredient.notRotten('tfc:food/garlic') ], + TFC.isp.of('firmalife:food/tomato_sauce').copyOldestFood()) + + event.recipes.gtceu.food_processor('tomato_sauce') + .itemInputs('tfc:food/tomato', 'tfc:powder/salt', 'tfc:food/garlic') + .inputFluids(Fluid.of('minecraft:water', 100)) + .itemOutputs('5x firmalife:food/tomato_sauce') + .duration(2000) + .EUt(7) + + registerTFCRecipeProperties('tomato_sauce_from_mix', + [ TFC.ingredient.notRotten("firmalife:food/tomato_sauce_mix") ], + TFC.isp.of('firmalife:food/tomato_sauce').copyOldestFood()) + + event.recipes.gtceu.food_processor('tomato_sauce_from_mix') + .itemInputs("firmalife:food/tomato_sauce_mix") + .inputFluids(Fluid.of('minecraft:water', 200)) + .itemOutputs('firmalife:food/tomato_sauce') + .duration(200) + .EUt(7) + + registerTFCRecipeProperties('olive_paste', + [ TFC.ingredient.notRotten('tfc:food/olive') ]) + + event.recipes.gtceu.food_processor(`olive_paste`) + .itemInputs('tfc:food/olive') + .itemOutputs('2x tfc:olive_paste') + .duration(60) + .EUt(2) + + registerTFCRecipeProperties('soybean_paste', + [ TFC.ingredient.notRotten('tfc:food/soybean') ]) + + event.recipes.gtceu.food_processor(`soybean_paste`) + .itemInputs('tfc:food/soybean') + .itemOutputs('2x firmalife:soybean_paste') + .duration(60) + .EUt(2) + + // Vinegar + global.TFC_ALCOHOL.forEach(alcohol => { + let name = `vinegar/${alcohol.id.replace(':', '_')}`; + + registerTFCRecipeProperties(name, + [ TFC.ingredient.notRotten('#tfc:foods/fruits') ]) + + event.recipes.gtceu.food_processor(name) + .itemInputs('#tfc:foods/fruits') + .inputFluids(Fluid.of(alcohol.id, 250)) + .outputFluids(Fluid.of('tfc:vinegar', 250)) + .circuit(5) + .duration(600) + .EUt(28) + }) + + // Pizzas + registerTFCRecipeProperties('pizza_dough_olive_oil', + [ TFC.ingredient.notRotten('#tfc:foods/dough') ], + TFC.isp.of('firmalife:food/pizza_dough').copyOldestFood()) + + event.recipes.gtceu.food_processor('pizza_dough_olive_oil') + .itemInputs('firmalife:spice/basil_leaves', '#tfc:foods/dough', 'tfc:powder/salt') + .inputFluids(Fluid.of('tfc:olive_oil', 1000)) + .itemOutputs('4x firmalife:food/pizza_dough') + .duration(300) + .EUt(16) + + registerTFCRecipeProperties('pizza_dough_soybean_oil', + [ TFC.ingredient.notRotten('#tfc:foods/dough') ], + TFC.isp.of('firmalife:food/pizza_dough').copyOldestFood()) + + event.recipes.gtceu.food_processor('pizza_dough_soybean_oil') + .itemInputs('firmalife:spice/basil_leaves', '#tfc:foods/dough', 'tfc:powder/salt') + .inputFluids(Fluid.of('firmalife:soybean_oil', 1000)) + .itemOutputs('4x firmalife:food/pizza_dough') + .duration(300) + .EUt(16) + + // Ice Cream + registerTFCRecipeProperties('vanilla_ice_cream', + [], TFC.isp.of('firmalife:food/vanilla_ice_cream').resetFood()) + + event.recipes.gtceu.food_processor('vanilla_ice_cream') + .itemInputs('firmalife:ice_shavings', '#tfc:sweetener', 'firmalife:spice/vanilla') + .inputFluids(Fluid.of('firmalife:cream', 1000)) + .itemOutputs('2x firmalife:food/vanilla_ice_cream') + .duration(300) + .EUt(16) + + registerTFCRecipeProperties('chocolate_ice_cream', + [ TFC.ingredient.notRotten('firmalife:food/vanilla_ice_cream') ], + TFC.isp.of('firmalife:food/chocolate_ice_cream').copyOldestFood()) + + event.recipes.gtceu.food_processor('chocolate_ice_cream') + .itemInputs('firmalife:food/vanilla_ice_cream') + .inputFluids(Fluid.of('firmalife:chocolate', 1000)) + .itemOutputs('firmalife:food/chocolate_ice_cream') + .duration(300) + .EUt(16) + + registerTFCRecipeProperties('strawberry_ice_cream', + [ TFC.ingredient.notRotten('firmalife:food/vanilla_ice_cream'), TFC.ingredient.notRotten('tfc:food/strawberry') ], + TFC.isp.of('firmalife:food/strawberry_ice_cream').copyOldestFood()) + + event.recipes.gtceu.food_processor('strawberry_ice_cream') + .itemInputs('firmalife:food/vanilla_ice_cream', '2x tfc:food/strawberry') + .itemOutputs('firmalife:food/strawberry_ice_cream') + .duration(300) + .EUt(16) + + // Butter + registerTFCRecipeProperties('butter', + [], TFC.isp.of('firmalife:food/butter').resetFood()) + + event.recipes.gtceu.food_processor('butter') + .itemInputs('tfc:powder/salt') + .inputFluids(Fluid.of('firmalife:cream', 1000)) + .itemOutputs('firmalife:food/butter') + .duration(300) + .EUt(16) + + // Pie Dough + registerTFCRecipeProperties('pie_dough', + [ TFC.ingredient.notRotten('firmalife:food/butter'), TFC.ingredient.notRotten('#tfc:foods/flour') ], + TFC.isp.of('firmalife:food/pie_dough').copyOldestFood()) + + event.recipes.gtceu.food_processor('pie_dough') + .itemInputs('#tfc:sweetener', 'firmalife:food/butter', '#tfc:foods/flour') + .inputFluids(Fluid.of('minecraft:water', 1000)) + .itemOutputs('firmalife:food/pie_dough') + .duration(300) + .EUt(16) + .circuit(2) + + // Pumpkin Pie Dough + registerTFCRecipeProperties('pumpkin_pie_dough', + [ TFC.ingredient.notRotten('#forge:eggs'), TFC.ingredient.notRotten('tfc:food/pumpkin_chunks'), TFC.ingredient.notRotten('#tfc:foods/flour') ], + TFC.isp.of('firmalife:food/pumpkin_pie_dough').copyOldestFood()) + + event.recipes.gtceu.food_processor('pumpkin_pie_dough') + .itemInputs('#tfc:sweetener', '#forge:eggs', '2x tfc:food/pumpkin_chunks', '#tfc:foods/flour') + .inputFluids(Fluid.of('minecraft:water', 1000)) + .itemOutputs('firmalife:food/pumpkin_pie_dough') + .duration(300) + .EUt(16) + .circuit(2) + + // Cookie Dough + registerTFCRecipeProperties('cookie_dough', + [ TFC.ingredient.notRotten('firmalife:food/butter'), TFC.ingredient.notRotten('#tfc:foods/flour'), TFC.ingredient.notRotten('#forge:eggs') ], + TFC.isp.of('4x firmalife:food/cookie_dough').copyOldestFood()) + + event.recipes.gtceu.food_processor('cookie_dough') + .itemInputs('#tfc:sweetener', 'firmalife:food/butter', '#tfc:foods/flour', '#forge:eggs', 'firmalife:spice/vanilla') + .itemOutputs('4x firmalife:food/cookie_dough') + .duration(300) + .EUt(16) + + registerTFCRecipeProperties('chocolate_chip_cookie_dough', + [ TFC.ingredient.notRotten('firmalife:food/cookie_dough'), TFC.ingredient.notRotten('#firmalife:chocolate_blends') ], + TFC.isp.of('4x firmalife:food/chocolate_chip_cookie_dough').copyOldestFood()) + + event.recipes.gtceu.food_processor('chocolate_chip_cookie_dough') + .itemInputs('4x firmalife:food/cookie_dough', '#firmalife:chocolate_blends') + .itemOutputs('4x firmalife:food/chocolate_chip_cookie_dough') + .duration(300) + .EUt(16) + + // Hardtack Dough + registerTFCRecipeProperties('hardtack_dough', + [ TFC.ingredient.notRotten('#tfc:foods/flour') ], + TFC.isp.of('4x firmalife:food/hardtack_dough').copyOldestFood()) + + event.recipes.gtceu.food_processor('hardtack_dough') + .itemInputs('tfc:powder/salt', '#tfc:foods/flour') + .inputFluids(Fluid.of('minecraft:water', 1000)) + .itemOutputs('4x firmalife:food/hardtack_dough') + .duration(300) + .EUt(16) + .circuit(4) + + // Yeast starter + registerTFCRecipeProperties('yeast_starter', + [ TFC.ingredient.notRotten('#tfc:foods/flour') ]) + + event.recipes.gtceu.food_processor('yeast_starter') + .inputFluids(Fluid.of('firmalife:yeast_starter', 100)) + .itemInputs('#tfc:foods/flour') + .outputFluids(Fluid.of('firmalife:yeast_starter', 600)) + .duration(1200) + .EUt(8) + .circuit(1) + + // Cocoa Dust + registerTFCRecipeProperties('cocoa_dust', + [ TFC.ingredient.notRotten('firmalife:food/roasted_cocoa_beans') ]) + + event.recipes.gtceu.food_processor('cocoa_dust') + .itemInputs('firmalife:food/roasted_cocoa_beans') + .itemOutputs('gtceu:cocoa_dust') + .duration(100) + .EUt(2) + + // Soybean paste + registerTFCRecipeProperties('soybean_paste', + [ TFC.ingredient.notRotten('firmalife:food/dehydrated_soybeans') ]) + + event.recipes.gtceu.food_processor('soybean_paste') + .itemInputs('firmalife:food/dehydrated_soybeans') + .itemOutputs('firmalife:food/soybean_paste') + .duration(50) + .EUt(7) + + // Smashed red grapes + registerTFCRecipeProperties('red_grapes', + [ TFC.ingredient.notRotten('firmalife:food/red_grapes') ], + TFC.isp.of('firmalife:food/smashed_red_grapes').copyOldestFood()) + + event.recipes.gtceu.food_processor('red_grapes') + .itemInputs('firmalife:food/red_grapes') + .itemOutputs('firmalife:food/smashed_red_grapes') + .duration(50) + .EUt(7) + + // Smashed white grapes + registerTFCRecipeProperties('white_grapes', + [ TFC.ingredient.notRotten('firmalife:food/white_grapes') ], + TFC.isp.of('firmalife:food/smashed_white_grapes').copyOldestFood()) + + event.recipes.gtceu.food_processor('white_grapes') + .itemInputs('firmalife:food/white_grapes') + .itemOutputs('firmalife:food/smashed_white_grapes') + .duration(50) + .EUt(7) + + // Egg Noodles + registerTFCRecipeProperties('egg_noodles', + [ TFC.ingredient.notRotten("firmalife:foods/egg_noodle_flour"), TFC.ingredient.notRotten('#forge:eggs') ], + TFC.isp.of('firmalife:food/smashed_white_grapes').copyOldestFood()) + + event.recipes.gtceu.food_processor('egg_noodles') + .itemInputs("firmalife:foods/egg_noodle_flour", 'tfc:powder/salt', '#forge:eggs') + .inputFluids(Fluid.of('#tfc:milks', 1000)) + .itemOutputs('firmalife:food/raw_egg_noodles') + .duration(50) + .EUt(7) + + // Rice Noodles + registerTFCRecipeProperties('rice_noodles', + [ TFC.ingredient.notRotten("tfc:food/rice_flour"), TFC.ingredient.notRotten('tfc:food/maize_flour') ], + TFC.isp.of('firmalife:food/raw_rice_noodles').copyOldestFood()) + + event.recipes.gtceu.food_processor('rice_noodles') + .itemInputs("tfc:food/rice_flour", 'tfc:food/maize_flour', 'tfc:powder/salt') + .inputFluids(Fluid.of('#tfc:milks', 1000)) + .itemOutputs('2x firmalife:food/raw_egg_noodles') + .duration(50) + .EUt(7) + + // Cured Maize + registerTFCRecipeProperties('cured_maize', + [ TFC.ingredient.notRotten("tfc:food/maize_grain") ], + TFC.isp.of('firmalife:food/cured_maize').copyOldestFood()) + + event.recipes.gtceu.food_processor('cured_maize') + .itemInputs("tfc:food/maize_grain") + .inputFluids(Fluid.of('tfc:limewater', 100)) + .itemOutputs('firmalife:food/cured_maize') + .duration(300) + .EUt(7) + + // Soy Mixture + registerTFCRecipeProperties('soy_mixture', + [ TFC.ingredient.notRotten("tfc:food/soybean") ], + TFC.isp.of('firmalife:food/soy_mixture').copyOldestFood()) + + event.recipes.gtceu.food_processor('soy_mixture') + .itemInputs("tfc:food/soybean", 'tfc:powder/salt') + .inputFluids(Fluid.of('minecraft:water', 50)) + .itemOutputs('firmalife:food/soy_mixture') + .duration(300) + .EUt(7) + + // Boiled Egg + registerTFCRecipeProperties('boiled_egg', + [ TFC.ingredient.notRotten('#firmalife:foods/raw_eggs') ], + TFC.isp.of('firmalife:food/soy_mixture').copyOldestFood()) + + event.recipes.gtceu.food_processor('boiled_egg') + .itemInputs('#firmalife:foods/raw_eggs') + .inputFluids(Fluid.of('minecraft:water', 200)) + .itemOutputs('firmalife:food/boiled_egg') + .duration(200) + .EUt(7) + + // Cooked rice + registerTFCRecipeProperties('cooked_rice', + [ TFC.ingredient.notRotten('tfc:food/rice_grain') ], + TFC.isp.of('firmalife:food/soy_mixture').copyOldestFood()) + + event.recipes.gtceu.food_processor('cooked_rice') + .itemInputs('tfc:food/rice_grain') + .inputFluids(Fluid.of('minecraft:water', 200)) + .itemOutputs('firmalife:food/cooked_rice') + .duration(200) + .EUt(7) + + // These don't need the ISP handling, they're just here to keep all the food recipes together + + event.recipes.gtceu.mixer('tfg:tfc/olive_oil_water') + .inputFluids(Fluid.of('water', 200)) + .itemInputs('1x tfc:olive_paste') + .outputFluids(Fluid.of('tfc:olive_oil_water', 200)) + .duration(200) + .EUt(28) + + event.recipes.gtceu.distillery('tfg:tfc/olive_oil') + .inputFluids(Fluid.of('tfc:olive_oil_water', 250)) + .outputFluids(Fluid.of('tfc:olive_oil', 50)) + .duration(600) + .EUt(28) + + event.recipes.gtceu.fermenter('soybean_oil') + .itemInputs('firmalife:food/soybean_paste') + .inputFluids(Fluid.of('minecraft:water', 100)) + .outputFluids(Fluid.of('firmalife:soybean_oil', 250)) + .EUt(GTValues.VA[GTValues.ULV]) + .duration(600) + + event.recipes.gtceu.fermenter(`tfg:fermenter/cream_from_${name}`) + .inputFluids(Fluid.of('#tfc:milks', 1000)) + .outputFluids(Fluid.of('firmalife:cream')) + .circuit(6) + .duration(1200) + .EUt(24) + + event.recipes.gtceu.fermenter('tfg:fermenter/curdled_milk') + .inputFluids(Fluid.of('minecraft:milk', 2000)) + .itemInputs('firmalife:rennet') + .outputFluids(Fluid.of('tfc:curdled_milk', 2000)) + .duration(2400) + .EUt(16) + + event.recipes.gtceu.fermenter('tfg:fermenter/curdled_yak_milk') + .inputFluids(Fluid.of('firmalife:yak_milk', 2000)) + .itemInputs('firmalife:rennet') + .outputFluids(Fluid.of('firmalife:curdled_yak_milk', 2000)) + .duration(2400) + .EUt(16) + + event.recipes.gtceu.fermenter('tfg:fermenter/curdled_goat_milk') + .inputFluids(Fluid.of('firmalife:goat_milk', 2000)) + .itemInputs('firmalife:rennet') + .outputFluids(Fluid.of('firmalife:curdled_goat_milk', 2000)) + .duration(2400) + .EUt(16) + + // GT cocoa dust compat + event.recipes.gtceu.macerator('firmalife:food/cocoa_powder') + .itemInputs('gtceu:cocoa_dust') + .itemOutputs('4x firmalife:food/cocoa_powder') + .duration(100) + .EUt(2) + + event.recipes.tfc.quern('4x firmalife:food/cocoa_powder', 'gtceu:cocoa_dust') + .id(`tfg:quern/cocoa_powder`) + + event.recipes.tfc.quern('gtceu:cocoa_dust', 'firmalife:food/roasted_cocoa_beans') + .id('tfg:quern/cocoa_dust'); + + //#endregion +} \ No newline at end of file diff --git a/kubejs/startup_scripts/firmalife/constants.js b/kubejs/startup_scripts/firmalife/constants.js index e0e9b6220..076a81f24 100644 --- a/kubejs/startup_scripts/firmalife/constants.js +++ b/kubejs/startup_scripts/firmalife/constants.js @@ -94,10 +94,6 @@ global.FIRMALIFE_GREENHOUSE_BERRY_RECIPE_COMPONENTS = [ { input: 'firmalife:plant/nightshade_bush', fluid_amount: 6000, output: '3x firmalife:food/nightshade_berry', name: 'nightshade' }, ]; -global.FIRMALIFE_QUERN_FLOUR_RECIPE_COMPONENTS = [ - { input: 'firmalife:food/nixtamal', output: '2x firmalife:food/masa_flour', name: 'masa_flour' }, -]; - global.FIRMALIFE_MIXER_FLATBREAD_DOUGH_RECIPE_COMPONENTS = [ { input: 'tfc:food/barley_flour', output: '4x firmalife:food/barley_dough', name: 'firmalife_barley_dough' }, { input: 'tfc:food/maize_flour', output: '4x firmalife:food/maize_dough', name: 'firmalife_maize_dough' }, @@ -117,3 +113,21 @@ global.FIRMALIFE_FURNACE_FLATBREAD_RECIPE_COMPONENTS = [ { input: 'tfc:food/wheat_dough', output: 'firmalife:food/wheat_flatbread', name: 'wheat_flatbread' }, { input: 'firmalife:food/masa', output: 'firmalife:food/corn_tortilla', name: 'corn_tortilla' }, ]; + +global.FIRMALIFE_COOKING_RECIPE_COMPONENTS = [ + { input: 'firmalife:food/white_chocolate_blend', output: 'firmalife:food/white_chocolate', name: 'white_chocolate' }, + { input: 'firmalife:food/dark_chocolate_blend', output: 'firmalife:food/dark_chocolate', name: 'dark_chocolate' }, + { input: 'firmalife:food/milk_chocolate_blend', output: 'firmalife:food/milk_chocolate', name: 'milk_chocolate' }, + { input: 'firmalife:food/raw_pizza', output: 'firmalife:food/cooked_pizza', name: 'cooked_pizza' }, + { input: 'firmalife:food/corn_tortilla', output: 'firmalife:food/taco_shell', name: 'taco_shell' }, + { input: 'firmalife:food/cookie_dough', output: 'firmalife:food/sugar_cookie', name: 'sugar_cookie' }, + { input: 'firmalife:food/chocolate_chip_cookie_dough', output: 'firmalife:food/chocolate_chip_cookie', name: 'chocolate_chip_cookie' }, + { input: 'firmalife:food/hardtack_dough', output: 'firmalife:food/hardtack', name: 'hardtack' }, + { input: 'firmalife:food/filled_pie', output: 'firmalife:food/cooked_pie', name: 'cooked_pie' }, + { input: 'firmalife:food/cocoa_beans', output: 'firmalife:food/roasted_cocoa_beans', name: 'roasted_cocoa_beans' }, + { input: 'firmalife:food/raw_pumpkin_pie', output: 'firmalife:food/pumpkin_pie', name: 'pumpkin_pie' }, + { input: 'tfc:food/soybean', output: 'firmalife:food/dehydrated_soybeans', name: 'dehydrated_soybeans' }, + { input: 'firmalife:food/raw_lasagna', output: 'firmalife:food/cooked_lasagna', name: 'cooked_lasagna' }, + { input: 'firmalife:food/bacon', output: 'firmalife:food/cooked_bacon', name: 'cooked_bacon' }, + { input: '#firmalife:foods/slices', output: 'firmalife:food/toast', name: 'toast' } +]; \ No newline at end of file diff --git a/kubejs/startup_scripts/tfc/constants.js b/kubejs/startup_scripts/tfc/constants.js index ce425b1ff..1ffefc5bf 100644 --- a/kubejs/startup_scripts/tfc/constants.js +++ b/kubejs/startup_scripts/tfc/constants.js @@ -1019,6 +1019,12 @@ global.TFC_MILKS = [ {id: 'firmalife:coconut_milk'}, ]; +global.TFC_CURDS_AND_CHEESES = [ + { id: 'milk', input_fluid: 'tfc:curdled_milk', curd: 'firmalife:food/milk_curd', cheese1: 'gouda', cheese2: 'cheddar' }, + { id: 'yak', input_fluid: 'tfc:curdled_yak_milk', curd: 'firmalife:food/yak_curd', cheese1: 'shosha', cheese2: 'rajya_metok' }, + { id: 'goat', input_fluid: 'tfc:curdled_goat_milk', curd: 'firmalife:food/goat_curd', cheese1: 'feta', cheese2: 'chevre' }, +]; + global.TFC_ALCOHOL = [ {id: 'tfc:beer'}, {id: 'tfc:cider'}, From f8222895731efecc6fa201a10a876593ad6653e5 Mon Sep 17 00:00:00 2001 From: ofoxsmith <77560533+ofoxsmith@users.noreply.github.com> Date: Thu, 12 Jun 2025 22:32:10 +1000 Subject: [PATCH 02/23] custom gregtech machines and logic to handle TFC recipes (#1160) * Change lv chem reactor quest to require any container with rubber instead of a rubber bucket Signed-off-by: ofoxsmith <77560533+ofoxsmith@users.noreply.github.com> * Add placeholder assets for food machines (copied from gtceu) * remove greenhouse definition from kubejs * change greenhouse recipe * Rework recipes file --------- Signed-off-by: ofoxsmith <77560533+ofoxsmith@users.noreply.github.com> Signed-off-by: Pyritie Co-authored-by: Pyritie --- .../machines/food_oven/overlay_front.png | Bin 0 -> 248 bytes .../food_oven/overlay_front_active.png | Bin 0 -> 292 bytes .../overlay_front_active_emissive.png | Bin 0 -> 241 bytes .../food_oven/overlay_front_emissive.png | Bin 0 -> 149 bytes .../machines/food_processor/overlay_back.png | Bin 0 -> 75 bytes .../food_processor/overlay_back_active.png | Bin 0 -> 75 bytes .../overlay_back_active.png.mcmeta | 5 + .../machines/food_processor/overlay_front.png | Bin 0 -> 341 bytes .../food_processor/overlay_front_active.png | Bin 0 -> 683 bytes .../overlay_front_active.png.mcmeta | 5 + .../machines/food_processor/overlay_side.png | Bin 0 -> 334 bytes .../food_processor/overlay_side_active.png | Bin 0 -> 683 bytes .../overlay_side_active.png.mcmeta | 5 + .../machines/food_processor/overlay_top.png | Bin 0 -> 348 bytes .../food_processor/overlay_top_active.png | Bin 0 -> 542 bytes .../overlay_top_active.png.mcmeta | 5 + .../gregtech/recipes.machines.js | 2 +- kubejs/server_scripts/tfg/recipes.food.js | 926 +++++++++--------- kubejs/server_scripts/tfg/recipes.js | 1 + kubejs/startup_scripts/gtceu/machines.js | 62 -- kubejs/startup_scripts/gtceu/recipe_types.js | 7 - kubejs/startup_scripts/tfc/constants.js | 2 +- 22 files changed, 489 insertions(+), 531 deletions(-) create mode 100644 kubejs/assets/gtceu/textures/block/machines/food_oven/overlay_front.png create mode 100644 kubejs/assets/gtceu/textures/block/machines/food_oven/overlay_front_active.png create mode 100644 kubejs/assets/gtceu/textures/block/machines/food_oven/overlay_front_active_emissive.png create mode 100644 kubejs/assets/gtceu/textures/block/machines/food_oven/overlay_front_emissive.png create mode 100644 kubejs/assets/gtceu/textures/block/machines/food_processor/overlay_back.png create mode 100644 kubejs/assets/gtceu/textures/block/machines/food_processor/overlay_back_active.png create mode 100644 kubejs/assets/gtceu/textures/block/machines/food_processor/overlay_back_active.png.mcmeta create mode 100644 kubejs/assets/gtceu/textures/block/machines/food_processor/overlay_front.png create mode 100644 kubejs/assets/gtceu/textures/block/machines/food_processor/overlay_front_active.png create mode 100644 kubejs/assets/gtceu/textures/block/machines/food_processor/overlay_front_active.png.mcmeta create mode 100644 kubejs/assets/gtceu/textures/block/machines/food_processor/overlay_side.png create mode 100644 kubejs/assets/gtceu/textures/block/machines/food_processor/overlay_side_active.png create mode 100644 kubejs/assets/gtceu/textures/block/machines/food_processor/overlay_side_active.png.mcmeta create mode 100644 kubejs/assets/gtceu/textures/block/machines/food_processor/overlay_top.png create mode 100644 kubejs/assets/gtceu/textures/block/machines/food_processor/overlay_top_active.png create mode 100644 kubejs/assets/gtceu/textures/block/machines/food_processor/overlay_top_active.png.mcmeta diff --git a/kubejs/assets/gtceu/textures/block/machines/food_oven/overlay_front.png b/kubejs/assets/gtceu/textures/block/machines/food_oven/overlay_front.png new file mode 100644 index 0000000000000000000000000000000000000000..de1abfe728887db34f3c30f4eb6cbdf84aea2db9 GIT binary patch literal 248 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s77>k44ofy`glX=O&z`&C3 z=pRfOCesk7g%kUsC6VENz9_$s*Ka#Lk*U)X& zGl^t{mJ9bd8+R=X;P%pdl~;7`3S&rnHsc+m=DS~+ehY>fxU8A+jpyH7yCajc7I!^h y^^5*e@hwFlp-MczZ-Qe&X=T|r%jUZbF*6sLEe;D@a*lz4fx*+&&t;ucLK6UxJzFOL literal 0 HcmV?d00001 diff --git a/kubejs/assets/gtceu/textures/block/machines/food_oven/overlay_front_active.png b/kubejs/assets/gtceu/textures/block/machines/food_oven/overlay_front_active.png new file mode 100644 index 0000000000000000000000000000000000000000..5b9e6ea6739d56cd2a782cfb033e498966bbd628 GIT binary patch literal 292 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s77>k44ofy`glX=O&z`&C3 z=;T#aA3K( z;KDJsgpJKI9XF_O}sGm5$oj>ITK{84j3@7g|t{oNIYraQDEC#$iTz= rK+4g9v&)g8-BG0dpaU}-8^f~WmispZs5mk(Ffe$!`njxgN@xNAnMh;s literal 0 HcmV?d00001 diff --git a/kubejs/assets/gtceu/textures/block/machines/food_oven/overlay_front_active_emissive.png b/kubejs/assets/gtceu/textures/block/machines/food_oven/overlay_front_active_emissive.png new file mode 100644 index 0000000000000000000000000000000000000000..4da15531758294c4b06ac119be05b106f4ae87fe GIT binary patch literal 241 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s77>k44ofy`glX=O&z`&C3 z=xx>8|qk*Bo~qW;Jlm zv{>QOy~ZM^?&$~p!zbn|>^eAQA>%Q&i|*&*ESW;N*n9${m{)KVuP{ErDCxkH_LxC} q?SN@hgOErw17mZWPC^0$!=78})Aruf6=7gtVDNPHb6Mw<&;$SiH%_ns literal 0 HcmV?d00001 diff --git a/kubejs/assets/gtceu/textures/block/machines/food_oven/overlay_front_emissive.png b/kubejs/assets/gtceu/textures/block/machines/food_oven/overlay_front_emissive.png new file mode 100644 index 0000000000000000000000000000000000000000..c20a1c9810d77b74d42b9829129c1c640700e925 GIT binary patch literal 149 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4rT@h1`S>QU?3X literal 0 HcmV?d00001 diff --git a/kubejs/assets/gtceu/textures/block/machines/food_processor/overlay_back.png b/kubejs/assets/gtceu/textures/block/machines/food_processor/overlay_back.png new file mode 100644 index 0000000000000000000000000000000000000000..f02154247c2653f7aa4f2c50135ee47eb28d1f9f GIT binary patch literal 75 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7ggjjwLo9le6C_v{Cy4Yg caWF8j2rw|#`&RTZFfcH9y85}Sb4q9e0PjW)-2eap literal 0 HcmV?d00001 diff --git a/kubejs/assets/gtceu/textures/block/machines/food_processor/overlay_back_active.png b/kubejs/assets/gtceu/textures/block/machines/food_processor/overlay_back_active.png new file mode 100644 index 0000000000000000000000000000000000000000..f02154247c2653f7aa4f2c50135ee47eb28d1f9f GIT binary patch literal 75 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7ggjjwLo9le6C_v{Cy4Yg caWF8j2rw|#`&RTZFfcH9y85}Sb4q9e0PjW)-2eap literal 0 HcmV?d00001 diff --git a/kubejs/assets/gtceu/textures/block/machines/food_processor/overlay_back_active.png.mcmeta b/kubejs/assets/gtceu/textures/block/machines/food_processor/overlay_back_active.png.mcmeta new file mode 100644 index 000000000..dfae8cae1 --- /dev/null +++ b/kubejs/assets/gtceu/textures/block/machines/food_processor/overlay_back_active.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation":{ + "frametime":1 + } +} \ No newline at end of file diff --git a/kubejs/assets/gtceu/textures/block/machines/food_processor/overlay_front.png b/kubejs/assets/gtceu/textures/block/machines/food_processor/overlay_front.png new file mode 100644 index 0000000000000000000000000000000000000000..5bd5b3654a3e463b7c814f8d5171d792abba52eb GIT binary patch literal 341 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s77>k44ofy`glX=O&z`&C3 z=KH*Wmc zzhsHZly&BHt=$A zbUQ|JIBa2Dw@fWSOzVIFgUEG-=goTb7ZGd;UT251wsic1;Uyx=U%*~s$Qb>9)U3xBT1 z7FU~#@0FP$@Q(fTyO=Wd&8N@)FUxpz=H$Qj6r-P+5^Y;bR$bM4`nfWvT`6TlG&hn=2!msBl_iIg}buUIIDtELT z-XhoEUAX@C(y19!q`vOj@OA@V(akk7FAr>#y>>88>*^tnZG)Aa8G*GA2 zY0E^93zIXsZudQ7$d@{>U%Bf@f?`zmhI$)r{&P-e1Ao*_WoEKvSi`L2=JkG`U3c3? zX+Cx@{x~kyiR>8?k7p)YZJyH0kf2z?z?-Z$wQ)7G^@$7iuNln+HP1dQSn!1*h)vSD zc?L_B!Py^nE@x*5+B#U(--+{lU4Dau;T_AXx`y3N>b4F{j_eZx8h%G<$0%=DwC`H| zHRir%AGf{|8NLPVue_KwnUnAGPZ49O`oIr0g<1_lOCS3j3^P6k44ofy`glX=O&z`&C3 z=KH*Wmc zzhsHZly zRc*Vw{CvYt1qDSN7BS~?S>Y*ej0&yO-``FC@#81AM6*frfye#v2TY6(WHERcZ)8}_ zs8I0vpfX!soSZ@3$8WL`Zw}uMPmq#KFlAU08SBV*rmd1Ojl=4|OQswLhX|fiP7I59 z3rtNLHw7@ZF)rA_W-0%KSAe0FQ73EzqX@HuCNGPFpQ*W7;)Q_A49Njs8jqy>tbCA_ j(C}!9&4q?WMh2&^K>{t(EAKKeFfe$!`njxgN@xNA5FU6o literal 0 HcmV?d00001 diff --git a/kubejs/assets/gtceu/textures/block/machines/food_processor/overlay_side_active.png b/kubejs/assets/gtceu/textures/block/machines/food_processor/overlay_side_active.png new file mode 100644 index 0000000000000000000000000000000000000000..f2b3c4212bf3cb561d04212b7ed709c8d48a53b0 GIT binary patch literal 683 zcmeAS@N?(olHy`uVBq!ia0y~yU=UznU`XI#V_;wqx%g=T0|NtNage(c!@6@aFBupZ zSkfJR9T^xl_H+M9WMyDr;4JWnEM{Qf764(!waR--85o!xJY5_^BHZ6j-|NNfC~(|; z;|4>Iqyw9c9TzQ#I3nVd)os(X_WXn3A3WR4?3xzz_Nr~%c)?kivytVq>%Jpy7yew2 zEv_~f-zzgi;2rzvcQIw^n@^wpUzYLc%*lW4DMmjtCEB)>th%c8^mAoyZ(72~k1r*2 z*Xf>Cx9Xp2HdjVA%TFvt|A2k+$Ddzi-yTUSnRxbOd`Fma;>R;`clW$8HTbwMVu{~+ zeJQc#qUHKk+H06~wr#$uaj|T#!dgW>_KE*y&)8E@?D_Khtc;88@7J0{>t2jbRPJaw zyhX0RyKw#OrBgGeNPXS4;q3;#qMK`EULM#ed+lJH*3%h#=KGzV*mu}*X^c>HXrNB3 z)0T-I7ba(N-R^tFkS}#$zjD`+1jVTA4fQtM{O6p`2L7m<%FJZTu!dR3&FlR>yY9A) z(tPY*{Bc~Y6WKE)9?wj)+B~I~AwjW(fj3!iYU65V>k}93Uo)BuYMy;qu;2?r5SyfP z^9+_MgR?*ET+YrAv~{qmzZ2*Ay8H$Q!#kE&bq%|l)NLJ@9N8xXH2jXzj#1vQXy3K^ zYs`JkK5l&_GJFfzUwJWWGAG~VpCZOm^?@I13d7{};spyG_AV$oSiE3k44ofy`glX=O&z`&C3 z=KH*Wmc zzhsHZlyrbl_Ax8*dxZZ>u> zn|>~q?V3&HW4RR?S{DK?Cro(yJn@BJU(@auP90_zg>>cYX#!$NKYsk=p23zVu%qxb z+u_Ik@dvUJ8S)s68ZsT&ZX9u7Sj}kgA^CnMt5pHaP(|sT*I~?J0N@lb8-$y zmiL$EO&%G)eF1@Q7*;dt-`m%`Nq}Lt1jhkh234T|o90DaEDll*Gv-fcUneQntFYCe v!Bnwv5tlSW=CPR*5*n^7vANLD$jC79Vq({kNSs54@I14-?iy0WW1wojxJ|%u40|Vn`PZ!4!5AV0r3_T792(+1ja-Ru4O|7V_fT6DI=>TQ2h$m-BfHu@8UB`o?b z$K1QOwDY3kf4>Rs&&{oF-cq<;>N{`ef!XH#{+2&qCEVXH{Up0=-Z8e{nd!MFOD>(h z|EFQw;gj;cY^j?gr978b+$pbh^nXA9&zc0T8w!q-q85rt_^DZTm4Dw-UgFa~m8*R5 zLa`mXQ!QFv*35Hu)-{;maiK!Z`Soh;kQuXst4joCd6i>KHzRwfHQ2%`W9~|N8{{)yiAW=rS-cFnGH9xvX TFC.ingredient.notRotten(ingredient) + + const $ISPRecipeLogic = Java.loadClass("su.terrafirmagreg.core.common.data.machines.ISPOutputRecipeLogic") + const $SizedIngredient = Java.loadClass("com.gregtechceu.gtceu.api.recipe.ingredient.SizedIngredient") + + const Sized = (ing, amount) => $SizedIngredient.create(ing, amount) + + + /** + * @typedef {Object} FoodRecipeData + * @property {number?} circuit + * @property {number} duration + * @property {number} EUt + * @property {Internal.GTRecipeComponents$FluidIngredientJS_[]?} fluidInputs Fluid inputs behave normally + * @property {Internal.FluidStackJS[]?} fluidOutputs Fluid outputs behave normally + * @property {string[]?} itemInputHints Array of simple ingredients, used internally within gregtech. [NOT ACTUAL INPUTS] + * @property {string?} itemOutputHint Simple ingredient output, used internally within gregtech. [NOT ACTUAL OUTPUT] + * @property {Ingredient[]?} itemInputs Array of ingredients used when running a recipe. + * @property {Internal.ItemStackProviderJS?} itemOutputProvider ItemStackProvider which provides the recipe output. + */ + + /** + * **NOTE:** TFC Ingredients do not support item counts higher than 1. Do `Sized(TFCIngredient('item:item'), count)` instead of `TFCIngredient('[count]x item:item')` + * + * @param {"food_oven"|"food_processor"} type The recipe type + * @param {string} id The recipe id + * @param {FoodRecipeData} data Recipe data + */ + function registerFoodRecipe(type, id, data) { + if (data.fluidInputs === undefined) data.fluidInputs = [] + if (data.fluidOutputs === undefined) data.fluidOutputs = [] + if (data.itemInputHints === undefined) data.itemInputHints = [] + if (data.itemInputs === undefined) data.itemInputs = [] + + if ((data.itemOutputProvider === undefined && data.itemOutputHint !== undefined) || (data.itemOutputHint === undefined && data.itemOutputProvider !== undefined)) { + return console.error(`Invalid recipe ${type}[${id}]: itemOutputProvider & itemOutputHint do not match`) + } + if (data.itemOutputHint === undefined && data.fluidOutputs.length === 0) return console.error(`Invalid recipe ${type}[${id}]: No outputs`) + if (data.itemInputHints.length === 0 && data.fluidInputs.length === 0) return console.error(`Invalid recipe ${type}[${id}]: No inputs`) + if (data.itemInputHints.length !== data.itemInputs.length) return console.error(`Invalid recipe ${type}[${id}]: itemInputHints.length !== itemInputs.length`) + + for (let index = 0; index < data.itemInputs; index++) { + if (typeof data.itemInputs[index] === "string") data.itemInputs[index] = Ingredient.of(data.itemInputs[index]); + } + + $ISPRecipeLogic.RegisterRecipeData(type + "/" + id, data.itemInputs, (data.itemOutputProvider === undefined) ? null : data.itemOutputProvider.asCanonClass()) + + let r = event.recipes.gtceu[type](id) + .duration(data.duration) + .EUt(data.EUt) + + if (data.circuit) r.circuit(data.circuit) + if (data.itemOutputHint) r.itemOutputs(data.itemOutputHint) + if (data.itemInputHints.length > 0) r.itemInputs(data.itemInputHints) + if (data.fluidInputs.length > 0) r.inputFluids(data.fluidInputs); + if (data.fluidOutputs.length > 0) r.outputFluids(data.fluidOutputs); + } + //#region ================= Meat cooking ================= + + global.TFC_MEAT_RECIPE_COMPONENTS.forEach(item => { - global.TFC_FURNACE_MEAT_RECIPE_COMPONENTS.forEach(item => { - - registerTFCRecipeProperties(item.name, - [ TFC.ingredient.notRotten(item.input) ], - TFC.isp.of(item.output).copyFood().addTrait('firmalife:oven_baked') - ) - - event.recipes.gtceu.electric_oven(item.name) - .itemInputs(item.input) - .itemOutputs(item.output) - .duration(300) - .EUt(16) + registerFoodRecipe("food_oven", item.name, { + duration: 300, + EUt: 16, + itemInputHints: [item.input], + itemOutputHint: item.output, + itemInputs: [NotRotten(item.input)], + itemOutputProvider: TFC.isp.of(item.output).copyFood().addTrait("firmalife:oven_baked") + }) }) //#endregion //#region ================= Cutting grains ================= global.TFC_QUERN_GRAIN_RECIPE_COMPONENTS.forEach(item => { - - registerTFCRecipeProperties(item.name, - [ TFC.ingredient.notRotten(item.input) ], - TFC.isp.of(item.output).copyFood() - ) - - event.recipes.gtceu.food_processor(item.name) - .itemInputs(item.input) - .itemOutputs(item.output) - .duration(100) - .EUt(2) + registerFoodRecipe("food_processor", item.name, { + duration: 100, + EUt: 2, + itemInputHints: [item.input], + itemOutputHint: item.output, + itemInputs: [NotRotten(item.input)], + itemOutputProvider: TFC.isp.of(item.output).copyOldestFood() + }) }) //#endregion //#region ================= Grains to flour ================= global.TFC_QUERN_FLOUR_RECIPE_COMPONENTS.forEach(item => { - - registerTFCRecipeProperties(item.name, - [ TFC.ingredient.notRotten(item.input) ], - TFC.isp.of(item.output).copyFood() - ) - - event.recipes.gtceu.food_processor(item.name) - .itemInputs(item.input) - .itemOutputs(item.output) - .duration(100) - .EUt(2) + registerFoodRecipe("food_processor", item.name, { + duration: 100, + EUt: 2, + itemInputHints: [item.input], + itemOutputHint: item.output, + itemInputs: [NotRotten(item.input)], + itemOutputProvider: TFC.isp.of(item.output).copyOldestFood() + }) + }) - global.FIRMALIFE_QUERN_FLOUR_RECIPE_COMPONENTS.forEach(item => { + // global.FIRMALIFE_QUERN_FLOUR_RECIPE_COMPONENTS.forEach(item => { - registerTFCRecipeProperties(item.name, - [ TFC.ingredient.notRotten(item.input) ], - TFC.isp.of(item.output).copyFood() - ) + // registerTFCRecipeProperties("food_processor/" + item.name, + // [ NotRotten(item.input) ], + // TFC.isp.of(item.output).copyFood() + // ) - event.recipes.gtceu.food_processor(item.name) - .itemInputs(item.input) - .itemOutputs(item.output) - .duration(100) - .EUt(2) - }) + // event.recipes.gtceu.food_processor(item.name) + // .itemInputs(item.input) + // .itemOutputs(item.output) + // .duration(100) + // .EUt(2) + // }) //#endregion //#region ================= Dough ================= global.TFC_MIXER_FLATBREAD_DOUGH_RECIPE_COMPONENTS.forEach(item => { - registerTFCRecipeProperties(item.name, - [ TFC.ingredient.notRotten(item.input) ], - TFC.isp.of(item.output).copyOldestFood() - ) - event.recipes.gtceu.food_processor(item.name) - .itemInputs(item.input) - .inputFluids(Fluid.of('minecraft:water', 100)) - .itemOutputs(item.output) - .duration(300) - .EUt(16) + registerFoodRecipe("food_processor", item.name, { + duration: 300, + EUt: 2, + itemInputHints: [item.input], + itemOutputHint: item.output, + fluidInputs: [Fluid.of('minecraft:water', 100)], + itemInputs: [NotRotten(item.input)], + itemOutputProvider: TFC.isp.of(item.output).copyFood() + }) + }) global.FIRMALIFE_MIXER_FLATBREAD_DOUGH_RECIPE_COMPONENTS.forEach(item => { - registerTFCRecipeProperties(item.name, - [ TFC.ingredient.notRotten(item.input) ], - TFC.isp.of(item.output).copyOldestFood() - ) - event.recipes.gtceu.food_processor(item.name) - .itemInputs(item.input) - .inputFluids(Fluid.of('minecraft:water', 100)) - .itemOutputs(item.output) - .duration(300) - .EUt(16) + registerFoodRecipe("food_processor", item.name, { + duration: 300, + EUt: 2, + itemInputHints: [item.input], + itemOutputHint: item.output, + fluidInputs: [Fluid.of('minecraft:water', 100)], + itemInputs: [NotRotten(item.input)], + itemOutputProvider: TFC.isp.of(item.output).copyFood() + }) }) //#endregion //#region ================= Baking bread ================= global.TFC_FURNACE_BREAD_RECIPE_COMPONENTS.forEach(item => { - registerTFCRecipeProperties(item.name, - [ TFC.ingredient.notRotten(item.input) ], - TFC.isp.of(item.output).copyFood().addTrait('firmalife:oven_baked') - ) - event.recipes.gtceu.electric_oven(item.name) - .itemInputs(item.input) - .itemOutputs(item.output) - .duration(300) - .EUt(16) + registerFoodRecipe("food_oven", item.name, { + duration: 300, + EUt: 16, + itemInputHints: [item.input], + itemOutputHint: item.output, + itemInputs: [NotRotten(item.input)], + itemOutputProvider: TFC.isp.of(item.output).copyFood().addTrait("firmalife:oven_baked") + }) + }) global.FIRMALIFE_FURNACE_FLATBREAD_RECIPE_COMPONENTS.forEach(item => { - registerTFCRecipeProperties(item.name, - [ TFC.ingredient.notRotten(item.input) ], - TFC.isp.of(item.output).copyFood().addTrait('firmalife:oven_baked') - ) - event.recipes.gtceu.electric_oven(item.name) - .itemInputs(item.input) - .itemOutputs(item.output) - .duration(300) - .EUt(16) + registerFoodRecipe("food_oven", item.name, { + duration: 300, + EUt: 16, + itemInputHints: [item.input], + itemOutputHint: item.output, + itemInputs: [NotRotten(item.input)], + itemOutputProvider: TFC.isp.of(item.output).copyFood().addTrait("firmalife:oven_baked") + }) }) //#endregion @@ -131,16 +188,14 @@ function registerTFGFoodRecipes(event) { global.FIRMALIFE_COOKING_RECIPE_COMPONENTS.forEach(item => { - registerTFCRecipeProperties(item.name, - [ TFC.ingredient.notRotten(item.input) ], - TFC.isp.of(item.output).firmaLifeCopyDynamicFood() - ) - - event.recipes.gtceu.electric_oven(item.name) - .itemInputs(item.input) - .itemOutputs(item.output) - .duration(300) - .EUt(16) + registerFoodRecipe("food_oven", item.name, { + duration: 300, + EUt: 16, + itemInputHints: [item.input], + itemOutputHint: item.output, + itemInputs: [NotRotten(item.input)], + itemOutputProvider: TFC.isp.of(item.output).firmaLifeCopyDynamicFood() + }) }) //#endregion @@ -148,417 +203,368 @@ function registerTFGFoodRecipes(event) { global.TFC_CURDS_AND_CHEESES.forEach(item => { - // Curds - registerTFCRecipeProperties(`${item.id}_curd`, - [], TFC.isp.of(item.curd).resetFood() - ) + registerFoodRecipe("food_processor", `${item.curd}_curd`, { + duration: 1200, + EUt: 16, + itemOutputHint: item.curd, + fluidInputs: [Fluid.of(item.input_fluid, 1000)], + itemInputs: [], + itemOutputProvider: TFC.isp.of(item.curd).resetFood() + }) - event.recipes.gtceu.food_processor(`${item.id}_curd`) - .inputFluids(Fluid.of(item.input_fluid, 1000)) - .itemOutputs(item.curd) - .duration(1200) - .EUt(16) + registerFoodRecipe("food_processor", `${item.cheese1}_cheese_wheel_1`, { + duration: 8000, + EUt: 16, + itemInputHints: [`3x ${item.curd}`], + itemOutputHint: `firmalife:${item.cheese1}_wheel`, + fluidInputs: [Fluid.of('tfc:salt_water', 750)], + itemInputs: [ Sized(NotRotten(item.curd),3) ], + itemOutputProvider: TFC.isp.of(`firmalife:${item.cheese1}_wheel`).copyOldestFood() + }) - // Sealed barrel cheese wheels - registerTFCRecipeProperties(`${item.id}_cheese_wheel_1`, - [ TFC.ingredient.notRotten(item.curd) ], - TFC.isp.of(`firmalife:${item.cheese1}_wheel`).copyOldestFood() - ) + registerFoodRecipe("food_processor", `${item.cheese2}_cheese_wheel_2`, { + circuit: 2, + duration: 1000, + EUt: 16, + itemInputHints: [`6x ${item.curd}`, `3x tfc:powder/salt`], + itemOutputHint: `firmalife:${item.cheese2}_wheel`, + itemInputs: [ Sized(NotRotten(item.curd), 6), Sized(Ingredient.of("tfc:powder/salt"), 3) ], + itemOutputProvider: TFC.isp.of(`firmalife:${item.cheese2}_wheel`).copyOldestFood() + }) - event.recipes.gtceu.food_processor(`${item.id}_cheese_wheel_1`) - .itemInputs(Item.of(item.curd, 3)) - .inputFluids(Fluid.of('tfc:salt_water', 750)) - .itemOutputs(`firmalife:${item.cheese1}_wheel`) - .circuit(1) - .duration(8000) - .EUt(16) + registerFoodRecipe("food_processor", `${item.cheese1}_cheese_cutting_1`, { + duration: 100, + EUt: 8, + itemInputHints: [`firmalife:${item.cheese1}_wheel`], + itemOutputHint: `4x firmalife:food/${item.cheese1}`, + itemInputs: [ NotRotten(`firmalife:${item.cheese1}_wheel`) ], + itemOutputProvider: TFC.isp.of(`4x firmalife:food/${item.cheese1}`).copyOldestFood() + }) - // Crafting table cheese wheels - registerTFCRecipeProperties(`${item.id}_cheese_wheel_2`, - [ TFC.ingredient.notRotten(item.curd) ], - TFC.isp.of(`firmalife:${item.cheese2}_wheel`).copyOldestFood() - ) + registerFoodRecipe("food_processor", `${item.cheese2}_cheese_cutting_2`, { + duration: 100, + EUt: 8, + itemInputHints: [`firmalife:${item.cheese2}_wheel`], + itemOutputHint: `4x firmalife:food/${item.cheese2}`, + itemInputs: [ NotRotten(`firmalife:${item.cheese2}_wheel`) ], + itemOutputProvider: TFC.isp.of(`4x firmalife:food/${item.cheese2}`).copyOldestFood() + }) - event.recipes.gtceu.food_processor(`${item.id}_cheese_wheel_2`) - .itemInputs(Item.of(item.curd, 6), '3x tfc:powder/salt') - .itemOutputs(`firmalife:${item.cheese2}_wheel`) - .circuit(2) - .duration(300) - .EUt(16) - - // Cheese cutting - registerTFCRecipeProperties(`${item.cheese1}_cheese_cutting_1`, - [ TFC.ingredient.notRotten(`firmalife:${item.cheese1}_wheel`) ], - TFC.isp.of(`firmalife:food/${item.cheese1}`).copyOldestFood() - ) - - event.recipes.gtceu.food_processor(`${item.cheese1}_cheese_cutting_1`) - .itemInputs(`firmalife:${item.cheese1}_wheel`) - .itemOutputs(`4x firmalife:food/${item.cheese1}`) - .duration(100) - .EUt(7) - - registerTFCRecipeProperties(`${item.cheese2}_cheese_cutting_2`, - [ TFC.ingredient.notRotten(`firmalife:${item.cheese2}_wheel`) ], - TFC.isp.of(`firmalife:food/${item.cheese2}`).copyOldestFood() - ) - - event.recipes.gtceu.food_processor(`${item.cheese2}_cheese_cutting_2`) - .itemInputs(`firmalife:${item.cheese2}_wheel`) - .itemOutputs(`4x firmalife:food/${item.cheese2}`) - .duration(100) - .EUt(7) }) - // White Chocolate Blend - registerTFCRecipeProperties(`white_chocolate_blend`, - [ TFC.ingredient.notRotten('firmalife:food/cocoa_butter') ], - TFC.isp.of('firmalife:food/white_chocolate_blend').copyOldestFood()) + registerFoodRecipe("food_processor", `white_chocolate_blend`, { + circuit: 1, + duration: 300, + EUt: 16, + itemInputHints: ['2x firmalife:food/cocoa_butter', '#tfc:sweetener'], + itemOutputHint: '2x firmalife:food/white_chocolate_blend', + fluidInputs: [Fluid.of('#tfc:milks', 1000)], + itemInputs: [ Sized(NotRotten("firmalife:food/cocoa_butter"), 2), "#tfc:sweetener"], + itemOutputProvider: TFC.isp.of('2x firmalife:food/white_chocolate_blend').resetFood(), + }) - event.recipes.gtceu.food_processor(`white_chocolate_blend`) - .itemInputs('2x firmalife:food/cocoa_butter', '#tfc:sweetener') - .inputFluids(Fluid.of('#tfc:milks', 1000)) - .itemOutputs('2x firmalife:food/white_chocolate_blend') - .circuit(1) - .duration(300) - .EUt(16) + registerFoodRecipe("food_processor", `dark_chocolate_blend`, { + circuit: 1, + duration: 300, + EUt: 16, + itemInputHints: ['2x firmalife:food/cocoa_powder', '#tfc:sweetener'], + itemOutputHint: '2x firmalife:food/dark_chocolate_blend', + fluidInputs: [Fluid.of('#tfc:milks', 1000)], + itemInputs: [ Sized(NotRotten("firmalife:food/cocoa_powder"), 2), "#tfc:sweetener"], + itemOutputProvider: TFC.isp.of('2x firmalife:food/dark_chocolate_blend').resetFood(), + }) - // Dark Chocolate Blend - registerTFCRecipeProperties(`dark_chocolate_blend`, - [], TFC.isp.of('firmalife:food/dark_chocolate_blend').resetFood()) - - event.recipes.gtceu.food_processor(`dark_chocolate_blend`) - .itemInputs('2x firmalife:food/cocoa_powder', '#tfc:sweetener') - .inputFluids(Fluid.of('#tfc:milks', 1000)) - .itemOutputs('2x firmalife:food/dark_chocolate_blend') - .circuit(1) - .duration(300) - .EUt(16) - - // Milk Chocolate Blend - registerTFCRecipeProperties(`milk_chocolate_blend`, - [ TFC.ingredient.notRotten('firmalife:food/cocoa_butter') ], - TFC.isp.of('firmalife:food/milk_chocolate_blend').copyOldestFood()) - - event.recipes.gtceu.food_processor(`milk_chocolate_blend`) - .itemInputs('firmalife:food/cocoa_powder', 'firmalife:food/cocoa_butter', '#tfc:sweetener') - .inputFluids(Fluid.of('#tfc:milks', 1000)) - .itemOutputs('2x firmalife:food/milk_chocolate_blend') - .circuit(2) - .duration(300) - .EUt(16) + registerFoodRecipe("food_processor", `milk_chocolate_blend`, { + circuit: 2, + duration: 300, + EUt: 16, + itemInputHints: ['firmalife:food/cocoa_powder', 'firmalife:food/cocoa_butter', '#tfc:sweetener'], + itemOutputHint: '2x firmalife:food/milk_chocolate_blend', + fluidInputs: [Fluid.of('#tfc:milks', 1000)], + itemInputs: [ NotRotten("firmalife:food/cocoa_powder"), NotRotten('firmalife:food/cocoa_butter'), "#tfc:sweetener"], + itemOutputProvider: TFC.isp.of('2x firmalife:food/milk_chocolate_blend').resetFood(), + }) //#endregion //#region ================= Misc ================= - registerTFCRecipeProperties('tomato_sauce', - [ TFC.ingredient.notRotten('tfc:food/tomato'), TFC.ingredient.notRotten('tfc:food/garlic') ], - TFC.isp.of('firmalife:food/tomato_sauce').copyOldestFood()) - - event.recipes.gtceu.food_processor('tomato_sauce') - .itemInputs('tfc:food/tomato', 'tfc:powder/salt', 'tfc:food/garlic') - .inputFluids(Fluid.of('minecraft:water', 100)) - .itemOutputs('5x firmalife:food/tomato_sauce') - .duration(2000) - .EUt(7) - - registerTFCRecipeProperties('tomato_sauce_from_mix', - [ TFC.ingredient.notRotten("firmalife:food/tomato_sauce_mix") ], - TFC.isp.of('firmalife:food/tomato_sauce').copyOldestFood()) - - event.recipes.gtceu.food_processor('tomato_sauce_from_mix') - .itemInputs("firmalife:food/tomato_sauce_mix") - .inputFluids(Fluid.of('minecraft:water', 200)) - .itemOutputs('firmalife:food/tomato_sauce') - .duration(200) - .EUt(7) - - registerTFCRecipeProperties('olive_paste', - [ TFC.ingredient.notRotten('tfc:food/olive') ]) - - event.recipes.gtceu.food_processor(`olive_paste`) - .itemInputs('tfc:food/olive') - .itemOutputs('2x tfc:olive_paste') - .duration(60) - .EUt(2) - - registerTFCRecipeProperties('soybean_paste', - [ TFC.ingredient.notRotten('tfc:food/soybean') ]) - - event.recipes.gtceu.food_processor(`soybean_paste`) - .itemInputs('tfc:food/soybean') - .itemOutputs('2x firmalife:soybean_paste') - .duration(60) - .EUt(2) - - // Vinegar - global.TFC_ALCOHOL.forEach(alcohol => { - let name = `vinegar/${alcohol.id.replace(':', '_')}`; - - registerTFCRecipeProperties(name, - [ TFC.ingredient.notRotten('#tfc:foods/fruits') ]) - - event.recipes.gtceu.food_processor(name) - .itemInputs('#tfc:foods/fruits') - .inputFluids(Fluid.of(alcohol.id, 250)) - .outputFluids(Fluid.of('tfc:vinegar', 250)) - .circuit(5) - .duration(600) - .EUt(28) + registerFoodRecipe("food_processor", "food_salting", { + duration: 10, + EUt: 16, + itemInputHints: ["#tfc:foods/can_be_salted", "tfc:powder/salt"], + itemOutputHint: "#tfc:foods/can_be_salted", + itemInputs: [TFC.ingredient.lacksTrait(NotRotten("#tfc:foods/can_be_salted"), "tfc:salted"), "tfc:powder/salt"], + itemOutputProvider: TFC.isp.copyInput().addTrait("tfc:salted") }) - // Pizzas - registerTFCRecipeProperties('pizza_dough_olive_oil', - [ TFC.ingredient.notRotten('#tfc:foods/dough') ], - TFC.isp.of('firmalife:food/pizza_dough').copyOldestFood()) + registerFoodRecipe("food_processor", "tomato_sauce", { + duration: 2000, + EUt: 8, + itemInputHints: ['tfc:food/tomato', 'tfc:powder/salt', 'tfc:food/garlic'], + itemOutputHint: '5x firmalife:food/tomato_sauce', + fluidInputs: [Fluid.of('minecraft:water', 100)], + itemInputs: [NotRotten('tfc:food/tomato'), NotRotten('tfc:food/garlic'), "tfc:powder/salt"], + itemOutputProvider: TFC.isp.of('firmalife:food/tomato_sauce').copyOldestFood(), + }) - event.recipes.gtceu.food_processor('pizza_dough_olive_oil') - .itemInputs('firmalife:spice/basil_leaves', '#tfc:foods/dough', 'tfc:powder/salt') - .inputFluids(Fluid.of('tfc:olive_oil', 1000)) - .itemOutputs('4x firmalife:food/pizza_dough') - .duration(300) - .EUt(16) + registerFoodRecipe("food_processor", "tomato_sauce_from_mix", { + duration: 200, + EUt: 8, + itemInputHints: ['firmalife:food/tomato_sauce_mix'], + itemOutputHint: 'firmalife:food/tomato_sauce', + fluidInputs: [Fluid.of('minecraft:water', 200)], + itemInputs: [NotRotten("firmalife:food/tomato_sauce_mix")], + itemOutputProvider: TFC.isp.of('firmalife:food/tomato_sauce').copyOldestFood(), + }) - registerTFCRecipeProperties('pizza_dough_soybean_oil', - [ TFC.ingredient.notRotten('#tfc:foods/dough') ], - TFC.isp.of('firmalife:food/pizza_dough').copyOldestFood()) + registerFoodRecipe("food_processor", "olive_paste", { + duration: 60, + EUt: 8, + itemInputHints: ['tfc:food/olive'], + itemOutputHint: '2x tfc:olive_paste', + itemInputs: [NotRotten('tfc:food/olive')], + itemOutputProvider: TFC.isp.of('2x tfc:olive_paste'), + }) - event.recipes.gtceu.food_processor('pizza_dough_soybean_oil') - .itemInputs('firmalife:spice/basil_leaves', '#tfc:foods/dough', 'tfc:powder/salt') - .inputFluids(Fluid.of('firmalife:soybean_oil', 1000)) - .itemOutputs('4x firmalife:food/pizza_dough') - .duration(300) - .EUt(16) + registerFoodRecipe("food_processor", "soybean_paste", { + duration: 60, + EUt: 8, + itemInputHints: ['tfc:food/soybean'], + itemOutputHint: '2x tfc:soybean_paste', + itemInputs: [NotRotten('tfc:food/soybean')], + itemOutputProvider: TFC.isp.of('2x tfc:soybean_paste'), + }) + + // Vinegar + global.TFC_ALCOHOL.forEach(alcohol => { + let name = `vinegar_${alcohol.id.replace(':', '_')}`; - // Ice Cream - registerTFCRecipeProperties('vanilla_ice_cream', - [], TFC.isp.of('firmalife:food/vanilla_ice_cream').resetFood()) + registerFoodRecipe("food_processor", name, { + circuit: 5, + duration: 600, + EUt: 32, + itemInputHints: ['#tfc:foods/fruits'], + fluidInputs: [Fluid.of(alcohol.id, 250)], + fluidOutputs: [Fluid.of('tfc:vinegar', 250)], + }) - event.recipes.gtceu.food_processor('vanilla_ice_cream') - .itemInputs('firmalife:ice_shavings', '#tfc:sweetener', 'firmalife:spice/vanilla') - .inputFluids(Fluid.of('firmalife:cream', 1000)) - .itemOutputs('2x firmalife:food/vanilla_ice_cream') - .duration(300) - .EUt(16) + }) - registerTFCRecipeProperties('chocolate_ice_cream', - [ TFC.ingredient.notRotten('firmalife:food/vanilla_ice_cream') ], - TFC.isp.of('firmalife:food/chocolate_ice_cream').copyOldestFood()) + registerFoodRecipe("food_processor", "pizza_dough_olive_oil", { + duration: 300, + EUt: 16, + itemInputHints: ['firmalife:spice/basil_leaves', '#tfc:foods/dough', 'tfc:powder/salt'], + itemOutputHint: '4x firmalife:food/pizza_dough', + fluidInputs: [Fluid.of('tfc:olive_oil', 1000)], + itemInputs: ["firmalife:spice/basil_leaves", NotRotten("#tfc:foods/dough"), "tfc:powder/salt"], + itemOutputProvider: TFC.isp.of("4x firmalife:food/pizza_dough").copyOldestFood() + }) - event.recipes.gtceu.food_processor('chocolate_ice_cream') - .itemInputs('firmalife:food/vanilla_ice_cream') - .inputFluids(Fluid.of('firmalife:chocolate', 1000)) - .itemOutputs('firmalife:food/chocolate_ice_cream') - .duration(300) - .EUt(16) + registerFoodRecipe("food_processor", "pizza_dough_soybean_oil", { + duration: 300, + EUt: 16, + itemInputHints: ['firmalife:spice/basil_leaves', '#tfc:foods/dough', 'tfc:powder/salt'], + itemOutputHint: '4x firmalife:food/pizza_dough', + fluidInputs: [Fluid.of('firmalife:soybean_oil', 1000)], + itemInputs: ["firmalife:spice/basil_leaves", NotRotten("#tfc:foods/dough"), "tfc:powder/salt"], + itemOutputProvider: TFC.isp.of("4x firmalife:food/pizza_dough").copyOldestFood() + }) - registerTFCRecipeProperties('strawberry_ice_cream', - [ TFC.ingredient.notRotten('firmalife:food/vanilla_ice_cream'), TFC.ingredient.notRotten('tfc:food/strawberry') ], - TFC.isp.of('firmalife:food/strawberry_ice_cream').copyOldestFood()) + registerFoodRecipe("food_processor", "vanilla_ice_cream", { + duration: 300, + EUt: 16, + itemInputHints: ['firmalife:ice_shavings', '#tfc:sweetener', 'firmalife:spice/vanilla'], + itemOutputHint: '2x firmalife:food/vanilla_ice_cream', + fluidInputs: [Fluid.of('firmalife:cream', 1000)], + itemInputs: ['firmalife:ice_shavings', '#tfc:sweetener', 'firmalife:spice/vanilla'], + itemOutputProvider: TFC.isp.of("2x firmalife:food/vanilla_ice_cream").resetFood() + }) - event.recipes.gtceu.food_processor('strawberry_ice_cream') - .itemInputs('firmalife:food/vanilla_ice_cream', '2x tfc:food/strawberry') - .itemOutputs('firmalife:food/strawberry_ice_cream') - .duration(300) - .EUt(16) + registerFoodRecipe("food_processor", "chocolate_ice_cream", { + duration: 300, + EUt: 16, + itemInputHints: ['firmalife:food/vanilla_ice_cream'], + itemOutputHint: 'firmalife:food/chocolate_ice_cream', + fluidInputs: [Fluid.of('firmalife:chocolate', 1000)], + itemInputs: [NotRotten('firmalife:food/vanilla_ice_cream')], + itemOutputProvider: TFC.isp.of("firmalife:food/chocolate_ice_cream").resetFood() + }) - // Butter - registerTFCRecipeProperties('butter', - [], TFC.isp.of('firmalife:food/butter').resetFood()) + registerFoodRecipe("food_processor", "strawberry_ice_cream", { + duration: 300, + EUt: 16, + itemInputHints: ['firmalife:food/vanilla_ice_cream', 'firmalife:food/vanilla_ice_cream', '2x tfc:food/strawberry'], + itemOutputHint: 'firmalife:food/strawberry_ice_cream', + itemInputs: [NotRotten('firmalife:food/vanilla_ice_cream'), Sized(NotRotten("tfc:food/strawberry"), 2)], + itemOutputProvider: TFC.isp.of("firmalife:food/strawberry_ice_cream").resetFood() + }) - event.recipes.gtceu.food_processor('butter') - .itemInputs('tfc:powder/salt') - .inputFluids(Fluid.of('firmalife:cream', 1000)) - .itemOutputs('firmalife:food/butter') - .duration(300) - .EUt(16) + registerFoodRecipe("food_processor", "butter", { + duration: 300, + EUt: 16, + itemInputHints: ["tfc:powder/salt"], + itemOutputHint: "firmalife:food/buffer", + fluidInputs: [Fluid.of('firmalife:cream', 1000)], + itemInputs: ["tfc:powder/salt"], + itemOutputProvider: TFC.isp.of('firmalife:food/butter').resetFood() + }) - // Pie Dough - registerTFCRecipeProperties('pie_dough', - [ TFC.ingredient.notRotten('firmalife:food/butter'), TFC.ingredient.notRotten('#tfc:foods/flour') ], - TFC.isp.of('firmalife:food/pie_dough').copyOldestFood()) + registerFoodRecipe("food_processor", "pie_dough", { + circuit: 2, + duration: 300, + EUt: 16, + itemInputHints: ['#tfc:sweetener', 'firmalife:food/butter', '#tfc:foods/flour'], + itemOutputHint: 'firmalife:food/pie_dough', + fluidInputs: [Fluid.of('minecraft:water', 1000)], + itemInputs: [NotRotten('firmalife:food/butter'), NotRotten('#tfc:foods/flour'), "#tfc:sweetener"], + itemOutputProvider: TFC.isp.of('firmalife:food/pie_dough').copyOldestFood() + }) - event.recipes.gtceu.food_processor('pie_dough') - .itemInputs('#tfc:sweetener', 'firmalife:food/butter', '#tfc:foods/flour') - .inputFluids(Fluid.of('minecraft:water', 1000)) - .itemOutputs('firmalife:food/pie_dough') - .duration(300) - .EUt(16) - .circuit(2) + registerFoodRecipe("food_processor", "pumpkin_pie_dough", { + circuit: 2, + duration: 300, + EUt: 16, + itemInputHints: ['#tfc:sweetener', '#forge:eggs', '2x tfc:food/pumpkin_chunks', '#tfc:foods/flour'], + itemOutputHint: 'firmalife:food/pumpkin_pie_dough', + fluidInputs: [Fluid.of('minecraft:water', 1000)], + itemInputs: ['#tfc:sweetener', NotRotten('#forge:eggs'), Sized(NotRotten('tfc:food/pumpkin_chunks'), 2), NotRotten('#tfc:foods/flour')], + itemOutputProvider: TFC.isp.of('firmalife:food/pumpkin_pie_dough').copyOldestFood() + }) - // Pumpkin Pie Dough - registerTFCRecipeProperties('pumpkin_pie_dough', - [ TFC.ingredient.notRotten('#forge:eggs'), TFC.ingredient.notRotten('tfc:food/pumpkin_chunks'), TFC.ingredient.notRotten('#tfc:foods/flour') ], - TFC.isp.of('firmalife:food/pumpkin_pie_dough').copyOldestFood()) + registerFoodRecipe("food_processor", "cookie_dough", { + duration: 300, + EUt: 16, + itemInputHints: ['#tfc:sweetener', '#forge:eggs', 'firmalife:food/butter', '#tfc:foods/flour', "firmalife:spice/vanilla"], + itemOutputHint: '4x firmalife:food/cookie_dough', + itemInputs: ['firmalife:spice/vanilla', '#tfc:sweetener', NotRotten('firmalife:food/butter'), NotRotten('#tfc:foods/flour'), NotRotten('#forge:eggs')], + itemOutputProvider: TFC.isp.of('4x firmalife:food/cookie_dough').copyOldestFood() + }) - event.recipes.gtceu.food_processor('pumpkin_pie_dough') - .itemInputs('#tfc:sweetener', '#forge:eggs', '2x tfc:food/pumpkin_chunks', '#tfc:foods/flour') - .inputFluids(Fluid.of('minecraft:water', 1000)) - .itemOutputs('firmalife:food/pumpkin_pie_dough') - .duration(300) - .EUt(16) - .circuit(2) + registerFoodRecipe("food_processor", "chocolate_chip_cookie_dough", { + duration: 300, + EUt: 16, + itemInputHints: ['4x firmalife:food/cookie_dough', '#firmalife:chocolate_blends'], + itemOutputHint: '4x firmalife:food/chocolate_chip_cookie_dough', + itemInputs: [Sized(NotRotten('firmalife:food/cookie_dough'), 4), NotRotten('#firmalife:chocolate_blends')], + itemOutputProvider: TFC.isp.of('4x firmalife:food/chocolate_chip_cookie_dough').copyOldestFood() + }) - // Cookie Dough - registerTFCRecipeProperties('cookie_dough', - [ TFC.ingredient.notRotten('firmalife:food/butter'), TFC.ingredient.notRotten('#tfc:foods/flour'), TFC.ingredient.notRotten('#forge:eggs') ], - TFC.isp.of('4x firmalife:food/cookie_dough').copyOldestFood()) + registerFoodRecipe("food_processor", "hardtack_dough", { + duration: 300, + EUt: 16, + itemInputHints: ['tfc:powder/salt', '#tfc:foods/flour'], + itemOutputHint: '4x firmalife:food/hardtack_dough', + fluidInputs: [Fluid.of('minecraft:water', 1000)], + itemInputs: [NotRotten('#tfc:foods/flour'), "tfc:powder/salt"], + itemOutputProvider: TFC.isp.of('4x firmalife:food/hardtack_dough').copyOldestFood() + }) - event.recipes.gtceu.food_processor('cookie_dough') - .itemInputs('#tfc:sweetener', 'firmalife:food/butter', '#tfc:foods/flour', '#forge:eggs', 'firmalife:spice/vanilla') - .itemOutputs('4x firmalife:food/cookie_dough') - .duration(300) - .EUt(16) + registerFoodRecipe("food_processor", "yeast_starter", { + duration: 1200, + EUt: 8, + circuit: 1, + fluidInputs: [Fluid.of('firmalife:yeast_starter', 100)], + fluidOutputs: [Fluid.of('firmalife:yeast_starter', 600)], + itemInputHints: ['#tfc:foods/flour'], + itemInputs: [NotRotten('#tfc:foods/flour')] + }) - registerTFCRecipeProperties('chocolate_chip_cookie_dough', - [ TFC.ingredient.notRotten('firmalife:food/cookie_dough'), TFC.ingredient.notRotten('#firmalife:chocolate_blends') ], - TFC.isp.of('4x firmalife:food/chocolate_chip_cookie_dough').copyOldestFood()) + registerFoodRecipe("food_processor", "cocoa_dust", { + duration: 100, + EUt: 4, + itemInputHints: ["firmalife:food/roasted_cocoa_beans"], + itemOutputHint: "gtceu:cocoa_dust", + itemInputs: [NotRotten('firmalife:food/roasted_cocoa_beans')], + itemOutputProvider: TFC.isp.of("gtceu:cocoa_dust") + }) - event.recipes.gtceu.food_processor('chocolate_chip_cookie_dough') - .itemInputs('4x firmalife:food/cookie_dough', '#firmalife:chocolate_blends') - .itemOutputs('4x firmalife:food/chocolate_chip_cookie_dough') - .duration(300) - .EUt(16) + registerFoodRecipe("food_processor", "soybean_paste", { + duration: 50, + EUt: 8, + itemInputHints: ["firmalife:food/dehydrated_soybeans"], + itemOutputHint: "firmalife:food/soybean_paste", + itemInputs: [NotRotten('firmalife:food/dehydrated_soybeans')], + itemOutputProvider: TFC.isp.of("firmalife:food/soybean_paste") + }) - // Hardtack Dough - registerTFCRecipeProperties('hardtack_dough', - [ TFC.ingredient.notRotten('#tfc:foods/flour') ], - TFC.isp.of('4x firmalife:food/hardtack_dough').copyOldestFood()) + registerFoodRecipe("food_processor", "red_grapes", { + duration: 50, + EUt: 8, + itemInputHints: ["firmalife:food/red_grapes"], + itemOutputHint: "firmalife:food/smashed_red_grapes", + itemInputs: [NotRotten('firmalife:food/red_grapes')], + itemOutputProvider: TFC.isp.of('firmalife:food/smashed_red_grapes').copyOldestFood() + }) - event.recipes.gtceu.food_processor('hardtack_dough') - .itemInputs('tfc:powder/salt', '#tfc:foods/flour') - .inputFluids(Fluid.of('minecraft:water', 1000)) - .itemOutputs('4x firmalife:food/hardtack_dough') - .duration(300) - .EUt(16) - .circuit(4) + registerFoodRecipe("food_processor", "white_grapes", { + duration: 50, + EUt: 8, + itemInputHints: ["firmalife:food/white_grapes"], + itemOutputHint: "firmalife:food/smashed_white_grapes", + itemInputs: [NotRotten('firmalife:food/white_grapes')], + itemOutputProvider: TFC.isp.of('firmalife:food/smashed_white_grapes').copyOldestFood() + }) - // Yeast starter - registerTFCRecipeProperties('yeast_starter', - [ TFC.ingredient.notRotten('#tfc:foods/flour') ]) + registerFoodRecipe("food_processor", "egg_noodles", { + duration: 50, + EUt: 8, + itemInputHints: ["firmalife:foods/egg_noodle_flour", 'tfc:powder/salt', '#forge:eggs'], + itemOutputHint: 'firmalife:food/raw_egg_noodles', + itemInputs: [NotRotten("firmalife:foods/egg_noodle_flour"), NotRotten('#forge:eggs'), 'tfc:powder/salt'], + fluidInputs: [Fluid.of('#tfc:milks', 1000)], + itemOutputProvider: TFC.isp.of("firmalife:food/raw_egg_noodles").copyOldestFood(), + }) - event.recipes.gtceu.food_processor('yeast_starter') - .inputFluids(Fluid.of('firmalife:yeast_starter', 100)) - .itemInputs('#tfc:foods/flour') - .outputFluids(Fluid.of('firmalife:yeast_starter', 600)) - .duration(1200) - .EUt(8) - .circuit(1) + registerFoodRecipe("food_processor", "rice_noodles", { + duration: 50, + EUt: 8, + itemInputHints: ["tfc:food/rice_flour", 'tfc:food/maize_flour', 'tfc:powder/salt'], + fluidInputs: [Fluid.of('#tfc:milks', 1000)], + itemOutputHint: '2x firmalife:food/raw_rice_noodles', + itemInputs: [NotRotten("tfc:food/rice_flour"), NotRotten('tfc:food/maize_flour'), 'tfc:powder/salt'], + itemOutputProvider: TFC.isp.of('2x firmalife:food/raw_rice_noodles').copyOldestFood() + }) - // Cocoa Dust - registerTFCRecipeProperties('cocoa_dust', - [ TFC.ingredient.notRotten('firmalife:food/roasted_cocoa_beans') ]) + registerFoodRecipe("food_processor", "cured_maize", { + duration: 300, + EUt: 8, + itemInputHints: ["tfc:food/maize_grain"], + itemOutputHint: "firmalife:food/cured_maize", + itemInputs: [NotRotten("tfc:food/maize_grain")], + itemOutputProvider: TFC.isp.of('firmalife:food/cured_maize').copyOldestFood() + }) - event.recipes.gtceu.food_processor('cocoa_dust') - .itemInputs('firmalife:food/roasted_cocoa_beans') - .itemOutputs('gtceu:cocoa_dust') - .duration(100) - .EUt(2) + registerFoodRecipe("food_processor", "soy_mixture", { + duration: 300, + EUt: 8, + itemInputHints: ["tfc:food/soybean", 'tfc:powder/salt'], + itemOutputHint: "firmalife:food/soy_mixture", + fluidInputs: [Fluid.of('minecraft:water', 50)], + itemInputs: [NotRotten("tfc:food/soybean"), "tfc:powder/salt"], + itemOutputProvider: TFC.isp.of('firmalife:food/soy_mixture').copyOldestFood(), - // Soybean paste - registerTFCRecipeProperties('soybean_paste', - [ TFC.ingredient.notRotten('firmalife:food/dehydrated_soybeans') ]) + }) - event.recipes.gtceu.food_processor('soybean_paste') - .itemInputs('firmalife:food/dehydrated_soybeans') - .itemOutputs('firmalife:food/soybean_paste') - .duration(50) - .EUt(7) + registerFoodRecipe("food_oven", "boiled_egg", { + duration: 200, + EUt: 8, + itemInputHints: ["#firmalife:foods/raw_eggs"], + itemOutputHint: "firmalife:food/boiled_egg", + fluidInputs: [Fluid.of('minecraft:water', 200)], + itemInputs: [NotRotten('#firmalife:foods/raw_eggs')], + itemOutputProvider: TFC.isp.of('firmalife:food/boiled_egg').copyOldestFood() + }) - // Smashed red grapes - registerTFCRecipeProperties('red_grapes', - [ TFC.ingredient.notRotten('firmalife:food/red_grapes') ], - TFC.isp.of('firmalife:food/smashed_red_grapes').copyOldestFood()) - - event.recipes.gtceu.food_processor('red_grapes') - .itemInputs('firmalife:food/red_grapes') - .itemOutputs('firmalife:food/smashed_red_grapes') - .duration(50) - .EUt(7) - - // Smashed white grapes - registerTFCRecipeProperties('white_grapes', - [ TFC.ingredient.notRotten('firmalife:food/white_grapes') ], - TFC.isp.of('firmalife:food/smashed_white_grapes').copyOldestFood()) - - event.recipes.gtceu.food_processor('white_grapes') - .itemInputs('firmalife:food/white_grapes') - .itemOutputs('firmalife:food/smashed_white_grapes') - .duration(50) - .EUt(7) - - // Egg Noodles - registerTFCRecipeProperties('egg_noodles', - [ TFC.ingredient.notRotten("firmalife:foods/egg_noodle_flour"), TFC.ingredient.notRotten('#forge:eggs') ], - TFC.isp.of('firmalife:food/smashed_white_grapes').copyOldestFood()) - - event.recipes.gtceu.food_processor('egg_noodles') - .itemInputs("firmalife:foods/egg_noodle_flour", 'tfc:powder/salt', '#forge:eggs') - .inputFluids(Fluid.of('#tfc:milks', 1000)) - .itemOutputs('firmalife:food/raw_egg_noodles') - .duration(50) - .EUt(7) - - // Rice Noodles - registerTFCRecipeProperties('rice_noodles', - [ TFC.ingredient.notRotten("tfc:food/rice_flour"), TFC.ingredient.notRotten('tfc:food/maize_flour') ], - TFC.isp.of('firmalife:food/raw_rice_noodles').copyOldestFood()) - - event.recipes.gtceu.food_processor('rice_noodles') - .itemInputs("tfc:food/rice_flour", 'tfc:food/maize_flour', 'tfc:powder/salt') - .inputFluids(Fluid.of('#tfc:milks', 1000)) - .itemOutputs('2x firmalife:food/raw_egg_noodles') - .duration(50) - .EUt(7) - - // Cured Maize - registerTFCRecipeProperties('cured_maize', - [ TFC.ingredient.notRotten("tfc:food/maize_grain") ], - TFC.isp.of('firmalife:food/cured_maize').copyOldestFood()) - - event.recipes.gtceu.food_processor('cured_maize') - .itemInputs("tfc:food/maize_grain") - .inputFluids(Fluid.of('tfc:limewater', 100)) - .itemOutputs('firmalife:food/cured_maize') - .duration(300) - .EUt(7) - - // Soy Mixture - registerTFCRecipeProperties('soy_mixture', - [ TFC.ingredient.notRotten("tfc:food/soybean") ], - TFC.isp.of('firmalife:food/soy_mixture').copyOldestFood()) - - event.recipes.gtceu.food_processor('soy_mixture') - .itemInputs("tfc:food/soybean", 'tfc:powder/salt') - .inputFluids(Fluid.of('minecraft:water', 50)) - .itemOutputs('firmalife:food/soy_mixture') - .duration(300) - .EUt(7) - - // Boiled Egg - registerTFCRecipeProperties('boiled_egg', - [ TFC.ingredient.notRotten('#firmalife:foods/raw_eggs') ], - TFC.isp.of('firmalife:food/soy_mixture').copyOldestFood()) - - event.recipes.gtceu.food_processor('boiled_egg') - .itemInputs('#firmalife:foods/raw_eggs') - .inputFluids(Fluid.of('minecraft:water', 200)) - .itemOutputs('firmalife:food/boiled_egg') - .duration(200) - .EUt(7) - - // Cooked rice - registerTFCRecipeProperties('cooked_rice', - [ TFC.ingredient.notRotten('tfc:food/rice_grain') ], - TFC.isp.of('firmalife:food/soy_mixture').copyOldestFood()) - - event.recipes.gtceu.food_processor('cooked_rice') - .itemInputs('tfc:food/rice_grain') - .inputFluids(Fluid.of('minecraft:water', 200)) - .itemOutputs('firmalife:food/cooked_rice') - .duration(200) - .EUt(7) + registerFoodRecipe("food_oven", "cooked_rice", { + duration: 200, + EUt: 8, + itemInputHints: ["tfc:food/rice_grain"], + itemOutputHint: "firmalife:food/cooked_rice", + fluidInputs: [Fluid.of('minecraft:water', 200)], + itemInputs: [NotRotten('tfc:food/rice_grain')], + itemOutputProvider: TFC.isp.of('firmalife:food/cooked_rice').copyOldestFood() + }) // These don't need the ISP handling, they're just here to keep all the food recipes together diff --git a/kubejs/server_scripts/tfg/recipes.js b/kubejs/server_scripts/tfg/recipes.js index eec0f9d35..0f4bc7713 100644 --- a/kubejs/server_scripts/tfg/recipes.js +++ b/kubejs/server_scripts/tfg/recipes.js @@ -14,4 +14,5 @@ const registerTFGRecipes = (event) => { registerTFGSupportRecipes(event) registerTFGFishingNetsRecipes(event) registerTFGConvertingRecipes(event) + registerTFGFoodRecipes(event) } \ No newline at end of file diff --git a/kubejs/startup_scripts/gtceu/machines.js b/kubejs/startup_scripts/gtceu/machines.js index 936294408..21cb9ddfd 100644 --- a/kubejs/startup_scripts/gtceu/machines.js +++ b/kubejs/startup_scripts/gtceu/machines.js @@ -1,7 +1,5 @@ // priority: 0 -//#region Greenhouse - const registerGTCEuMachines = (event) => { GTMachineUtils.registerCrate(GTMaterials.BismuthBronze, 54, "Bismuth Bronze Crate"); @@ -12,66 +10,6 @@ const registerGTCEuMachines = (event) => { const $SteamMulti = Java.loadClass('com.gregtechceu.gtceu.common.machine.multiblock.steam.SteamParallelMultiblockMachine'); const $Tags = Java.loadClass("dev.latvian.mods.kubejs.util.Tags") - event.create('greenhouse', 'multiblock') - .rotationState(RotationState.NON_Y_AXIS) - .recipeType('greenhouse') - .recipeModifiers([GTRecipeModifiers.OC_PERFECT]) - .appearanceBlock(GTBlocks.CASING_STEEL_SOLID) - .pattern(definition => FactoryBlockPattern.start() - .aisle("CCCCCCC", "XXXFXXX", "XXXFXXX", "XXXFXXX", "XXXFXXX", "XXXFXXX", "XXXFXXX", "XXXFXXX", " F ") - .aisle("CDDDDDC", "X#####X", "X#####X", "X#####X", "X#####X", "X#####X", "X#####X", "X#####X", " XXFXX ") - .aisle("CDDDDDC", "X#####X", "X#####X", "X#####X", "X#####X", "X#####X", "X#####X", "X#####X", " XXFXX ") - .aisle("CDDDDDC", "F#####F", "F#####F", "F#####F", "F#####F", "F#####F", "F#####F", "F#####F", "FFFFFFF") - .aisle("CDDDDDC", "X#####X", "X#####X", "X#####X", "X#####X", "X#####X", "X#####X", "X#####X", " XXFXX ") - .aisle("CDDDDDC", "X#####X", "X#####X", "X#####X", "X#####X", "X#####X", "X#####X", "X#####X", " XXFXX ") - .aisle("CCCYCCC", "XXXFXXX", "XXXFXXX", "XXXFXXX", "XXXFXXX", "XXXFXXX", "XXXFXXX", "XXXFXXX", " F ") - .where('X', Predicates.blocks('ae2:quartz_glass')) - .where('F', Predicates.frames('steel')) - .where('D', Predicates.blocks('tfc:grass/silt') - .or(Predicates.blocks('tfc:dirt/loam')) - .or(Predicates.blocks('tfc:dirt/sandy_loam')) - .or(Predicates.blocks('tfc:dirt/silty_loam')) - .or(Predicates.blocks('tfc:grass/silt')) - .or(Predicates.blocks('tfc:grass/loam')) - .or(Predicates.blocks('tfc:grass/sandy_loam')) - .or(Predicates.blocks('tfc:grass/silty_loam'))) - .where('C', Predicates.blocks('gtceu:steel_machine_casing').or(Predicates.autoAbilities(definition.getRecipeTypes()))) - .where('#', Predicates.air() - .or(Predicates.blockTag($Tags.block("minecraft:logs"))) - .or(Predicates.blockTag($Tags.block("minecraft:leaves")))) - .where(' ', Predicates.any()) - .where('Y', Predicates.controller(Predicates.blocks(definition.get()))) - .build() - ) - .shapeInfo(controller => MultiblockShapeInfo.builder() - .aisle("CCCCCCC", "XXXFXXX", "XXXFXXX", "XXXFXXX", "XXXFXXX", "XXXFXXX", "XXXFXXX", "XXXFXXX", " F ") - .aisle("CDDDDDC", "X#####X", "X#####X", "X#####X", "X#####X", "X#####X", "X#####X", "X#####X", " XXFXX ") - .aisle("CDDDDDC", "X#####X", "X#####X", "X#####X", "X##L##X", "X#LLL#X", "X##L##X", "X#####X", " XXFXX ") - .aisle("CDDDDDC", "F##W##F", "F##W##F", "F##W##F", "F#LWL#F", "F#LWL#F", "F#LLL#F", "F#####F", "FFFFFFF") - .aisle("CDDDDDC", "X#####X", "X#####X", "X#####X", "X##L##X", "X#LLL#X", "X##L##X", "X#####X", " XXFXX ") - .aisle("CDDDDDC", "X#####X", "X#####X", "X#####X", "X#####X", "X#####X", "X#####X", "X#####X", " XXFXX ") - .aisle("CitYfeC", "XXXFXXX", "XXXFXXX", "XXXFXXX", "XXXFXXX", "XXXFXXX", "XXXFXXX", "XXXFXXX", " F ") - .where('Y', controller, Direction.SOUTH) - .where('C', GTBlocks.STEEL_HULL.get()) - .where('D', Block.getBlock('tfc:grass/silt')) - .where('F', Block.getBlock('gtceu:steel_frame')) - .where('X', Block.getBlock('ae2:quartz_glass')) - .where('W', Block.getBlock('tfc:wood/log/oak')) - .where('L', Block.getBlock('tfc:wood/leaves/oak')) - .where(' ', Block.getBlock('minecraft:air')) - .where('i', GTMachines.ITEM_IMPORT_BUS[GTValues.ULV], Direction.SOUTH) - .where('t', GTMachines.ITEM_EXPORT_BUS[GTValues.ULV], Direction.SOUTH) - .where('f', GTMachines.FLUID_IMPORT_HATCH[GTValues.ULV], Direction.SOUTH) - .where('e', GTMachines.ENERGY_INPUT_HATCH[GTValues.LV], Direction.SOUTH) - .build() - ) - .workableCasingRenderer( - 'gtceu:block/casings/solid/machine_casing_solid_steel', - 'gtceu:block/multiblock/implosion_compressor', false - ) - - //#endregion - //#region Nether Dome event.create('nether_dome', 'multiblock') diff --git a/kubejs/startup_scripts/gtceu/recipe_types.js b/kubejs/startup_scripts/gtceu/recipe_types.js index 7ba54d0be..979ef3a46 100644 --- a/kubejs/startup_scripts/gtceu/recipe_types.js +++ b/kubejs/startup_scripts/gtceu/recipe_types.js @@ -1,13 +1,6 @@ // priority: 0 const registerGTCEuRecipeTypes = (event) => { - event.create('greenhouse') - .category('greenhouse') - .setEUIO('in') - .setMaxIOSize(3, 4, 1, 0) - .setProgressBar(GuiTextures.PROGRESS_BAR_ARROW, FillDirection.LEFT_TO_RIGHT) - .setSound(GTSoundEntries.BATH) - event.create('nether_dome') .category('nether_dome') .setEUIO('in') diff --git a/kubejs/startup_scripts/tfc/constants.js b/kubejs/startup_scripts/tfc/constants.js index 1ffefc5bf..c4399dc21 100644 --- a/kubejs/startup_scripts/tfc/constants.js +++ b/kubejs/startup_scripts/tfc/constants.js @@ -852,7 +852,7 @@ global.TFC_BATCH_TO_BOTTLE_ASSEMBLING_RECIPE_COMPONENTS = [ { input: 'tfc:volcanic_glass_batch', output: 'tfc:volcanic_glass_bottle', name: 'volcanic_glass_bottle' }, ]; -global.TFC_FURNACE_MEAT_RECIPE_COMPONENTS = [ +global.TFC_MEAT_RECIPE_COMPONENTS = [ { input: 'tfc:food/horse_meat', output: 'tfc:food/cooked_horse_meat', name: 'cooked_horse_meat' }, { input: 'tfc:food/bear', output: 'tfc:food/cooked_bear', name: 'cooked_bear' }, { input: 'tfc:food/mutton', output: 'tfc:food/cooked_mutton', name: 'cooked_mutton' }, From 8b18a4c7a62c0a5608022c6a936709540c0e84b5 Mon Sep 17 00:00:00 2001 From: Pyritie Date: Thu, 12 Jun 2025 21:52:37 +0100 Subject: [PATCH 03/23] update greenhouse quest --- config/ftbquests/quests/chapters/lv__low_voltage.snbt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/ftbquests/quests/chapters/lv__low_voltage.snbt b/config/ftbquests/quests/chapters/lv__low_voltage.snbt index 425ba06f9..99169a273 100644 --- a/config/ftbquests/quests/chapters/lv__low_voltage.snbt +++ b/config/ftbquests/quests/chapters/lv__low_voltage.snbt @@ -1401,7 +1401,7 @@ subtitle: "{quests.low_voltage.lv_greenhouse.subtitle}" tasks: [{ id: "3EB01235ED295080" - item: "gtceu:greenhouse" + item: "tfg:electric_greenhouse" type: "item" }] title: "{quests.low_voltage.lv_greenhouse.title}" From a6402c63af371385db28040e85ca166ed1a4b54a Mon Sep 17 00:00:00 2001 From: Pyritie Date: Thu, 12 Jun 2025 21:53:15 +0100 Subject: [PATCH 04/23] update greenhouse tooltip --- kubejs/client_scripts/tooltips.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/kubejs/client_scripts/tooltips.js b/kubejs/client_scripts/tooltips.js index 9cbfe6003..b48aa1b7f 100644 --- a/kubejs/client_scripts/tooltips.js +++ b/kubejs/client_scripts/tooltips.js @@ -27,9 +27,8 @@ const registerTooltips = (event) => event.addAdvanced(['create:blaze_burner'], (item, advanced, text) => { text.add(1, text.of('§cSuperheat§r with Coke, Anthracite, or Flawless and Exquisite coal gems.')) }) - event.addAdvanced(['gtceu:greenhouse'], (item, advanced, text) => { + event.addAdvanced(['tfg:electric_greenhouse'], (item, advanced, text) => { text.add(1, text.of('This machine has a §2Perfect Overclock§r!')), - text.add(2, text.of('Currently, due to a bug, sometimes outputs rotten food.')) text.add(3, text.of(`The interior is customizable! Check the multiblock preview in JEI.`)) }) event.addAdvanced(['gtceu:nether_dome'], (item, advanced, text) => { From 284de79e8c6ef8c61a00f3834136ce6ca5ec2a00 Mon Sep 17 00:00:00 2001 From: Pyritie Date: Thu, 12 Jun 2025 21:53:25 +0100 Subject: [PATCH 05/23] comment out coconut milk --- kubejs/startup_scripts/tfc/constants.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/kubejs/startup_scripts/tfc/constants.js b/kubejs/startup_scripts/tfc/constants.js index c4399dc21..c8d9a4ad1 100644 --- a/kubejs/startup_scripts/tfc/constants.js +++ b/kubejs/startup_scripts/tfc/constants.js @@ -1016,7 +1016,8 @@ global.TFC_MILKS = [ {id: 'minecraft:milk'}, {id: 'firmalife:yak_milk'}, {id: 'firmalife:goat_milk'}, - {id: 'firmalife:coconut_milk'}, + // Uncomment this if firmalife ever makes this obtainable + //{id: 'firmalife:coconut_milk'}, ]; global.TFC_CURDS_AND_CHEESES = [ From 36bc3c699c28e4c7a7d7bcc6dd56e296fc2cd416 Mon Sep 17 00:00:00 2001 From: Pyritie Date: Thu, 12 Jun 2025 22:39:25 +0100 Subject: [PATCH 06/23] langs --- kubejs/assets/gtceu/lang/en_us.json | 4 +++- kubejs/assets/tfg/lang/en_us.json | 9 +++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/kubejs/assets/gtceu/lang/en_us.json b/kubejs/assets/gtceu/lang/en_us.json index 111f851a5..6541fb7d2 100644 --- a/kubejs/assets/gtceu/lang/en_us.json +++ b/kubejs/assets/gtceu/lang/en_us.json @@ -13,8 +13,10 @@ "block.gtceu.bismuth_bronze_drum": "Bismuth Bronze Drum", "gtceu.nether_dome": "Netherarium", "gtceu.end_dome": "Enderarium", - "gtceu.greenhouse": "Electric Greenhouse", + "tfg.greenhouse": "Electric Greenhouse", "gtceu.steam_bloomery": "Steam Bloomery", + "gtceu.food_oven": "Food Oven", + "gtceu.food_processor": "Food Processor", "item.gtceu.tiny_wood_dust": "Tiny Pile of Softwood Pulp", "item.gtceu.small_wood_dust": "Small Pile of Softwood Pulp", "item.gtceu.wood_dust": "Softwood Pulp", diff --git a/kubejs/assets/tfg/lang/en_us.json b/kubejs/assets/tfg/lang/en_us.json index f0a59c999..bfaf87674 100644 --- a/kubejs/assets/tfg/lang/en_us.json +++ b/kubejs/assets/tfg/lang/en_us.json @@ -167,6 +167,15 @@ "block.tfg.mv_aqueous_accumulator": "§bAdvanced Aqueous Accumulator§r", "block.tfg.hv_aqueous_accumulator": "§6Advanced Aqueous Accumulator II§r", "block.tfg.ev_aqueous_accumulator": "§5Advanced Aqueous Accumulator III§r", + "block.tfg.electric_greenhouse": "Electric Greenhouse", + "block.tfg.lv_food_processor": "Basic Food Processor", + "block.tfg.mv_food_processor": "§bAdvanced Food Processor§r", + "block.tfg.hv_food_processor": "§6Advanced Food Processor II§r", + "block.tfg.ev_food_processor": "§5Advanced Food Processor III§r", + "block.tfg.lv_food_oven": "Basic Electric Oven", + "block.tfg.mv_food_oven": "§bAdvanced Electric Oven§r", + "block.tfg.hv_food_oven": "§6Advanced Electric Oven II§r", + "block.tfg.ev_food_oven": "§5Advanced Electric Oven III§r", "item.tfg.antipoison_pill": "Antipoison Pill", "item.tfg.haste_pill": "Haste Pill", "item.tfg.night_vision_pill": "Night Vision Pill", From 2b2deb72fe062b18ad426bc07576b47ffebeb266 Mon Sep 17 00:00:00 2001 From: Pyritie Date: Thu, 12 Jun 2025 22:48:39 +0100 Subject: [PATCH 07/23] tooltip fix --- kubejs/client_scripts/tooltips.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kubejs/client_scripts/tooltips.js b/kubejs/client_scripts/tooltips.js index b48aa1b7f..213334b1a 100644 --- a/kubejs/client_scripts/tooltips.js +++ b/kubejs/client_scripts/tooltips.js @@ -29,7 +29,7 @@ const registerTooltips = (event) => }) event.addAdvanced(['tfg:electric_greenhouse'], (item, advanced, text) => { text.add(1, text.of('This machine has a §2Perfect Overclock§r!')), - text.add(3, text.of(`The interior is customizable! Check the multiblock preview in JEI.`)) + text.add(2, text.of(`The interior is customizable! Check the multiblock preview in JEI.`)) }) event.addAdvanced(['gtceu:nether_dome'], (item, advanced, text) => { text.add(1, text.of('Artificial enviroment to simulate the Nether.')), From 86a141881d55730d81fed663e83e9b31af3cef32 Mon Sep 17 00:00:00 2001 From: Pyritie Date: Thu, 12 Jun 2025 23:10:56 +0100 Subject: [PATCH 08/23] wrong food lang --- kubejs/assets/gtceu/lang/en_us.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kubejs/assets/gtceu/lang/en_us.json b/kubejs/assets/gtceu/lang/en_us.json index 6541fb7d2..7344697aa 100644 --- a/kubejs/assets/gtceu/lang/en_us.json +++ b/kubejs/assets/gtceu/lang/en_us.json @@ -13,7 +13,7 @@ "block.gtceu.bismuth_bronze_drum": "Bismuth Bronze Drum", "gtceu.nether_dome": "Netherarium", "gtceu.end_dome": "Enderarium", - "tfg.greenhouse": "Electric Greenhouse", + "gtceu.greenhouse": "Electric Greenhouse", "gtceu.steam_bloomery": "Steam Bloomery", "gtceu.food_oven": "Food Oven", "gtceu.food_processor": "Food Processor", From ffc210694524339bfd709d9620b0515792b7ee83 Mon Sep 17 00:00:00 2001 From: Pyritie Date: Fri, 13 Jun 2025 00:39:27 +0100 Subject: [PATCH 09/23] recipe fixes --- kubejs/server_scripts/tfg/recipes.food.js | 156 +++++++++--------- kubejs/startup_scripts/firmalife/constants.js | 2 +- kubejs/startup_scripts/tfc/constants.js | 4 +- 3 files changed, 85 insertions(+), 77 deletions(-) diff --git a/kubejs/server_scripts/tfg/recipes.food.js b/kubejs/server_scripts/tfg/recipes.food.js index eaf7afd06..98ab206e6 100644 --- a/kubejs/server_scripts/tfg/recipes.food.js +++ b/kubejs/server_scripts/tfg/recipes.food.js @@ -252,37 +252,70 @@ function registerTFGFoodRecipes(event) { }) - registerFoodRecipe("food_processor", `white_chocolate_blend`, { - circuit: 1, - duration: 300, - EUt: 16, - itemInputHints: ['2x firmalife:food/cocoa_butter', '#tfc:sweetener'], - itemOutputHint: '2x firmalife:food/white_chocolate_blend', - fluidInputs: [Fluid.of('#tfc:milks', 1000)], - itemInputs: [ Sized(NotRotten("firmalife:food/cocoa_butter"), 2), "#tfc:sweetener"], - itemOutputProvider: TFC.isp.of('2x firmalife:food/white_chocolate_blend').resetFood(), - }) + global.TFC_MILKS.forEach(milk => { + const milkID = milk.id.split(':')[1]; - registerFoodRecipe("food_processor", `dark_chocolate_blend`, { - circuit: 1, - duration: 300, - EUt: 16, - itemInputHints: ['2x firmalife:food/cocoa_powder', '#tfc:sweetener'], - itemOutputHint: '2x firmalife:food/dark_chocolate_blend', - fluidInputs: [Fluid.of('#tfc:milks', 1000)], - itemInputs: [ Sized(NotRotten("firmalife:food/cocoa_powder"), 2), "#tfc:sweetener"], - itemOutputProvider: TFC.isp.of('2x firmalife:food/dark_chocolate_blend').resetFood(), - }) + registerFoodRecipe("food_processor", `white_chocolate_blend_from_${milkID}`, { + circuit: 1, + duration: 300, + EUt: 16, + itemInputHints: ['2x firmalife:food/cocoa_butter', '#tfc:sweetener'], + itemOutputHint: '2x firmalife:food/white_chocolate_blend', + fluidInputs: [Fluid.of(milk.id, 1000)], + itemInputs: [ Sized(NotRotten("firmalife:food/cocoa_butter"), 2), "#tfc:sweetener"], + itemOutputProvider: TFC.isp.of('2x firmalife:food/white_chocolate_blend').resetFood(), + }) - registerFoodRecipe("food_processor", `milk_chocolate_blend`, { - circuit: 2, - duration: 300, - EUt: 16, - itemInputHints: ['firmalife:food/cocoa_powder', 'firmalife:food/cocoa_butter', '#tfc:sweetener'], - itemOutputHint: '2x firmalife:food/milk_chocolate_blend', - fluidInputs: [Fluid.of('#tfc:milks', 1000)], - itemInputs: [ NotRotten("firmalife:food/cocoa_powder"), NotRotten('firmalife:food/cocoa_butter'), "#tfc:sweetener"], - itemOutputProvider: TFC.isp.of('2x firmalife:food/milk_chocolate_blend').resetFood(), + registerFoodRecipe("food_processor", `dark_chocolate_blend_from_${milkID}`, { + circuit: 1, + duration: 300, + EUt: 16, + itemInputHints: ['2x firmalife:food/cocoa_powder', '#tfc:sweetener'], + itemOutputHint: '2x firmalife:food/dark_chocolate_blend', + fluidInputs: [Fluid.of(milk.id, 1000)], + itemInputs: [ Sized(NotRotten("firmalife:food/cocoa_powder"), 2), "#tfc:sweetener"], + itemOutputProvider: TFC.isp.of('2x firmalife:food/dark_chocolate_blend').resetFood(), + }) + + registerFoodRecipe("food_processor", `milk_chocolate_blend_from_${milkID}`, { + circuit: 2, + duration: 300, + EUt: 16, + itemInputHints: ['firmalife:food/cocoa_powder', 'firmalife:food/cocoa_butter', '#tfc:sweetener'], + itemOutputHint: '2x firmalife:food/milk_chocolate_blend', + fluidInputs: [Fluid.of(milk.id, 1000)], + itemInputs: [ NotRotten("firmalife:food/cocoa_powder"), NotRotten('firmalife:food/cocoa_butter'), "#tfc:sweetener"], + itemOutputProvider: TFC.isp.of('2x firmalife:food/milk_chocolate_blend').resetFood(), + }) + + registerFoodRecipe("food_processor", `egg_noodles_from_${milkID}`, { + circuit: 6, + duration: 50, + EUt: 8, + itemInputHints: ["#tfc:foods/flour", 'tfc:powder/salt', '#forge:eggs'], + itemOutputHint: 'firmalife:food/raw_egg_noodles', + itemInputs: [NotRotten("#tfc:foods/flour"), NotRotten('#forge:eggs'), 'tfc:powder/salt'], + fluidInputs: [Fluid.of(milk.id, 1000)], + itemOutputProvider: TFC.isp.of("firmalife:food/raw_egg_noodles").copyOldestFood(), + }) + + registerFoodRecipe("food_processor", `rice_noodles_from_${milkID}`, { + duration: 50, + EUt: 8, + itemInputHints: ["tfc:food/rice_flour", 'tfc:food/maize_flour', 'tfc:powder/salt'], + fluidInputs: [Fluid.of(milk.id, 1000)], + itemOutputHint: '2x firmalife:food/raw_rice_noodles', + itemInputs: [NotRotten("tfc:food/rice_flour"), NotRotten('tfc:food/maize_flour'), 'tfc:powder/salt'], + itemOutputProvider: TFC.isp.of('2x firmalife:food/raw_rice_noodles').copyOldestFood() + }) + + // No ISP needed here + event.recipes.gtceu.fermenter(`tfg:fermenter/cream_from_${milkID}`) + .inputFluids(Fluid.of(milk.id, 1000)) + .outputFluids(Fluid.of('firmalife:cream')) + .circuit(6) + .duration(1200) + .EUt(24) }) //#endregion @@ -330,10 +363,10 @@ function registerTFGFoodRecipes(event) { registerFoodRecipe("food_processor", "soybean_paste", { duration: 60, EUt: 8, - itemInputHints: ['tfc:food/soybean'], - itemOutputHint: '2x tfc:soybean_paste', - itemInputs: [NotRotten('tfc:food/soybean')], - itemOutputProvider: TFC.isp.of('2x tfc:soybean_paste'), + itemInputHints: ['firmalife:food/dehydrated_soybean'], + itemOutputHint: 'firmalife:food/soybean_paste', + itemInputs: [NotRotten('firmalife:food/dehydrated_soybean')], + itemOutputProvider: TFC.isp.of('firmalife:food/soybean_paste').copyOldestFood(), }) // Vinegar @@ -345,6 +378,7 @@ function registerTFGFoodRecipes(event) { duration: 600, EUt: 32, itemInputHints: ['#tfc:foods/fruits'], + itemInputs: [NotRotten('#tfc:foods/fruits')], fluidInputs: [Fluid.of(alcohol.id, 250)], fluidOutputs: [Fluid.of('tfc:vinegar', 250)], }) @@ -394,7 +428,7 @@ function registerTFGFoodRecipes(event) { registerFoodRecipe("food_processor", "strawberry_ice_cream", { duration: 300, EUt: 16, - itemInputHints: ['firmalife:food/vanilla_ice_cream', 'firmalife:food/vanilla_ice_cream', '2x tfc:food/strawberry'], + itemInputHints: ['firmalife:food/vanilla_ice_cream', '2x tfc:food/strawberry'], itemOutputHint: 'firmalife:food/strawberry_ice_cream', itemInputs: [NotRotten('firmalife:food/vanilla_ice_cream'), Sized(NotRotten("tfc:food/strawberry"), 2)], itemOutputProvider: TFC.isp.of("firmalife:food/strawberry_ice_cream").resetFood() @@ -479,15 +513,6 @@ function registerTFGFoodRecipes(event) { itemOutputProvider: TFC.isp.of("gtceu:cocoa_dust") }) - registerFoodRecipe("food_processor", "soybean_paste", { - duration: 50, - EUt: 8, - itemInputHints: ["firmalife:food/dehydrated_soybeans"], - itemOutputHint: "firmalife:food/soybean_paste", - itemInputs: [NotRotten('firmalife:food/dehydrated_soybeans')], - itemOutputProvider: TFC.isp.of("firmalife:food/soybean_paste") - }) - registerFoodRecipe("food_processor", "red_grapes", { duration: 50, EUt: 8, @@ -506,26 +531,6 @@ function registerTFGFoodRecipes(event) { itemOutputProvider: TFC.isp.of('firmalife:food/smashed_white_grapes').copyOldestFood() }) - registerFoodRecipe("food_processor", "egg_noodles", { - duration: 50, - EUt: 8, - itemInputHints: ["firmalife:foods/egg_noodle_flour", 'tfc:powder/salt', '#forge:eggs'], - itemOutputHint: 'firmalife:food/raw_egg_noodles', - itemInputs: [NotRotten("firmalife:foods/egg_noodle_flour"), NotRotten('#forge:eggs'), 'tfc:powder/salt'], - fluidInputs: [Fluid.of('#tfc:milks', 1000)], - itemOutputProvider: TFC.isp.of("firmalife:food/raw_egg_noodles").copyOldestFood(), - }) - - registerFoodRecipe("food_processor", "rice_noodles", { - duration: 50, - EUt: 8, - itemInputHints: ["tfc:food/rice_flour", 'tfc:food/maize_flour', 'tfc:powder/salt'], - fluidInputs: [Fluid.of('#tfc:milks', 1000)], - itemOutputHint: '2x firmalife:food/raw_rice_noodles', - itemInputs: [NotRotten("tfc:food/rice_flour"), NotRotten('tfc:food/maize_flour'), 'tfc:powder/salt'], - itemOutputProvider: TFC.isp.of('2x firmalife:food/raw_rice_noodles').copyOldestFood() - }) - registerFoodRecipe("food_processor", "cured_maize", { duration: 300, EUt: 8, @@ -550,20 +555,20 @@ function registerTFGFoodRecipes(event) { duration: 200, EUt: 8, itemInputHints: ["#firmalife:foods/raw_eggs"], - itemOutputHint: "firmalife:food/boiled_egg", + itemOutputHint: "tfc:food/boiled_egg", fluidInputs: [Fluid.of('minecraft:water', 200)], itemInputs: [NotRotten('#firmalife:foods/raw_eggs')], - itemOutputProvider: TFC.isp.of('firmalife:food/boiled_egg').copyOldestFood() + itemOutputProvider: TFC.isp.of('tfc:food/boiled_egg').copyOldestFood() }) registerFoodRecipe("food_oven", "cooked_rice", { duration: 200, EUt: 8, itemInputHints: ["tfc:food/rice_grain"], - itemOutputHint: "firmalife:food/cooked_rice", + itemOutputHint: "tfc:food/cooked_rice", fluidInputs: [Fluid.of('minecraft:water', 200)], itemInputs: [NotRotten('tfc:food/rice_grain')], - itemOutputProvider: TFC.isp.of('firmalife:food/cooked_rice').copyOldestFood() + itemOutputProvider: TFC.isp.of('tfc:food/cooked_rice').copyOldestFood() }) // These don't need the ISP handling, they're just here to keep all the food recipes together @@ -587,13 +592,6 @@ function registerTFGFoodRecipes(event) { .outputFluids(Fluid.of('firmalife:soybean_oil', 250)) .EUt(GTValues.VA[GTValues.ULV]) .duration(600) - - event.recipes.gtceu.fermenter(`tfg:fermenter/cream_from_${name}`) - .inputFluids(Fluid.of('#tfc:milks', 1000)) - .outputFluids(Fluid.of('firmalife:cream')) - .circuit(6) - .duration(1200) - .EUt(24) event.recipes.gtceu.fermenter('tfg:fermenter/curdled_milk') .inputFluids(Fluid.of('minecraft:milk', 2000)) @@ -630,4 +628,14 @@ function registerTFGFoodRecipes(event) { .id('tfg:quern/cocoa_dust'); //#endregion + + event.replaceInput({id: 'gtceu:shaped/lv_food_processor'}, 'gtceu:lv_electric_piston', 'gtceu:steel_whisk') + event.replaceInput({id: 'gtceu:shaped/mv_food_processor'}, 'gtceu:mv_electric_piston', 'gtceu:aluminium_whisk') + event.replaceInput({id: 'gtceu:shaped/hv_food_processor'}, 'gtceu:hv_electric_piston', 'gtceu:stainless_steel_whisk') + event.replaceInput({id: 'gtceu:shaped/ev_food_processor'}, 'gtceu:ev_electric_piston', 'gtceu:titanium_whisk') + + event.replaceInput({id: 'gtceu:shaped/lv_food_oven'}, 'gtceu:lv_electric_piston', '#tfg:metal_bars') + event.replaceInput({id: 'gtceu:shaped/mv_food_oven'}, 'gtceu:mv_electric_piston', '#tfg:metal_bars') + event.replaceInput({id: 'gtceu:shaped/hv_food_oven'}, 'gtceu:hv_electric_piston', '#tfg:metal_bars') + event.replaceInput({id: 'gtceu:shaped/ev_food_oven'}, 'gtceu:ev_electric_piston', '#tfg:metal_bars') } \ No newline at end of file diff --git a/kubejs/startup_scripts/firmalife/constants.js b/kubejs/startup_scripts/firmalife/constants.js index 076a81f24..39407880c 100644 --- a/kubejs/startup_scripts/firmalife/constants.js +++ b/kubejs/startup_scripts/firmalife/constants.js @@ -125,7 +125,7 @@ global.FIRMALIFE_COOKING_RECIPE_COMPONENTS = [ { input: 'firmalife:food/hardtack_dough', output: 'firmalife:food/hardtack', name: 'hardtack' }, { input: 'firmalife:food/filled_pie', output: 'firmalife:food/cooked_pie', name: 'cooked_pie' }, { input: 'firmalife:food/cocoa_beans', output: 'firmalife:food/roasted_cocoa_beans', name: 'roasted_cocoa_beans' }, - { input: 'firmalife:food/raw_pumpkin_pie', output: 'firmalife:food/pumpkin_pie', name: 'pumpkin_pie' }, + { input: 'firmalife:food/raw_pumpkin_pie', output: 'minecraft:pumpkin_pie', name: 'pumpkin_pie' }, { input: 'tfc:food/soybean', output: 'firmalife:food/dehydrated_soybeans', name: 'dehydrated_soybeans' }, { input: 'firmalife:food/raw_lasagna', output: 'firmalife:food/cooked_lasagna', name: 'cooked_lasagna' }, { input: 'firmalife:food/bacon', output: 'firmalife:food/cooked_bacon', name: 'cooked_bacon' }, diff --git a/kubejs/startup_scripts/tfc/constants.js b/kubejs/startup_scripts/tfc/constants.js index c8d9a4ad1..819f1f696 100644 --- a/kubejs/startup_scripts/tfc/constants.js +++ b/kubejs/startup_scripts/tfc/constants.js @@ -1022,8 +1022,8 @@ global.TFC_MILKS = [ global.TFC_CURDS_AND_CHEESES = [ { id: 'milk', input_fluid: 'tfc:curdled_milk', curd: 'firmalife:food/milk_curd', cheese1: 'gouda', cheese2: 'cheddar' }, - { id: 'yak', input_fluid: 'tfc:curdled_yak_milk', curd: 'firmalife:food/yak_curd', cheese1: 'shosha', cheese2: 'rajya_metok' }, - { id: 'goat', input_fluid: 'tfc:curdled_goat_milk', curd: 'firmalife:food/goat_curd', cheese1: 'feta', cheese2: 'chevre' }, + { id: 'yak', input_fluid: 'firmalife:curdled_yak_milk', curd: 'firmalife:food/yak_curd', cheese1: 'shosha', cheese2: 'rajya_metok' }, + { id: 'goat', input_fluid: 'firmalife:curdled_goat_milk', curd: 'firmalife:food/goat_curd', cheese1: 'feta', cheese2: 'chevre' }, ]; global.TFC_ALCOHOL = [ From 65f987dd4b9f2647fea2a5c82684a23a17ef8911 Mon Sep 17 00:00:00 2001 From: ofoxsmith <77560533+ofoxsmith@users.noreply.github.com> Date: Mon, 16 Jun 2025 06:03:16 +1000 Subject: [PATCH 10/23] Add some more food recipes (#1166) * Change lv chem reactor quest to require any container with rubber instead of a rubber bucket Signed-off-by: ofoxsmith <77560533+ofoxsmith@users.noreply.github.com> * Add placeholder assets for food machines (copied from gtceu) * remove greenhouse definition from kubejs * change greenhouse recipe * Rework recipes file * Modify food recipes * Add some more recipes * add more recipes and tidy up food recipe file * change incorrect string --------- Signed-off-by: ofoxsmith <77560533+ofoxsmith@users.noreply.github.com> Signed-off-by: Pyritie Co-authored-by: Pyritie --- kubejs/assets/tfg/lang/en_us.json | 5 + .../gregtech/recipes.machines.js | 12 - kubejs/server_scripts/tfg/recipes.food.js | 732 +++++++++--------- kubejs/startup_scripts/firmalife/constants.js | 27 +- kubejs/startup_scripts/tfc/constants.js | 66 +- 5 files changed, 408 insertions(+), 434 deletions(-) diff --git a/kubejs/assets/tfg/lang/en_us.json b/kubejs/assets/tfg/lang/en_us.json index bfaf87674..6cc892d3e 100644 --- a/kubejs/assets/tfg/lang/en_us.json +++ b/kubejs/assets/tfg/lang/en_us.json @@ -176,6 +176,10 @@ "block.tfg.mv_food_oven": "§bAdvanced Electric Oven§r", "block.tfg.hv_food_oven": "§6Advanced Electric Oven II§r", "block.tfg.ev_food_oven": "§5Advanced Electric Oven III§r", + "block.tfg.lv_food_refrigerator": "Basic Refrigerator", + "block.tfg.mv_food_refrigerator": "§bAdvanced Refrigerator", + "block.tfg.hv_food_refrigerator": "§6Advanced Refrigerator II§r", + "block.tfg.ev_food_refrigerator": "§5Advanced Refrigerator III§r", "item.tfg.antipoison_pill": "Antipoison Pill", "item.tfg.haste_pill": "Haste Pill", "item.tfg.night_vision_pill": "Night Vision Pill", @@ -296,6 +300,7 @@ "material.gtceu.thermochemically_treated_hardwood": "Thermochemically Treated Hardwood", "material.gtceu.hardwood": "Hardwood", "tfg.disabled_portal": "Portal magic seems to be blocked by an unknown force, try reaching another dimension by going down or up", + "tfg.tooltip.food_trait.refrigerating": "§9Refrigerating", "item.treetap.tap": "Deprecated Item, Craft to Upgrade", "item.gtceu.zinc_ingot": "Deprecated Item, Craft to Upgrade", "item.gtceu.brass_ingot": "Deprecated Item, Craft to Upgrade", diff --git a/kubejs/server_scripts/gregtech/recipes.machines.js b/kubejs/server_scripts/gregtech/recipes.machines.js index 338d49a76..7e90107f4 100644 --- a/kubejs/server_scripts/gregtech/recipes.machines.js +++ b/kubejs/server_scripts/gregtech/recipes.machines.js @@ -744,18 +744,6 @@ function registerGTCEuMachineRecipes(event) { // #endregion - // Контроллер теплицы - event.shaped('tfg:electric_greenhouse', [ - 'ABA', - 'CDC', - 'BCB' - ], { - A: '#gtceu:circuits/mv', - B: 'gtceu:copper_single_cable', - C: 'tfc:compost', - D: 'gtceu:solid_machine_casing' - }).id('tfg:shaped/greenhouse') - // Drums const DRUMS_AND_CRATES = [ 'bismuth_bronze', diff --git a/kubejs/server_scripts/tfg/recipes.food.js b/kubejs/server_scripts/tfg/recipes.food.js index 98ab206e6..b28e87cc3 100644 --- a/kubejs/server_scripts/tfg/recipes.food.js +++ b/kubejs/server_scripts/tfg/recipes.food.js @@ -1,201 +1,187 @@ // priority: 0 /** - * * @param {Internal.RecipesEventJS} event */ - - function registerTFGFoodRecipes(event) { - /** - * @param {Internal.Ingredient} ingredient - */ - const NotRotten = (ingredient) => TFC.ingredient.notRotten(ingredient) - const $ISPRecipeLogic = Java.loadClass("su.terrafirmagreg.core.common.data.machines.ISPOutputRecipeLogic") const $SizedIngredient = Java.loadClass("com.gregtechceu.gtceu.api.recipe.ingredient.SizedIngredient") - const Sized = (ing, amount) => $SizedIngredient.create(ing, amount) - /** * @typedef {Object} FoodRecipeData * @property {number?} circuit - * @property {number} duration - * @property {number} EUt - * @property {Internal.GTRecipeComponents$FluidIngredientJS_[]?} fluidInputs Fluid inputs behave normally - * @property {Internal.FluidStackJS[]?} fluidOutputs Fluid outputs behave normally - * @property {string[]?} itemInputHints Array of simple ingredients, used internally within gregtech. [NOT ACTUAL INPUTS] - * @property {string?} itemOutputHint Simple ingredient output, used internally within gregtech. [NOT ACTUAL OUTPUT] - * @property {Ingredient[]?} itemInputs Array of ingredients used when running a recipe. + * @property {Internal.GTRecipeComponents$FluidIngredientJS_[]?} fluidInputs + * @property {Internal.FluidStackJS[]?} fluidOutputs + * @property {(string | [string, Internal.Ingredient])[]?} itemInputs + * @property {string[]?} itemOutputs Ingredient outputs - first output is replaced with ISP output if defined * @property {Internal.ItemStackProviderJS?} itemOutputProvider ItemStackProvider which provides the recipe output. - */ + * + * **NOTE:** TFC Ingredients do not support item counts higher than 1. Do `Sized(TFCIngredient('item:item'), count)` instead of `TFCIngredient('[count]x item:item')` + */ + + //#region Helper funcs /** - * **NOTE:** TFC Ingredients do not support item counts higher than 1. Do `Sized(TFCIngredient('item:item'), count)` instead of `TFCIngredient('[count]x item:item')` - * - * @param {"food_oven"|"food_processor"} type The recipe type - * @param {string} id The recipe id - * @param {FoodRecipeData} data Recipe data + * @param {"food_oven"|"food_processor"} type + * @param {string} id + * @param {string} duration + * @param {string} EUt + * @param {FoodRecipeData} data */ - function registerFoodRecipe(type, id, data) { + function registerFoodRecipe(type, id, duration, EUt, data) { + if (data.itemInputs === undefined) data.itemInputs = [] + if (data.itemOutputs === undefined) data.itemOutputs = [] if (data.fluidInputs === undefined) data.fluidInputs = [] if (data.fluidOutputs === undefined) data.fluidOutputs = [] - if (data.itemInputHints === undefined) data.itemInputHints = [] - if (data.itemInputs === undefined) data.itemInputs = [] + let gregInputs = [], inputs= [] + let outputFirstIndex = (data.itemOutputProvider === undefined) ? 0 : 1 + data.itemInputs.forEach(item => { + if (typeof item === "string") { + gregInputs.push(item) - if ((data.itemOutputProvider === undefined && data.itemOutputHint !== undefined) || (data.itemOutputHint === undefined && data.itemOutputProvider !== undefined)) { - return console.error(`Invalid recipe ${type}[${id}]: itemOutputProvider & itemOutputHint do not match`) - } - if (data.itemOutputHint === undefined && data.fluidOutputs.length === 0) return console.error(`Invalid recipe ${type}[${id}]: No outputs`) - if (data.itemInputHints.length === 0 && data.fluidInputs.length === 0) return console.error(`Invalid recipe ${type}[${id}]: No inputs`) - if (data.itemInputHints.length !== data.itemInputs.length) return console.error(`Invalid recipe ${type}[${id}]: itemInputHints.length !== itemInputs.length`) + const match = item.match(/^(\d+)\s*x\s*/i); + let count = 1 + if (match) { + count = parseInt(match[1]); + item = item.slice(match[0].length); + } + inputs.push($SizedIngredient.create(item, count)) + } else { + gregInputs.push(item[0]) + inputs.push(item[1]) + } + }) - for (let index = 0; index < data.itemInputs; index++) { - if (typeof data.itemInputs[index] === "string") data.itemInputs[index] = Ingredient.of(data.itemInputs[index]); - } - - $ISPRecipeLogic.RegisterRecipeData(type + "/" + id, data.itemInputs, (data.itemOutputProvider === undefined) ? null : data.itemOutputProvider.asCanonClass()) + $ISPRecipeLogic.RegisterRecipeData(type + "/" + id, inputs, (data.itemOutputProvider === undefined) ? null : data.itemOutputProvider.asCanonClass(), data.itemOutputs.slice(outputFirstIndex).map(i => Item.of(i))) let r = event.recipes.gtceu[type](id) - .duration(data.duration) - .EUt(data.EUt) + .duration(duration) + .EUt(EUt) if (data.circuit) r.circuit(data.circuit) - if (data.itemOutputHint) r.itemOutputs(data.itemOutputHint) - if (data.itemInputHints.length > 0) r.itemInputs(data.itemInputHints) + if (data.itemOutputs.length > 0) r.itemOutputs(data.itemOutputs) + if (data.itemInputs.length > 0) r.itemInputs(data.itemInputs) if (data.fluidInputs.length > 0) r.inputFluids(data.fluidInputs); if (data.fluidOutputs.length > 0) r.outputFluids(data.fluidOutputs); } + /** + * @param {string} id + * @param {number} duration + * @param {EUt} EUt + * @param {FoodRecipeData} data + */ + const processorRecipe = (id, duration, EUt, data) => registerFoodRecipe("food_processor", id, duration, EUt, data) + + /** + * @param {string} id + * @param {string} input + * @param {string} out + * @param {Internal.FluidIngredient?} fluid + * @param {boolean?} isFirmaDynamic + */ + function cookingRecipe(id, input, out, fluid, isFirmaDynamic) { + registerFoodRecipe("food_oven", id, 300, 32, { + itemInputs: [input], + itemOutputs: [out], + fluidInputs: (fluid === undefined) ? [] : [fluid], + itemInputs: [input], + itemOutputProvider: (isFirmaDynamic) ? TFC.isp.of(out).firmaLifeCopyDynamicFood() : TFC.isp.of(out).copyFood().addTrait("firmalife:oven_baked") + }) + } + + //#endregion + //#region ================= Meat cooking ================= global.TFC_MEAT_RECIPE_COMPONENTS.forEach(item => { - - registerFoodRecipe("food_oven", item.name, { - duration: 300, - EUt: 16, - itemInputHints: [item.input], - itemOutputHint: item.output, - itemInputs: [NotRotten(item.input)], - itemOutputProvider: TFC.isp.of(item.output).copyFood().addTrait("firmalife:oven_baked") - }) + cookingRecipe(item.name, item.input, item.output) }) //#endregion - //#region ================= Cutting grains ================= + //#region ================= TFC Grains ================= - global.TFC_QUERN_GRAIN_RECIPE_COMPONENTS.forEach(item => { - registerFoodRecipe("food_processor", item.name, { - duration: 100, - EUt: 2, - itemInputHints: [item.input], - itemOutputHint: item.output, - itemInputs: [NotRotten(item.input)], - itemOutputProvider: TFC.isp.of(item.output).copyOldestFood() + global.TFC_GRAINS.forEach(grain => { + + // Raw crop to grain + processorRecipe(`${grain}_grain`, 100, 8, { + itemInputs: [`tfc:food/${grain}`], + itemOutputs: [`tfc:food/${grain}_grain`], + itemOutputProvider: TFC.isp.of(`tfc:food/${grain}_grain`).copyOldestFood() }) - }) - //#endregion - //#region ================= Grains to flour ================= - - global.TFC_QUERN_FLOUR_RECIPE_COMPONENTS.forEach(item => { - registerFoodRecipe("food_processor", item.name, { - duration: 100, - EUt: 2, - itemInputHints: [item.input], - itemOutputHint: item.output, - itemInputs: [NotRotten(item.input)], - itemOutputProvider: TFC.isp.of(item.output).copyOldestFood() + // Grain to flour + processorRecipe(`${grain}_flour`, 100, 8, { + itemInputs: [`tfc:food/${grain}_grain`], + itemOutputs: [`2x tfc:food/${grain}_flour`], + itemOutputProvider: TFC.isp.of(`2x tfc:food/${grain}_flour`).copyOldestFood() }) - - }) - // global.FIRMALIFE_QUERN_FLOUR_RECIPE_COMPONENTS.forEach(item => { - - // registerTFCRecipeProperties("food_processor/" + item.name, - // [ NotRotten(item.input) ], - // TFC.isp.of(item.output).copyFood() - // ) - - // event.recipes.gtceu.food_processor(item.name) - // .itemInputs(item.input) - // .itemOutputs(item.output) - // .duration(100) - // .EUt(2) - // }) - - //#endregion - //#region ================= Dough ================= - - global.TFC_MIXER_FLATBREAD_DOUGH_RECIPE_COMPONENTS.forEach(item => { - - registerFoodRecipe("food_processor", item.name, { - duration: 300, - EUt: 2, - itemInputHints: [item.input], - itemOutputHint: item.output, + // Flatbread dough + processorRecipe(`${grain}_flatbread_dough`, 300, 8, { + itemInputs: [`tfc:food/${grain}_flour`], + itemOutputs: [`2x tfc:food/${grain}_dough`], fluidInputs: [Fluid.of('minecraft:water', 100)], - itemInputs: [NotRotten(item.input)], - itemOutputProvider: TFC.isp.of(item.output).copyFood() + itemOutputProvider: TFC.isp.of(`2x tfc:food/${grain}_dough`).copyFood() }) - }) - - global.FIRMALIFE_MIXER_FLATBREAD_DOUGH_RECIPE_COMPONENTS.forEach(item => { - - registerFoodRecipe("food_processor", item.name, { - duration: 300, - EUt: 2, - itemInputHints: [item.input], - itemOutputHint: item.output, - fluidInputs: [Fluid.of('minecraft:water', 100)], - itemInputs: [NotRotten(item.input)], - itemOutputProvider: TFC.isp.of(item.output).copyFood() + // Firmalife dough + processorRecipe(`${grain}_dough`, 300, 16, { + itemInputs: [`tfc:food/${grain}_flour`, `#tfc:sweetener`], + itemOutputs: [`4x firmalife:food/${grain}_dough`], + fluidInputs: [Fluid.of('firmalife:yeast_starter', 200)], + itemOutputProvider: TFC.isp.of(`4x firmalife:food/${grain}_dough`).copyFood() }) + + // Bread baking + cookingRecipe(`${grain}_flatbread`, `tfc:food/${grain}_dough`, `firmalife:food/${grain}_flatbread`) + cookingRecipe(`${grain}_bread`, `firmalife:food/${grain}_dough`, `tfc:food/${grain}_bread`) + + processorRecipe(`${grain}_bread_slice`, 10, 8, { + circuit: 1, + itemInputs: [`tfc:food/${grain}_bread`], + itemOutputs: [`2x firmalife:food/${grain}_slice`], + itemOutputProvider: TFC.isp.of(`2x firmalife:food/${grain}_slice`).copyOldestFood() + }) + + //Sandwich making + + let breadTypes = [["bread", `tfc:food/${grain}_bread`], ["flatbread", `firmalife:food/${grain}_flatbread`], ["slice", `firmalife:food/${grain}_slice`]] + breadTypes.forEach((type) => { + processorRecipe(`${grain}_${type[0]}_sandwich`, 100, 16, { + circuit: 3, + itemInputs: [`2x ${type[1]}`, "3x #tfc:foods/usable_in_sandwich"], + itemOutputs: [`2x tfc:food/${grain}_bread_sandwich`], + itemOutputProvider: TFC.isp.of(`2x tfc:food/${grain}_bread_sandwich`).meal( + (food => food.hunger(4).water(0.5).saturation(1).decayModifier(4.5)), [ + (portion) => portion.ingredient(Ingredient.of('#tfc:sandwich_bread')).nutrientModifier(0.5).saturationModifier(0.5).waterModifier(0.5), + (portion) => portion.nutrientModifier(0.8).saturationModifier(0.8).waterModifier(0.8), + ]) + }) + + + processorRecipe(`${grain}_${type[0]}_jam_sandwich`, 100, 16, { + circuit: 4, + itemInputs: [`2x ${type[1]}`, "2x #tfc:foods/usable_in_jam_sandwich", '#tfc:foods/preserves'], + itemOutputs: [`2x tfc:food/${grain}_bread_jam_sandwich`, 'tfc:empty_jar'], + itemOutputProvider: TFC.isp.of(`2x tfc:food/${grain}_bread_jam_sandwich`).meal( + (food => food.hunger(4).water(0.5).saturation(1).decayModifier(4.5)), [ + (portion) => portion.ingredient(Ingredient.of('#tfc:sandwich_bread')).nutrientModifier(0.5).saturationModifier(0.5).waterModifier(0.5), + (portion) => portion.nutrientModifier(0.8).saturationModifier(0.8).waterModifier(0.8), + ]), + }) + }) + + }) //#endregion - //#region ================= Baking bread ================= - global.TFC_FURNACE_BREAD_RECIPE_COMPONENTS.forEach(item => { - - registerFoodRecipe("food_oven", item.name, { - duration: 300, - EUt: 16, - itemInputHints: [item.input], - itemOutputHint: item.output, - itemInputs: [NotRotten(item.input)], - itemOutputProvider: TFC.isp.of(item.output).copyFood().addTrait("firmalife:oven_baked") - }) - - }) - - global.FIRMALIFE_FURNACE_FLATBREAD_RECIPE_COMPONENTS.forEach(item => { - - registerFoodRecipe("food_oven", item.name, { - duration: 300, - EUt: 16, - itemInputHints: [item.input], - itemOutputHint: item.output, - itemInputs: [NotRotten(item.input)], - itemOutputProvider: TFC.isp.of(item.output).copyFood().addTrait("firmalife:oven_baked") - }) - }) - - //#endregion //#region ================= Firmalife ================= global.FIRMALIFE_COOKING_RECIPE_COMPONENTS.forEach(item => { - - registerFoodRecipe("food_oven", item.name, { - duration: 300, - EUt: 16, - itemInputHints: [item.input], - itemOutputHint: item.output, - itemInputs: [NotRotten(item.input)], - itemOutputProvider: TFC.isp.of(item.output).firmaLifeCopyDynamicFood() - }) + cookingRecipe(item.name, item.input, item.output, undefined, true) }) //#endregion @@ -203,50 +189,35 @@ function registerTFGFoodRecipes(event) { global.TFC_CURDS_AND_CHEESES.forEach(item => { - registerFoodRecipe("food_processor", `${item.curd}_curd`, { - duration: 1200, - EUt: 16, - itemOutputHint: item.curd, + processorRecipe(`${item.curd}_curd`, 1200, 16, { + itemOutputs: [item.curd], fluidInputs: [Fluid.of(item.input_fluid, 1000)], - itemInputs: [], itemOutputProvider: TFC.isp.of(item.curd).resetFood() }) - registerFoodRecipe("food_processor", `${item.cheese1}_cheese_wheel_1`, { - duration: 8000, - EUt: 16, - itemInputHints: [`3x ${item.curd}`], - itemOutputHint: `firmalife:${item.cheese1}_wheel`, + processorRecipe(`${item.cheese1}_cheese_wheel_1`, 8000, 16, { + itemInputs: [`3x ${item.curd}`], + itemOutputs: [`firmalife:${item.cheese1}_wheel`], fluidInputs: [Fluid.of('tfc:salt_water', 750)], - itemInputs: [ Sized(NotRotten(item.curd),3) ], itemOutputProvider: TFC.isp.of(`firmalife:${item.cheese1}_wheel`).copyOldestFood() }) - registerFoodRecipe("food_processor", `${item.cheese2}_cheese_wheel_2`, { + processorRecipe(`${item.cheese2}_cheese_wheel_2`, 1000, 16, { circuit: 2, - duration: 1000, - EUt: 16, - itemInputHints: [`6x ${item.curd}`, `3x tfc:powder/salt`], - itemOutputHint: `firmalife:${item.cheese2}_wheel`, - itemInputs: [ Sized(NotRotten(item.curd), 6), Sized(Ingredient.of("tfc:powder/salt"), 3) ], + itemInputs: [`3x ${item.curd}`, `6x tfc:powder/salt`], + itemOutputs: [`firmalife:${item.cheese2}_wheel`], itemOutputProvider: TFC.isp.of(`firmalife:${item.cheese2}_wheel`).copyOldestFood() }) - registerFoodRecipe("food_processor", `${item.cheese1}_cheese_cutting_1`, { - duration: 100, - EUt: 8, - itemInputHints: [`firmalife:${item.cheese1}_wheel`], - itemOutputHint: `4x firmalife:food/${item.cheese1}`, - itemInputs: [ NotRotten(`firmalife:${item.cheese1}_wheel`) ], + processorRecipe(`${item.cheese1}_cheese_cutting_1`, 100, 8, { + itemInputs: [`firmalife:${item.cheese1}_wheel`], + itemOutputs: [`4x firmalife:food/${item.cheese1}`], itemOutputProvider: TFC.isp.of(`4x firmalife:food/${item.cheese1}`).copyOldestFood() }) - registerFoodRecipe("food_processor", `${item.cheese2}_cheese_cutting_2`, { - duration: 100, - EUt: 8, - itemInputHints: [`firmalife:${item.cheese2}_wheel`], - itemOutputHint: `4x firmalife:food/${item.cheese2}`, - itemInputs: [ NotRotten(`firmalife:${item.cheese2}_wheel`) ], + processorRecipe(`${item.cheese2}_cheese_cutting_2`, 100, 8, { + itemInputs: [`firmalife:${item.cheese2}_wheel`], + itemOutputs: [`4x firmalife:food/${item.cheese2}`], itemOutputProvider: TFC.isp.of(`4x firmalife:food/${item.cheese2}`).copyOldestFood() }) @@ -255,57 +226,42 @@ function registerTFGFoodRecipes(event) { global.TFC_MILKS.forEach(milk => { const milkID = milk.id.split(':')[1]; - registerFoodRecipe("food_processor", `white_chocolate_blend_from_${milkID}`, { - circuit: 1, - duration: 300, - EUt: 16, - itemInputHints: ['2x firmalife:food/cocoa_butter', '#tfc:sweetener'], - itemOutputHint: '2x firmalife:food/white_chocolate_blend', + processorRecipe(`white_chocolate_blend_from_${milkID}`, 300, 16, { + circuit: 3, + itemInputs: ['2x firmalife:food/cocoa_butter', '#tfc:sweetener'], + itemOutputs: ['2x firmalife:food/white_chocolate_blend'], fluidInputs: [Fluid.of(milk.id, 1000)], - itemInputs: [ Sized(NotRotten("firmalife:food/cocoa_butter"), 2), "#tfc:sweetener"], itemOutputProvider: TFC.isp.of('2x firmalife:food/white_chocolate_blend').resetFood(), }) - registerFoodRecipe("food_processor", `dark_chocolate_blend_from_${milkID}`, { - circuit: 1, - duration: 300, - EUt: 16, - itemInputHints: ['2x firmalife:food/cocoa_powder', '#tfc:sweetener'], - itemOutputHint: '2x firmalife:food/dark_chocolate_blend', + processorRecipe(`dark_chocolate_blend_from_${milkID}`, 300, 16, { + circuit: 2, + itemInputs: ['2x firmalife:food/cocoa_powder', '#tfc:sweetener'], + itemOutputs: ['2x firmalife:food/dark_chocolate_blend'], fluidInputs: [Fluid.of(milk.id, 1000)], - itemInputs: [ Sized(NotRotten("firmalife:food/cocoa_powder"), 2), "#tfc:sweetener"], itemOutputProvider: TFC.isp.of('2x firmalife:food/dark_chocolate_blend').resetFood(), }) - registerFoodRecipe("food_processor", `milk_chocolate_blend_from_${milkID}`, { - circuit: 2, - duration: 300, - EUt: 16, - itemInputHints: ['firmalife:food/cocoa_powder', 'firmalife:food/cocoa_butter', '#tfc:sweetener'], - itemOutputHint: '2x firmalife:food/milk_chocolate_blend', + processorRecipe(`milk_chocolate_blend_from_${milkID}`, 300, 16, { + circuit: 1, + itemInputs: ['firmalife:food/cocoa_powder', 'firmalife:food/cocoa_butter', '#tfc:sweetener'], + itemOutputs: ['2x firmalife:food/milk_chocolate_blend'], fluidInputs: [Fluid.of(milk.id, 1000)], - itemInputs: [ NotRotten("firmalife:food/cocoa_powder"), NotRotten('firmalife:food/cocoa_butter'), "#tfc:sweetener"], itemOutputProvider: TFC.isp.of('2x firmalife:food/milk_chocolate_blend').resetFood(), }) - registerFoodRecipe("food_processor", `egg_noodles_from_${milkID}`, { + processorRecipe(`egg_noodles_from_${milkID}`, 50, 8, { circuit: 6, - duration: 50, - EUt: 8, - itemInputHints: ["#tfc:foods/flour", 'tfc:powder/salt', '#forge:eggs'], - itemOutputHint: 'firmalife:food/raw_egg_noodles', - itemInputs: [NotRotten("#tfc:foods/flour"), NotRotten('#forge:eggs'), 'tfc:powder/salt'], + itemInputs: ["#tfc:foods/flour", 'tfc:powder/salt', '#forge:eggs'], + itemOutputs: ['firmalife:food/raw_egg_noodles'], fluidInputs: [Fluid.of(milk.id, 1000)], itemOutputProvider: TFC.isp.of("firmalife:food/raw_egg_noodles").copyOldestFood(), }) - registerFoodRecipe("food_processor", `rice_noodles_from_${milkID}`, { - duration: 50, - EUt: 8, - itemInputHints: ["tfc:food/rice_flour", 'tfc:food/maize_flour', 'tfc:powder/salt'], + processorRecipe(`rice_noodles_from_${milkID}`, 50, 8, { + itemInputs: ["tfc:food/rice_flour", 'tfc:food/maize_flour', 'tfc:powder/salt'], fluidInputs: [Fluid.of(milk.id, 1000)], - itemOutputHint: '2x firmalife:food/raw_rice_noodles', - itemInputs: [NotRotten("tfc:food/rice_flour"), NotRotten('tfc:food/maize_flour'), 'tfc:powder/salt'], + itemOutputs: ['2x firmalife:food/raw_rice_noodles'], itemOutputProvider: TFC.isp.of('2x firmalife:food/raw_rice_noodles').copyOldestFood() }) @@ -320,52 +276,118 @@ function registerTFGFoodRecipes(event) { //#endregion - //#region ================= Misc ================= - - registerFoodRecipe("food_processor", "food_salting", { - duration: 10, - EUt: 16, - itemInputHints: ["#tfc:foods/can_be_salted", "tfc:powder/salt"], - itemOutputHint: "#tfc:foods/can_be_salted", - itemInputs: [TFC.ingredient.lacksTrait(NotRotten("#tfc:foods/can_be_salted"), "tfc:salted"), "tfc:powder/salt"], + //#region ================= Food preservation ================= + + processorRecipe("food_salting", 10, 16, { + itemInputs: [ + ["#tfc:foods/can_be_salted", TFC.ingredient.lacksTrait("#tfc:foods/can_be_salted", "tfc:salted")], + "tfc:powder/salt"], + itemOutputs: ["#tfc:foods/can_be_salted"], itemOutputProvider: TFC.isp.copyInput().addTrait("tfc:salted") }) - registerFoodRecipe("food_processor", "tomato_sauce", { - duration: 2000, - EUt: 8, - itemInputHints: ['tfc:food/tomato', 'tfc:powder/salt', 'tfc:food/garlic'], - itemOutputHint: '5x firmalife:food/tomato_sauce', + + processorRecipe("brine_meat", 200, 16, { + circuit: 5, + itemInputs: [["#tfc:foods/raw_meats", TFC.ingredient.lacksTrait("#tfc:foods/raw_meats", "tfc:brined")]], + itemOutputs: ["#tfc:foods/raw_meats"], + fluidInputs: [Fluid.of("tfc:brine", 100)], + itemOutputProvider: TFC.isp.copyInput().addTrait("tfc:brined") + }) + + processorRecipe("brine_general", 200, 16, { + circuit: 5, + itemInputs: [["#firmalife:foods/pizza_ingredients", TFC.ingredient.lacksTrait("#firmalife:foods/pizza_ingredients", "tfc:brined")]], + itemOutputs: ["#firmalife:foods/pizza_ingredients"], + fluidInputs: [Fluid.of("tfc:brine", 100)], + itemOutputProvider: TFC.isp.copyInput().addTrait("tfc:brined") + }) + + + processorRecipe("pickle_meat", 200, 16, { + circuit: 5, + itemInputs: [ ["#tfc:foods/raw_meats", TFC.ingredient.lacksTrait(TFC.ingredient.hasTrait("#tfc:foods/raw_meats", "tfc:brined"), "tfc:pickled")] ], + itemOutputs: ["#tfc:foods/raw_meats"], + fluidInputs: [Fluid.of("tfc:vinegar", 100)], + itemOutputProvider: TFC.isp.copyInput().addTrait("tfc:pickled") + }) + + processorRecipe("pickle_general", 200, 16, { + circuit: 5, + itemInputs: [ ["#firmalife:foods/pizza_ingredients", TFC.ingredient.lacksTrait(TFC.ingredient.hasTrait("#firmalife:foods/pizza_ingredients", "tfc:brined"), "tfc:pickled")] ], + itemOutputs: ["#firmalife:foods/pizza_ingredients"], + fluidInputs: [Fluid.of("tfc:vinegar", 100)], + itemOutputProvider: TFC.isp.copyInput().addTrait("tfc:pickled") + }) + + //#endregion + + //#region ================= Misc ================= + + global.TFC_JAMS.forEach(name => { + processorRecipe(`${name}_jam`, 200, 8, { + circuit: 15, + itemInputs: [`4x tfc:food/${name}`, "#tfg:sugar", "#tfc:empty_jar_with_lid"], + itemOutputs: [`4x tfc:jar/${name}`], + fluidInputs: Fluid.of("minecraft:water", 100), + itemOutputProvider: TFC.isp.of(`4x tfc:jar/${name}`).copyFood() + }) + + processorRecipe(`${name}_jam_no_seal`, 200, 8, { + circuit: 16, + itemInputs: [`4x tfc:food/${name}`, "#tfg:sugar", "#tfc:empty_jar"], + itemOutputs: [`4x tfc:jar/${name}_unsealed`], + fluidInputs: Fluid.of("minecraft:water", 100), + itemOutputProvider: TFC.isp.of(`4x tfc:jar/${name}_unsealed`).copyFood() + }) + }) + + cookingRecipe("pasta", "firmalife:food/raw_egg_noodles", "firmalife:food/cooked_pasta", Fluid.of("minecraft:water", 100)) + cookingRecipe("corn_tortilla", "firmalife:food/masa", "firmalife:food/corn_tortilla") + cookingRecipe("boiled_egg", "#firmalife:foods/raw_eggs", "tfc:food/boiled_egg", Fluid.of("minecraft:water", 200)) + cookingRecipe("cooked_rice", "tfc:food/rice_grain", "tfc:food/cooked_rice", Fluid.of("minecraft:water", 200)) + + processorRecipe("pasta_tomato_sauce", 60, 8, { + itemInputs: ["firmalife:food/cooked_pasta", "firmalife:food/tomato_sauce"], + itemOutputs: ["firmalife:food/pasta_with_tomato_sauce"], + itemOutputProvider: TFC.isp.of('firmalife:food/pasta_with_tomato_sauce').copyFood() + }) + + processorRecipe('firmalife_masa', 300, 2, { + itemInputs: ["firmalife:food/masa_flour"], + itemOutputs: ["2x firmalife:food/masa"], fluidInputs: [Fluid.of('minecraft:water', 100)], - itemInputs: [NotRotten('tfc:food/tomato'), NotRotten('tfc:food/garlic'), "tfc:powder/salt"], - itemOutputProvider: TFC.isp.of('firmalife:food/tomato_sauce').copyOldestFood(), + itemOutputProvider: TFC.isp.of("2x firmalife:food/masa").copyFood() }) - registerFoodRecipe("food_processor", "tomato_sauce_from_mix", { - duration: 200, - EUt: 8, - itemInputHints: ['firmalife:food/tomato_sauce_mix'], - itemOutputHint: 'firmalife:food/tomato_sauce', + processorRecipe("tortilla_chips", 40, 16, { + itemInputs: ["firmalife:food/taco_shell", "tfc:powder/salt"], + itemOutputs: ["firmalife:food/tortilla_chips"], + itemOutputProvider: TFC.isp.of("firmalife:food/tortilla_chips").copyFood() + }) + + processorRecipe("tomato_sauce_mix", 600, 8, { + itemInputs: ['tfc:food/tomato', 'tfc:powder/salt', 'tfc:food/garlic'], + itemOutputs: ['5x firmalife:food/tomato_sauce_mix'], + itemOutputProvider: TFC.isp.of('5x firmalife:food/tomato_sauce_mix').copyOldestFood(), + }) + + processorRecipe("tomato_sauce_from_mix", 200, 8, { + itemInputs: ['firmalife:food/tomato_sauce_mix'], + itemOutputs: ['firmalife:food/tomato_sauce'], fluidInputs: [Fluid.of('minecraft:water', 200)], - itemInputs: [NotRotten("firmalife:food/tomato_sauce_mix")], itemOutputProvider: TFC.isp.of('firmalife:food/tomato_sauce').copyOldestFood(), }) - registerFoodRecipe("food_processor", "olive_paste", { - duration: 60, - EUt: 8, - itemInputHints: ['tfc:food/olive'], - itemOutputHint: '2x tfc:olive_paste', - itemInputs: [NotRotten('tfc:food/olive')], + processorRecipe("olive_paste", 60, 8, { + itemInputs: ['tfc:food/olive'], + itemOutputs: ['2x tfc:olive_paste'], itemOutputProvider: TFC.isp.of('2x tfc:olive_paste'), }) - registerFoodRecipe("food_processor", "soybean_paste", { - duration: 60, - EUt: 8, - itemInputHints: ['firmalife:food/dehydrated_soybean'], - itemOutputHint: 'firmalife:food/soybean_paste', - itemInputs: [NotRotten('firmalife:food/dehydrated_soybean')], + processorRecipe("soybean_paste", 60, 8, { + itemInputs: ['firmalife:food/dehydrated_soybeans'], + itemOutputs: ['firmalife:food/soybean_paste'], itemOutputProvider: TFC.isp.of('firmalife:food/soybean_paste').copyOldestFood(), }) @@ -373,204 +395,178 @@ function registerTFGFoodRecipes(event) { global.TFC_ALCOHOL.forEach(alcohol => { let name = `vinegar_${alcohol.id.replace(':', '_')}`; - registerFoodRecipe("food_processor", name, { + processorRecipe(name, 600, 32, { circuit: 5, - duration: 600, - EUt: 32, - itemInputHints: ['#tfc:foods/fruits'], - itemInputs: [NotRotten('#tfc:foods/fruits')], + itemInputs: ['#tfc:foods/fruits'], fluidInputs: [Fluid.of(alcohol.id, 250)], fluidOutputs: [Fluid.of('tfc:vinegar', 250)], }) }) - registerFoodRecipe("food_processor", "pizza_dough_olive_oil", { - duration: 300, - EUt: 16, - itemInputHints: ['firmalife:spice/basil_leaves', '#tfc:foods/dough', 'tfc:powder/salt'], - itemOutputHint: '4x firmalife:food/pizza_dough', + processorRecipe("pizza_no_extra", 600, 16, { + itemInputs: ["firmalife:food/pizza_dough", "firmalife:food/tomato_sauce", "firmalife:food/shredded_cheese"], + itemOutputs: ["firmalife:food/raw_pizza"], + itemOutputProvider: TFC.isp.of("firmalife:food/raw_pizza").meal( + (food) => food.hunger(4).saturation(1).grain(1).dairy(0.25).decayModifier(4.5), + [(portion) => portion.nutrientModifier(0.8).waterModifier(0.8).saturationModifier(0.8)] + ) + }) + + processorRecipe("pizza_1_extra", 600, 16, { + circuit: 1, + itemInputs: ["firmalife:food/pizza_dough", "firmalife:food/tomato_sauce", "firmalife:food/shredded_cheese", "#firmalife:foods/pizza_ingredients"], + itemOutputs: ["firmalife:food/raw_pizza"], + itemOutputProvider: TFC.isp.of("firmalife:food/raw_pizza").meal( + (food) => food.hunger(4).saturation(1).grain(1).dairy(0.25).decayModifier(4.5), + [(portion) => portion.nutrientModifier(0.8).waterModifier(0.8).saturationModifier(0.8)] + ) + }) + + processorRecipe("pizza_2_extra", 600, 16, { + circuit: 2, + itemInputs: ["firmalife:food/pizza_dough", "firmalife:food/tomato_sauce", "firmalife:food/shredded_cheese", "2x #firmalife:foods/pizza_ingredients"], + itemOutputs: ["firmalife:food/raw_pizza"], + itemOutputProvider: TFC.isp.of("firmalife:food/raw_pizza").meal( + (food) => food.hunger(4).saturation(1).grain(1).dairy(0.25).decayModifier(4.5), + [(portion) => portion.nutrientModifier(0.8).waterModifier(0.8).saturationModifier(0.8)] + ) + }) + + processorRecipe("pizza_dough_olive_oil", 300, 16, { + itemInputs: ['firmalife:spice/basil_leaves', '#tfc:foods/dough', 'tfc:powder/salt'], + itemOutputs: ['4x firmalife:food/pizza_dough'], fluidInputs: [Fluid.of('tfc:olive_oil', 1000)], - itemInputs: ["firmalife:spice/basil_leaves", NotRotten("#tfc:foods/dough"), "tfc:powder/salt"], itemOutputProvider: TFC.isp.of("4x firmalife:food/pizza_dough").copyOldestFood() }) - registerFoodRecipe("food_processor", "pizza_dough_soybean_oil", { - duration: 300, - EUt: 16, - itemInputHints: ['firmalife:spice/basil_leaves', '#tfc:foods/dough', 'tfc:powder/salt'], - itemOutputHint: '4x firmalife:food/pizza_dough', + processorRecipe("pizza_dough_soybean_oil", 300, 16, { + itemInputs: ['firmalife:spice/basil_leaves', '#tfc:foods/dough', 'tfc:powder/salt'], + itemOutputs: ['4x firmalife:food/pizza_dough'], fluidInputs: [Fluid.of('firmalife:soybean_oil', 1000)], - itemInputs: ["firmalife:spice/basil_leaves", NotRotten("#tfc:foods/dough"), "tfc:powder/salt"], itemOutputProvider: TFC.isp.of("4x firmalife:food/pizza_dough").copyOldestFood() }) - registerFoodRecipe("food_processor", "vanilla_ice_cream", { - duration: 300, - EUt: 16, - itemInputHints: ['firmalife:ice_shavings', '#tfc:sweetener', 'firmalife:spice/vanilla'], - itemOutputHint: '2x firmalife:food/vanilla_ice_cream', - fluidInputs: [Fluid.of('firmalife:cream', 1000)], + processorRecipe("vanilla_ice_cream", 300, 16, { itemInputs: ['firmalife:ice_shavings', '#tfc:sweetener', 'firmalife:spice/vanilla'], + itemOutputs: ['2x firmalife:food/vanilla_ice_cream'], + fluidInputs: [Fluid.of('firmalife:cream', 1000)], itemOutputProvider: TFC.isp.of("2x firmalife:food/vanilla_ice_cream").resetFood() }) - registerFoodRecipe("food_processor", "chocolate_ice_cream", { - duration: 300, - EUt: 16, - itemInputHints: ['firmalife:food/vanilla_ice_cream'], - itemOutputHint: 'firmalife:food/chocolate_ice_cream', + processorRecipe("chocolate_ice_cream", 300, 16, { + itemInputs: ['firmalife:food/vanilla_ice_cream'], + itemOutputs: ['firmalife:food/chocolate_ice_cream'], fluidInputs: [Fluid.of('firmalife:chocolate', 1000)], - itemInputs: [NotRotten('firmalife:food/vanilla_ice_cream')], itemOutputProvider: TFC.isp.of("firmalife:food/chocolate_ice_cream").resetFood() }) - registerFoodRecipe("food_processor", "strawberry_ice_cream", { - duration: 300, - EUt: 16, - itemInputHints: ['firmalife:food/vanilla_ice_cream', '2x tfc:food/strawberry'], - itemOutputHint: 'firmalife:food/strawberry_ice_cream', - itemInputs: [NotRotten('firmalife:food/vanilla_ice_cream'), Sized(NotRotten("tfc:food/strawberry"), 2)], + processorRecipe("strawberry_ice_cream", 300, 16, { + itemInputs: ['firmalife:food/vanilla_ice_cream', '2x tfc:food/strawberry'], + itemOutputs: ['firmalife:food/strawberry_ice_cream'], itemOutputProvider: TFC.isp.of("firmalife:food/strawberry_ice_cream").resetFood() }) - registerFoodRecipe("food_processor", "butter", { - duration: 300, - EUt: 16, - itemInputHints: ["tfc:powder/salt"], - itemOutputHint: "firmalife:food/buffer", - fluidInputs: [Fluid.of('firmalife:cream', 1000)], + processorRecipe("cookie_dough_ice_cream", 300, 16, { + itemInputs: [`firmalife:food/vanilla_ice_cream`, `firmalife:food/chocolate_chip_cookie_dough`], + itemOutputs: [`firmalife:food/cookie_dough_ice_cream`], + itemOutputProvider: TFC.isp.of("firmalife:food/cookie_dough_ice_cream").resetFood() + }) + + processorRecipe("butter", 300, 16, { itemInputs: ["tfc:powder/salt"], + itemOutputs: ["firmalife:food/butter"], + fluidInputs: [Fluid.of('firmalife:cream', 1000)], itemOutputProvider: TFC.isp.of('firmalife:food/butter').resetFood() }) - registerFoodRecipe("food_processor", "pie_dough", { + processorRecipe("pie_dough", 300, 16, { circuit: 2, - duration: 300, - EUt: 16, - itemInputHints: ['#tfc:sweetener', 'firmalife:food/butter', '#tfc:foods/flour'], - itemOutputHint: 'firmalife:food/pie_dough', + itemInputs: ['#tfc:sweetener', 'firmalife:food/butter', '#tfc:foods/flour'], + itemOutputs: ['firmalife:food/pie_dough'], fluidInputs: [Fluid.of('minecraft:water', 1000)], - itemInputs: [NotRotten('firmalife:food/butter'), NotRotten('#tfc:foods/flour'), "#tfc:sweetener"], itemOutputProvider: TFC.isp.of('firmalife:food/pie_dough').copyOldestFood() }) - registerFoodRecipe("food_processor", "pumpkin_pie_dough", { + processorRecipe("pumpkin_pie_dough", 300, 16, { circuit: 2, - duration: 300, - EUt: 16, - itemInputHints: ['#tfc:sweetener', '#forge:eggs', '2x tfc:food/pumpkin_chunks', '#tfc:foods/flour'], - itemOutputHint: 'firmalife:food/pumpkin_pie_dough', + itemInputs: ['#tfc:sweetener', '#forge:eggs', '2x tfc:food/pumpkin_chunks', '#tfc:foods/flour'], + itemOutputs: ['firmalife:food/pumpkin_pie_dough'], fluidInputs: [Fluid.of('minecraft:water', 1000)], - itemInputs: ['#tfc:sweetener', NotRotten('#forge:eggs'), Sized(NotRotten('tfc:food/pumpkin_chunks'), 2), NotRotten('#tfc:foods/flour')], itemOutputProvider: TFC.isp.of('firmalife:food/pumpkin_pie_dough').copyOldestFood() }) - registerFoodRecipe("food_processor", "cookie_dough", { - duration: 300, - EUt: 16, - itemInputHints: ['#tfc:sweetener', '#forge:eggs', 'firmalife:food/butter', '#tfc:foods/flour', "firmalife:spice/vanilla"], - itemOutputHint: '4x firmalife:food/cookie_dough', - itemInputs: ['firmalife:spice/vanilla', '#tfc:sweetener', NotRotten('firmalife:food/butter'), NotRotten('#tfc:foods/flour'), NotRotten('#forge:eggs')], + processorRecipe("raw_pumpkin_pie", 20, 8, { + itemInputs: ["firmalife:food/pumpkin_pie_dough", "firmalife:pie_pan"], + itemOutputs: ["firmalife:raw_pumpkin_pie"], + itemOutputProvider: TFC.isp.of("firmalife:food/raw_pumpkin_pie").copyFood() + }) + + processorRecipe("cookie_dough", 300, 16, { + itemInputs: ['#tfc:sweetener', '#forge:eggs', 'firmalife:food/butter', '#tfc:foods/flour', "firmalife:spice/vanilla"], + itemOutputs: ['4x firmalife:food/cookie_dough'], itemOutputProvider: TFC.isp.of('4x firmalife:food/cookie_dough').copyOldestFood() }) - registerFoodRecipe("food_processor", "chocolate_chip_cookie_dough", { - duration: 300, - EUt: 16, - itemInputHints: ['4x firmalife:food/cookie_dough', '#firmalife:chocolate_blends'], - itemOutputHint: '4x firmalife:food/chocolate_chip_cookie_dough', - itemInputs: [Sized(NotRotten('firmalife:food/cookie_dough'), 4), NotRotten('#firmalife:chocolate_blends')], + processorRecipe("chocolate_chip_cookie_dough", 300, 16, { + itemInputs: ['4x firmalife:food/cookie_dough', '#firmalife:chocolate_blends'], + itemOutputs: ['4x firmalife:food/chocolate_chip_cookie_dough'], itemOutputProvider: TFC.isp.of('4x firmalife:food/chocolate_chip_cookie_dough').copyOldestFood() }) - registerFoodRecipe("food_processor", "hardtack_dough", { - duration: 300, - EUt: 16, - itemInputHints: ['tfc:powder/salt', '#tfc:foods/flour'], - itemOutputHint: '4x firmalife:food/hardtack_dough', + processorRecipe("hardtack_dough", 300, 16, { + itemInputs: ['tfc:powder/salt', '#tfc:foods/flour'], + itemOutputs: ['4x firmalife:food/hardtack_dough'], fluidInputs: [Fluid.of('minecraft:water', 1000)], - itemInputs: [NotRotten('#tfc:foods/flour'), "tfc:powder/salt"], itemOutputProvider: TFC.isp.of('4x firmalife:food/hardtack_dough').copyOldestFood() }) - registerFoodRecipe("food_processor", "yeast_starter", { - duration: 1200, - EUt: 8, + processorRecipe("yeast_starter", 1200, 8, { circuit: 1, fluidInputs: [Fluid.of('firmalife:yeast_starter', 100)], fluidOutputs: [Fluid.of('firmalife:yeast_starter', 600)], - itemInputHints: ['#tfc:foods/flour'], - itemInputs: [NotRotten('#tfc:foods/flour')] + itemInputs: ['#tfc:foods/flour'], }) - registerFoodRecipe("food_processor", "cocoa_dust", { - duration: 100, - EUt: 4, - itemInputHints: ["firmalife:food/roasted_cocoa_beans"], - itemOutputHint: "gtceu:cocoa_dust", - itemInputs: [NotRotten('firmalife:food/roasted_cocoa_beans')], + processorRecipe("yeast_starter_from_water", 7200, 8, { + circuit: 10, + fluidInputs: [Fluid.of('minecraft:water', 100)], + fluidOutputs: [Fluid.of('firmalife:yeast_starter', 600)], + itemInputs: ['#tfc:foods/fruits'], + }) + + processorRecipe("cocoa_dust", 100, 4, { + itemInputs: ["firmalife:food/roasted_cocoa_beans"], + itemOutputs: ["gtceu:cocoa_dust"], itemOutputProvider: TFC.isp.of("gtceu:cocoa_dust") }) - registerFoodRecipe("food_processor", "red_grapes", { - duration: 50, - EUt: 8, - itemInputHints: ["firmalife:food/red_grapes"], - itemOutputHint: "firmalife:food/smashed_red_grapes", - itemInputs: [NotRotten('firmalife:food/red_grapes')], + processorRecipe("red_grapes", 50, 8, { + itemInputs: ["firmalife:food/red_grapes"], + itemOutputs: ["firmalife:food/smashed_red_grapes"], itemOutputProvider: TFC.isp.of('firmalife:food/smashed_red_grapes').copyOldestFood() }) - registerFoodRecipe("food_processor", "white_grapes", { - duration: 50, - EUt: 8, - itemInputHints: ["firmalife:food/white_grapes"], - itemOutputHint: "firmalife:food/smashed_white_grapes", - itemInputs: [NotRotten('firmalife:food/white_grapes')], + processorRecipe("white_grapes", 50, 8, { + itemInputs: ["firmalife:food/white_grapes"], + itemOutputs: ["firmalife:food/smashed_white_grapes"], itemOutputProvider: TFC.isp.of('firmalife:food/smashed_white_grapes').copyOldestFood() }) - registerFoodRecipe("food_processor", "cured_maize", { - duration: 300, - EUt: 8, - itemInputHints: ["tfc:food/maize_grain"], - itemOutputHint: "firmalife:food/cured_maize", - itemInputs: [NotRotten("tfc:food/maize_grain")], + processorRecipe("cured_maize", 300, 8, { + itemInputs: ["tfc:food/maize_grain"], + itemOutputs: ["firmalife:food/cured_maize"], itemOutputProvider: TFC.isp.of('firmalife:food/cured_maize').copyOldestFood() }) - registerFoodRecipe("food_processor", "soy_mixture", { - duration: 300, - EUt: 8, - itemInputHints: ["tfc:food/soybean", 'tfc:powder/salt'], - itemOutputHint: "firmalife:food/soy_mixture", + processorRecipe("soy_mixture", 300, 8, { + itemInputs: ["tfc:food/soybean", 'tfc:powder/salt'], + itemOutputs: ["firmalife:food/soy_mixture"], fluidInputs: [Fluid.of('minecraft:water', 50)], - itemInputs: [NotRotten("tfc:food/soybean"), "tfc:powder/salt"], itemOutputProvider: TFC.isp.of('firmalife:food/soy_mixture').copyOldestFood(), }) - registerFoodRecipe("food_oven", "boiled_egg", { - duration: 200, - EUt: 8, - itemInputHints: ["#firmalife:foods/raw_eggs"], - itemOutputHint: "tfc:food/boiled_egg", - fluidInputs: [Fluid.of('minecraft:water', 200)], - itemInputs: [NotRotten('#firmalife:foods/raw_eggs')], - itemOutputProvider: TFC.isp.of('tfc:food/boiled_egg').copyOldestFood() - }) - - registerFoodRecipe("food_oven", "cooked_rice", { - duration: 200, - EUt: 8, - itemInputHints: ["tfc:food/rice_grain"], - itemOutputHint: "tfc:food/cooked_rice", - fluidInputs: [Fluid.of('minecraft:water', 200)], - itemInputs: [NotRotten('tfc:food/rice_grain')], - itemOutputProvider: TFC.isp.of('tfc:food/cooked_rice').copyOldestFood() - }) - // These don't need the ISP handling, they're just here to keep all the food recipes together event.recipes.gtceu.mixer('tfg:tfc/olive_oil_water') diff --git a/kubejs/startup_scripts/firmalife/constants.js b/kubejs/startup_scripts/firmalife/constants.js index 39407880c..6bc9a7428 100644 --- a/kubejs/startup_scripts/firmalife/constants.js +++ b/kubejs/startup_scripts/firmalife/constants.js @@ -84,6 +84,13 @@ global.FIRMALIFE_ORE_MATERIALS = [ 'chromite' ]; +global.FIRMALIFE_JAMS = [ + "fig", + "pineapple", + "red_grapes", + "white_grapes" +] + global.FIRMALIFE_GREENHOUSE_FRUIT_RECIPE_COMPONENTS = [ { input: 'firmalife:plant/cocoa_sapling', fluid_amount: 8000, output: '3x firmalife:food/cocoa_beans', name: 'cocoa_beans' }, { input: 'firmalife:plant/fig_sapling', fluid_amount: 8000, output: '3x firmalife:food/fig', name: 'fig' }, @@ -94,26 +101,6 @@ global.FIRMALIFE_GREENHOUSE_BERRY_RECIPE_COMPONENTS = [ { input: 'firmalife:plant/nightshade_bush', fluid_amount: 6000, output: '3x firmalife:food/nightshade_berry', name: 'nightshade' }, ]; -global.FIRMALIFE_MIXER_FLATBREAD_DOUGH_RECIPE_COMPONENTS = [ - { input: 'tfc:food/barley_flour', output: '4x firmalife:food/barley_dough', name: 'firmalife_barley_dough' }, - { input: 'tfc:food/maize_flour', output: '4x firmalife:food/maize_dough', name: 'firmalife_maize_dough' }, - { input: 'tfc:food/oat_flour', output: '4x firmalife:food/oat_dough', name: 'firmalife_oat_dough' }, - { input: 'tfc:food/rye_flour', output: '4x firmalife:food/rye_dough', name: 'firmalife_rye_dough' }, - { input: 'tfc:food/rice_flour', output: '4x firmalife:food/rice_dough', name: 'firmalife_rice_dough' }, - { input: 'tfc:food/wheat_flour', output: '4x firmalife:food/wheat_dough', name: 'firmalife_wheat_dough' }, - { input: 'firmalife:food/masa_flour', output: '2x firmalife:food/masa', name: 'firmalife_masa' }, -]; - -global.FIRMALIFE_FURNACE_FLATBREAD_RECIPE_COMPONENTS = [ - { input: 'tfc:food/barley_dough', output: 'firmalife:food/barley_flatbread', name: 'barley_flatbread' }, - { input: 'tfc:food/maize_dough', output: 'firmalife:food/maize_flatbread', name: 'maize_flatbread' }, - { input: 'tfc:food/oat_dough', output: 'firmalife:food/oat_flatbread', name: 'oat_flatbread' }, - { input: 'tfc:food/rye_dough', output: 'firmalife:food/rye_flatbread', name: 'rye_flatbread' }, - { input: 'tfc:food/rice_dough', output: 'firmalife:food/rice_flatbread', name: 'rice_flatbread' }, - { input: 'tfc:food/wheat_dough', output: 'firmalife:food/wheat_flatbread', name: 'wheat_flatbread' }, - { input: 'firmalife:food/masa', output: 'firmalife:food/corn_tortilla', name: 'corn_tortilla' }, -]; - global.FIRMALIFE_COOKING_RECIPE_COMPONENTS = [ { input: 'firmalife:food/white_chocolate_blend', output: 'firmalife:food/white_chocolate', name: 'white_chocolate' }, { input: 'firmalife:food/dark_chocolate_blend', output: 'firmalife:food/dark_chocolate', name: 'dark_chocolate' }, diff --git a/kubejs/startup_scripts/tfc/constants.js b/kubejs/startup_scripts/tfc/constants.js index 819f1f696..d7f2c995e 100644 --- a/kubejs/startup_scripts/tfc/constants.js +++ b/kubejs/startup_scripts/tfc/constants.js @@ -924,41 +924,39 @@ global.TFC_QUERN_POWDER_RECIPE_COMPONENTS = [ { input: 'firmalife:ore/small_chromite', output: 'gtceu:small_chromite_dust', name: 'chromite' } ]; -global.TFC_QUERN_GRAIN_RECIPE_COMPONENTS = [ - { input: 'tfc:food/barley', output: 'tfc:food/barley_grain', name: 'barley_grain' }, - { input: 'tfc:food/maize', output: 'tfc:food/maize_grain', name: 'maize_grain' }, - { input: 'tfc:food/oat', output: 'tfc:food/oat_grain', name: 'oat_grain' }, - { input: 'tfc:food/rye', output: 'tfc:food/rye_grain', name: 'rye_grain' }, - { input: 'tfc:food/rice', output: 'tfc:food/rice_grain', name: 'rice_grain' }, - { input: 'tfc:food/wheat', output: 'tfc:food/wheat_grain', name: 'wheat_grain' }, -]; +global.TFC_GRAINS = [ + "barley", + "maize", + "oat", + "rye", + "rice", + "wheat", +] -global.TFC_QUERN_FLOUR_RECIPE_COMPONENTS = [ - { input: 'tfc:food/barley_grain', output: '2x tfc:food/barley_flour', name: 'barley_flour' }, - { input: 'tfc:food/maize_grain', output: '2x tfc:food/maize_flour', name: 'maize_flour' }, - { input: 'tfc:food/oat_grain', output: '2x tfc:food/oat_flour', name: 'oat_flour' }, - { input: 'tfc:food/rye_grain', output: '2x tfc:food/rye_flour', name: 'rye_flour' }, - { input: 'tfc:food/rice_grain', output: '2x tfc:food/rice_flour', name: 'rice_flour' }, - { input: 'tfc:food/wheat_grain', output: '2x tfc:food/wheat_flour', name: 'wheat_flour' }, -]; - -global.TFC_MIXER_FLATBREAD_DOUGH_RECIPE_COMPONENTS = [ - { input: 'tfc:food/barley_flour', output: '2x tfc:food/barley_dough', name: 'tfc_barley_dough' }, - { input: 'tfc:food/maize_flour', output: '2x tfc:food/maize_dough', name: 'tfc_maize_dough' }, - { input: 'tfc:food/oat_flour', output: '2x tfc:food/oat_dough', name: 'tfc_oat_dough' }, - { input: 'tfc:food/rye_flour', output: '2x tfc:food/rye_dough', name: 'tfc_rye_dough' }, - { input: 'tfc:food/rice_flour', output: '2x tfc:food/rice_dough', name: 'tfc_rice_dough' }, - { input: 'tfc:food/wheat_flour', output: '2x tfc:food/wheat_dough', name: 'tfc_wheat_dough' }, -]; - -global.TFC_FURNACE_BREAD_RECIPE_COMPONENTS = [ - { input: 'firmalife:food/barley_dough', output: 'tfc:food/barley_bread', name: 'barley_bread' }, - { input: 'firmalife:food/maize_dough', output: 'tfc:food/maize_bread', name: 'maize_bread' }, - { input: 'firmalife:food/oat_dough', output: 'tfc:food/oat_bread', name: 'oat_bread' }, - { input: 'firmalife:food/rye_dough', output: 'tfc:food/rye_bread', name: 'rye_bread' }, - { input: 'firmalife:food/rice_dough', output: 'tfc:food/rice_bread', name: 'rice_bread' }, - { input: 'firmalife:food/wheat_dough', output: 'tfc:food/wheat_bread', name: 'wheat_bread' }, -]; +global.TFC_JAMS = [ + "blackberry", + "blueberry", + "bunchberry", + "cloudberry", + "cranberry", + "elderberry", + "gooseberry", + "raspberry", + "snowberry", + "strawberry", + "wintergreen_berry", + "banana", + "cherry", + "green_apple", + "lemon", + "olive", + "orange", + "peach", + "plum", + "red_apple", + "pumpkin_chunks", + "melon_slice", +] global.TFC_GREENHOUSE_FRUIT_RECIPE_COMPONENTS = [ { input: 'tfc:plant/cherry_sapling', fluid_amount: 8000, output: '32x tfc:food/cherry', name: 'cherry' }, From 3f46b6856fbc663e461369952cc016448cbb63c8 Mon Sep 17 00:00:00 2001 From: Redeix <59435925+Redeix@users.noreply.github.com> Date: Mon, 16 Jun 2025 04:56:15 -0500 Subject: [PATCH 11/23] - Updated texture for aqueous accumulator (#1168) --- .../aqueous_accumulator/overlay_front.png | Bin 607 -> 382 bytes .../overlay_front_active.png | Bin 0 -> 734 bytes .../overlay_front_active.png.mcmeta | 5 +++++ .../overlay_front_active_emissive.png | Bin 0 -> 338 bytes .../overlay_front_active_emissive.png.mcmeta | 5 +++++ 5 files changed, 10 insertions(+) create mode 100644 kubejs/assets/gtceu/textures/block/machines/aqueous_accumulator/overlay_front_active.png create mode 100644 kubejs/assets/gtceu/textures/block/machines/aqueous_accumulator/overlay_front_active.png.mcmeta create mode 100644 kubejs/assets/gtceu/textures/block/machines/aqueous_accumulator/overlay_front_active_emissive.png create mode 100644 kubejs/assets/gtceu/textures/block/machines/aqueous_accumulator/overlay_front_active_emissive.png.mcmeta diff --git a/kubejs/assets/gtceu/textures/block/machines/aqueous_accumulator/overlay_front.png b/kubejs/assets/gtceu/textures/block/machines/aqueous_accumulator/overlay_front.png index 0f45a3e2d6fa758fd5770b91f92a7a8a4640aaa5..066106e8fb4e8bd2a5a653b3293cf7a05b3a8c96 100644 GIT binary patch delta 355 zcmcc5@{ehPO1-P6i(`mI@6kycyAC-BwAmjn6I7hwCg8$kwyi6Z<@SVY?i;=_zB$6a zVUwYNfJy1D+SVtcN6ZC01uMRq(N{b5Y0H`ZVSPHFo(ah5PSM z47#T3v;1=S^2>|~X0r>e=5BF2|9L{tqA826zn-`(GuA0kM5f<;*WEnV?KYm19#qEl zPF#_?Z)1#}Ay4!3&z>T#^;2I8wFqpvoxAS3HpA+xU5hj}G_wpg(J@WM)mX{lG$r#i=6 zKUydwb3D;NLg2XJ^UsmSQ=Yjj73n_ebi24yfg@u5^{H1bb^hP>>G?-iL-&duruy@B R7#J8BJYD@<);T3K0RS=Cs&N1S delta 582 zcmeyzbf0B{N_}&tvvYu_v$H}$QGQxxPAUU~#>Co*wjPHaWRAuMFI5s{x9+e=S>Y$< zveY6=TV$cr3el)igPmWvXPKyI>h(2cA3WH9bX9Zr=5>7QniPI8K6>_S$qOabfBKqR zIzB$wA^-lJ?Yn!7PMc4etWFoYP;&ds5}_o${aS5tf=vwyE=TH9(i|H|9 z6=_G#q)j>^n6&ZAQ7`e$n^p>*7jO^tU0$R3eB-Ig?#*FqH-EGJ$$gl$Hg)D}6ZeUS zl%^>Jx^ul+v4Bh3Fsd|2r#>aa{^4W!!oNa0MT$ZXoY>ePWpZMj{2%_h@@&!N%l9lP zV0uwoIH%uGVGH*bslLy(Z!FddEBxSzc_~}Jmh(*Aq+SGU0{Ti}=q~+3z2JVLTBO{!;qE0|5#Bz;C`sfQ+6h1RYOhrs6GY;2FViFh!W@g+}zZ>5(ej@)Wnk16ovB4k_-iRPv3y>Mm}){ z1_ldH7sn8b)5!@ECJG7~_D}Zj*zu#ju<+x59v+?uLmxW@jVJbBV+ABdowsl+El&E! jf80Q#_n4q;FT+-zDA}5jbw3#x7#KWV{an^LB{Ts5lmPO! diff --git a/kubejs/assets/gtceu/textures/block/machines/aqueous_accumulator/overlay_front_active.png b/kubejs/assets/gtceu/textures/block/machines/aqueous_accumulator/overlay_front_active.png new file mode 100644 index 0000000000000000000000000000000000000000..84cacba2078ff73474374cd176f0fce878e61823 GIT binary patch literal 734 zcmeAS@N?(olHy`uVBq!ia0y~yU=UznU}WH6W?*3G?P057U|>*4_6YK2V5m}KU}$Jz zVEDzrz|io5fuYoZf#FpG1B2BJ1_tqhIlBUF7#J8l0(?ST85kJU)YQz)&84NKw{G2P zUDtE);6Z8o*rukY{QP`tYwKsvp3R;;d+yx16DLk|cXwA-R&H-^7ZenXii&b|bqx*< zc5-rJU|^Uhdo6;2fq}6k$S;_|;n|He5GTpo-G!lpRn~)nfr;DG#W5t}@YU;YC%sbO zVSC_v!$VW1`*!U6|3UnWv6HrBoj)EiJ^oi;^TU}DCvV?wV`Yd4ue`|g-7od(3Rd>_ z?Yo?~H|)`$-^RcfZE!5)JBO0T{yw7_MRxOox~?-Y)h`uhRPT6vyqf#eH-SSo=i7fq zMR+#6aFDy^{a-%&?BRHayvmwiJ3e^adaNzo-|(h!^EZ!c%I>cXx%k(eo?bNXZ6V{% zmmei3f0I~qe8T3h2Oe`yliU2Y;BIr6P0dG%`R^_|tdmQZm#^HxrDRhuyPc!McG3rh zZyl!=hdkqdyxI2LzRsHJImuV#mdbBoPkG%aZ8M3Z!*)mfl;aXlKR3TFvaX16cvoTZ zy0QL+<7+t$+Zv9GRXbvBj&WVGZR1k1Ii-KU;z`Z<<}lj>6)I03+7@TiE*|WDC2why6db{v|dw4|J!n7i;t%+Blir?u*CW=2h#NyI`0GD**e3K(QNPJ|e6sNW?H4N=x^Gssh<{wbE>~8UDYxUp z3|y4~ek-Oc2LrTBL|boBqO@bsa1)dGuuy#03Tj>OnnP2iTceQ~_v#?P?I89&QT q+1&4HYYhKZakEnX#d_O1<~vgjS7+Dl{>H$-z~JfX=d#Wzp$Py6*FN$9 literal 0 HcmV?d00001 diff --git a/kubejs/assets/gtceu/textures/block/machines/aqueous_accumulator/overlay_front_active.png.mcmeta b/kubejs/assets/gtceu/textures/block/machines/aqueous_accumulator/overlay_front_active.png.mcmeta new file mode 100644 index 000000000..92cc62352 --- /dev/null +++ b/kubejs/assets/gtceu/textures/block/machines/aqueous_accumulator/overlay_front_active.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation":{ + "frametime": 1 + } +} \ No newline at end of file diff --git a/kubejs/assets/gtceu/textures/block/machines/aqueous_accumulator/overlay_front_active_emissive.png b/kubejs/assets/gtceu/textures/block/machines/aqueous_accumulator/overlay_front_active_emissive.png new file mode 100644 index 0000000000000000000000000000000000000000..d32a71c7a7e8065041013a4c828cdc75bb703a0c GIT binary patch literal 338 zcmeAS@N?(olHy`uVBq!ia0y~yU=UznU}RuoW?*1AZXfq_9G*(1o8fuTx`fuW&= zf#DYe14F|L28L1t28LG&3=CE?7#PG0=IjczVPIh33GfMVWnf^iuIrJuk7ZzBka?DH zmVtqRu_VYZn8D%MjWiG^$=lt9p@UV{gMoozx2KC^h{fr>7Yz9h8St|<;fUn;nn{dM+_=?`|k`TFK%d1JZAiZ>sZ zsW*S$+pNu|7nl4&OGIOz$2Xmi8UZ^S!t(Pz&GgFpyFk~px38`{`l)!z)W44wwsy@D q&$wegPvCofzm&4X`F+}Z`3 Date: Mon, 16 Jun 2025 04:57:17 -0500 Subject: [PATCH 12/23] - Food changes (#1167) --- .../machines/food_processor/overlay_front.png | Bin 341 -> 380 bytes .../food_processor/overlay_front_active.png | Bin 683 -> 919 bytes .../overlay_front_active.png.mcmeta | 2 +- .../overlay_front_active_emissive.png | Bin 0 -> 659 bytes .../overlay_front_active_emissive.png.mcmeta | 5 ++ .../food_processor/overlay_front_emissive.png | Bin 0 -> 149 bytes .../food_refrigerator/overlay_back.png | Bin 0 -> 592 bytes .../food_refrigerator/overlay_back_active.png | Bin 0 -> 504 bytes .../overlay_back_active.png.mcmeta | 5 ++ .../overlay_back_active_emissive.png | Bin 0 -> 184 bytes .../overlay_back_active_emissive.png.mcmeta | 5 ++ .../overlay_back_active_emissive_ref.gif | Bin 0 -> 785 bytes .../overlay_back_active_ref.gif | Bin 0 -> 4697 bytes .../food_refrigerator/overlay_bottom.png | Bin 0 -> 75 bytes .../food_refrigerator/overlay_front.png | Bin 0 -> 350 bytes .../overlay_front_active.png | Bin 0 -> 364 bytes .../food_refrigerator/overlay_side.png | Bin 0 -> 361 bytes .../food_refrigerator/overlay_top.png | Bin 0 -> 250 bytes kubejs/server_scripts/tfg/recipes.food.js | 73 +++++++----------- 19 files changed, 44 insertions(+), 46 deletions(-) create mode 100644 kubejs/assets/gtceu/textures/block/machines/food_processor/overlay_front_active_emissive.png create mode 100644 kubejs/assets/gtceu/textures/block/machines/food_processor/overlay_front_active_emissive.png.mcmeta create mode 100644 kubejs/assets/gtceu/textures/block/machines/food_processor/overlay_front_emissive.png create mode 100644 kubejs/assets/gtceu/textures/block/machines/food_refrigerator/overlay_back.png create mode 100644 kubejs/assets/gtceu/textures/block/machines/food_refrigerator/overlay_back_active.png create mode 100644 kubejs/assets/gtceu/textures/block/machines/food_refrigerator/overlay_back_active.png.mcmeta create mode 100644 kubejs/assets/gtceu/textures/block/machines/food_refrigerator/overlay_back_active_emissive.png create mode 100644 kubejs/assets/gtceu/textures/block/machines/food_refrigerator/overlay_back_active_emissive.png.mcmeta create mode 100644 kubejs/assets/gtceu/textures/block/machines/food_refrigerator/overlay_back_active_emissive_ref.gif create mode 100644 kubejs/assets/gtceu/textures/block/machines/food_refrigerator/overlay_back_active_ref.gif create mode 100644 kubejs/assets/gtceu/textures/block/machines/food_refrigerator/overlay_bottom.png create mode 100644 kubejs/assets/gtceu/textures/block/machines/food_refrigerator/overlay_front.png create mode 100644 kubejs/assets/gtceu/textures/block/machines/food_refrigerator/overlay_front_active.png create mode 100644 kubejs/assets/gtceu/textures/block/machines/food_refrigerator/overlay_side.png create mode 100644 kubejs/assets/gtceu/textures/block/machines/food_refrigerator/overlay_top.png diff --git a/kubejs/assets/gtceu/textures/block/machines/food_processor/overlay_front.png b/kubejs/assets/gtceu/textures/block/machines/food_processor/overlay_front.png index 5bd5b3654a3e463b7c814f8d5171d792abba52eb..21458b6d21a1d0fd86f72ab073571f8c56f023d1 100644 GIT binary patch delta 354 zcmcc0^oMDJay_H7r;B5VMeor`8@moUh`9Ejb5L0MrbQ%}<;XFAjvJo;6ncB-D{WKS zR_Czli&9f=mG?of?go!pXB-Y}h?bmlHC0?^&(*mP_Z_bN@ZfURUElTBfA9M3xBRnF zjEL)F{&r{X1%D+jL~V}H`C!9;{_}(&rKKtyOy`~(M`drhCU%9XUd8iJjU9V}g^ZC@ zFT;!Pzj?nbf0F$6W=@+xlL61o95de&-)k3XB<+o}Uz=gN;`J`cG8y*kr89lhrlfjq zzpdJ}XgS;4CNo>Z`9z7ie(hZI@=qoHgmW zW%EIXr6OLMeaDp_f1L5MBujS66Y-^)S$ij|B<_rP^m`v`#qTNh>+^dp+GD0%-K)mH Pz`)??>gTe~DWM4f4;QCX delta 315 zcmeyvbd_m>ayt!RaI@Pzq|arL#l*?N=xg3q!;Uw zn=WZEEcx(hZ#9p+eLZ9HgfxMQKOebgxUog>GGwZWC73d>bP0l+XkK99DF1 diff --git a/kubejs/assets/gtceu/textures/block/machines/food_processor/overlay_front_active.png b/kubejs/assets/gtceu/textures/block/machines/food_processor/overlay_front_active.png index 9214428f25181b1baca3792f03c3f5f1c591276d..db6c56605f1014b7e6a07b916c7459d790b25c22 100644 GIT binary patch delta 911 zcmZ3@I-PxjSUt-I4rT@hhNE>>>lhdq6p}rHd>I(3)EF2VS{N99F)%PRykKA`HDF+P zmB7GYHG_dcykO3*KpO@I2KxY?5LX5U1~oM`b8~ZPY3Z$7w>mjFSzB92MMWJvc(AFd z$<@_$?%cWg`S}wkPHb;)Pf1A$3JT&)=Vu8p$(Z2Fz`!t}{*w(W0|NtNNswPKgTu2M zX&_FLx4R2N2dk_H0|V1pPZ!6Kid%2*BnE#n;9)P=ezULlp~t7c`(Iz?lh3`hE0Et` zdQ`LpHfdpKKf{Eo3v81rTAr@=JlKA8o$|#QVodCX z{b|3I*T~=86Cfh^c~T|A61j)|0-co$-E1HI`uR`LvBf>;L*m9m%IoZOS@@MQt}4G1 zJCiK@=(qc`gWvjhRJ{}A?ydTB=HJD4KZR~Frq+j??_Tw9!t>mP_CG44-|&aj7wr@I z7JTM+^V!p~zctNv&ySK5{@E-y(f-lTQ@QL-OqEc$%nk?4}0$V?DAS$ zt>4ThPlHb%WPWXFkn%y7Bk#!=Gk=L`454R{B(2Sm$0C=kRt< z%Jb9C-}=kWPj5PYv9i1MvsgesyUa8GL-luSR%zBp#Mys3;9g-;bFb^SeZZanfnO|k z{9pX?PvZB(GukU>9GCyxU}n4N{QY~+84o${t6z0oxo)1p*Mj~}4Z>SqDcY|;XOs5% z#J=+lm2=KI*WGWel&O*TVle7Ia=7~Q1G!e4G`TyAZ~jRHg?g6FKgQ+*y4TA}|LtI4 QU|`_zboFyt=akR{0BWPRO#lD@ delta 673 zcmbQvzM6G{SUp1m2O9$egUH2C3m6y}7>k44ofy`glX=O&z`&C3=sM*7Vbx>Vw;TA1ZmyAed0?aLwS#e5PiO3z?{|7)-(kn4F+$a$fjX^DTPAv3n4HOVyYCr8 zzSM#J%3Vhi6r-{?)Z1|LpL04J_@izrGm|aD8fG0gulM`xy4yBN^RavJ*T-?OPGrxJ zcsw)FYV(v{h6KeD2Hs@7sg0|dtxsIAf6ZtvsCo8b!GbRgL2Q!F%`;f449@+%~M4DVQ8)ivyHQnz(ra%7(n(C|A-J4SiKqJ7uuuQB&E`?&R$$nY&- zf91uj$(($be~K7O)dzlvDfPAtlh=zEEOgkrpy*)n-USBik{N4dYhE@kuVQ?dEX^=W z;0pKUzW2^odL%D1FZuH173);)YgGq%uQ5(xk4i|-v2}2(S|#4FHO@hb9pN;IQ2i~l zO)aG!&GL!adw`SsHN*S8TjMs=<-Fa%XQ9h5@2f+qip1(T2bByd$Grwzi}cw8Y(mSu TLoP5dFfe$!`njxgN@xNA$zmV2 diff --git a/kubejs/assets/gtceu/textures/block/machines/food_processor/overlay_front_active.png.mcmeta b/kubejs/assets/gtceu/textures/block/machines/food_processor/overlay_front_active.png.mcmeta index f3da053bc..92cc62352 100644 --- a/kubejs/assets/gtceu/textures/block/machines/food_processor/overlay_front_active.png.mcmeta +++ b/kubejs/assets/gtceu/textures/block/machines/food_processor/overlay_front_active.png.mcmeta @@ -1,5 +1,5 @@ { "animation":{ - "frametime": 2 + "frametime": 1 } } \ No newline at end of file diff --git a/kubejs/assets/gtceu/textures/block/machines/food_processor/overlay_front_active_emissive.png b/kubejs/assets/gtceu/textures/block/machines/food_processor/overlay_front_active_emissive.png new file mode 100644 index 0000000000000000000000000000000000000000..97ab6af8176c685059c2e66de977bc450614ceda GIT binary patch literal 659 zcmeAS@N?(olHy`uVBq!ia0y~yU=UznVA;UJ%)r3F(06@30|SFXvPY0F14ES>14Ba# z1H&%{28M3NkF6pC!N~V}dUO14Ceq zxg-Mv17k^$UoeBivm0q3PLj8~3quF1tOo-F<4;c)$B>MBZ*S)IH7f|PCD`dPR52dl zUUBDt-t8kZH*#nFWxA>RxqFLm@|x}xES56i0lH63qqkFYgtQS9fi z-DUaZe)_3{8z=FdyQeMo)mmd+EdRVOKYI*Vzw=4j$n4;=S?B#O)BVGi#f)q^lMNmS z=FMPRBR#3Qgj??IM8!jm$IV`SUHIQFxc%GtyWf8Y+3kp{s@=P5&d&#x^FJT_{BK%6 zW6iIcXMf*l%;!Az`0txb@1I}#webGsdYfmDCs%*i!+kr+ZpVDh`Hi1E_s`#GfBNFO zXO~mnoZl*6cVhXs!)I6hE!dr9e`nn-{_U&39p;yluef)OTb}c2jJ{QT^|$jAE(^~s zcYYo_yGHKS`6m+(R4n;Fr7Zr&&${~$PyYCG{N@Q^+y5so)^k?5VdR9XtG=3kWj@&(_Q6p# REEts7JYD@<);T3K0RZ|lE{6aB literal 0 HcmV?d00001 diff --git a/kubejs/assets/gtceu/textures/block/machines/food_processor/overlay_front_active_emissive.png.mcmeta b/kubejs/assets/gtceu/textures/block/machines/food_processor/overlay_front_active_emissive.png.mcmeta new file mode 100644 index 000000000..92cc62352 --- /dev/null +++ b/kubejs/assets/gtceu/textures/block/machines/food_processor/overlay_front_active_emissive.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation":{ + "frametime": 1 + } +} \ No newline at end of file diff --git a/kubejs/assets/gtceu/textures/block/machines/food_processor/overlay_front_emissive.png b/kubejs/assets/gtceu/textures/block/machines/food_processor/overlay_front_emissive.png new file mode 100644 index 0000000000000000000000000000000000000000..c20a1c9810d77b74d42b9829129c1c640700e925 GIT binary patch literal 149 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4rT@h1`S>QU?3X literal 0 HcmV?d00001 diff --git a/kubejs/assets/gtceu/textures/block/machines/food_refrigerator/overlay_back.png b/kubejs/assets/gtceu/textures/block/machines/food_refrigerator/overlay_back.png new file mode 100644 index 0000000000000000000000000000000000000000..3c21545d173450d700ff3c857be6471b14b9deaf GIT binary patch literal 592 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!to#64XcLo9lyPBP384wN}o zFYa`r^I>I2Biqv_2A32=g}6KyOjfYsniUu$)5SMerYY}{j>yvP2P%;)3uia8OcFaY zVMz;5r^kaSF}EW=7ajcK)HcVt%Dp@HYW~mt??2xAURPt2Y9X`h&+=b??HJyc%}&^V zKix)7n6G_e(4tjZ4+~~|tl)XDUiP@-l~2p4O4b@l9>J1zTW zm+!NAp7*q9TiEKkxq5p0jK6=&W7^yhFF$YR-u`}uj2fu~276g?#y8Aut1ei$T#)JQ z6VRNSdN#J(=7@=J&`OcDVckD}R@Rs8jx{qg+w`^S@8;LLzVp4S4HZc}&7V;tf8gM0 zhUcNI4cXJrF$(PcI^+Adsmou#eyv}%SB~Lnk>yH_Q`49xoPT~dZL_D+#06oi6D8Q@ z`n6}6cx}J^^z7AL*AE`G=SY*?Gq1FO%Tx37r;4U?o1WSIENq@TSC;4S0TbVn*yAR? zLY*vY!?-n5!#Ey_bRYd;U;5yrGK0jEd-Lu%>P;^$FE1B#`tkqXw%m}=qlGeZEZ%!2 zoy<`X*ik>Bd~eiRy`L|+xw*Id&pw%AbeQuOueFNGn!AebM;I6w7(8A5T-G@yGywny CwhgcV literal 0 HcmV?d00001 diff --git a/kubejs/assets/gtceu/textures/block/machines/food_refrigerator/overlay_back_active.png b/kubejs/assets/gtceu/textures/block/machines/food_refrigerator/overlay_back_active.png new file mode 100644 index 0000000000000000000000000000000000000000..bcfd65feb106d41eb0f4fa5fdcd53f1085791eaa GIT binary patch literal 504 zcmeAS@N?(olHy`uVBq!ia0y~yU=UznV07SMW?*1wy22yCz`&r8>=ES4z)+>ez|hdb z!0?NKfuZ3A14F3+1H-EX1_rAc3=HB0b9M#VFfcHr1^9%xGB7ZF`t<3+g9kfz?!0m1 z#`*K-_wCzv?AWonbLXyFwQBkD<$Zm9_c8?KlJ+gNTAD;cBi^C@DKvbEgRc4|@TeSW!{R$58iVYc!?H;x^U%u#; zS9FL~_K22#NYMTKfQf%?$8nQ?52`9`9`q~qSN?p=IRDz`{WI(nit1PVJp3o|pF#Z$ z`!n+O6;u8iZvK0R<=={I`}BVmmzEoUZlB9;`?|mLTyq^m*|{a$zCmsZ3=9kmp00i_ I>zopr01T1VI{*Lx literal 0 HcmV?d00001 diff --git a/kubejs/assets/gtceu/textures/block/machines/food_refrigerator/overlay_back_active.png.mcmeta b/kubejs/assets/gtceu/textures/block/machines/food_refrigerator/overlay_back_active.png.mcmeta new file mode 100644 index 000000000..92cc62352 --- /dev/null +++ b/kubejs/assets/gtceu/textures/block/machines/food_refrigerator/overlay_back_active.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation":{ + "frametime": 1 + } +} \ No newline at end of file diff --git a/kubejs/assets/gtceu/textures/block/machines/food_refrigerator/overlay_back_active_emissive.png b/kubejs/assets/gtceu/textures/block/machines/food_refrigerator/overlay_back_active_emissive.png new file mode 100644 index 0000000000000000000000000000000000000000..8e993ab9899163f3861209611777cb5330c63c40 GIT binary patch literal 184 zcmeAS@N?(olHy`uVBq!ia0y~yU=UznV02(&W?*1Aks`8@fq_9G*(1o8fuTx`fuW&= zf#DYe14F|L28L1t28LG&3=CE?7#PG0=IjczVPIh33GfMVWnf^COWH5!F`0pZLF&ma zHUYh7ML)4+aJXMNb#U5R22v2?{JS4lc}&sV>cdpWV(% jo918H6ZpBUxspMUk)KgKDKDCVfq}u()z4*}Q$iB}`2Z{6 literal 0 HcmV?d00001 diff --git a/kubejs/assets/gtceu/textures/block/machines/food_refrigerator/overlay_back_active_emissive.png.mcmeta b/kubejs/assets/gtceu/textures/block/machines/food_refrigerator/overlay_back_active_emissive.png.mcmeta new file mode 100644 index 000000000..92cc62352 --- /dev/null +++ b/kubejs/assets/gtceu/textures/block/machines/food_refrigerator/overlay_back_active_emissive.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation":{ + "frametime": 1 + } +} \ No newline at end of file diff --git a/kubejs/assets/gtceu/textures/block/machines/food_refrigerator/overlay_back_active_emissive_ref.gif b/kubejs/assets/gtceu/textures/block/machines/food_refrigerator/overlay_back_active_emissive_ref.gif new file mode 100644 index 0000000000000000000000000000000000000000..383a1c8002c2d2f4d21310d5d14f32fbeb1396d5 GIT binary patch literal 785 zcmZ?wbhEHb6krfw_{abPf*zCQlJ+w&Fev_H;ba2Q|GE8KLxP$zt|?Jt#k9eJU3h*48#QHg>(J$wHA`5QNGJb3Wn)2B}$Td9Najnxp*GXeCRp)3u4BxBpbwt6UDY zP%E^NYp}BFGP?O{M~&b6oHsvuUFUYj>xhYpinKIkNfe3+aZB;`N(q!OG&YMgHHb5? z2yhk(vkSBFv+=N27uQc|6|LqJV965WWa44j%FjA!Rm-$Cf%S#lEbNC_*jPju7*9_+ zTjZDEmPLsY6s6|YuyD?`j;ewuljRrL&C*c9JU@V%V6o@auU(QWuc@mF=X1i)aXl~w|6-)d$_Y99b9;O7oKI{ HeF) literal 0 HcmV?d00001 diff --git a/kubejs/assets/gtceu/textures/block/machines/food_refrigerator/overlay_bottom.png b/kubejs/assets/gtceu/textures/block/machines/food_refrigerator/overlay_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..f02154247c2653f7aa4f2c50135ee47eb28d1f9f GIT binary patch literal 75 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7ggjjwLo9le6C_v{Cy4Yg caWF8j2rw|#`&RTZFfcH9y85}Sb4q9e0PjW)-2eap literal 0 HcmV?d00001 diff --git a/kubejs/assets/gtceu/textures/block/machines/food_refrigerator/overlay_front.png b/kubejs/assets/gtceu/textures/block/machines/food_refrigerator/overlay_front.png new file mode 100644 index 0000000000000000000000000000000000000000..01360c35a2eee48a62adb260c3d0b35dfaff2289 GIT binary patch literal 350 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7RXtrCLo9l?PTZK)93axR zpM~?5V@IPxislzaFZS97y~<{r=E=cwYT1qgpO}ui3oPHYlkL%i0{u9r$7$;Nvm#cs z{<&=Vea`>q|KHElTpFe3#KGtgC?es+F>BdD6W=9MBBr%w&NA_3Uhw+$*HcA1W%e*j z{9PLD6dKB~=6bg8K2f8tMG`k&dz8jL{%sfJb;;yt;hc*Wn~x?X_VO;$_+>ZOFGf#1 z=DI4+;pKsib&IE*%DMe**S`XbEewtVFZNpW-L^Rξ+0_un%ws!vb#oTPHIZ1>l^ zPT6zMjTvU2O|uB_N{xTNK6jGJ&5RrI2Jg8PS(dI@UeM0;|L9zYSpV{cpX>M8ZkN|T zx1@f?;o5(idS4{9m;Up4<$V8Vg-zD&-FMGP$JaB|G4yPk`s0smb_fFl1B0ilpUXO@ GgeCwh*qSQ< literal 0 HcmV?d00001 diff --git a/kubejs/assets/gtceu/textures/block/machines/food_refrigerator/overlay_front_active.png b/kubejs/assets/gtceu/textures/block/machines/food_refrigerator/overlay_front_active.png new file mode 100644 index 0000000000000000000000000000000000000000..e10b0db21966d987c7f7d76e15b9077480672a6f GIT binary patch literal 364 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7jXhl)Lo9l?1{!7^b`X$} zO!U*_nRbxl3d^SkfsQ{7Cchd#vrcxJD);zWg24;shw~Cbj^5qMwlrYlaapx}A=8y! zC`l%+Q3`&0@7yrRyBigh7#aka>;w-=FdvgxGKHgwp~p}nnc=|E=bt4nzufYf zkD+e&%Si#(O&JpG=39SSIzhkX#f@waFHIdWZV%0k_umV)CB84;^RYtai|Dr7Z?Au> zIP$W@NyPQUrZ?-t7tGCAd-`O`B$J<2d$%!ch*}$SKX3cy_QQ;uZ}L>mtFD{v<8pq^ zXCvRsPbS@1uu6-;LFV{=>kRSPM`N7lJ(s;0C@e71`m8|Dt&_TZ>$qz6?{(5NjbMp- z{ps=3i~H>F-ahM`Vfp;20=r9#|4;ME4({^SsMoVSb9YP@aebJhKmGKQ{eR^@Fzba+ WURm_2&6|ONfx*+&&t;ucLK6V3p`r!= literal 0 HcmV?d00001 diff --git a/kubejs/assets/gtceu/textures/block/machines/food_refrigerator/overlay_side.png b/kubejs/assets/gtceu/textures/block/machines/food_refrigerator/overlay_side.png new file mode 100644 index 0000000000000000000000000000000000000000..1161e23a981427087869a2d3f725bace3a7a05d7 GIT binary patch literal 361 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s74Ln^OLo9liPO$er93XPE zUN^Hw((9y(g@r{*Q9;(UU#yST$uH#ad$+V>b@${4ZyxDzyo)uG5O=+F(6K_mNM+el z6OW~Oz9)>E)>lmb{ce8oJ=^7mGkvD5k@TFzAke1hHc914WuHKkiSI@oZbg>LdCXJZ z|E%fDz3nBxATstBr^d8Z4;ID0kxrD*dVaK!$6;D(RFTxO%&7gmHs^(}T6HN2vK(~p zb$BiP;O8~Hv-fPhykml=FSz?oqcXRN$!6}Vdl|wq^K#{8%-ws7wTnII)Ke|y3vbJ& z?tHyVuHpUf@1{(ePm5lEl3K*;mp8A%{N9e=HGeKY32K_MiG@F!Z#lns)TN$Bh4-w} zsy80q@bts3AD5W4S(-13Zob(wJ@oGT@83%~yn6c{e_7T1vBKt(-DCTYycX(J58H%i S<}olZFnGH9xvXhPt{K z7&m;2yFPWwB{z17M*;aC7G{*)eeS-%G-Rt}$k(uZ&OHw$G*#!l$Za$~lOue!)ckwr zttN?=oP8a0l=mE!^wMnam5|QpTojl6SAEB$FDne^>gRI&Yn^BOFT(a*-a*m-Z$%d= z?pyru6W7Irw05@RcVZVlw?F(*^>691ImR2a*6vv;FZEyO-E+ojZ3YGg22WQ%mvv4F FO#m@NYXtxR literal 0 HcmV?d00001 diff --git a/kubejs/server_scripts/tfg/recipes.food.js b/kubejs/server_scripts/tfg/recipes.food.js index b28e87cc3..0a8fa9c76 100644 --- a/kubejs/server_scripts/tfg/recipes.food.js +++ b/kubejs/server_scripts/tfg/recipes.food.js @@ -160,10 +160,10 @@ function registerTFGFoodRecipes(event) { ]) }) - + //Note: Jam needs to be first in the recipe code or else it will consider it as the usable_in_jam_sandwhich ingredients. processorRecipe(`${grain}_${type[0]}_jam_sandwich`, 100, 16, { circuit: 4, - itemInputs: [`2x ${type[1]}`, "2x #tfc:foods/usable_in_jam_sandwich", '#tfc:foods/preserves'], + itemInputs: [`2x ${type[1]}`, '#tfc:foods/preserves', '2x #tfc:foods/usable_in_jam_sandwich'], itemOutputs: [`2x tfc:food/${grain}_bread_jam_sandwich`, 'tfc:empty_jar'], itemOutputProvider: TFC.isp.of(`2x tfc:food/${grain}_bread_jam_sandwich`).meal( (food => food.hunger(4).water(0.5).saturation(1).decayModifier(4.5)), [ @@ -277,47 +277,30 @@ function registerTFGFoodRecipes(event) { //#endregion //#region ================= Food preservation ================= - - processorRecipe("food_salting", 10, 16, { - itemInputs: [ - ["#tfc:foods/can_be_salted", TFC.ingredient.lacksTrait("#tfc:foods/can_be_salted", "tfc:salted")], - "tfc:powder/salt"], - itemOutputs: ["#tfc:foods/can_be_salted"], - itemOutputProvider: TFC.isp.copyInput().addTrait("tfc:salted") + + const smoking_meats = Ingredient.of('#tfc:foods/raw_meats').itemIds; + const brining_veg = Ingredient.of('#firmalife:foods/pizza_ingredients').itemIds; + + const brining_ingredients = smoking_meats.concat(brining_veg); + + brining_ingredients.forEach(item => { + processorRecipe(`${item}/brining`, 200, 16, { + circuit: 5, + itemInputs: [item], + itemOutputs: [item], + fluidInputs: [Fluid.of("tfc:brine", 100)], + itemOutputProvider: TFC.isp.of(item).copyOldestFood().addTrait('tfc:brined') + }) }) - - processorRecipe("brine_meat", 200, 16, { - circuit: 5, - itemInputs: [["#tfc:foods/raw_meats", TFC.ingredient.lacksTrait("#tfc:foods/raw_meats", "tfc:brined")]], - itemOutputs: ["#tfc:foods/raw_meats"], - fluidInputs: [Fluid.of("tfc:brine", 100)], - itemOutputProvider: TFC.isp.copyInput().addTrait("tfc:brined") - }) - - processorRecipe("brine_general", 200, 16, { - circuit: 5, - itemInputs: [["#firmalife:foods/pizza_ingredients", TFC.ingredient.lacksTrait("#firmalife:foods/pizza_ingredients", "tfc:brined")]], - itemOutputs: ["#firmalife:foods/pizza_ingredients"], - fluidInputs: [Fluid.of("tfc:brine", 100)], - itemOutputProvider: TFC.isp.copyInput().addTrait("tfc:brined") - }) - - - processorRecipe("pickle_meat", 200, 16, { - circuit: 5, - itemInputs: [ ["#tfc:foods/raw_meats", TFC.ingredient.lacksTrait(TFC.ingredient.hasTrait("#tfc:foods/raw_meats", "tfc:brined"), "tfc:pickled")] ], - itemOutputs: ["#tfc:foods/raw_meats"], - fluidInputs: [Fluid.of("tfc:vinegar", 100)], - itemOutputProvider: TFC.isp.copyInput().addTrait("tfc:pickled") - }) - - processorRecipe("pickle_general", 200, 16, { - circuit: 5, - itemInputs: [ ["#firmalife:foods/pizza_ingredients", TFC.ingredient.lacksTrait(TFC.ingredient.hasTrait("#firmalife:foods/pizza_ingredients", "tfc:brined"), "tfc:pickled")] ], - itemOutputs: ["#firmalife:foods/pizza_ingredients"], - fluidInputs: [Fluid.of("tfc:vinegar", 100)], - itemOutputProvider: TFC.isp.copyInput().addTrait("tfc:pickled") + smoking_meats.forEach(item => { + processorRecipe(`${item}/smoking`, 200, 16, { + circuit: 6, + itemInputs: [[item, TFC.ingredient.lacksTrait(item, "firmalife:smoked")]], + itemOutputs: [item], + fluidInputs: [Fluid.of('gtceu:wood_gas', 50)], + itemOutputProvider: TFC.isp.of(item).copyOldestFood().addTrait("firmalife:smoked") + }) }) //#endregion @@ -327,17 +310,17 @@ function registerTFGFoodRecipes(event) { global.TFC_JAMS.forEach(name => { processorRecipe(`${name}_jam`, 200, 8, { circuit: 15, - itemInputs: [`4x tfc:food/${name}`, "#tfg:sugar", "#tfc:empty_jar_with_lid"], + itemInputs: [`4x tfc:food/${name}`, "#tfg:sugars", "#tfc:empty_jar_with_lid"], itemOutputs: [`4x tfc:jar/${name}`], - fluidInputs: Fluid.of("minecraft:water", 100), + fluidInputs: [Fluid.of("minecraft:water", 100)], itemOutputProvider: TFC.isp.of(`4x tfc:jar/${name}`).copyFood() }) processorRecipe(`${name}_jam_no_seal`, 200, 8, { circuit: 16, - itemInputs: [`4x tfc:food/${name}`, "#tfg:sugar", "#tfc:empty_jar"], + itemInputs: [`4x tfc:food/${name}`, "#tfg:sugars", "tfc:empty_jar"], itemOutputs: [`4x tfc:jar/${name}_unsealed`], - fluidInputs: Fluid.of("minecraft:water", 100), + fluidInputs: [Fluid.of("minecraft:water", 100)], itemOutputProvider: TFC.isp.of(`4x tfc:jar/${name}_unsealed`).copyFood() }) }) From 5b0e9bda98732bc17c0220ac0b7e817af6fc4de6 Mon Sep 17 00:00:00 2001 From: Pyritie Date: Mon, 16 Jun 2025 16:47:43 +0100 Subject: [PATCH 13/23] fixes #1165 --- CHANGELOG.md | 1 + kubejs/server_scripts/tfc/data.js | 1 + 2 files changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index ebb94f903..b9df31bbf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ ## [Unreleased] ### New features ### Bug fixes +- Fixed double ingots not having a temperature (#1165) @Pyritie ### Changes ## [0.9.11] - 13.06.2025 diff --git a/kubejs/server_scripts/tfc/data.js b/kubejs/server_scripts/tfc/data.js index e49817b46..f0ba390a5 100644 --- a/kubejs/server_scripts/tfc/data.js +++ b/kubejs/server_scripts/tfc/data.js @@ -69,6 +69,7 @@ const registerTFCHeats = (event) => { makeItemHeatByTagPrefix(TagPrefix.rodLong, material, tfcProperty, 1.429) makeItemHeatByTagPrefix(TagPrefix.ingot, material, tfcProperty, 1.429) + makeItemHeatByTagPrefix(TFGTagPrefix.ingotDouble, material, tfcProperty, 2.875) makeItemHeatByTagPrefix(TagPrefix.rawOre, material, tfcProperty, 1.429) makeItemHeatByTagPrefix(TFGTagPrefix.richRawOre, material, tfcProperty, 1.429) From 6a6f72829a8851d2e7948aa1f9ee2585e91f7079 Mon Sep 17 00:00:00 2001 From: Pyritie Date: Mon, 16 Jun 2025 16:50:01 +0100 Subject: [PATCH 14/23] removed gems tag from flint --- kubejs/server_scripts/minecraft/tags.js | 1 + 1 file changed, 1 insertion(+) diff --git a/kubejs/server_scripts/minecraft/tags.js b/kubejs/server_scripts/minecraft/tags.js index 6363b026b..fd12509f2 100644 --- a/kubejs/server_scripts/minecraft/tags.js +++ b/kubejs/server_scripts/minecraft/tags.js @@ -56,6 +56,7 @@ const registerMinecraftItemTags = (event) => { event.remove('forge:gems', 'minecraft:charcoal') event.remove('forge:gems', 'minecraft:coal') + event.remove('forge:gems', 'minecraft:flint') event.add('tfc:compost_greens_high', 'minecraft:red_mushroom_block') event.add('tfc:compost_greens_high', 'minecraft:brown_mushroom_block') From 712f8a33c780c9ed41c40bf0a76a95c120685f17 Mon Sep 17 00:00:00 2001 From: Pyritie Date: Mon, 16 Jun 2025 16:54:28 +0100 Subject: [PATCH 15/23] fixes #1162 --- CHANGELOG.md | 1 + kubejs/server_scripts/firmalife/recipes.js | 10 +--------- kubejs/server_scripts/vintage_improvements/recipes.js | 7 +++++++ 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b9df31bbf..f0dbf3208 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ ### Bug fixes - Fixed double ingots not having a temperature (#1165) @Pyritie ### Changes +- Changed pineapple yarn recipe from assembler to wiremill & coiling machine, like the other strings (#1162) @Pyritie ## [0.9.11] - 13.06.2025 ### New features diff --git a/kubejs/server_scripts/firmalife/recipes.js b/kubejs/server_scripts/firmalife/recipes.js index 90d2e64f0..38e8f5165 100644 --- a/kubejs/server_scripts/firmalife/recipes.js +++ b/kubejs/server_scripts/firmalife/recipes.js @@ -95,16 +95,8 @@ const registerFirmaLifeRecipes = (event) => { .duration(50) .EUt(2) - // Pineapple Fiber - event.recipes.gtceu.assembler(`tfg:firmalife/pineapple_fiber`) - .itemInputs('firmalife:food/pineapple') - .circuit(1) - .itemOutputs('firmalife:pineapple_fiber') - .duration(50) - .EUt(7) - // Pineapple Yarn - event.recipes.gtceu.assembler(`tfg:firmalife/pineapple_yarn`) + event.recipes.gtceu.wiremill(`tfg:firmalife/pineapple_yarn`) .itemInputs('firmalife:pineapple_fiber') .circuit(1) .itemOutputs('8x firmalife:pineapple_yarn') diff --git a/kubejs/server_scripts/vintage_improvements/recipes.js b/kubejs/server_scripts/vintage_improvements/recipes.js index 14ef74306..ae5b6d315 100644 --- a/kubejs/server_scripts/vintage_improvements/recipes.js +++ b/kubejs/server_scripts/vintage_improvements/recipes.js @@ -627,6 +627,13 @@ function registerVintageImprovementsRecipes(event) { processingTime: 100 * global.VINTAGE_IMPROVEMENTS_DURATION_MULTIPLIER }).id(`tfg:vi/coiling/phantom_thread`) + event.custom({ + type: 'vintageimprovements:coiling', + ingredients: [{ item: 'firmalife:pineapple_fiber' }], + results: [{ item: 'firmalife:pineapple_yarn', count: 8 }], + processingTime: 100 * global.VINTAGE_IMPROVEMENTS_DURATION_MULTIPLIER + }).id(`tfg:vi/coiling/pineapple_yarn`) + event.custom({ type: 'vintageimprovements:coiling', ingredients: [ChemicalHelper.get(TagPrefix.ingot, GTMaterials.Polycaprolactam, 1)], From e35c34040d07e02f418a9e2434dc7bea55f62810 Mon Sep 17 00:00:00 2001 From: Jean Roberto de Souza <81846511+JeanRdSz@users.noreply.github.com> Date: Mon, 16 Jun 2025 13:03:14 -0300 Subject: [PATCH 16/23] Migmatite conflict fix (#1153) * Migmatite conflict fixe Tbh I can hardly call this a good fix, but tbh with Stonecutter coming back this might even be meaningless Signed-off-by: Jean Roberto de Souza <81846511+JeanRdSz@users.noreply.github.com> * Update Migmatite Signed-off-by: Jean Roberto de Souza <81846511+JeanRdSz@users.noreply.github.com> * Update recipes.rocks.js Signed-off-by: Jean Roberto de Souza <81846511+JeanRdSz@users.noreply.github.com> --------- Signed-off-by: Jean Roberto de Souza <81846511+JeanRdSz@users.noreply.github.com> --- kubejs/server_scripts/minecraft/recipes.js | 1 + kubejs/server_scripts/tfg/recipes.rocks.js | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/kubejs/server_scripts/minecraft/recipes.js b/kubejs/server_scripts/minecraft/recipes.js index 55a34243c..57cdf234f 100644 --- a/kubejs/server_scripts/minecraft/recipes.js +++ b/kubejs/server_scripts/minecraft/recipes.js @@ -1028,4 +1028,5 @@ const registerMinecraftRecipes = (event) => { }).id('tfg:shaped/stonecutter'); event.stonecutting('minecraft:smooth_quartz', 'minecraft:quartz_block') + event.stonecutting('create:cut_deepslate', 'minecraft:polished_deepslate') } diff --git a/kubejs/server_scripts/tfg/recipes.rocks.js b/kubejs/server_scripts/tfg/recipes.rocks.js index d8fce61c8..90a2eb47f 100644 --- a/kubejs/server_scripts/tfg/recipes.rocks.js +++ b/kubejs/server_scripts/tfg/recipes.rocks.js @@ -287,4 +287,4 @@ function registerTFGRockRecipes(event) { .EUt(GTValues.VA[GTValues.LV]) }) //#endregion -} \ No newline at end of file +} From b2cc4beba1012319c3d08fc68d65501945370269 Mon Sep 17 00:00:00 2001 From: Pyritie Date: Mon, 16 Jun 2025 17:12:53 +0100 Subject: [PATCH 17/23] fixed some VI/rolling mill recipes that were still generating for removed items --- CHANGELOG.md | 1 + kubejs/server_scripts/greate/recipes.removes.js | 1 + kubejs/server_scripts/gregtech/recipes.materials.js | 6 ++---- kubejs/server_scripts/vintage_improvements/recipes.js | 4 ++++ 4 files changed, 8 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f0dbf3208..ae6d4f52a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ ### New features ### Bug fixes - Fixed double ingots not having a temperature (#1165) @Pyritie +- Removed a few recipes that had unobtainable create-related materials @Pyritie ### Changes - Changed pineapple yarn recipe from assembler to wiremill & coiling machine, like the other strings (#1162) @Pyritie diff --git a/kubejs/server_scripts/greate/recipes.removes.js b/kubejs/server_scripts/greate/recipes.removes.js index 8771d171b..22b279f2b 100644 --- a/kubejs/server_scripts/greate/recipes.removes.js +++ b/kubejs/server_scripts/greate/recipes.removes.js @@ -27,6 +27,7 @@ function removeGreateRecipes(event) { event.remove({ id: 'greate:shaped/titanium_mechanical_saw' }) event.remove({ id: 'greate:splashing/dough' }) + event.remove({ id: 'gtceu:electrolyzer/decomposition_electrolyzing_chromatic_compound' }) event.remove({ mod: 'greate', type: 'create:deploying' }); event.remove({ mod: 'greate', type: 'create:sequenced_assembly' }); diff --git a/kubejs/server_scripts/gregtech/recipes.materials.js b/kubejs/server_scripts/gregtech/recipes.materials.js index f4ab5a5d1..52a6197e4 100644 --- a/kubejs/server_scripts/gregtech/recipes.materials.js +++ b/kubejs/server_scripts/gregtech/recipes.materials.js @@ -139,7 +139,7 @@ function registerGTCEUMetalRecipes(event) { let matAmount = TagPrefix.block.getMaterialAmount(material) / GTValues.M; - if (!plateStack.isEmpty()) { + if (!plateStack.isEmpty() && !ingotStack.hasTag('c:hidden_from_recipe_viewers')) { event.custom({ type: "createaddition:rolling", @@ -149,7 +149,6 @@ function registerGTCEUMetalRecipes(event) { }).id(`tfg:rolling/${material.getName()}_plate`) if (!blockStack.isEmpty() && GTMaterials.Stone != material) { - // 9х Слиток -> Блок event.recipes.createCompacting(blockStack, ingotStack.withCount(matAmount)) .heated() @@ -158,7 +157,6 @@ function registerGTCEUMetalRecipes(event) { } else { if (!blockStack.isEmpty()) { - // Блок из гемов -> 9 Пластин event.recipes.createCutting(plateStack.withCount(matAmount).withChance(0.65), blockStack) .id(`tfg:cutting/${material.getName()}_plate`) @@ -192,7 +190,7 @@ function registerGTCEUMetalRecipes(event) { const foilItem = ChemicalHelper.get(TagPrefix.foil, material, 4) const plateItem = ChemicalHelper.get(TagPrefix.plate, material, 1) - if (plateItem != null && foilItem != null) { + if (plateItem != null && foilItem != null && !plateItem.hasTag('c:hidden_from_recipe_viewers')) { event.custom({ type: "createaddition:rolling", input: plateItem, diff --git a/kubejs/server_scripts/vintage_improvements/recipes.js b/kubejs/server_scripts/vintage_improvements/recipes.js index ae5b6d315..371ee10f7 100644 --- a/kubejs/server_scripts/vintage_improvements/recipes.js +++ b/kubejs/server_scripts/vintage_improvements/recipes.js @@ -293,6 +293,10 @@ function registerVintageImprovementsRecipes(event) { forEachMaterial(material => { + const ingotItem = ChemicalHelper.get(TagPrefix.ingot, material, 1); + if (ingotItem == null || ingotItem.hasTag('c:hidden_from_recipe_viewers')) + return; + // #region Coiling if (material.hasFlag(MaterialFlags.GENERATE_ROD) && material.hasFlag(MaterialFlags.GENERATE_SPRING_SMALL)) { From 242a31b515cafb61085d056f9782eb31fa40e496 Mon Sep 17 00:00:00 2001 From: Pyritie Date: Mon, 16 Jun 2025 17:40:22 +0100 Subject: [PATCH 18/23] tweaked zinc color, added new plated block color --- .../tfc/textures/block/metal/block/zinc.png | Bin 0 -> 309 bytes .../tfc/textures/block/metal/smooth/zinc.png | Bin 0 -> 313 bytes kubejs/startup_scripts/gtceu/materials.js | 2 +- 3 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 kubejs/assets/tfc/textures/block/metal/block/zinc.png create mode 100644 kubejs/assets/tfc/textures/block/metal/smooth/zinc.png diff --git a/kubejs/assets/tfc/textures/block/metal/block/zinc.png b/kubejs/assets/tfc/textures/block/metal/block/zinc.png new file mode 100644 index 0000000000000000000000000000000000000000..2cb121e5a7f4409c8fcd8d136b6b8c7ab910e3dc GIT binary patch literal 309 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7I14-?iy0WWg+Z8+Vb&Z8 z1_p-bo-U3d7QIU++U7AC3bfj*T%Wdd?Y6?^ZCoZLB@YX}Y%$5q2<&s1k5C&zJ&q4YS`rYY)F^obUGjvX9yAuS>JC7I8C#`0_fGG;X=~H7LHM@#MP?MKf*n zUwXT|`)$UHWb9imvv~E&t2JJkC$sFHzWuCS{oOV^c30DR;mak~3=9km Mp00i_>zopr03}m~tpET3 literal 0 HcmV?d00001 diff --git a/kubejs/assets/tfc/textures/block/metal/smooth/zinc.png b/kubejs/assets/tfc/textures/block/metal/smooth/zinc.png new file mode 100644 index 0000000000000000000000000000000000000000..422b0e6b34efe8bcdc3c10445c49a9832414d6cc GIT binary patch literal 313 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7I14-?iy0WWg+Z8+Vb&Z8 z1_p-Lo-U3d7QMZb4Y^tj1YGwom@2>|cKL+Nf#1`o%{$1vMA~J-f~l?1I)$509=RJo z^Q6k2=M%DGmU+7{Fu1TVbXjcyjvbz?BE%&!Lc6nauEOEhi6QrK7o^5Af PU|{fc^>bP0l+XkKQABy~ literal 0 HcmV?d00001 diff --git a/kubejs/startup_scripts/gtceu/materials.js b/kubejs/startup_scripts/gtceu/materials.js index 089d4e92f..08433c05d 100644 --- a/kubejs/startup_scripts/gtceu/materials.js +++ b/kubejs/startup_scripts/gtceu/materials.js @@ -280,7 +280,7 @@ const registerGTCEuMaterialModification = (event) => { GTMaterials.IronMagnetic.setMaterialARGB(0x503d32) GTMaterials.IronMagnetic.setMaterialSecondaryARGB(0x131212) GTMaterials.Zinc.setMaterialARGB(0xd6ffdc) - GTMaterials.Zinc.setMaterialSecondaryARGB(0x213b3f) + GTMaterials.Zinc.setMaterialSecondaryARGB(0xA3BE9E) GTMaterials.Graphite.setMaterialARGB(0x889BA8) GTMaterials.Graphite.setMaterialSecondaryARGB(0x30383E) GTMaterials.Amethyst.setMaterialARGB(0xCC9EF0) From 8bc9247b24bf9ca494abeb3de94a0a985dbddd2b Mon Sep 17 00:00:00 2001 From: Pyritie Date: Mon, 16 Jun 2025 17:42:01 +0100 Subject: [PATCH 19/23] nerfed durability of wooden tongs, slightly tweaked their recipe --- config/tfchotornot-common.toml | 2 +- kubejs/server_scripts/tfc/recipes.materials.js | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/config/tfchotornot-common.toml b/config/tfchotornot-common.toml index ed10d7c44..e6e95be29 100644 --- a/config/tfchotornot-common.toml +++ b/config/tfchotornot-common.toml @@ -31,7 +31,7 @@ itemDamageTimeInterval = 60 #Durability for wooden tongs. #Range: > 0 - woodenTongsDurability = 250 + woodenTongsDurability = 100 #Durability for potholders. #Range: > 0 potholderDurability = 600 diff --git a/kubejs/server_scripts/tfc/recipes.materials.js b/kubejs/server_scripts/tfc/recipes.materials.js index a105e1203..80f4d9112 100644 --- a/kubejs/server_scripts/tfc/recipes.materials.js +++ b/kubejs/server_scripts/tfc/recipes.materials.js @@ -1114,6 +1114,15 @@ function registerTFCMaterialsRecipes(event) { let tongPartStack = Item.of(`tfchotornot:tong_part/${material.getName()}`) if (!tongsStack.isEmpty() && !tongPartStack.isEmpty()) { + event.shaped(tongsStack, [ + 'AA', + 'BC' + ], { + A: tongPartStack, + B: '#forge:bolts', + C: '#forge:tools/hammers' + }).id(`tfchotornot:crafting/tongs/${material.getName()}`) + // Ручка щипцов event.recipes.tfc.heating(tongPartStack, tfcProperty.getMeltTemp()) .resultFluid(Fluid.of(outputMaterial.getFluid(), 144)) From 0ecf73648d549fec0b07217eec60f45269332f1b Mon Sep 17 00:00:00 2001 From: Pyritie Date: Mon, 16 Jun 2025 17:42:48 +0100 Subject: [PATCH 20/23] changelog --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index ae6d4f52a..95062cd45 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,8 +5,10 @@ ### Bug fixes - Fixed double ingots not having a temperature (#1165) @Pyritie - Removed a few recipes that had unobtainable create-related materials @Pyritie +- Fixed the color of placed zinc ingots and plated blocks to match the material @Pyritie ### Changes - Changed pineapple yarn recipe from assembler to wiremill & coiling machine, like the other strings (#1162) @Pyritie +- Lowered durability of wooden tongs @Pyritie ## [0.9.11] - 13.06.2025 ### New features From 7f11bed7eb29a95e33aefa0de3a56785534cb05f Mon Sep 17 00:00:00 2001 From: Pyritie Date: Mon, 16 Jun 2025 18:37:24 +0100 Subject: [PATCH 21/23] quest updates, langs --- CHANGELOG.md | 1 + .../quests/chapters/ore_processing.snbt | 101 +++--- .../quests/chapters/questsmetallurgy.snbt | 323 +++++++++--------- .../quests/chapters/questsstoneage.snbt | 1 + .../quests/chapters/queststfc_tips.snbt | 75 +++- kubejs/assets/gtceu/lang/en_us.json | 2 + kubejs/assets/tfg/lang/en_us.json | 37 +- 7 files changed, 322 insertions(+), 218 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 95062cd45..ad564e5c8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ ### Changes - Changed pineapple yarn recipe from assembler to wiremill & coiling machine, like the other strings (#1162) @Pyritie - Lowered durability of wooden tongs @Pyritie +- Streamlined the Metallurgy Age quest chapter a bit @Pyritie ## [0.9.11] - 13.06.2025 ### New features diff --git a/config/ftbquests/quests/chapters/ore_processing.snbt b/config/ftbquests/quests/chapters/ore_processing.snbt index 75f89f6bc..8beaa52b5 100644 --- a/config/ftbquests/quests/chapters/ore_processing.snbt +++ b/config/ftbquests/quests/chapters/ore_processing.snbt @@ -48,6 +48,16 @@ ] dependency_requirement: "one_completed" description: ["{quests.ore_proc.crushed_ores.desc}"] + icon: { + Count: 1 + ForgeCaps: { + "tfc:item_heat": { + heat: 0.0f + ticks: 0L + } + } + id: "gtceu:crushed_copper_ore" + } id: "28419A1010EEE93A" subtitle: "{quests.ore_proc.crushed_ores.subtitle}" tasks: [ @@ -223,6 +233,7 @@ description: ["{quests.ore_proc.mercury.desc}"] id: "68AC3E2C9093FCFE" optional: true + shape: "heart" subtitle: "{quests.ore_proc.mercury.subtitle}" tasks: [ { @@ -273,6 +284,7 @@ description: ["{quests.ore_proc.sodium_ores.desc}"] id: "0502E478E27D4B73" optional: true + shape: "heart" subtitle: "{quests.ore_proc.sodium_ores.subtitle}" tasks: [ { @@ -303,26 +315,29 @@ ] dependency_requirement: "one_completed" description: ["{quests.ore_proc.purified_ores.desc}"] + icon: { + Count: 1 + ForgeCaps: { + "tfc:item_heat": { + heat: 0.0f + ticks: 0L + } + } + id: "create:crushed_raw_copper" + } id: "544EA7FF98FDCFB7" subtitle: "{quests.ore_proc.purified_ores.subtitle}" - tasks: [ - { - id: "4C6F60AC9C803D7B" - item: { - Count: 1 - id: "ftbfiltersystem:smart_filter" - tag: { - "ftbfiltersystem:filter": "or(item_tag(forge:purified_ores))" - } + tasks: [{ + id: "4C6F60AC9C803D7B" + item: { + Count: 1 + id: "ftbfiltersystem:smart_filter" + tag: { + "ftbfiltersystem:filter": "or(item_tag(forge:purified_ores))" } - optional_task: true - type: "item" } - { - id: "3C194AEB554DA4CA" - type: "checkmark" - } - ] + type: "item" + }] title: "{quests.ore_proc.purified_ores.title}" x: 0.5d y: -0.5d @@ -340,12 +355,6 @@ optional_task: true type: "item" } - { - id: "0373F4E380F2A0BC" - item: "gtceu:indium_concentrate_bucket" - optional_task: true - type: "item" - } { id: "246799A19B9A47B6" item: { @@ -368,8 +377,15 @@ type: "item" } { - id: "52FCA464BD827E37" - type: "checkmark" + id: "475C90F0EA16C2F9" + item: { + Count: 1 + id: "ftbfiltersystem:smart_filter" + tag: { + "ftbfiltersystem:filter": "only_one(item(gtceu:indium_concentrate_bucket)nbt(fuzzy:{fluid:{Amount:1000,FluidName:\"gtceu:indium_concentrate\"}}))" + } + } + type: "item" } ] title: "{quests.ore_proc.indium.title}" @@ -627,25 +643,30 @@ ] dependency_requirement: "one_completed" description: ["{quests.ore_proc.dust_processed.desc}"] - id: "22C1D541452D4AD4" - subtitle: "{quests.ore_proc.dust_processed.subtitle}" - tasks: [ - { - id: "3EA3BABECE52085B" - item: { - Count: 1 - id: "ftbfiltersystem:smart_filter" - tag: { - "ftbfiltersystem:filter": "or(item_tag(forge:dusts))" - } + icon: { + Count: 1 + ForgeCaps: { + "tfc:item_heat": { + heat: 0.0f + ticks: 0L } - type: "item" } - { - id: "1A1B2762EFD6C6B0" - type: "checkmark" + id: "gtceu:copper_dust" + } + id: "22C1D541452D4AD4" + size: 1.5d + subtitle: "{quests.ore_proc.dust_processed.subtitle}" + tasks: [{ + id: "3EA3BABECE52085B" + item: { + Count: 1 + id: "ftbfiltersystem:smart_filter" + tag: { + "ftbfiltersystem:filter": "or(item_tag(forge:dusts))" + } } - ] + type: "item" + }] title: "{quests.ore_proc.dust_processed.title}" x: 0.5d y: 3.5d diff --git a/config/ftbquests/quests/chapters/questsmetallurgy.snbt b/config/ftbquests/quests/chapters/questsmetallurgy.snbt index 377b568d0..fa48fa874 100644 --- a/config/ftbquests/quests/chapters/questsmetallurgy.snbt +++ b/config/ftbquests/quests/chapters/questsmetallurgy.snbt @@ -31,10 +31,21 @@ y: -34.0d } { + icon: { + Count: 1 + ForgeCaps: { + "tfc:item_heat": { + heat: 0.0f + ticks: 0L + } + } + id: "tfc:metal/lamp/blue_steel" + } id: "227B6C88FFE99435" linked_quest: "4EBABACAB444244D" + shape: "heart" x: 16.5d - y: -23.0d + y: -24.5d } { id: "19CF6D922179DFF9" @@ -58,7 +69,7 @@ }] title: "{quests.metal_age.this_is_a_bucket.title}" x: 13.5d - y: -24.5d + y: -26.0d } { dependencies: ["56CA2EB7812529C5"] @@ -82,7 +93,7 @@ ] title: "{quests.metal_age.redblu_buckets.title}" x: 16.5d - y: -24.5d + y: -26.0d } { dependencies: ["7E0239E9CC73F09F"] @@ -98,11 +109,11 @@ weak_nbt_match: true }] title: "{quests.metal_age.black_steel_anvil.title}" - x: 27.5d - y: -24.5d + x: 26.5d + y: -26.0d } { - dependencies: ["4310B619B57276ED"] + dependencies: ["5996A3A0D475B8A6"] description: ["{quests.metal_age.steel_anvil.desc}"] id: "04DE7C58F20B535A" shape: "octagon" @@ -115,11 +126,11 @@ weak_nbt_match: true }] title: "{quests.metal_age.steel_anvil.title}" - x: 27.5d + x: 26.5d y: -32.0d } { - dependencies: ["358571B6E692F198"] + dependencies: ["0A92F5C4BB6AF972"] description: ["{quests.metal_age.wrought_iron_anvil.desc}"] id: "174DA15847665CF8" shape: "octagon" @@ -263,29 +274,10 @@ y: -32.0d } { - dependencies: [ - "0A92F5C4BB6AF972" - "021D3DEEB15A3D17" - ] - dependency_requirement: "one_completed" - description: ["{quests.metal_age.weld_wrought_iron_ingots.desc}"] - id: "358571B6E692F198" - subtitle: "{quests.metal_age.weld_wrought_iron_ingots.subtitle}" - tasks: [{ - id: "05AD17F66DFE3C56" - item: "gtceu:wrought_iron_double_ingot" - type: "item" - weak_nbt_match: true - }] - title: "{quests.metal_age.weld_wrought_iron_ingots.title}" - x: 7.0d - y: -32.0d - } - { - dependencies: ["48A8E3210B2BAE1C"] description: ["{quests.metal_age.bellows.desc}"] hide_dependency_lines: true id: "021D3DEEB15A3D17" + shape: "rsquare" subtitle: "{quests.metal_age.bellows.subtitle}" tasks: [{ id: "588EB07E980386F9" @@ -297,31 +289,12 @@ y: -34.0d } { - dependencies: ["5996A3A0D475B8A6"] - dependency_requirement: "one_completed" - description: ["{quests.metal_age.weld_steel_ingots.desc}"] - id: "4310B619B57276ED" - subtitle: "{quests.metal_age.weld_steel_ingots.subtitle}" - tasks: [{ - id: "0EDB1D851E198274" - item: "gtceu:steel_double_ingot" - type: "item" - weak_nbt_match: true - }] - title: "{quests.metal_age.weld_steel_ingots.title}" - x: 25.5d - y: -32.0d - } - { - dependencies: [ - "061116CF508D54F6" - "68B7D07D57A103BE" - ] + dependencies: ["5A936E9BCF30AA3D"] dependency_requirement: "one_completed" description: ["{quests.metal_age.kaolin_clay.desc}"] id: "72F1C122FC26229C" shape: "octagon" - size: 3.0d + size: 2.0d subtitle: "{quests.metal_age.kaolin_clay.subtitle}" tasks: [{ id: "673D38EB62FFD65F" @@ -339,8 +312,8 @@ weak_nbt_match: true }] title: "{quests.metal_age.kaolin_clay.title}" - x: 13.5d - y: -36.0d + x: 14.0d + y: -33.0d } { dependencies: ["5A936E9BCF30AA3D"] @@ -349,25 +322,24 @@ icon: "tfc:ore/graphite/gabbro" id: "53E1383F12EC6765" optional: true + shape: "diamond" subtitle: "{quests.metal_age.overworld_graphite.subtitle}" tasks: [{ id: "25A552657AFA7BC2" type: "checkmark" }] title: "{quests.metal_age.overworld_graphite.title}" - x: 13.0d + x: 11.0d y: -30.5d } { - dependencies: [ - "53E1383F12EC6765" - "2DB82986FE176CD7" - ] + dependencies: ["5A936E9BCF30AA3D"] dependency_requirement: "one_completed" description: ["{quests.metal_age.graphite.desc}"] + icon: "tfc:powder/graphite" id: "31CE13462759950C" shape: "octagon" - size: 3.0d + size: 2.0d subtitle: "{quests.metal_age.graphite.subtitle}" tasks: [{ id: "6B0C9D862BFD27BC" @@ -382,14 +354,13 @@ type: "item" }] title: "{quests.metal_age.graphite.title}" - x: 13.5d - y: -28.5d + x: 14.0d + y: -31.0d } { dependencies: [ "72F1C122FC26229C" "31CE13462759950C" - "5A936E9BCF30AA3D" ] description: ["{quests.metal_age.fire_clay.desc}"] id: "2C76EE197C14B0DC" @@ -403,7 +374,7 @@ weak_nbt_match: true }] title: "{quests.metal_age.fire_clay.title}" - x: 17.5d + x: 17.0d y: -32.0d } { @@ -466,6 +437,7 @@ description: ["{quests.metal_age.beneath_kaolin.desc}"] id: "061116CF508D54F6" optional: true + shape: "diamond" subtitle: "{quests.metal_age.beneath_kaolin.subtitle}" tasks: [ { @@ -492,7 +464,7 @@ } ] title: "{quests.metal_age.beneath_kaolin.title}" - x: 14.0d + x: 12.0d y: -33.5d } { @@ -596,7 +568,7 @@ } ] title: "{quests.metal_age.fire_clay_products.title}" - x: 17.5d + x: 17.0d y: -34.0d } { @@ -666,12 +638,14 @@ }] title: "{quests.metal_age.red_blu.title}" x: 24.0d - y: -24.5d + y: -26.0d } { dependencies: ["56CA2EB7812529C5"] description: ["{quests.metal_age.red_steel_flask.desc}"] id: "30D49878F3CEB08A" + optional: true + shape: "heart" subtitle: "{quests.metal_age.red_steel_flask.subtitle}" tasks: [{ id: "7394672B4D19B0B2" @@ -680,7 +654,7 @@ }] title: "{quests.metal_age.red_steel_flask.title}" x: 16.5d - y: -26.0d + y: -27.5d } { dependencies: [ @@ -706,7 +680,7 @@ }] title: "{quests.metal_age.redblu_anvil.title}" x: 18.5d - y: -24.5d + y: -26.0d } { dependencies: ["3C173357029AB649"] @@ -750,13 +724,15 @@ type: "checkmark" }] title: "{quests.metal_age.fire_clay_ingredients.title}" - x: 13.5d + x: 11.5d y: -32.0d } { dependencies: ["5A936E9BCF30AA3D"] description: ["{quests.metal_age.beneath_graphite.desc}"] id: "2DB82986FE176CD7" + optional: true + shape: "diamond" subtitle: "{quests.metal_age.beneath_graphite.subtitle}" tasks: [ { @@ -776,7 +752,7 @@ } ] title: "{quests.metal_age.beneath_graphite.title}" - x: 14.0d + x: 12.0d y: -30.5d } { @@ -784,6 +760,8 @@ description: ["{quests.metal_age.overworld_kaolin.desc}"] icon: "tfc:plant/tree_fern" id: "68B7D07D57A103BE" + optional: true + shape: "diamond" subtitle: "{quests.metal_age.overworld_kaolin.subtitle}" tasks: [{ id: "14DF5B1544AB9BA9" @@ -791,7 +769,7 @@ type: "checkmark" }] title: "{quests.metal_age.overworld_kaolin.title}" - x: 13.0d + x: 11.0d y: -33.5d } { @@ -813,8 +791,8 @@ weak_nbt_match: true }] title: "{quests.metal_age.blast_furnace_fuel.title}" - x: 23.5d - y: -30.0d + x: 20.5d + y: -32.0d } { dependencies: ["04DE7C58F20B535A"] @@ -828,8 +806,8 @@ type: "checkmark" }] title: "{quests.metal_age.steel_goodies.title}" - x: 29.5d - y: -30.0d + x: 26.5d + y: -34.0d } { dependencies: ["52DAF93E2F3D688A"] @@ -845,8 +823,8 @@ type: "checkmark" }] title: "{quests.metal_age.black_steel_goodies.title}" - x: 25.5d - y: -22.5d + x: 26.5d + y: -23.5d } { dependencies: [ @@ -854,6 +832,16 @@ "04DE7C58F20B535A" ] description: ["{quests.metal_age.highcarb_black_steel.desc}"] + icon: { + Count: 1 + ForgeCaps: { + "tfc:item_heat": { + heat: 0.0f + ticks: 0L + } + } + id: "tfc:metal/ingot/black_steel" + } id: "7E0239E9CC73F09F" subtitle: "{quests.metal_age.highcarb_black_steel.subtitle}" tasks: [ @@ -887,12 +875,22 @@ } ] title: "{quests.metal_age.highcarb_black_steel.title}" - x: 27.5d + x: 26.5d y: -30.0d } { dependencies: ["5996A3A0D475B8A6"] description: ["{quests.metal_age.weak_steel.desc}"] + icon: { + Count: 1 + ForgeCaps: { + "tfc:item_heat": { + heat: 0.0f + ticks: 0L + } + } + id: "tfc:metal/ingot/weak_steel" + } id: "1CE0FF455668C145" subtitle: "{quests.metal_age.weak_steel.subtitle}" tasks: [ @@ -900,53 +898,60 @@ id: "543388DB123E7328" item: { Count: 1 - ForgeCaps: { - "tfc:item_heat": { - heat: 0.0f - ticks: 0L - } + id: "ftbfiltersystem:smart_filter" + tag: { + "ftbfiltersystem:filter": "or(item(gtceu:nickel_ingot)item(gtceu:nickel_dust))" } - id: "gtceu:nickel_ingot" } + title: "{quests.metal_age.weak_steel.task1}" type: "item" + weak_nbt_match: true } { count: 2L id: "7F829BA244BC77D5" item: { - Count: 2 - ForgeCaps: { - "tfc:item_heat": { - heat: 0.0f - ticks: 0L - } + Count: 1 + id: "ftbfiltersystem:smart_filter" + tag: { + "ftbfiltersystem:filter": "or(item(gtceu:steel_ingot)item(gtceu:steel_dust))" } - id: "gtceu:steel_ingot" } + title: "{quests.metal_age.weak_steel.task2}" type: "item" + weak_nbt_match: true } { id: "3271DD5653C52CAB" item: { Count: 1 - ForgeCaps: { - "tfc:item_heat": { - heat: 0.0f - ticks: 0L - } + id: "ftbfiltersystem:smart_filter" + tag: { + "ftbfiltersystem:filter": "or(item(gtceu:black_bronze_ingot)item(gtceu:black_bronze_dust))" } - id: "gtceu:black_bronze_ingot" } + title: "{quests.metal_age.weak_steel.task3}" type: "item" + weak_nbt_match: true } ] title: "{quests.metal_age.weak_steel.title}" - x: 25.5d + x: 23.5d y: -30.0d } { dependencies: ["27FF92982A24BC4E"] description: ["{quests.metal_age.highcarb_red_steel.desc}"] + icon: { + Count: 1 + ForgeCaps: { + "tfc:item_heat": { + heat: 0.0f + ticks: 0L + } + } + id: "tfc:metal/ingot/red_steel" + } id: "5088768AAA28FCBA" subtitle: "{quests.metal_age.highcarb_red_steel.subtitle}" tasks: [ @@ -981,11 +986,21 @@ ] title: "{quests.metal_age.highcarb_red_steel.title}" x: 20.5d - y: -25.5d + y: -27.0d } { dependencies: ["5792DDAA82895E67"] description: ["{quests.metal_age.weak_red_steel.desc}"] + icon: { + Count: 1 + ForgeCaps: { + "tfc:item_heat": { + heat: 0.0f + ticks: 0L + } + } + id: "tfc:metal/ingot/weak_red_steel" + } id: "27FF92982A24BC4E" subtitle: "{quests.metal_age.weak_red_steel.subtitle}" tasks: [ @@ -993,68 +1008,70 @@ id: "2A22B3EA8DC577CE" item: { Count: 1 - ForgeCaps: { - "tfc:item_heat": { - heat: 0.0f - ticks: 0L - } + id: "ftbfiltersystem:smart_filter" + tag: { + "ftbfiltersystem:filter": "or(item(create:brass_ingot)item(gtceu:brass_dust))" } - id: "create:brass_ingot" } + title: "{quests.metal_age.weak_red_steel.brass}" type: "item" } { count: 2L id: "2F0648CE3D1723DF" item: { - Count: 2 - ForgeCaps: { - "tfc:item_heat": { - heat: 0.0f - ticks: 0L - } + Count: 1 + id: "ftbfiltersystem:smart_filter" + tag: { + "ftbfiltersystem:filter": "or(item(gtceu:steel_ingot)item(gtceu:steel_dust))" } - id: "gtceu:steel_ingot" } + title: "{quests.metal_age.weak_red_steel.steel}" type: "item" } { id: "47F346E1C0F41655" item: { Count: 1 - ForgeCaps: { - "tfc:item_heat": { - heat: 0.0f - ticks: 0L - } + id: "ftbfiltersystem:smart_filter" + tag: { + "ftbfiltersystem:filter": "or(item(gtceu:rose_gold_ingot)item(gtceu:rose_gold_dust))" } - id: "gtceu:rose_gold_ingot" } + title: "{quests.metal_age.weak_red_steel.rose_gold}" type: "item" } { count: 4L id: "21434FAAA69D5BE0" item: { - Count: 4 - ForgeCaps: { - "tfc:item_heat": { - heat: 0.0f - ticks: 0L - } + Count: 1 + id: "ftbfiltersystem:smart_filter" + tag: { + "ftbfiltersystem:filter": "or(item(tfc:metal/ingot/black_steel)item(gtceu:black_steel_dust))" } - id: "tfc:metal/ingot/black_steel" } + title: "{quests.metal_age.weak_red_steel.black_steel}" type: "item" } ] title: "{quests.metal_age.weak_red_steel.title}" x: 22.0d - y: -25.5d + y: -27.0d } { dependencies: ["5792DDAA82895E67"] description: ["{quests.metal_age.weak_blu_steel.desc}"] + icon: { + Count: 1 + ForgeCaps: { + "tfc:item_heat": { + heat: 0.0f + ticks: 0L + } + } + id: "tfc:metal/ingot/weak_blue_steel" + } id: "64F8A358EC3FEF45" subtitle: "{quests.metal_age.weak_blu_steel.subtitle}" tasks: [ @@ -1062,68 +1079,70 @@ count: 2L id: "5331A323780B4B11" item: { - Count: 2 - ForgeCaps: { - "tfc:item_heat": { - heat: 0.0f - ticks: 0L - } + Count: 1 + id: "ftbfiltersystem:smart_filter" + tag: { + "ftbfiltersystem:filter": "or(item(gtceu:steel_ingot)item(gtceu:steel_dust))" } - id: "gtceu:steel_ingot" } + title: "{quests.metal_age.weak_blue_steel.steel}" type: "item" } { count: 4L id: "2809FD951B82C54F" item: { - Count: 4 - ForgeCaps: { - "tfc:item_heat": { - heat: 0.0f - ticks: 0L - } + Count: 1 + id: "ftbfiltersystem:smart_filter" + tag: { + "ftbfiltersystem:filter": "or(item(tfc:metal/ingot/black_steel)item(gtceu:black_steel_dust))" } - id: "tfc:metal/ingot/black_steel" } + title: "{quests.metal_age.weak_blue_steel.black_steel}" type: "item" } { id: "401EC1A9FBC759B8" item: { Count: 1 - ForgeCaps: { - "tfc:item_heat": { - heat: 0.0f - ticks: 0L - } + id: "ftbfiltersystem:smart_filter" + tag: { + "ftbfiltersystem:filter": "or(item(gtceu:bismuth_bronze_ingot)item(gtceu:bismuth_bronze_dust))" } - id: "gtceu:bismuth_bronze_ingot" } + title: "{quests.metal_age.weak_blue_steel.bismuth_bronze}" type: "item" } { id: "7350ECE723ABE8F4" item: { Count: 1 - ForgeCaps: { - "tfc:item_heat": { - heat: 0.0f - ticks: 0L - } + id: "ftbfiltersystem:smart_filter" + tag: { + "ftbfiltersystem:filter": "or(item(gtceu:sterling_silver_ingot)item(gtceu:sterling_silver_dust))" } - id: "gtceu:sterling_silver_ingot" } + title: "{quests.metal_age.weak_blue_steel.sterling_silver}" type: "item" } ] title: "{quests.metal_age.weak_blu_steel.title}" x: 22.0d - y: -23.5d + y: -25.0d } { dependencies: ["64F8A358EC3FEF45"] description: ["{quests.metal_age.highcarb_blu_steel.desc}"] + icon: { + Count: 1 + ForgeCaps: { + "tfc:item_heat": { + heat: 0.0f + ticks: 0L + } + } + id: "tfc:metal/ingot/blue_steel" + } id: "6D04BAC5B215F90F" subtitle: "{quests.metal_age.highcarb_blu_steel.subtitle}" tasks: [ @@ -1158,7 +1177,7 @@ ] title: "{quests.metal_age.highcarb_blu_steel.title}" x: 20.5d - y: -23.5d + y: -25.0d } { dependencies: ["3C173357029AB649"] diff --git a/config/ftbquests/quests/chapters/questsstoneage.snbt b/config/ftbquests/quests/chapters/questsstoneage.snbt index eee6df727..bc76b880a 100644 --- a/config/ftbquests/quests/chapters/questsstoneage.snbt +++ b/config/ftbquests/quests/chapters/questsstoneage.snbt @@ -684,6 +684,7 @@ tasks: [{ id: "5A6EF9EBF232601C" item: "gtceu:copper_double_ingot" + match_nbt: false type: "item" weak_nbt_match: true }] diff --git a/config/ftbquests/quests/chapters/queststfc_tips.snbt b/config/ftbquests/quests/chapters/queststfc_tips.snbt index a325d9661..2e0ca4253 100644 --- a/config/ftbquests/quests/chapters/queststfc_tips.snbt +++ b/config/ftbquests/quests/chapters/queststfc_tips.snbt @@ -1602,12 +1602,26 @@ ] dependency_requirement: "one_completed" description: ["{quests.tfg_tips.passive_preservation.desc}"] + disable_toast: true + icon: { + Count: 1 + ForgeCaps: { + Parent: { + heat: 0.0f + ticks: 0L + } + } + id: "tfc:ceramic/vessel" + tag: { } + } id: "13F7066858E923FF" subtitle: "{quests.tfg_tips.passive_preservation.subtitle}" tasks: [{ - id: "54AAB9886964A160" - title: "{quests.tasktype.checkmark}" - type: "checkmark" + dimension: "minecraft:overworld" + icon: "gtceu:overworld_marker" + id: "5BAF5F5343C3E42A" + title: "{quests.stone_age.temperature.task}" + type: "dimension" }] title: "{quests.tfg_tips.passive_preservation.title}" x: 6.5d @@ -2236,10 +2250,7 @@ y: 9.5d } { - dependencies: [ - "2D959136A5FC5F46" - "56CA2EB7812529C5" - ] + dependencies: ["2D959136A5FC5F46"] description: ["{quests.tfg_tips.lamps.desc}"] id: "037CDA933FBE2CBE" subtitle: "{quests.tfg_tips.lamps.subtitle}" @@ -2277,8 +2288,8 @@ } ] title: "{quests.tfg_tips.lamps.title}" - x: -5.0d - y: 11.0d + x: -5.5d + y: 11.5d } { dependencies: [ @@ -2286,6 +2297,16 @@ "56CA2EB7812529C5" ] description: ["{quests.tfg_tips.lava_lamp.desc}"] + icon: { + Count: 1 + ForgeCaps: { + "tfc:item_heat": { + heat: 0.0f + ticks: 0L + } + } + id: "tfc:metal/lamp/blue_steel" + } id: "4EBABACAB444244D" optional: true shape: "heart" @@ -2312,8 +2333,8 @@ } ] title: "{quests.tfg_tips.lava_lamp.title}" - x: -5.0d - y: 12.5d + x: -5.5d + y: 13.0d } { dependencies: ["037CDA933FBE2CBE"] @@ -2333,8 +2354,8 @@ type: "item" }] title: "{quests.tfg_tips.creosote.title}" - x: -6.0d - y: 12.0d + x: -6.5d + y: 12.5d } { dependencies: ["037CDA933FBE2CBE"] @@ -2354,8 +2375,8 @@ type: "item" }] title: "{quests.tfg_tips.olive_oil.title}" - x: -4.0d - y: 12.0d + x: -4.5d + y: 12.5d } { dependencies: ["2D959136A5FC5F46"] @@ -3462,8 +3483,8 @@ type: "item" }] title: "{quests.tfg_tips.tallow.title}" - x: -6.5d - y: 11.0d + x: -7.0d + y: 11.5d } { dependencies: ["150B7C5CD152E1BA"] @@ -5376,6 +5397,26 @@ x: 7.5d y: -18.0d } + { + dependencies: ["037CDA933FBE2CBE"] + description: ["{quests.tfg_tips.glowstone_lamp.desc}"] + id: "61F58B402F1AE40B" + subtitle: "{quests.tfg_tips.glowstone_lamp.subtitle}" + tasks: [{ + id: "71D52011F8BE66F0" + item: { + Count: 1 + id: "ftbfiltersystem:smart_filter" + tag: { + "ftbfiltersystem:filter": "only_one(item(gtceu:glowstone_bucket)nbt(fuzzy:{fluid:{Amount:1000,FluidName:\"gtceu:glowstone\"}}))" + } + } + type: "item" + }] + title: "{quests.tfg_tips.glowstone_lamp.title}" + x: -6.5d + y: 10.5d + } ] subtitle: ["{quests.tfg_tips.subtitle}"] title: "{quests.tfg_tips}" diff --git a/kubejs/assets/gtceu/lang/en_us.json b/kubejs/assets/gtceu/lang/en_us.json index 111f851a5..7344697aa 100644 --- a/kubejs/assets/gtceu/lang/en_us.json +++ b/kubejs/assets/gtceu/lang/en_us.json @@ -15,6 +15,8 @@ "gtceu.end_dome": "Enderarium", "gtceu.greenhouse": "Electric Greenhouse", "gtceu.steam_bloomery": "Steam Bloomery", + "gtceu.food_oven": "Food Oven", + "gtceu.food_processor": "Food Processor", "item.gtceu.tiny_wood_dust": "Tiny Pile of Softwood Pulp", "item.gtceu.small_wood_dust": "Small Pile of Softwood Pulp", "item.gtceu.wood_dust": "Softwood Pulp", diff --git a/kubejs/assets/tfg/lang/en_us.json b/kubejs/assets/tfg/lang/en_us.json index f0a59c999..9d072c9fe 100644 --- a/kubejs/assets/tfg/lang/en_us.json +++ b/kubejs/assets/tfg/lang/en_us.json @@ -167,6 +167,19 @@ "block.tfg.mv_aqueous_accumulator": "§bAdvanced Aqueous Accumulator§r", "block.tfg.hv_aqueous_accumulator": "§6Advanced Aqueous Accumulator II§r", "block.tfg.ev_aqueous_accumulator": "§5Advanced Aqueous Accumulator III§r", + "block.tfg.electric_greenhouse": "Electric Greenhouse", + "block.tfg.lv_food_processor": "Basic Food Processor", + "block.tfg.mv_food_processor": "§bAdvanced Food Processor§r", + "block.tfg.hv_food_processor": "§6Advanced Food Processor II§r", + "block.tfg.ev_food_processor": "§5Advanced Food Processor III§r", + "block.tfg.lv_food_oven": "Basic Electric Oven", + "block.tfg.mv_food_oven": "§bAdvanced Electric Oven§r", + "block.tfg.hv_food_oven": "§6Advanced Electric Oven II§r", + "block.tfg.ev_food_oven": "§5Advanced Electric Oven III§r", + "block.tfg.lv_food_refrigerator": "Basic Refrigerator", + "block.tfg.mv_food_refrigerator": "§bAdvanced Refrigerator", + "block.tfg.hv_food_refrigerator": "§6Advanced Refrigerator II§r", + "block.tfg.ev_food_refrigerator": "§5Advanced Refrigerator III§r", "item.tfg.antipoison_pill": "Antipoison Pill", "item.tfg.haste_pill": "Haste Pill", "item.tfg.night_vision_pill": "Night Vision Pill", @@ -287,6 +300,7 @@ "material.gtceu.thermochemically_treated_hardwood": "Thermochemically Treated Hardwood", "material.gtceu.hardwood": "Hardwood", "tfg.disabled_portal": "Portal magic seems to be blocked by an unknown force, try reaching another dimension by going down or up", + "tfg.tooltip.food_trait.refrigerating": "§9Refrigerating", "item.treetap.tap": "Deprecated Item, Craft to Upgrade", "item.gtceu.zinc_ingot": "Deprecated Item, Craft to Upgrade", "item.gtceu.brass_ingot": "Deprecated Item, Craft to Upgrade", @@ -1215,9 +1229,6 @@ "quests.metal_age.mining.title": "Mining in the Metallurgy Age", "quests.metal_age.mining.subtitle": "ROCK AND STONE!", "quests.metal_age.mining.desc": "Extracting valuable resources from the ground is a major part of this modpack, and the Metallurgy Age is no exception! You will consume a &llot&r of metal to progress, and one way to mine a lot of it at once is with a Mining Hammer! This is a tool that can mine blocks in a 3x3x1 area at the cost of a slower mining speed. You can also hold sneak to break single blocks at a time.", - "quests.metal_age.weld_wrought_iron_ingots.title": "Welding Wrought Iron", - "quests.metal_age.weld_wrought_iron_ingots.subtitle": "CLANG CLANG CLANG", - "quests.metal_age.weld_wrought_iron_ingots.desc": "Obtain at least 14 Ingots of Wrought Iron, then weld them together in a Bronze Anvil. Careful you don't melt your Wrought Iron, otherwise it will turn back into Cast Iron and you'll have to run it through the Bloomery again!", "quests.metal_age.bellows.title": "Bellows", "quests.metal_age.bellows.subtitle": "Higher temperatures can be reached, at a small price.", "quests.metal_age.bellows.desc": "The Bellows is a device that can force extra air into a fire or forge in front of it, allowing the heat produced by the fuel inside to reach higher temperatures than usual, at the cost of fuel duration.\n\nThese higher temperatures are required to fire pottery with charcoal or melt certain metals.\n\nCoal and Coke can also reach higher temperatures without it.", @@ -1276,9 +1287,6 @@ "quests.metal_age.blast_furnace.title": "Blast Furnace", "quests.metal_age.blast_furnace.subtitle": "Then I started Blastin'", "quests.metal_age.blast_furnace.desc": "The Blast Furnace is a multiblock structure that allows you to create Pig Iron. Placing a combination of Iron, Flux and fuel (see the adjacent quest) inside the Blast Furnace produces Pig Iron, which can be worked into Steel.\n\nIn order for the Blast Furnace to reach its required high temperatures, it will need its own Bellows, used to force air through a Tuyere which you place inside the blast furnace.\n\nThe Field Guide contains an entry on how the Blast Furnace works and how to build one.", - "quests.metal_age.weld_steel_ingots.title": "Welding Steel", - "quests.metal_age.weld_steel_ingots.subtitle": "Again?", - "quests.metal_age.weld_steel_ingots.desc": "You know the drill by this point. Create 14 Steel Ingots, then weld them to get 7 Double Steel Ingots. We'll stop reminding you about this now.\n\nDid you know that the Helve Hammer can also process your pig iron into steel?", "quests.metal_age.steel_anvil.title": "T4 Anvil: Steel", "quests.metal_age.steel_anvil.subtitle": "A huge leap from wrought iron", "quests.metal_age.steel_anvil.desc": "With the Steel Anvil, you'll be able to work Steel Ingots into different forms.\n\nSteel tools and equipment have a significant boost over their bronze and wrought iron counterparts, so they're worth making if your existing ones are about to break. You'll be needing to create a lot of alloys soon, so some new mining equipment would be a wise investment.", @@ -1288,6 +1296,9 @@ "quests.metal_age.weak_steel.title": "Weak Steel Ingredients", "quests.metal_age.weak_steel.subtitle": "Hope you like math", "quests.metal_age.weak_steel.desc": "Weak Steel is one part of the necessary metals to create Black Steel. You can alloy it with 2 parts Steel, 1 part Nickel and 1 part Black Bronze.\n\nYou can check the liquid weak steel's recipe for more precise alloying percentage rates.", + "quests.metal_age.weak_steel.task1": "1 Part Nickel", + "quests.metal_age.weak_steel.task2": "2 Parts Steel", + "quests.metal_age.weak_steel.task3": "1 Part Black Bronze", "quests.metal_age.highcarb_black_steel.title": "Black Steel Ingredients", "quests.metal_age.highcarb_black_steel.subtitle": "Conservation of matter does not apply", "quests.metal_age.highcarb_black_steel.desc": "The final two anvils are made out of complex alloys that will require a lot of metal to be created. Weak Steel and Pig Iron can be welded to create High Carbon Black Steel, which can then be worked on an anvil into Black Steel.", @@ -1303,15 +1314,23 @@ "quests.metal_age.weak_red_steel.title": "Weak Red Steel Ingredients", "quests.metal_age.weak_red_steel.subtitle": "This is getting a little ridiculous", "quests.metal_age.weak_red_steel.desc": "Like before, Weak Red Steel is the first step of Red Steel's creation. Its alloy is made from 4 parts Black Steel, 2 parts Steel, 1 part Brass, and 1 part Rose Gold.\n\nYou can check the liquid Weak Red Steel's recipe for more precise alloying percentage rates.", + "quests.metal_age.weak_red_steel.steel": "2 Parts Steel", + "quests.metal_age.weak_red_steel.black_steel": "4 Parts Black Steel", + "quests.metal_age.weak_red_steel.brass": "1 Part Brass", + "quests.metal_age.weak_red_steel.rose_gold": "1 Part Rose Gold", "quests.metal_age.weak_blu_steel.title": "Weak Blue Steel Ingredients", "quests.metal_age.weak_blu_steel.subtitle": "This is getting out of hand.", - "quests.metal_age.weak_blu_steel.desc": "Like before, Weak Blue Steel is the first step of Blue Steel's creation. Its alloy is made from 4 parts Black Steel, 2 parts Steel, 1 part Bismuth Bronze, and 1 part Sterling Silver.\n\bYou can check the liquid Weak Blue Steel's recipe for more precise alloying percentage rates.", + "quests.metal_age.weak_blu_steel.desc": "Like before, Weak Blue Steel is the first step of Blue Steel's creation. Its alloy is made from 4 parts Black Steel, 2 parts Steel, 1 part Bismuth Bronze, and 1 part Sterling Silver.\n\nYou can check the liquid Weak Blue Steel's recipe for more precise alloying percentage rates.", + "quests.metal_age.weak_blue_steel.steel": "2 Parts Steel", + "quests.metal_age.weak_blue_steel.black_steel": "4 Parts Black Steel", + "quests.metal_age.weak_blue_steel.sterling_silver": "1 Part Sterling Silver", + "quests.metal_age.weak_blue_steel.bismuth_bronze": "1 Part Bismuth Bronze", "quests.metal_age.highcarb_red_steel.title": "Red Steel Ingredients", "quests.metal_age.highcarb_red_steel.subtitle": "Could deleting matter like this power a nuclear bomb?", "quests.metal_age.highcarb_red_steel.desc": "Red Steel first starts as High Carbon Red Steel, which is made by welding Weak Red Steel and Black Steel. It needs to be worked on the Anvil to turn it into Red Steel", "quests.metal_age.highcarb_blu_steel.title": "Blue Steel Ingredients", "quests.metal_age.highcarb_blu_steel.subtitle": "Lavoisier is rolling in his grave", - "quests.metal_age.highcarb_blu_steel.desc": "Blue Steel first starts as High Carbon Blue Steel, whcih is made by welding Weak Blue Steel and Black Steel. It needs to be worked on the Anvil to turn it into Blue Steel", + "quests.metal_age.highcarb_blu_steel.desc": "Blue Steel first starts as High Carbon Blue Steel, which is made by welding Weak Blue Steel and Black Steel. It needs to be worked on the Anvil to turn it into Blue Steel", "quests.metal_age.redblu_anvil.title": "T6 Anvil: Red or Blue Steel", "quests.metal_age.redblu_anvil.subtitle": "It's over", "quests.metal_age.redblu_anvil.desc": "The final tier of Anvil! With the Tier 6 Anvil you'll be able to work both Red and Blue Steel Ingots into different items.\n\nThis marks the end of TerraFirmaCraft's progression. Now it's time to finish the Industrial Age and create your very first Low Voltage circuitry.", @@ -1538,7 +1557,7 @@ "quests.steam_age.centrifuge.desc": "Ore processing will always be an important part of this modpack, and this machine is another (optional) part of that. By following a different route of ore processing steps (check the Ore Processing Diagram tab in JEI), you can use this centrifuge to get some bonus byproducts out of your ores! The next upgrade to your ores won't be until the LV Thermal Centrifuge, so whether or not this is a worthwhile investment is up to you.", "quests.steam_age.steam_engine.title": "Steam Engine", "quests.steam_age.steam_engine.subtitle": "Time for some real steam power", - "quests.steam_age.steam_engine.desc": "Water wheels and windmills not cutting it any more? It wouldn't be a steam age without a proper steam engine! Each steam engine can output a whole 512 SU, giving you much more power to play with.\n\nBlaze Burners can be crafted without leaving your house, and you can use a Mechanical Arm to automatically feed them solid fuel, or liquid fuel in a bucket. Coal Gems and Coke can also be used to superheat them.", + "quests.steam_age.steam_engine.desc": "Water wheels and windmills not cutting it any more? It wouldn't be a steam age without a proper steam engine! Each steam engine can output a whole 256 SU, giving you much more power to play with.\n\nBlaze Burners can be crafted without leaving your house, and you can use a Mechanical Arm to automatically feed them solid fuel, or liquid fuel in a bucket (such as creosote). Coal Gems, Anthracite, and Coke can also be used to superheat them.", "quests.steam_age.deployers.title": "Deployers", "quests.steam_age.deployers.subtitle": "Primitive Assembly Line", "quests.steam_age.deployers.desc": "While you could use a single deployer for the rest your time in this chapter, we &3really&r don't recommend it. Setting up a line of deployers along a belt will save heaps of time and sanity, and it's not like you'll be wasting materials either, because you can always reuse them to upgrade your tree farm later.\n\nThese will also make electron tubes significantly cheaper!", From 08b2a3344373b71ef59145c692c54c5980b70cd0 Mon Sep 17 00:00:00 2001 From: Pyritie Date: Mon, 16 Jun 2025 18:48:34 +0100 Subject: [PATCH 22/23] fixed ice capsule recipe not filling it up completely --- kubejs/server_scripts/tfclunchbox/recipes.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/kubejs/server_scripts/tfclunchbox/recipes.js b/kubejs/server_scripts/tfclunchbox/recipes.js index 0654a12b2..badc96045 100644 --- a/kubejs/server_scripts/tfclunchbox/recipes.js +++ b/kubejs/server_scripts/tfclunchbox/recipes.js @@ -47,13 +47,13 @@ function registerTFCLunchBoxRecipes(event) { event.recipes.gtceu.canner('tfclunchbox:fill_capsule_with_ice') .itemInputs('tfclunchbox:universal_capsule') .inputFluids(Fluid.of('gtceu:ice', 45 * 144)) - .itemOutputs(Item.of('tfclunchbox:universal_capsule', '{Durability:500}').withName(Text.translate('item.tfclunchbox.universal_capsule.filled'))) + .itemOutputs(Item.of('tfclunchbox:universal_capsule', '{Durability:1000}').withName(Text.translate('item.tfclunchbox.universal_capsule.filled'))) .duration(100) .EUt(GTValues.VA[GTValues.LV]) event.recipes.gtceu.canner('tfclunchbox:fill_capsule_with_ice_solid') .itemInputs('tfclunchbox:universal_capsule', '5x minecraft:packed_ice') - .itemOutputs(Item.of('tfclunchbox:universal_capsule', '{Durability:500}').withName(Text.translate('item.tfclunchbox.universal_capsule.filled'))) + .itemOutputs(Item.of('tfclunchbox:universal_capsule', '{Durability:1000}').withName(Text.translate('item.tfclunchbox.universal_capsule.filled'))) .duration(100) .EUt(GTValues.VA[GTValues.LV]) } From dff7fd61965a00b55815e2e5892a09d8643df1a2 Mon Sep 17 00:00:00 2001 From: Pyritie Date: Mon, 16 Jun 2025 20:32:09 +0100 Subject: [PATCH 23/23] material and rose quartz stuff --- kubejs/server_scripts/create/recipes.js | 1 + kubejs/startup_scripts/ae2/tag_prefixes.js | 6 +++--- kubejs/startup_scripts/create/constants.js | 4 ---- 3 files changed, 4 insertions(+), 7 deletions(-) diff --git a/kubejs/server_scripts/create/recipes.js b/kubejs/server_scripts/create/recipes.js index 684b6ff15..995c04cf4 100644 --- a/kubejs/server_scripts/create/recipes.js +++ b/kubejs/server_scripts/create/recipes.js @@ -42,6 +42,7 @@ const registerCreateRecipes = (event) => { }) event.remove({ type: 'minecraft:stonecutting', input: 'create:andesite_alloy' }) + event.remove({ type: 'minecraft:stonecutting', input: 'create:rose_quartz' }) // Train Station event.shapeless('2x create:track_station', [ diff --git a/kubejs/startup_scripts/ae2/tag_prefixes.js b/kubejs/startup_scripts/ae2/tag_prefixes.js index 2c03f700b..31a6e4325 100644 --- a/kubejs/startup_scripts/ae2/tag_prefixes.js +++ b/kubejs/startup_scripts/ae2/tag_prefixes.js @@ -1,15 +1,15 @@ // priority: 0 const registerAE2TagPrefixes = (event) => { - const $AE_BLOCKS = Java.loadClass('appeng.core.definitions.AEBlocks'); const $AE_ITEMS = Java.loadClass('appeng.core.definitions.AEItems'); const Fluix = GTCEuAPI.materialManager.getMaterial('tfg:fluix') - TagPrefix.block.setIgnored(Fluix, $AE_BLOCKS.FLUIX_BLOCK); + // Blocks have to be handled in java because ae2 is weird + TagPrefix.dust.setIgnored(Fluix, $AE_ITEMS.FLUIX_DUST); TagPrefix.gem.setIgnored(Fluix, $AE_ITEMS.FLUIX_CRYSTAL); -; + TagPrefix.dust.setIgnored(GTMaterials.CertusQuartz, $AE_ITEMS.CERTUS_QUARTZ_DUST); TagPrefix.gem.setIgnored(GTMaterials.CertusQuartz, $AE_ITEMS.CERTUS_QUARTZ_CRYSTAL); diff --git a/kubejs/startup_scripts/create/constants.js b/kubejs/startup_scripts/create/constants.js index c78f93e53..b534cfb44 100644 --- a/kubejs/startup_scripts/create/constants.js +++ b/kubejs/startup_scripts/create/constants.js @@ -188,9 +188,6 @@ global.CREATE_DISABLED_ITEMS = [ // Blocks 'create:andesite_alloy_block', 'create:experience_block', - 'create:rose_quartz_block', - 'create:rose_quartz_tiles', - 'create:small_rose_quartz_tiles', // Other 'create:honey_bucket', @@ -205,7 +202,6 @@ global.CREATE_DISABLED_ITEMS = [ 'create:blaze_cake_base', 'create:sturdy_sheet', 'create:polished_rose_quartz', - 'create:rose_quartz', 'create:cinder_flour', 'create:dough', 'create:bar_of_chocolate',