more greenhouse tweaks, added a recipe for grass blocks

This commit is contained in:
Pyritie
2025-06-04 21:49:00 +01:00
parent e13960638f
commit 3eebef1616
7 changed files with 71 additions and 44 deletions

View File

@@ -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

View File

@@ -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.')),

View File

@@ -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

View File

@@ -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) => {

View File

@@ -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

View File

@@ -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

View File

@@ -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