From 3eebef1616a52c0eec0526fb189562114bf9662e Mon Sep 17 00:00:00 2001 From: Pyritie Date: Wed, 4 Jun 2025 21:49:00 +0100 Subject: [PATCH] more greenhouse tweaks, added a recipe for grass blocks --- CHANGELOG.md | 2 ++ kubejs/client_scripts/tooltips.js | 3 +- kubejs/server_scripts/firmalife/recipes.js | 4 +-- kubejs/server_scripts/gregtech/utility.js | 12 +++++-- kubejs/server_scripts/tfc/recipes.dirt.js | 40 ++++++++------------- kubejs/server_scripts/tfc/recipes.js | 12 +++---- kubejs/startup_scripts/gtceu/machines.js | 42 ++++++++++++++++++---- 7 files changed, 71 insertions(+), 44 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 89ea117f1..23ddff07a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,8 +15,10 @@ - Anthracite now also superheats blaze burners @Pyritie - Changed LV chem reactor quest to work with any container of rubber instead of just a rubber bucket (#1116) @ofoxsmith - Added perfect overclock to the electric greenhouse so it scales better with the pyro oven @Pyritie +- Electric greenhouse now accepts logs and leaf blocks inside it, so you can build a little tree if you want @Pyritie - Increased durability of the blue steel diving suit to match blue steel armor @Pyritie - Phantom Silk and Polycaprolactam Fabric now count as High Quality Fabric @Pyritie +- Added recipes to turn dirt into grass @Pyritie ### Bug fixes - Fixed issue where "melts into" tooltips and certain timers on Jade were missing (#1102) @Xikaro - Improved block ordering logic with AoE mining tools to reduce incorrect cave-ins @voidstar240 diff --git a/kubejs/client_scripts/tooltips.js b/kubejs/client_scripts/tooltips.js index a63d4abff..9cbfe6003 100644 --- a/kubejs/client_scripts/tooltips.js +++ b/kubejs/client_scripts/tooltips.js @@ -25,11 +25,12 @@ const registerTooltips = (event) => text.add(1, [text.of("§4Obsolete§f: Replaced by the AFC TreeTap, you can craft it from this one by placing this in a crafting table!")]) }) event.addAdvanced(['create:blaze_burner'], (item, advanced, text) => { - text.add(1, text.of('§cSuperheat§r with Coke, or Flawless and Exquisite coal gems.')) + text.add(1, text.of('§cSuperheat§r with Coke, Anthracite, or Flawless and Exquisite coal gems.')) }) event.addAdvanced(['gtceu: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) => { text.add(1, text.of('Artificial enviroment to simulate the Nether.')), diff --git a/kubejs/server_scripts/firmalife/recipes.js b/kubejs/server_scripts/firmalife/recipes.js index 9aa3f1a0c..90d2e64f0 100644 --- a/kubejs/server_scripts/firmalife/recipes.js +++ b/kubejs/server_scripts/firmalife/recipes.js @@ -444,12 +444,12 @@ const registerFirmaLifeRecipes = (event) => { // Семена фруктов global.FIRMALIFE_GREENHOUSE_FRUIT_RECIPE_COMPONENTS.forEach(element => { - generateGreenHouseRecipe(event, element.input, element.fluid_amount, element.output, element.name) + generateGreenHouseRecipe(event, element.input, element.fluid_amount, element.output, element.name, true) }) // Семена ягод global.FIRMALIFE_GREENHOUSE_BERRY_RECIPE_COMPONENTS.forEach(element => { - generateGreenHouseRecipe(event, element.input, element.fluid_amount, element.output, element.name) + generateGreenHouseRecipe(event, element.input, element.fluid_amount, element.output, element.name, false) }) //#endregion diff --git a/kubejs/server_scripts/gregtech/utility.js b/kubejs/server_scripts/gregtech/utility.js index b8a66896e..45a83a172 100644 --- a/kubejs/server_scripts/gregtech/utility.js +++ b/kubejs/server_scripts/gregtech/utility.js @@ -23,10 +23,10 @@ const generateCutterRecipe = (event, input, output, duration, EUt, id) => { .EUt(EUt) } -const generateGreenHouseRecipe = (event, input, fluid_amount, output, id) => { +const generateGreenHouseRecipe = (event, input, fluid_amount, output, id, overworldExclusive) => { // Без удобрения - event.recipes.gtceu.greenhouse(id) + let r = event.recipes.gtceu.greenhouse(id) .itemInputs(input) .circuit(1) .inputFluids(Fluid.of('minecraft:water', fluid_amount)) @@ -36,8 +36,11 @@ const generateGreenHouseRecipe = (event, input, fluid_amount, output, id) => { .duration(36000) // 30 mins .EUt(GTValues.VA[GTValues.LV]) + if (overworldExclusive) + r.dimension('minecraft:overworld') + // С удобрением - event.recipes.gtceu.greenhouse(`${id}_fertilized`) + r = event.recipes.gtceu.greenhouse(`${id}_fertilized`) .itemInputs(input) .itemInputs('8x gtceu:fertilizer') .circuit(2) @@ -47,6 +50,9 @@ const generateGreenHouseRecipe = (event, input, fluid_amount, output, id) => { .chancedOutput(input, 6000, 0) .duration(12000) // 10 mins .EUt(GTValues.VA[GTValues.LV]) + + if (overworldExclusive) + r.dimension('minecraft:overworld') } const getFillingNBT = (material, amount) => { diff --git a/kubejs/server_scripts/tfc/recipes.dirt.js b/kubejs/server_scripts/tfc/recipes.dirt.js index 042b1f9e7..f3b9b6048 100644 --- a/kubejs/server_scripts/tfc/recipes.dirt.js +++ b/kubejs/server_scripts/tfc/recipes.dirt.js @@ -2,8 +2,6 @@ function registerTFCDirtRecipes(event) { - //#region Земля - // Loam + Silt -> Silty Loam (Миксер) event.recipes.gtceu.mixer('silty_loam_dirt') .itemInputs('tfc:dirt/loam', 'tfc:dirt/silt') @@ -26,18 +24,11 @@ function registerTFCDirtRecipes(event) { .itemOutputs(`tfc:rooted_dirt/${mud}`) .duration(200) .EUt(16) - }) - - global.TFC_MUD_TYPES.forEach(mud => { + event.smelting(`tfc:dirt/${mud}`, `tfc:mud/${mud}`) .id(`tfg:smelting/${mud}_mud_to_grass`) - }) + - //#endregion - - //#region Грязь - - global.TFC_MUD_TYPES.forEach(mud => { // Dirt -> Mud event.recipes.gtceu.mixer(`${mud}_grass_to_mud`) .itemInputs(`tfc:dirt/${mud}`) @@ -46,12 +37,8 @@ function registerTFCDirtRecipes(event) { .itemOutputs(`tfc:mud/${mud}`) .duration(200) .EUt(16) - }) - //#endregion - - //AE Transform Mud - global.TFC_MUD_TYPES.forEach(mud => { + //AE Transform Mud event.custom({ type: "ae2:transform", circumstance: { @@ -62,12 +49,8 @@ function registerTFCDirtRecipes(event) { {item: `tfc:dirt/${mud}`}], result: {item: `tfc:mud/${mud}`} }).id(`tfg:ae_transform/${mud}_to_mud`) - }) - - //#region Грязь кирпичи - - global.TFC_MUD_TYPES.forEach(mud => { + // Mud bricks // Влажный кирпич -> Кирпич event.smelting(`tfc:mud_brick/${mud}`, `tfc:drying_bricks/${mud}`) @@ -104,9 +87,9 @@ function registerTFCDirtRecipes(event) { A: `tfc:mud_brick/${mud}` }).id(`tfc:crafting/soil/${mud}_mud_bricks_slab`) - event.shaped(`2x tfc:mud_bricks/${mud}_wall`, [ - 'AAA', - 'AAA' + event.shaped(`tfc:mud_bricks/${mud}_wall`, [ + 'A', + 'A' ], { A: `tfc:mud_brick/${mud}` }).id(`tfc:crafting/soil/${mud}_mud_bricks_wall`) @@ -128,9 +111,16 @@ function registerTFCDirtRecipes(event) { event.stonecutting(`tfc:mud_bricks/${mud}_wall`, `tfc:mud_bricks/${mud}`) .id(`tfc:stonecutting/soil/${mud}_mud_bricks_wall`) + + // Grass blocks + + event.shapeless(`tfc:grass/${mud}`, [`tfc:dirt/${mud}`, 'minecraft:bone_meal', '#forge:seeds']) + .id(`tfg:shapeless/${mud}_grass_bonemeal`) + + event.shapeless(`tfc:grass/${mud}`, [`tfc:dirt/${mud}`, 'gtceu:fertilizer', '#forge:seeds']) + .id(`tfg:shapeless/${mud}_grass_fertilizer`) }) - //#endregion // #region Wattle and daub // TODO: Workaround for not being able to stain wattle and daub with normal dyes diff --git a/kubejs/server_scripts/tfc/recipes.js b/kubejs/server_scripts/tfc/recipes.js index 055ff1e06..d23cb4aad 100644 --- a/kubejs/server_scripts/tfc/recipes.js +++ b/kubejs/server_scripts/tfc/recipes.js @@ -94,26 +94,26 @@ const registerTFCRecipes = (event) => { // Дерево global.TFC_WOOD_TYPES.forEach(wood => { - generateGreenHouseRecipe(event, `8x tfc:wood/sapling/${wood}`, 16000, `64x tfc:wood/log/${wood}`, `tfg:greenhouse/${wood}`) + generateGreenHouseRecipe(event, `8x tfc:wood/sapling/${wood}`, 16000, `64x tfc:wood/log/${wood}`, `tfg:greenhouse/${wood}`, true) }) global.AFC_SAPLINGS.forEach(x => { - generateGreenHouseRecipe(event, `8x afc:wood/sapling/${x.sapling}`, 16000, `64x ${x.log}`, `tfg:greenhouse/${x.sapling}`) + generateGreenHouseRecipe(event, `8x afc:wood/sapling/${x.sapling}`, 16000, `64x ${x.log}`, `tfg:greenhouse/${x.sapling}`, true) }) // Семена фруктов global.TFC_GREENHOUSE_FRUIT_RECIPE_COMPONENTS.forEach(element => { - generateGreenHouseRecipe(event, element.input, element.fluid_amount, element.output, element.name) + generateGreenHouseRecipe(event, element.input, element.fluid_amount, element.output, element.name, true) }) // Семена овощей global.TFC_GREENHOUSE_VEGETABLE_RECIPE_COMPONENTS.forEach(element => { - generateGreenHouseRecipe(event, element.input, element.fluid_amount, element.output, element.name) + generateGreenHouseRecipe(event, element.input, element.fluid_amount, element.output, element.name, false) }) // Семена ягод global.TFC_GREENHOUSE_BERRY_RECIPE_COMPONENTS.forEach(element => { - generateGreenHouseRecipe(event, element.input, element.fluid_amount, element.output, element.name) + generateGreenHouseRecipe(event, element.input, element.fluid_amount, element.output, element.name, false) }) // Растения @@ -121,7 +121,7 @@ const registerTFCRecipes = (event) => { const itemId = element.id; const recipeId = `greenhouse_${itemId.replace(':', '_')}`; - generateGreenHouseRecipe(event, itemId, 8000, `8x ${itemId}`, recipeId); + generateGreenHouseRecipe(event, itemId, 8000, `8x ${itemId}`, recipeId, false); }); //#endregion diff --git a/kubejs/startup_scripts/gtceu/machines.js b/kubejs/startup_scripts/gtceu/machines.js index b60fe890b..936294408 100644 --- a/kubejs/startup_scripts/gtceu/machines.js +++ b/kubejs/startup_scripts/gtceu/machines.js @@ -19,15 +19,15 @@ const registerGTCEuMachines = (event) => { .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("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:dirt/silt') + .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')) @@ -36,11 +36,39 @@ const registerGTCEuMachines = (event) => { .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() ) - .workableCasingRenderer('gtceu:block/casings/solid/machine_casing_solid_steel', 'gtceu:block/multiblock/implosion_compressor', false) + .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