From 33088aa174b900219611a52032da7b753793eb4d Mon Sep 17 00:00:00 2001 From: Pyritie Date: Tue, 10 Jun 2025 20:13:03 +0100 Subject: [PATCH 01/14] 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/14] 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/14] 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/14] 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/14] 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/14] 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/14] 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/14] 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/14] 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/14] 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 787a1afe44cdbddf642daa31068cf34d123f5cb8 Mon Sep 17 00:00:00 2001 From: Redeix Date: Mon, 16 Jun 2025 00:33:37 -0500 Subject: [PATCH 11/14] - Food changes --- .../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 e60109bdc909f9045d7f2f5fc7b4a7e969676b26 Mon Sep 17 00:00:00 2001 From: Redeix Date: Mon, 16 Jun 2025 01:05:29 -0500 Subject: [PATCH 12/14] - Updated texture for aqueous accumulator --- .../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 13/14] - 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 2e5295614c4236501a929f6d0bcdace045fc77c2 Mon Sep 17 00:00:00 2001 From: Redeix <59435925+Redeix@users.noreply.github.com> Date: Tue, 17 Jun 2025 00:56:25 -0500 Subject: [PATCH 14/14] Revert "merge" --- CHANGELOG.md | 6 - .../quests/chapters/lv__low_voltage.snbt | 2 +- .../quests/chapters/ore_processing.snbt | 99 ++- .../quests/chapters/questsmetallurgy.snbt | 323 +++++---- .../quests/chapters/questsstoneage.snbt | 1 - .../quests/chapters/queststfc_tips.snbt | 75 +-- config/tfchotornot-common.toml | 2 +- kubejs/assets/gtceu/lang/en_us.json | 2 - .../machines/food_oven/overlay_front.png | Bin 248 -> 0 bytes .../food_oven/overlay_front_active.png | Bin 292 -> 0 bytes .../overlay_front_active_emissive.png | Bin 241 -> 0 bytes .../food_oven/overlay_front_emissive.png | Bin 149 -> 0 bytes .../machines/food_processor/overlay_back.png | Bin 75 -> 0 bytes .../food_processor/overlay_back_active.png | Bin 75 -> 0 bytes .../overlay_back_active.png.mcmeta | 5 - .../machines/food_processor/overlay_front.png | Bin 380 -> 0 bytes .../food_processor/overlay_front_active.png | Bin 919 -> 0 bytes .../overlay_front_active.png.mcmeta | 5 - .../overlay_front_active_emissive.png | Bin 659 -> 0 bytes .../overlay_front_active_emissive.png.mcmeta | 5 - .../food_processor/overlay_front_emissive.png | Bin 149 -> 0 bytes .../machines/food_processor/overlay_side.png | Bin 334 -> 0 bytes .../food_processor/overlay_side_active.png | Bin 683 -> 0 bytes .../overlay_side_active.png.mcmeta | 5 - .../machines/food_processor/overlay_top.png | Bin 348 -> 0 bytes .../food_processor/overlay_top_active.png | Bin 542 -> 0 bytes .../overlay_top_active.png.mcmeta | 5 - .../food_refrigerator/overlay_back.png | Bin 592 -> 0 bytes .../food_refrigerator/overlay_back_active.png | Bin 504 -> 0 bytes .../overlay_back_active.png.mcmeta | 5 - .../overlay_back_active_emissive.png | Bin 184 -> 0 bytes .../overlay_back_active_emissive.png.mcmeta | 5 - .../overlay_back_active_emissive_ref.gif | Bin 785 -> 0 bytes .../overlay_back_active_ref.gif | Bin 4697 -> 0 bytes .../food_refrigerator/overlay_bottom.png | Bin 75 -> 0 bytes .../food_refrigerator/overlay_front.png | Bin 350 -> 0 bytes .../overlay_front_active.png | Bin 364 -> 0 bytes .../food_refrigerator/overlay_side.png | Bin 361 -> 0 bytes .../food_refrigerator/overlay_top.png | Bin 250 -> 0 bytes .../tfc/textures/block/metal/block/zinc.png | Bin 309 -> 0 bytes .../tfc/textures/block/metal/smooth/zinc.png | Bin 313 -> 0 bytes kubejs/assets/tfg/lang/en_us.json | 37 +- kubejs/client_scripts/tooltips.js | 5 +- kubejs/server_scripts/create/recipes.js | 1 - kubejs/server_scripts/firmalife/recipes.js | 311 ++++++++- .../server_scripts/greate/recipes.removes.js | 1 - .../gregtech/recipes.machines.js | 12 + .../gregtech/recipes.materials.js | 6 +- kubejs/server_scripts/minecraft/recipes.js | 1 - kubejs/server_scripts/minecraft/tags.js | 1 - kubejs/server_scripts/tfc/data.js | 1 - kubejs/server_scripts/tfc/recipes.js | 47 ++ kubejs/server_scripts/tfc/recipes.machines.js | 165 ++++- .../server_scripts/tfc/recipes.materials.js | 9 - kubejs/server_scripts/tfclunchbox/recipes.js | 4 +- kubejs/server_scripts/tfg/recipes.food.js | 620 ------------------ kubejs/server_scripts/tfg/recipes.js | 1 - kubejs/server_scripts/tfg/recipes.rocks.js | 2 +- .../vintage_improvements/recipes.js | 11 - kubejs/startup_scripts/ae2/tag_prefixes.js | 6 +- kubejs/startup_scripts/create/constants.js | 4 + kubejs/startup_scripts/firmalife/constants.js | 47 +- kubejs/startup_scripts/gtceu/machines.js | 62 ++ kubejs/startup_scripts/gtceu/materials.js | 2 +- kubejs/startup_scripts/gtceu/recipe_types.js | 7 + kubejs/startup_scripts/tfc/constants.js | 77 +-- 66 files changed, 898 insertions(+), 1087 deletions(-) delete mode 100644 kubejs/assets/gtceu/textures/block/machines/food_oven/overlay_front.png delete mode 100644 kubejs/assets/gtceu/textures/block/machines/food_oven/overlay_front_active.png delete mode 100644 kubejs/assets/gtceu/textures/block/machines/food_oven/overlay_front_active_emissive.png delete mode 100644 kubejs/assets/gtceu/textures/block/machines/food_oven/overlay_front_emissive.png delete mode 100644 kubejs/assets/gtceu/textures/block/machines/food_processor/overlay_back.png delete mode 100644 kubejs/assets/gtceu/textures/block/machines/food_processor/overlay_back_active.png delete mode 100644 kubejs/assets/gtceu/textures/block/machines/food_processor/overlay_back_active.png.mcmeta delete mode 100644 kubejs/assets/gtceu/textures/block/machines/food_processor/overlay_front.png delete mode 100644 kubejs/assets/gtceu/textures/block/machines/food_processor/overlay_front_active.png delete mode 100644 kubejs/assets/gtceu/textures/block/machines/food_processor/overlay_front_active.png.mcmeta delete mode 100644 kubejs/assets/gtceu/textures/block/machines/food_processor/overlay_front_active_emissive.png delete mode 100644 kubejs/assets/gtceu/textures/block/machines/food_processor/overlay_front_active_emissive.png.mcmeta delete mode 100644 kubejs/assets/gtceu/textures/block/machines/food_processor/overlay_front_emissive.png delete mode 100644 kubejs/assets/gtceu/textures/block/machines/food_processor/overlay_side.png delete mode 100644 kubejs/assets/gtceu/textures/block/machines/food_processor/overlay_side_active.png delete mode 100644 kubejs/assets/gtceu/textures/block/machines/food_processor/overlay_side_active.png.mcmeta delete mode 100644 kubejs/assets/gtceu/textures/block/machines/food_processor/overlay_top.png delete mode 100644 kubejs/assets/gtceu/textures/block/machines/food_processor/overlay_top_active.png delete mode 100644 kubejs/assets/gtceu/textures/block/machines/food_processor/overlay_top_active.png.mcmeta delete mode 100644 kubejs/assets/gtceu/textures/block/machines/food_refrigerator/overlay_back.png delete mode 100644 kubejs/assets/gtceu/textures/block/machines/food_refrigerator/overlay_back_active.png delete mode 100644 kubejs/assets/gtceu/textures/block/machines/food_refrigerator/overlay_back_active.png.mcmeta delete mode 100644 kubejs/assets/gtceu/textures/block/machines/food_refrigerator/overlay_back_active_emissive.png delete mode 100644 kubejs/assets/gtceu/textures/block/machines/food_refrigerator/overlay_back_active_emissive.png.mcmeta delete mode 100644 kubejs/assets/gtceu/textures/block/machines/food_refrigerator/overlay_back_active_emissive_ref.gif delete mode 100644 kubejs/assets/gtceu/textures/block/machines/food_refrigerator/overlay_back_active_ref.gif delete mode 100644 kubejs/assets/gtceu/textures/block/machines/food_refrigerator/overlay_bottom.png delete mode 100644 kubejs/assets/gtceu/textures/block/machines/food_refrigerator/overlay_front.png delete mode 100644 kubejs/assets/gtceu/textures/block/machines/food_refrigerator/overlay_front_active.png delete mode 100644 kubejs/assets/gtceu/textures/block/machines/food_refrigerator/overlay_side.png delete mode 100644 kubejs/assets/gtceu/textures/block/machines/food_refrigerator/overlay_top.png delete mode 100644 kubejs/assets/tfc/textures/block/metal/block/zinc.png delete mode 100644 kubejs/assets/tfc/textures/block/metal/smooth/zinc.png delete mode 100644 kubejs/server_scripts/tfg/recipes.food.js diff --git a/CHANGELOG.md b/CHANGELOG.md index ad564e5c8..ebb94f903 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,13 +3,7 @@ ## [Unreleased] ### New features ### 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 -- Streamlined the Metallurgy Age quest chapter a bit @Pyritie ## [0.9.11] - 13.06.2025 ### New features diff --git a/config/ftbquests/quests/chapters/lv__low_voltage.snbt b/config/ftbquests/quests/chapters/lv__low_voltage.snbt index 99169a273..425ba06f9 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: "tfg:electric_greenhouse" + item: "gtceu:greenhouse" type: "item" }] title: "{quests.low_voltage.lv_greenhouse.title}" diff --git a/config/ftbquests/quests/chapters/ore_processing.snbt b/config/ftbquests/quests/chapters/ore_processing.snbt index 8beaa52b5..75f89f6bc 100644 --- a/config/ftbquests/quests/chapters/ore_processing.snbt +++ b/config/ftbquests/quests/chapters/ore_processing.snbt @@ -48,16 +48,6 @@ ] 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: [ @@ -233,7 +223,6 @@ description: ["{quests.ore_proc.mercury.desc}"] id: "68AC3E2C9093FCFE" optional: true - shape: "heart" subtitle: "{quests.ore_proc.mercury.subtitle}" tasks: [ { @@ -284,7 +273,6 @@ description: ["{quests.ore_proc.sodium_ores.desc}"] id: "0502E478E27D4B73" optional: true - shape: "heart" subtitle: "{quests.ore_proc.sodium_ores.subtitle}" tasks: [ { @@ -315,29 +303,26 @@ ] 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" } - type: "item" - }] + { + id: "3C194AEB554DA4CA" + type: "checkmark" + } + ] title: "{quests.ore_proc.purified_ores.title}" x: 0.5d y: -0.5d @@ -355,6 +340,12 @@ optional_task: true type: "item" } + { + id: "0373F4E380F2A0BC" + item: "gtceu:indium_concentrate_bucket" + optional_task: true + type: "item" + } { id: "246799A19B9A47B6" item: { @@ -377,15 +368,8 @@ type: "item" } { - 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" + id: "52FCA464BD827E37" + type: "checkmark" } ] title: "{quests.ore_proc.indium.title}" @@ -643,30 +627,25 @@ ] dependency_requirement: "one_completed" description: ["{quests.ore_proc.dust_processed.desc}"] - icon: { - Count: 1 - ForgeCaps: { - "tfc:item_heat": { - heat: 0.0f - ticks: 0L - } - } - 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))" + tasks: [ + { + id: "3EA3BABECE52085B" + item: { + Count: 1 + id: "ftbfiltersystem:smart_filter" + tag: { + "ftbfiltersystem:filter": "or(item_tag(forge:dusts))" + } } + type: "item" } - type: "item" - }] + { + id: "1A1B2762EFD6C6B0" + type: "checkmark" + } + ] 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 fa48fa874..377b568d0 100644 --- a/config/ftbquests/quests/chapters/questsmetallurgy.snbt +++ b/config/ftbquests/quests/chapters/questsmetallurgy.snbt @@ -31,21 +31,10 @@ 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: -24.5d + y: -23.0d } { id: "19CF6D922179DFF9" @@ -69,7 +58,7 @@ }] title: "{quests.metal_age.this_is_a_bucket.title}" x: 13.5d - y: -26.0d + y: -24.5d } { dependencies: ["56CA2EB7812529C5"] @@ -93,7 +82,7 @@ ] title: "{quests.metal_age.redblu_buckets.title}" x: 16.5d - y: -26.0d + y: -24.5d } { dependencies: ["7E0239E9CC73F09F"] @@ -109,11 +98,11 @@ weak_nbt_match: true }] title: "{quests.metal_age.black_steel_anvil.title}" - x: 26.5d - y: -26.0d + x: 27.5d + y: -24.5d } { - dependencies: ["5996A3A0D475B8A6"] + dependencies: ["4310B619B57276ED"] description: ["{quests.metal_age.steel_anvil.desc}"] id: "04DE7C58F20B535A" shape: "octagon" @@ -126,11 +115,11 @@ weak_nbt_match: true }] title: "{quests.metal_age.steel_anvil.title}" - x: 26.5d + x: 27.5d y: -32.0d } { - dependencies: ["0A92F5C4BB6AF972"] + dependencies: ["358571B6E692F198"] description: ["{quests.metal_age.wrought_iron_anvil.desc}"] id: "174DA15847665CF8" shape: "octagon" @@ -274,10 +263,29 @@ 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" @@ -289,12 +297,31 @@ y: -34.0d } { - dependencies: ["5A936E9BCF30AA3D"] + 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" + ] dependency_requirement: "one_completed" description: ["{quests.metal_age.kaolin_clay.desc}"] id: "72F1C122FC26229C" shape: "octagon" - size: 2.0d + size: 3.0d subtitle: "{quests.metal_age.kaolin_clay.subtitle}" tasks: [{ id: "673D38EB62FFD65F" @@ -312,8 +339,8 @@ weak_nbt_match: true }] title: "{quests.metal_age.kaolin_clay.title}" - x: 14.0d - y: -33.0d + x: 13.5d + y: -36.0d } { dependencies: ["5A936E9BCF30AA3D"] @@ -322,24 +349,25 @@ 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: 11.0d + x: 13.0d y: -30.5d } { - dependencies: ["5A936E9BCF30AA3D"] + dependencies: [ + "53E1383F12EC6765" + "2DB82986FE176CD7" + ] dependency_requirement: "one_completed" description: ["{quests.metal_age.graphite.desc}"] - icon: "tfc:powder/graphite" id: "31CE13462759950C" shape: "octagon" - size: 2.0d + size: 3.0d subtitle: "{quests.metal_age.graphite.subtitle}" tasks: [{ id: "6B0C9D862BFD27BC" @@ -354,13 +382,14 @@ type: "item" }] title: "{quests.metal_age.graphite.title}" - x: 14.0d - y: -31.0d + x: 13.5d + y: -28.5d } { dependencies: [ "72F1C122FC26229C" "31CE13462759950C" + "5A936E9BCF30AA3D" ] description: ["{quests.metal_age.fire_clay.desc}"] id: "2C76EE197C14B0DC" @@ -374,7 +403,7 @@ weak_nbt_match: true }] title: "{quests.metal_age.fire_clay.title}" - x: 17.0d + x: 17.5d y: -32.0d } { @@ -437,7 +466,6 @@ description: ["{quests.metal_age.beneath_kaolin.desc}"] id: "061116CF508D54F6" optional: true - shape: "diamond" subtitle: "{quests.metal_age.beneath_kaolin.subtitle}" tasks: [ { @@ -464,7 +492,7 @@ } ] title: "{quests.metal_age.beneath_kaolin.title}" - x: 12.0d + x: 14.0d y: -33.5d } { @@ -568,7 +596,7 @@ } ] title: "{quests.metal_age.fire_clay_products.title}" - x: 17.0d + x: 17.5d y: -34.0d } { @@ -638,14 +666,12 @@ }] title: "{quests.metal_age.red_blu.title}" x: 24.0d - y: -26.0d + y: -24.5d } { 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" @@ -654,7 +680,7 @@ }] title: "{quests.metal_age.red_steel_flask.title}" x: 16.5d - y: -27.5d + y: -26.0d } { dependencies: [ @@ -680,7 +706,7 @@ }] title: "{quests.metal_age.redblu_anvil.title}" x: 18.5d - y: -26.0d + y: -24.5d } { dependencies: ["3C173357029AB649"] @@ -724,15 +750,13 @@ type: "checkmark" }] title: "{quests.metal_age.fire_clay_ingredients.title}" - x: 11.5d + x: 13.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: [ { @@ -752,7 +776,7 @@ } ] title: "{quests.metal_age.beneath_graphite.title}" - x: 12.0d + x: 14.0d y: -30.5d } { @@ -760,8 +784,6 @@ 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" @@ -769,7 +791,7 @@ type: "checkmark" }] title: "{quests.metal_age.overworld_kaolin.title}" - x: 11.0d + x: 13.0d y: -33.5d } { @@ -791,8 +813,8 @@ weak_nbt_match: true }] title: "{quests.metal_age.blast_furnace_fuel.title}" - x: 20.5d - y: -32.0d + x: 23.5d + y: -30.0d } { dependencies: ["04DE7C58F20B535A"] @@ -806,8 +828,8 @@ type: "checkmark" }] title: "{quests.metal_age.steel_goodies.title}" - x: 26.5d - y: -34.0d + x: 29.5d + y: -30.0d } { dependencies: ["52DAF93E2F3D688A"] @@ -823,8 +845,8 @@ type: "checkmark" }] title: "{quests.metal_age.black_steel_goodies.title}" - x: 26.5d - y: -23.5d + x: 25.5d + y: -22.5d } { dependencies: [ @@ -832,16 +854,6 @@ "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: [ @@ -875,22 +887,12 @@ } ] title: "{quests.metal_age.highcarb_black_steel.title}" - x: 26.5d + x: 27.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: [ @@ -898,60 +900,53 @@ id: "543388DB123E7328" item: { Count: 1 - id: "ftbfiltersystem:smart_filter" - tag: { - "ftbfiltersystem:filter": "or(item(gtceu:nickel_ingot)item(gtceu:nickel_dust))" + ForgeCaps: { + "tfc:item_heat": { + heat: 0.0f + ticks: 0L + } } + id: "gtceu:nickel_ingot" } - title: "{quests.metal_age.weak_steel.task1}" type: "item" - weak_nbt_match: true } { count: 2L id: "7F829BA244BC77D5" item: { - Count: 1 - id: "ftbfiltersystem:smart_filter" - tag: { - "ftbfiltersystem:filter": "or(item(gtceu:steel_ingot)item(gtceu:steel_dust))" + Count: 2 + ForgeCaps: { + "tfc:item_heat": { + heat: 0.0f + ticks: 0L + } } + id: "gtceu:steel_ingot" } - title: "{quests.metal_age.weak_steel.task2}" type: "item" - weak_nbt_match: true } { id: "3271DD5653C52CAB" item: { Count: 1 - id: "ftbfiltersystem:smart_filter" - tag: { - "ftbfiltersystem:filter": "or(item(gtceu:black_bronze_ingot)item(gtceu:black_bronze_dust))" + ForgeCaps: { + "tfc:item_heat": { + heat: 0.0f + ticks: 0L + } } + 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: 23.5d + x: 25.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: [ @@ -986,21 +981,11 @@ ] title: "{quests.metal_age.highcarb_red_steel.title}" x: 20.5d - y: -27.0d + y: -25.5d } { 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: [ @@ -1008,70 +993,68 @@ id: "2A22B3EA8DC577CE" item: { Count: 1 - id: "ftbfiltersystem:smart_filter" - tag: { - "ftbfiltersystem:filter": "or(item(create:brass_ingot)item(gtceu:brass_dust))" + ForgeCaps: { + "tfc:item_heat": { + heat: 0.0f + ticks: 0L + } } + id: "create:brass_ingot" } - title: "{quests.metal_age.weak_red_steel.brass}" type: "item" } { count: 2L id: "2F0648CE3D1723DF" item: { - Count: 1 - id: "ftbfiltersystem:smart_filter" - tag: { - "ftbfiltersystem:filter": "or(item(gtceu:steel_ingot)item(gtceu:steel_dust))" + Count: 2 + ForgeCaps: { + "tfc:item_heat": { + heat: 0.0f + ticks: 0L + } } + id: "gtceu:steel_ingot" } - title: "{quests.metal_age.weak_red_steel.steel}" type: "item" } { id: "47F346E1C0F41655" item: { Count: 1 - id: "ftbfiltersystem:smart_filter" - tag: { - "ftbfiltersystem:filter": "or(item(gtceu:rose_gold_ingot)item(gtceu:rose_gold_dust))" + ForgeCaps: { + "tfc:item_heat": { + heat: 0.0f + ticks: 0L + } } + id: "gtceu:rose_gold_ingot" } - title: "{quests.metal_age.weak_red_steel.rose_gold}" type: "item" } { count: 4L id: "21434FAAA69D5BE0" item: { - Count: 1 - id: "ftbfiltersystem:smart_filter" - tag: { - "ftbfiltersystem:filter": "or(item(tfc:metal/ingot/black_steel)item(gtceu:black_steel_dust))" + Count: 4 + ForgeCaps: { + "tfc:item_heat": { + heat: 0.0f + ticks: 0L + } } + 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: -27.0d + y: -25.5d } { 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: [ @@ -1079,70 +1062,68 @@ count: 2L id: "5331A323780B4B11" item: { - Count: 1 - id: "ftbfiltersystem:smart_filter" - tag: { - "ftbfiltersystem:filter": "or(item(gtceu:steel_ingot)item(gtceu:steel_dust))" + Count: 2 + ForgeCaps: { + "tfc:item_heat": { + heat: 0.0f + ticks: 0L + } } + id: "gtceu:steel_ingot" } - title: "{quests.metal_age.weak_blue_steel.steel}" type: "item" } { count: 4L id: "2809FD951B82C54F" item: { - Count: 1 - id: "ftbfiltersystem:smart_filter" - tag: { - "ftbfiltersystem:filter": "or(item(tfc:metal/ingot/black_steel)item(gtceu:black_steel_dust))" + Count: 4 + ForgeCaps: { + "tfc:item_heat": { + heat: 0.0f + ticks: 0L + } } + id: "tfc:metal/ingot/black_steel" } - title: "{quests.metal_age.weak_blue_steel.black_steel}" type: "item" } { id: "401EC1A9FBC759B8" item: { Count: 1 - id: "ftbfiltersystem:smart_filter" - tag: { - "ftbfiltersystem:filter": "or(item(gtceu:bismuth_bronze_ingot)item(gtceu:bismuth_bronze_dust))" + ForgeCaps: { + "tfc:item_heat": { + heat: 0.0f + ticks: 0L + } } + id: "gtceu:bismuth_bronze_ingot" } - title: "{quests.metal_age.weak_blue_steel.bismuth_bronze}" type: "item" } { id: "7350ECE723ABE8F4" item: { Count: 1 - id: "ftbfiltersystem:smart_filter" - tag: { - "ftbfiltersystem:filter": "or(item(gtceu:sterling_silver_ingot)item(gtceu:sterling_silver_dust))" + ForgeCaps: { + "tfc:item_heat": { + heat: 0.0f + ticks: 0L + } } + 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: -25.0d + y: -23.5d } { 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: [ @@ -1177,7 +1158,7 @@ ] title: "{quests.metal_age.highcarb_blu_steel.title}" x: 20.5d - y: -25.0d + y: -23.5d } { dependencies: ["3C173357029AB649"] diff --git a/config/ftbquests/quests/chapters/questsstoneage.snbt b/config/ftbquests/quests/chapters/questsstoneage.snbt index bc76b880a..eee6df727 100644 --- a/config/ftbquests/quests/chapters/questsstoneage.snbt +++ b/config/ftbquests/quests/chapters/questsstoneage.snbt @@ -684,7 +684,6 @@ 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 2e0ca4253..a325d9661 100644 --- a/config/ftbquests/quests/chapters/queststfc_tips.snbt +++ b/config/ftbquests/quests/chapters/queststfc_tips.snbt @@ -1602,26 +1602,12 @@ ] 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: [{ - dimension: "minecraft:overworld" - icon: "gtceu:overworld_marker" - id: "5BAF5F5343C3E42A" - title: "{quests.stone_age.temperature.task}" - type: "dimension" + id: "54AAB9886964A160" + title: "{quests.tasktype.checkmark}" + type: "checkmark" }] title: "{quests.tfg_tips.passive_preservation.title}" x: 6.5d @@ -2250,7 +2236,10 @@ y: 9.5d } { - dependencies: ["2D959136A5FC5F46"] + dependencies: [ + "2D959136A5FC5F46" + "56CA2EB7812529C5" + ] description: ["{quests.tfg_tips.lamps.desc}"] id: "037CDA933FBE2CBE" subtitle: "{quests.tfg_tips.lamps.subtitle}" @@ -2288,8 +2277,8 @@ } ] title: "{quests.tfg_tips.lamps.title}" - x: -5.5d - y: 11.5d + x: -5.0d + y: 11.0d } { dependencies: [ @@ -2297,16 +2286,6 @@ "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" @@ -2333,8 +2312,8 @@ } ] title: "{quests.tfg_tips.lava_lamp.title}" - x: -5.5d - y: 13.0d + x: -5.0d + y: 12.5d } { dependencies: ["037CDA933FBE2CBE"] @@ -2354,8 +2333,8 @@ type: "item" }] title: "{quests.tfg_tips.creosote.title}" - x: -6.5d - y: 12.5d + x: -6.0d + y: 12.0d } { dependencies: ["037CDA933FBE2CBE"] @@ -2375,8 +2354,8 @@ type: "item" }] title: "{quests.tfg_tips.olive_oil.title}" - x: -4.5d - y: 12.5d + x: -4.0d + y: 12.0d } { dependencies: ["2D959136A5FC5F46"] @@ -3483,8 +3462,8 @@ type: "item" }] title: "{quests.tfg_tips.tallow.title}" - x: -7.0d - y: 11.5d + x: -6.5d + y: 11.0d } { dependencies: ["150B7C5CD152E1BA"] @@ -5397,26 +5376,6 @@ 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/config/tfchotornot-common.toml b/config/tfchotornot-common.toml index e6e95be29..ed10d7c44 100644 --- a/config/tfchotornot-common.toml +++ b/config/tfchotornot-common.toml @@ -31,7 +31,7 @@ itemDamageTimeInterval = 60 #Durability for wooden tongs. #Range: > 0 - woodenTongsDurability = 100 + woodenTongsDurability = 250 #Durability for potholders. #Range: > 0 potholderDurability = 600 diff --git a/kubejs/assets/gtceu/lang/en_us.json b/kubejs/assets/gtceu/lang/en_us.json index 7344697aa..111f851a5 100644 --- a/kubejs/assets/gtceu/lang/en_us.json +++ b/kubejs/assets/gtceu/lang/en_us.json @@ -15,8 +15,6 @@ "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/gtceu/textures/block/machines/food_oven/overlay_front.png b/kubejs/assets/gtceu/textures/block/machines/food_oven/overlay_front.png deleted file mode 100644 index de1abfe728887db34f3c30f4eb6cbdf84aea2db9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 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 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 deleted file mode 100644 index 5b9e6ea6739d56cd2a782cfb033e498966bbd628..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 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 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 deleted file mode 100644 index 4da15531758294c4b06ac119be05b106f4ae87fe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 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 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 deleted file mode 100644 index c20a1c9810d77b74d42b9829129c1c640700e925..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 149 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4rT@h1`S>QU?3X 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 deleted file mode 100644 index f02154247c2653f7aa4f2c50135ee47eb28d1f9f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 75 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7ggjjwLo9le6C_v{Cy4Yg caWF8j2rw|#`&RTZFfcH9y85}Sb4q9e0PjW)-2eap 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 deleted file mode 100644 index f02154247c2653f7aa4f2c50135ee47eb28d1f9f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 75 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7ggjjwLo9le6C_v{Cy4Yg caWF8j2rw|#`&RTZFfcH9y85}Sb4q9e0PjW)-2eap 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 deleted file mode 100644 index dfae8cae1..000000000 --- a/kubejs/assets/gtceu/textures/block/machines/food_processor/overlay_back_active.png.mcmeta +++ /dev/null @@ -1,5 +0,0 @@ -{ - "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 deleted file mode 100644 index 21458b6d21a1d0fd86f72ab073571f8c56f023d1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 380 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7ojqL~Lo9laPTJUY$U(%l z|D1!u$~P?{!7N9P`E%Ux{HM^{J6~y=(zZH>RbP~va;v-#dUZE=%sS(6U_-RzoU5tg zI(x3peYo#%?S}`Kv+nw?zy5pIZ@=ZAjbcPxAM>|6b1(QSaUp7Rgw6*W{_~$F1Su_5 z;b1!V+&C(G%QdkpOe&s-YV6n(EM$zNdKq4P|IPbl`IF?gH*?wqnhbbu=9u}O_+Gn6 zBWZ7({n`xE6|Z+mmdUVRFP-V5HYL?_`)$>(Ma$XVE|))0DAOXKvGl|yo@Acgci)9x zVG9X8`nAfH!%^lq!`Xt^>oI!M|C@F^p0P=Xv#G)6yy3Bc(5v@(8T^(D|NbkN%yawg zHpvjLhr9GvUwvh|K!Yo9yEH@QtVz!;n-4N974g#SJFfir14Ba# z1H&%{28M%D}*&rlw|YZZ0h?y>;tW zCnqOsYwM_}sDlR&HZ?W5y1LGtJ2yW+f8xZ6?d|O;DJelgLA>ewECD7N6MPvM7$$tO zVP#-oU@Qsp3ubV5b|VeMN%D4gVd!9$^0}-^*;3Y z^mqU3%Y5>=mv#m6`%7;MpY-|2KfTQV1y`gbqf=gRw(XBU5O+WDs0*T3fe)A*5UxBl^)W9OZI{C!*bPki0! zZxywBMR)zP(m8GMZTY_68b@B2>@9m*|5q^FS?HgYxc*6GtA#?HO_FW$dyc#d-!nP@%4M}{Ws)4u-uWAQ4tm*m ziP>>Gdv&e%9c7V2n>qU3ejVoQkF2t=)PHwPe#zm(p8V=I&+ag{uz#q`yuJ8CmEQM; zGtEodr~T8Y@VTSh7xGGQdYas`M7dOc5jhF&mF!6enZMg6Ee!2vm{4_rZBj+c)AgPQ z+mEhOzBogSiM_Bt?YHt8`I~zJLyZG*>&@IN)`jGS8tNu-Rp1aWg zM`iRI{*a=5BHx0~{BAybTK2c5+3xvKa>75GP>Evn0b^1fUv_CaGooxL#vGUBP8BaI<{(bn<43LQE-^5Cv ziVN%93*#K#?n!xm+WA|5+4<>B$1hfPw|*82=x3LC#((H;%_`0Mh&cOC2iz-6YVLLY zwhy@TKk$pij{l2a{z?3Pct(5WjN|g38_aAsoxgwYIpZPcef6u3E7#34_*&5asX=(l zD@FVD=WNnGpV)W4p>oby=eql?l`=K*UJOS4M-EqiejwLslO}g(@y$Pppdin(`N!CN XK=*oC>AxKe3=9mOu6{1-oD!M14Ba# 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 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 deleted file mode 100644 index 92cc62352..000000000 --- a/kubejs/assets/gtceu/textures/block/machines/food_processor/overlay_front_active_emissive.png.mcmeta +++ /dev/null @@ -1,5 +0,0 @@ -{ - "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 deleted file mode 100644 index c20a1c9810d77b74d42b9829129c1c640700e925..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 149 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4rT@h1`S>QU?3X diff --git a/kubejs/assets/gtceu/textures/block/machines/food_processor/overlay_side.png b/kubejs/assets/gtceu/textures/block/machines/food_processor/overlay_side.png deleted file mode 100644 index 678e1b9bb4bd15fb486d5c6d42ef7815d3e13573..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 334 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s77>k44ofy`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 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 deleted file mode 100644 index f2b3c4212bf3cb561d04212b7ed709c8d48a53b0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 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-cFnGH9xvXI2Biqv_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 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 deleted file mode 100644 index bcfd65feb106d41eb0f4fa5fdcd53f1085791eaa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 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 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 deleted file mode 100644 index 92cc62352..000000000 --- a/kubejs/assets/gtceu/textures/block/machines/food_refrigerator/overlay_back_active.png.mcmeta +++ /dev/null @@ -1,5 +0,0 @@ -{ - "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 deleted file mode 100644 index 8e993ab9899163f3861209611777cb5330c63c40..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 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 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 deleted file mode 100644 index 92cc62352..000000000 --- a/kubejs/assets/gtceu/textures/block/machines/food_refrigerator/overlay_back_active_emissive.png.mcmeta +++ /dev/null @@ -1,5 +0,0 @@ -{ - "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 deleted file mode 100644 index 383a1c8002c2d2f4d21310d5d14f32fbeb1396d5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 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) 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 deleted file mode 100644 index f02154247c2653f7aa4f2c50135ee47eb28d1f9f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 75 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7ggjjwLo9le6C_v{Cy4Yg caWF8j2rw|#`&RTZFfcH9y85}Sb4q9e0PjW)-2eap 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 deleted file mode 100644 index 01360c35a2eee48a62adb260c3d0b35dfaff2289..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 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< 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 deleted file mode 100644 index e10b0db21966d987c7f7d76e15b9077480672a6f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 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!= 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 deleted file mode 100644 index 1161e23a981427087869a2d3f725bace3a7a05d7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 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 diff --git a/kubejs/assets/tfc/textures/block/metal/block/zinc.png b/kubejs/assets/tfc/textures/block/metal/block/zinc.png deleted file mode 100644 index 2cb121e5a7f4409c8fcd8d136b6b8c7ab910e3dc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 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 diff --git a/kubejs/assets/tfc/textures/block/metal/smooth/zinc.png b/kubejs/assets/tfc/textures/block/metal/smooth/zinc.png deleted file mode 100644 index 422b0e6b34efe8bcdc3c10445c49a9832414d6cc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 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~ diff --git a/kubejs/assets/tfg/lang/en_us.json b/kubejs/assets/tfg/lang/en_us.json index 91e60149a..f0a59c999 100644 --- a/kubejs/assets/tfg/lang/en_us.json +++ b/kubejs/assets/tfg/lang/en_us.json @@ -167,19 +167,6 @@ "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", @@ -300,7 +287,6 @@ "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", @@ -1229,6 +1215,9 @@ "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.", @@ -1287,6 +1276,9 @@ "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.", @@ -1296,9 +1288,6 @@ "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.", @@ -1314,23 +1303,15 @@ "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\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.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.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, 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.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.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.", @@ -1557,7 +1538,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 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.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.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!", diff --git a/kubejs/client_scripts/tooltips.js b/kubejs/client_scripts/tooltips.js index 213334b1a..9cbfe6003 100644 --- a/kubejs/client_scripts/tooltips.js +++ b/kubejs/client_scripts/tooltips.js @@ -27,9 +27,10 @@ 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(['tfg:electric_greenhouse'], (item, advanced, text) => { + event.addAdvanced(['gtceu:greenhouse'], (item, advanced, text) => { text.add(1, text.of('This machine has a §2Perfect Overclock§r!')), - text.add(2, text.of(`The interior is customizable! Check the multiblock preview in JEI.`)) + 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) => { text.add(1, text.of('Artificial enviroment to simulate the Nether.')), diff --git a/kubejs/server_scripts/create/recipes.js b/kubejs/server_scripts/create/recipes.js index 995c04cf4..684b6ff15 100644 --- a/kubejs/server_scripts/create/recipes.js +++ b/kubejs/server_scripts/create/recipes.js @@ -42,7 +42,6 @@ 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/server_scripts/firmalife/recipes.js b/kubejs/server_scripts/firmalife/recipes.js index a9adeb1a3..90d2e64f0 100644 --- a/kubejs/server_scripts/firmalife/recipes.js +++ b/kubejs/server_scripts/firmalife/recipes.js @@ -95,8 +95,16 @@ 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.wiremill(`tfg:firmalife/pineapple_yarn`) + event.recipes.gtceu.assembler(`tfg:firmalife/pineapple_yarn`) .itemInputs('firmalife:pineapple_fiber') .circuit(1) .itemOutputs('8x firmalife:pineapple_yarn') @@ -446,6 +454,276 @@ 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() @@ -481,6 +759,28 @@ 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') @@ -495,4 +795,13 @@ 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/greate/recipes.removes.js b/kubejs/server_scripts/greate/recipes.removes.js index 22b279f2b..8771d171b 100644 --- a/kubejs/server_scripts/greate/recipes.removes.js +++ b/kubejs/server_scripts/greate/recipes.removes.js @@ -27,7 +27,6 @@ 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.machines.js b/kubejs/server_scripts/gregtech/recipes.machines.js index 7e90107f4..83c352ad9 100644 --- a/kubejs/server_scripts/gregtech/recipes.machines.js +++ b/kubejs/server_scripts/gregtech/recipes.machines.js @@ -744,6 +744,18 @@ function registerGTCEuMachineRecipes(event) { // #endregion + // Контроллер теплицы + event.shaped('gtceu: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/gregtech/recipes.materials.js b/kubejs/server_scripts/gregtech/recipes.materials.js index 52a6197e4..f4ab5a5d1 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() && !ingotStack.hasTag('c:hidden_from_recipe_viewers')) { + if (!plateStack.isEmpty()) { event.custom({ type: "createaddition:rolling", @@ -149,6 +149,7 @@ function registerGTCEUMetalRecipes(event) { }).id(`tfg:rolling/${material.getName()}_plate`) if (!blockStack.isEmpty() && GTMaterials.Stone != material) { + // 9х Слиток -> Блок event.recipes.createCompacting(blockStack, ingotStack.withCount(matAmount)) .heated() @@ -157,6 +158,7 @@ function registerGTCEUMetalRecipes(event) { } else { if (!blockStack.isEmpty()) { + // Блок из гемов -> 9 Пластин event.recipes.createCutting(plateStack.withCount(matAmount).withChance(0.65), blockStack) .id(`tfg:cutting/${material.getName()}_plate`) @@ -190,7 +192,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 && !plateItem.hasTag('c:hidden_from_recipe_viewers')) { + if (plateItem != null && foilItem != null) { event.custom({ type: "createaddition:rolling", input: plateItem, diff --git a/kubejs/server_scripts/minecraft/recipes.js b/kubejs/server_scripts/minecraft/recipes.js index 57cdf234f..55a34243c 100644 --- a/kubejs/server_scripts/minecraft/recipes.js +++ b/kubejs/server_scripts/minecraft/recipes.js @@ -1028,5 +1028,4 @@ 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/minecraft/tags.js b/kubejs/server_scripts/minecraft/tags.js index fd12509f2..6363b026b 100644 --- a/kubejs/server_scripts/minecraft/tags.js +++ b/kubejs/server_scripts/minecraft/tags.js @@ -56,7 +56,6 @@ 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') diff --git a/kubejs/server_scripts/tfc/data.js b/kubejs/server_scripts/tfc/data.js index f0ba390a5..e49817b46 100644 --- a/kubejs/server_scripts/tfc/data.js +++ b/kubejs/server_scripts/tfc/data.js @@ -69,7 +69,6 @@ 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) diff --git a/kubejs/server_scripts/tfc/recipes.js b/kubejs/server_scripts/tfc/recipes.js index 064774d05..d23cb4aad 100644 --- a/kubejs/server_scripts/tfc/recipes.js +++ b/kubejs/server_scripts/tfc/recipes.js @@ -34,6 +34,44 @@ 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 => { @@ -88,6 +126,15 @@ 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 44df72c83..ac2370124 100644 --- a/kubejs/server_scripts/tfc/recipes.machines.js +++ b/kubejs/server_scripts/tfc/recipes.machines.js @@ -117,6 +117,20 @@ 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++) { @@ -160,9 +174,158 @@ 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 - // Brine + //#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) + }) event.recipes.gtceu.mixer('tfg:tfc/brine') .inputFluids(Fluid.of('tfc:salt_water', 900)) diff --git a/kubejs/server_scripts/tfc/recipes.materials.js b/kubejs/server_scripts/tfc/recipes.materials.js index 80f4d9112..a105e1203 100644 --- a/kubejs/server_scripts/tfc/recipes.materials.js +++ b/kubejs/server_scripts/tfc/recipes.materials.js @@ -1114,15 +1114,6 @@ 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)) diff --git a/kubejs/server_scripts/tfclunchbox/recipes.js b/kubejs/server_scripts/tfclunchbox/recipes.js index badc96045..0654a12b2 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:1000}').withName(Text.translate('item.tfclunchbox.universal_capsule.filled'))) + .itemOutputs(Item.of('tfclunchbox:universal_capsule', '{Durability:500}').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:1000}').withName(Text.translate('item.tfclunchbox.universal_capsule.filled'))) + .itemOutputs(Item.of('tfclunchbox:universal_capsule', '{Durability:500}').withName(Text.translate('item.tfclunchbox.universal_capsule.filled'))) .duration(100) .EUt(GTValues.VA[GTValues.LV]) } diff --git a/kubejs/server_scripts/tfg/recipes.food.js b/kubejs/server_scripts/tfg/recipes.food.js deleted file mode 100644 index 0a8fa9c76..000000000 --- a/kubejs/server_scripts/tfg/recipes.food.js +++ /dev/null @@ -1,620 +0,0 @@ -// priority: 0 -/** - * @param {Internal.RecipesEventJS} event - */ -function registerTFGFoodRecipes(event) { - - 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 {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 - - /** - * @param {"food_oven"|"food_processor"} type - * @param {string} id - * @param {string} duration - * @param {string} EUt - * @param {FoodRecipeData} 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 = [] - let gregInputs = [], inputs= [] - let outputFirstIndex = (data.itemOutputProvider === undefined) ? 0 : 1 - data.itemInputs.forEach(item => { - if (typeof item === "string") { - gregInputs.push(item) - - 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]) - } - }) - - $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(duration) - .EUt(EUt) - - if (data.circuit) r.circuit(data.circuit) - 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 => { - cookingRecipe(item.name, item.input, item.output) - }) - - //#endregion - //#region ================= TFC Grains ================= - - 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() - }) - - // 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() - }) - - // 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)], - itemOutputProvider: TFC.isp.of(`2x tfc:food/${grain}_dough`).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), - ]) - }) - - //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]}`, '#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)), [ - (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 ================= Firmalife ================= - - global.FIRMALIFE_COOKING_RECIPE_COMPONENTS.forEach(item => { - cookingRecipe(item.name, item.input, item.output, undefined, true) - }) - - //#endregion - //#region ================= Dairy ================= - - global.TFC_CURDS_AND_CHEESES.forEach(item => { - - processorRecipe(`${item.curd}_curd`, 1200, 16, { - itemOutputs: [item.curd], - fluidInputs: [Fluid.of(item.input_fluid, 1000)], - itemOutputProvider: TFC.isp.of(item.curd).resetFood() - }) - - processorRecipe(`${item.cheese1}_cheese_wheel_1`, 8000, 16, { - itemInputs: [`3x ${item.curd}`], - itemOutputs: [`firmalife:${item.cheese1}_wheel`], - fluidInputs: [Fluid.of('tfc:salt_water', 750)], - itemOutputProvider: TFC.isp.of(`firmalife:${item.cheese1}_wheel`).copyOldestFood() - }) - - processorRecipe(`${item.cheese2}_cheese_wheel_2`, 1000, 16, { - circuit: 2, - itemInputs: [`3x ${item.curd}`, `6x tfc:powder/salt`], - itemOutputs: [`firmalife:${item.cheese2}_wheel`], - itemOutputProvider: TFC.isp.of(`firmalife:${item.cheese2}_wheel`).copyOldestFood() - }) - - 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() - }) - - 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() - }) - - }) - - global.TFC_MILKS.forEach(milk => { - const milkID = milk.id.split(':')[1]; - - 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)], - itemOutputProvider: TFC.isp.of('2x firmalife:food/white_chocolate_blend').resetFood(), - }) - - 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)], - itemOutputProvider: TFC.isp.of('2x firmalife:food/dark_chocolate_blend').resetFood(), - }) - - 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)], - itemOutputProvider: TFC.isp.of('2x firmalife:food/milk_chocolate_blend').resetFood(), - }) - - processorRecipe(`egg_noodles_from_${milkID}`, 50, 8, { - circuit: 6, - 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(), - }) - - 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)], - itemOutputs: ['2x firmalife:food/raw_rice_noodles'], - 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 - - //#region ================= Food preservation ================= - - 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') - }) - }) - - 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 - - //#region ================= Misc ================= - - global.TFC_JAMS.forEach(name => { - processorRecipe(`${name}_jam`, 200, 8, { - circuit: 15, - itemInputs: [`4x tfc:food/${name}`, "#tfg:sugars", "#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:sugars", "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)], - itemOutputProvider: TFC.isp.of("2x firmalife:food/masa").copyFood() - }) - - 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)], - itemOutputProvider: TFC.isp.of('firmalife:food/tomato_sauce').copyOldestFood(), - }) - - processorRecipe("olive_paste", 60, 8, { - itemInputs: ['tfc:food/olive'], - itemOutputs: ['2x tfc:olive_paste'], - itemOutputProvider: TFC.isp.of('2x tfc:olive_paste'), - }) - - processorRecipe("soybean_paste", 60, 8, { - itemInputs: ['firmalife:food/dehydrated_soybeans'], - itemOutputs: ['firmalife:food/soybean_paste'], - itemOutputProvider: TFC.isp.of('firmalife:food/soybean_paste').copyOldestFood(), - }) - - // Vinegar - global.TFC_ALCOHOL.forEach(alcohol => { - let name = `vinegar_${alcohol.id.replace(':', '_')}`; - - processorRecipe(name, 600, 32, { - circuit: 5, - itemInputs: ['#tfc:foods/fruits'], - fluidInputs: [Fluid.of(alcohol.id, 250)], - fluidOutputs: [Fluid.of('tfc:vinegar', 250)], - }) - - }) - - 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)], - itemOutputProvider: TFC.isp.of("4x firmalife:food/pizza_dough").copyOldestFood() - }) - - 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)], - itemOutputProvider: TFC.isp.of("4x firmalife:food/pizza_dough").copyOldestFood() - }) - - 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() - }) - - processorRecipe("chocolate_ice_cream", 300, 16, { - itemInputs: ['firmalife:food/vanilla_ice_cream'], - itemOutputs: ['firmalife:food/chocolate_ice_cream'], - fluidInputs: [Fluid.of('firmalife:chocolate', 1000)], - itemOutputProvider: TFC.isp.of("firmalife:food/chocolate_ice_cream").resetFood() - }) - - 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() - }) - - 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() - }) - - processorRecipe("pie_dough", 300, 16, { - circuit: 2, - itemInputs: ['#tfc:sweetener', 'firmalife:food/butter', '#tfc:foods/flour'], - itemOutputs: ['firmalife:food/pie_dough'], - fluidInputs: [Fluid.of('minecraft:water', 1000)], - itemOutputProvider: TFC.isp.of('firmalife:food/pie_dough').copyOldestFood() - }) - - processorRecipe("pumpkin_pie_dough", 300, 16, { - circuit: 2, - 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)], - itemOutputProvider: TFC.isp.of('firmalife:food/pumpkin_pie_dough').copyOldestFood() - }) - - 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() - }) - - 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() - }) - - processorRecipe("hardtack_dough", 300, 16, { - itemInputs: ['tfc:powder/salt', '#tfc:foods/flour'], - itemOutputs: ['4x firmalife:food/hardtack_dough'], - fluidInputs: [Fluid.of('minecraft:water', 1000)], - itemOutputProvider: TFC.isp.of('4x firmalife:food/hardtack_dough').copyOldestFood() - }) - - processorRecipe("yeast_starter", 1200, 8, { - circuit: 1, - fluidInputs: [Fluid.of('firmalife:yeast_starter', 100)], - fluidOutputs: [Fluid.of('firmalife:yeast_starter', 600)], - itemInputs: ['#tfc:foods/flour'], - }) - - 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") - }) - - 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() - }) - - 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() - }) - - processorRecipe("cured_maize", 300, 8, { - itemInputs: ["tfc:food/maize_grain"], - itemOutputs: ["firmalife:food/cured_maize"], - itemOutputProvider: TFC.isp.of('firmalife:food/cured_maize').copyOldestFood() - }) - - processorRecipe("soy_mixture", 300, 8, { - itemInputs: ["tfc:food/soybean", 'tfc:powder/salt'], - itemOutputs: ["firmalife:food/soy_mixture"], - fluidInputs: [Fluid.of('minecraft:water', 50)], - itemOutputProvider: TFC.isp.of('firmalife:food/soy_mixture').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') - .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/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 - - 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/server_scripts/tfg/recipes.js b/kubejs/server_scripts/tfg/recipes.js index 0f4bc7713..eec0f9d35 100644 --- a/kubejs/server_scripts/tfg/recipes.js +++ b/kubejs/server_scripts/tfg/recipes.js @@ -14,5 +14,4 @@ const registerTFGRecipes = (event) => { registerTFGSupportRecipes(event) registerTFGFishingNetsRecipes(event) registerTFGConvertingRecipes(event) - registerTFGFoodRecipes(event) } \ No newline at end of file diff --git a/kubejs/server_scripts/tfg/recipes.rocks.js b/kubejs/server_scripts/tfg/recipes.rocks.js index 90a2eb47f..d8fce61c8 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 diff --git a/kubejs/server_scripts/vintage_improvements/recipes.js b/kubejs/server_scripts/vintage_improvements/recipes.js index 371ee10f7..14ef74306 100644 --- a/kubejs/server_scripts/vintage_improvements/recipes.js +++ b/kubejs/server_scripts/vintage_improvements/recipes.js @@ -293,10 +293,6 @@ 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)) { @@ -631,13 +627,6 @@ 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)], diff --git a/kubejs/startup_scripts/ae2/tag_prefixes.js b/kubejs/startup_scripts/ae2/tag_prefixes.js index 31a6e4325..2c03f700b 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') - // Blocks have to be handled in java because ae2 is weird - + TagPrefix.block.setIgnored(Fluix, $AE_BLOCKS.FLUIX_BLOCK); 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 b534cfb44..c78f93e53 100644 --- a/kubejs/startup_scripts/create/constants.js +++ b/kubejs/startup_scripts/create/constants.js @@ -188,6 +188,9 @@ 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', @@ -202,6 +205,7 @@ 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', diff --git a/kubejs/startup_scripts/firmalife/constants.js b/kubejs/startup_scripts/firmalife/constants.js index 6bc9a7428..e0e9b6220 100644 --- a/kubejs/startup_scripts/firmalife/constants.js +++ b/kubejs/startup_scripts/firmalife/constants.js @@ -84,13 +84,6 @@ 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' }, @@ -101,20 +94,26 @@ global.FIRMALIFE_GREENHOUSE_BERRY_RECIPE_COMPONENTS = [ { input: 'firmalife:plant/nightshade_bush', fluid_amount: 6000, output: '3x firmalife:food/nightshade_berry', name: 'nightshade' }, ]; -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: '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' }, - { input: '#firmalife:foods/slices', output: 'firmalife:food/toast', name: 'toast' } -]; \ No newline at end of file +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' }, + { 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' }, +]; diff --git a/kubejs/startup_scripts/gtceu/machines.js b/kubejs/startup_scripts/gtceu/machines.js index 21cb9ddfd..936294408 100644 --- a/kubejs/startup_scripts/gtceu/machines.js +++ b/kubejs/startup_scripts/gtceu/machines.js @@ -1,5 +1,7 @@ // priority: 0 +//#region Greenhouse + const registerGTCEuMachines = (event) => { GTMachineUtils.registerCrate(GTMaterials.BismuthBronze, 54, "Bismuth Bronze Crate"); @@ -10,6 +12,66 @@ 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/materials.js b/kubejs/startup_scripts/gtceu/materials.js index 08433c05d..089d4e92f 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(0xA3BE9E) + GTMaterials.Zinc.setMaterialSecondaryARGB(0x213b3f) GTMaterials.Graphite.setMaterialARGB(0x889BA8) GTMaterials.Graphite.setMaterialSecondaryARGB(0x30383E) GTMaterials.Amethyst.setMaterialARGB(0xCC9EF0) diff --git a/kubejs/startup_scripts/gtceu/recipe_types.js b/kubejs/startup_scripts/gtceu/recipe_types.js index 979ef3a46..7ba54d0be 100644 --- a/kubejs/startup_scripts/gtceu/recipe_types.js +++ b/kubejs/startup_scripts/gtceu/recipe_types.js @@ -1,6 +1,13 @@ // 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 d7f2c995e..ce425b1ff 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_MEAT_RECIPE_COMPONENTS = [ +global.TFC_FURNACE_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' }, @@ -924,39 +924,41 @@ global.TFC_QUERN_POWDER_RECIPE_COMPONENTS = [ { input: 'firmalife:ore/small_chromite', output: 'gtceu:small_chromite_dust', name: 'chromite' } ]; -global.TFC_GRAINS = [ - "barley", - "maize", - "oat", - "rye", - "rice", - "wheat", -] +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_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_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_GREENHOUSE_FRUIT_RECIPE_COMPONENTS = [ { input: 'tfc:plant/cherry_sapling', fluid_amount: 8000, output: '32x tfc:food/cherry', name: 'cherry' }, @@ -1014,14 +1016,7 @@ global.TFC_MILKS = [ {id: 'minecraft:milk'}, {id: 'firmalife:yak_milk'}, {id: 'firmalife:goat_milk'}, - // Uncomment this if firmalife ever makes this obtainable - //{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: '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' }, + {id: 'firmalife:coconut_milk'}, ]; global.TFC_ALCOHOL = [