// priority: 0 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") //#region Nether Dome event.create('nether_dome', 'multiblock') .rotationState(RotationState.NON_Y_AXIS) .recipeType('nether_dome') .appearanceBlock(GTBlocks.CASING_PTFE_INERT) .pattern(definition => FactoryBlockPattern.start() .aisle(" CCCCC ", " QQFQQ ", " QQFQQ ", " QQFQQ ", " QQFQQ ", " F ") .aisle("CBBBBBC", "Q#####Q", "Q#####Q", "Q#####Q", "QTTTTTQ", " QQQQQ ") .aisle("CBBBBBC", "Q#####Q", "Q#####Q", "Q#####Q", "QTTTTTQ", " QQQQQ ") .aisle("CBBBBBC", "F#####F", "F#####F", "F#####F", "FTTTTTF", "FQQQQQF") .aisle("CBBBBBC", "Q#####Q", "Q#####Q", "Q#####Q", "QTTTTTQ", " QQQQQ ") .aisle("CBBBBBC", "Q#####Q", "Q#####Q", "Q#####Q", "QTTTTTQ", " QQQQQ ") .aisle(" CCXCC ", " QGOGQ ", " QOPOQ ", " QOPOQ ", " QGOGQ ", " ") .where('X', Predicates.controller(Predicates.blocks(definition.get()))) .where('B', Predicates.blocks('tfc:rock/magma/basalt').setMinGlobalLimited(6) .or(Predicates.blocks('minecraft:netherrack').setMinGlobalLimited(10))) .where('T', Predicates.blocks('minecraft:glowstone').setMinGlobalLimited(5) .or(Predicates.blocks('minecraft:netherrack').setMinGlobalLimited(10))) .where('O', Predicates.blocks('minecraft:obsidian')) .where('F', Predicates.frames('black_steel')) .where('Q', Predicates.blocks('ae2:quartz_glass')) .where('G', Predicates.blocks('minecraft:gold_block') .or(Predicates.blocks('tfc:rock/raw/basalt')) .or(Predicates.blocks('tfc:rock/hardened/basalt')) .or(Predicates.blocks('tfc:rock/bricks/basalt')) .or(Predicates.blocks('tfc:rock/chiseled/basalt')) .or(Predicates.blocks('minecraft:obsidian')) .or(Predicates.blocks('minecraft:nether_bricks'))) .where('P', Predicates.blocks('minecraft:purple_stained_glass_pane')) .where('C', Predicates.blocks(GTBlocks.CASING_PTFE_INERT.get()).setMinGlobalLimited(10) .or(Predicates.autoAbilities(definition.getRecipeTypes())) .or(Predicates.abilities(PartAbility.MAINTENANCE).setExactLimit(1))) .where('#', Predicates.air() .or(Predicates.blocks('minecraft:netherrack')) .or(Predicates.blocks('tfc:rock/magma/basalt')) .or(Predicates.blocks('minecraft:glowstone')) .or(Predicates.blocks('minecraft:nether_bricks'))) .where(' ', Predicates.any()) .build() ) .shapeInfo(controller => MultiblockShapeInfo.builder() .aisle(" CeCeC ", " QQFQQ ", " QQFQQ ", " QQFQQ ", " QQFQQ ", " F ") .aisle("CMMMNNC", "Q NQ", "Q Q", "Q Q", "QNTTNNQ", " QQQQQ ") .aisle("iMMNNNf", "QR Q", "QR Q", "Q T Q", "QNTTTNQ", " QQQQQ ") .aisle("CNMMMNC", "F NF", "F F", "F F", "FNNTNNF", "FQQQQQF") .aisle("tNNNMNl", "Q NQ", "Q NQ", "Q Q", "QNNNNNQ", " QQQQQ ") .aisle("CNNNNNC", "QN NNQ", "Q NQ", "Q NQ", "QNNNNNQ", " QQQQQ ") .aisle(" mCXCC ", " QGOGQ ", " QOPOQ ", " QOPOQ ", " QGOGQ ", " ") .where('X', controller, Direction.SOUTH) .where('C', GTBlocks.CASING_PTFE_INERT.get()) .where('N', Block.getBlock('minecraft:netherrack')) .where('M', Block.getBlock('tfc:rock/magma/basalt')) .where('T', Block.getBlock('minecraft:glowstone')) .where('Q', Block.getBlock('ae2:quartz_glass')) .where('F', Block.getBlock('gtceu:black_steel_frame')) .where('G', Block.getBlock('minecraft:gold_block')) .where('O', Block.getBlock('minecraft:obsidian')) .where('P', Block.getBlock('minecraft:purple_stained_glass_pane')) .where('R', Block.getBlock('minecraft:nether_bricks')) .where(' ', Block.getBlock('minecraft:air')) .where('m', GTMachines.MAINTENANCE_HATCH, Direction.SOUTH) .where('i', GTMachines.ITEM_IMPORT_BUS[GTValues.ULV], Direction.WEST) .where('t', GTMachines.ITEM_EXPORT_BUS[GTValues.ULV], Direction.WEST) .where('f', GTMachines.FLUID_IMPORT_HATCH[GTValues.MV], Direction.EAST) .where('l', GTMachines.FLUID_EXPORT_HATCH[GTValues.MV], Direction.EAST) .where('e', GTMachines.ENERGY_INPUT_HATCH[GTValues.MV], Direction.NORTH) .build() ) .workableCasingModel( "gtceu:block/casings/solid/machine_casing_inert_ptfe", "gtceu:block/machines/gas_collector") //#endregion //#region End Dome event.create('end_dome', 'multiblock') .rotationState(RotationState.NON_Y_AXIS) .recipeType('end_dome') .appearanceBlock(GTBlocks.CASING_TITANIUM_STABLE) .pattern(definition => FactoryBlockPattern.start() .aisle(" CCCCC ", " QQFQQ ", " QQFQQ ", " QQFQQ ", " QQFQQ ", " F ", " ") .aisle("CBBBBBC", "QOOOOOQ", "QOOOOOQ", "QOOOOOQ", "QOOOOOQ", " QSSSQ ", " GGG ") .aisle("CBBBBBC", "QOOOOOQ", "QOOOOOQ", "QOOOOOQ", "QOOOOOQ", " SNNNS ", " G G ") .aisle("CBBBBBC", "FOOEOOF", "FOOOOOF", "FOOOOOF", "FOOOOOF", "FSNNNSF", " G G ") .aisle("CBBBBBC", "QOOOOOQ", "QOOOOOQ", "QOOOOOQ", "QOOOOOQ", " SNNNS ", " G G ") .aisle("CBBBBBC", "QOOOOOQ", "QOOOOOQ", "QOOOOOQ", "QOOOOOQ", " QSSSQ ", " GGG ") .aisle(" CCXCC ", " QQFQQ ", " QQFQQ ", " QQFQQ ", " QQFQQ ", " F ", " ") .where('X', Predicates.controller(Predicates.blocks(definition.get()))) .where('B', Predicates.blocks('minecraft:end_stone').setMinGlobalLimited(20) .or(Predicates.blocks('minecraft:black_concrete'))) .where('O', Predicates.blocks('minecraft:obsidian').setMinGlobalLimited(8) .or(Predicates.air())) .where('F', Predicates.frames('titanium')) .where('Q', Predicates.blocks('ae2:quartz_glass')) .where('E', Predicates.blocks('minecraft:dragon_egg')) .where('S', Predicates.blocks('tfg:artificial_end_portal_frame')) .where('N', Predicates.blocks('minecraft:black_concrete')) .where('G', Predicates.blocks('tfc:ore/small_malachite') .or(Predicates.blocks('tfc:ore/small_native_copper')) .or(Predicates.blocks('tfc:ore/small_native_gold')) .or(Predicates.blocks('tfc:ore/small_hematite')) .or(Predicates.blocks('tfc:ore/small_native_silver')) .or(Predicates.blocks('tfc:ore/small_cassiterite')) .or(Predicates.blocks('tfc:ore/small_bismuthinite')) .or(Predicates.blocks('tfc:ore/small_garnierite')) .or(Predicates.blocks('tfc:ore/small_malachite')) .or(Predicates.blocks('tfc:ore/small_magnetite')) .or(Predicates.blocks('tfc:ore/small_limonite')) .or(Predicates.blocks('tfc:ore/small_sphalerite')) .or(Predicates.blocks('tfc:ore/small_tetrahedrite'))) .where('C', Predicates.blocks(GTBlocks.CASING_TITANIUM_STABLE.get()).setMinGlobalLimited(10) .or(Predicates.autoAbilities(definition.getRecipeTypes())) .or(Predicates.abilities(PartAbility.MAINTENANCE).setExactLimit(1))) .where(' ', Predicates.any()) .build() ) .shapeInfo(controller => MultiblockShapeInfo.builder() .aisle(" CeCeC ", " QQFQQ ", " QQFQQ ", " QQFQQ ", " QQFQQ ", " F ", " ") .aisle("CBBBBBC", "Q O Q", "Q O Q", "Q Q", "Q Q", " QSSSQ ", " 123 ") .aisle("iBBBBBf", "QO OQ", "QO Q", "QO Q", "Q Q", " SNNNS ", " y 4 ") .aisle("CBBBBBC", "F E F", "F F", "F F", "F F", "FSNNNSF", " z 5 ") .aisle("tBBBBNl", "Q O Q", "Q O Q", "Q Q", "Q Q", " SNNNS ", " 0 6 ") .aisle("CNBBNNC", "Q Q", "Q Q", "Q Q", "Q Q", " QSSSQ ", " 987 ") .aisle(" mCXCC ", " QQFQQ ", " QQFQQ ", " QQFQQ ", " QQFQQ ", " F ", " ") .where('X', controller, Direction.SOUTH) .where('C', GTBlocks.CASING_TITANIUM_STABLE.get()) .where('B', Block.getBlock('minecraft:end_stone')) .where('N', Block.getBlock('minecraft:black_concrete')) .where('O', Block.getBlock('minecraft:obsidian')) .where('F', Block.getBlock('gtceu:titanium_frame')) .where('Q', Block.getBlock('ae2:quartz_glass')) .where(' ', Block.getBlock('minecraft:air')) .where('S', Block.getBlock('tfg:artificial_end_portal_frame')) .where('E', Block.getBlock('minecraft:dragon_egg')) .where('1', Block.getBlock('tfc:ore/small_native_copper')) .where('2', Block.getBlock('tfc:ore/small_native_gold')) .where('3', Block.getBlock('tfc:ore/small_hematite')) .where('4', Block.getBlock('tfc:ore/small_native_silver')) .where('5', Block.getBlock('tfc:ore/small_cassiterite')) .where('6', Block.getBlock('tfc:ore/small_bismuthinite')) .where('7', Block.getBlock('tfc:ore/small_garnierite')) .where('8', Block.getBlock('tfc:ore/small_malachite')) .where('9', Block.getBlock('tfc:ore/small_magnetite')) .where('0', Block.getBlock('tfc:ore/small_limonite')) .where('z', Block.getBlock('tfc:ore/small_sphalerite')) .where('y', Block.getBlock('tfc:ore/small_tetrahedrite')) .where('m', GTMachines.MAINTENANCE_HATCH, Direction.SOUTH) .where('i', GTMachines.ITEM_IMPORT_BUS[GTValues.ULV], Direction.WEST) .where('t', GTMachines.ITEM_EXPORT_BUS[GTValues.ULV], Direction.WEST) .where('f', GTMachines.FLUID_IMPORT_HATCH[GTValues.MV], Direction.EAST) .where('l', GTMachines.FLUID_EXPORT_HATCH[GTValues.MV], Direction.EAST) .where('e', GTMachines.ENERGY_INPUT_HATCH[GTValues.HV], Direction.NORTH) .build() ) .workableCasingModel( "gtceu:block/casings/solid/machine_casing_stable_titanium", "gtceu:block/machines/gas_collector") //#endregion //#region Steam Bloomery event.create('steam_bloomery', 'multiblock') .machine((holder) => new $SteamMulti(holder, 8)) .rotationState(RotationState.NON_Y_AXIS) .recipeType('steam_bloomery') .recipeModifier((machine, recipe) => $SteamMulti.recipeModifier(machine, recipe), true) .appearanceBlock(GTBlocks.CASING_BRONZE_BRICKS) .pattern(definition => FactoryBlockPattern.start() .aisle(" F ", " C ", " E ", " E ", " E ") .aisle("FCF", "C#C", "E#E", "E#E", "E#E") .aisle(" F ", "CXC", " E ", " E ", " E ") .where('X', Predicates.controller(Predicates.blocks(definition.get()))) .where('C', Predicates.blockTag($Tags.block("tfc:bloomery_insulation"))) .where('F', Predicates.blocks(GTBlocks.FIREBOX_BRONZE.get()) .or(Predicates.abilities(PartAbility.STEAM).setExactLimit(1))) .where('E', Predicates.abilities(PartAbility.STEAM_IMPORT_ITEMS).setMaxGlobalLimited(2) .or(Predicates.abilities(PartAbility.STEAM_EXPORT_ITEMS).setExactLimit(1)) .or(Predicates.blockTag($Tags.block("tfc:bloomery_insulation")))) .where('#', Predicates.air()) .where(' ', Predicates.any()) .build() ) .shapeInfo(controller => MultiblockShapeInfo.builder() .aisle(" F ", " C ", " C ", " C ", " C ") .aisle("FCF", "C#C", "C#C", "C#C", "C#C") .aisle(" i ", "CXC", " O ", " I ", " C ") .where('X', controller, Direction.SOUTH) .where('C', Block.getBlock('tfc:rock/bricks/rhyolite')) .where('F', GTBlocks.FIREBOX_BRONZE.get()) .where('i', GTMachines.STEAM_HATCH, Direction.SOUTH) .where('O', GTMachines.STEAM_EXPORT_BUS, Direction.SOUTH) .where('I', GTMachines.STEAM_IMPORT_BUS, Direction.SOUTH) .build() ) .workableCasingModel( "gtceu:block/casings/solid/machine_casing_bronze_plated_bricks", "tfg:block/steam_bloomery") //#endregion //#region Large Solar Panels //Tier 1 event.create('large_solar_panel', 'multiblock') .regressWhenWaiting(false) .rotationState(RotationState.NON_Y_AXIS) .generator(true) .recipeType('large_solar_panel') .noRecipeModifier() .appearanceBlock(() => Block.getBlock('tfg:casings/machine_casing_iron_desh')) .pattern(definition => FactoryBlockPattern.start() .aisle(" S S ", " S S ", " CCCCC ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ") .aisle(" S S ", " S S ", " CC CC ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ") .aisle(" S S ", " CCCCC ", " CC CC ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ") .aisle(" S S ", " CC CC ", " C C ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ") .aisle(" CCC ", " CC CC ", " CC CC ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ") .aisle(" S S CC CC S S ", " S C C S ", " C C ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ") .aisle(" C C ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ") .aisle("S S S S", "S C C S", "C C", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ") .aisle(" C FFF C ", " C B B C ", "C B B C", " B B ", " B B ", " B B ", " B B ", " B B ", " B B ", " B B ", " EEE ", " GGG ", " GGG ", " GGG ") .aisle(" C FIF C ", " C I C ", "C I C", " I ", " I ", " I ", " I ", " I ", " I ", " I ", " EIE ", " GIG ", " GKG ", " GGG ") .aisle(" C FHF C ", " C B B C ", "C B B C", " B B ", " B B ", " B B ", " B B ", " B B ", " B B ", " B B ", " EEE ", " GGG ", " GGG ", " GGG ") .aisle("S S S S", "S C C S", "C C", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ") .aisle(" C C ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ") .aisle(" S S CC CC S S ", " S C C S ", " C C ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ") .aisle(" CCC ", " CC CC ", " CC CC ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ") .aisle(" S S ", " CC CC ", " C C ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ") .aisle(" S S ", " CCCCC ", " CC CC ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ") .aisle(" S S ", " S S ", " CC CC ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ") .aisle(" S S ", " S S ", " CCCCC ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ") .where("H", Predicates.controller(Predicates.blocks(definition.get()))) .where("B", Predicates.blocks(ChemicalHelper.getBlock(TagPrefix.frameGt, GTMaterials.StainlessSteel))) .where("S", Predicates.blocks(ChemicalHelper.getBlock(TagPrefix.frameGt, GTMaterials.Steel))) .where("C", Predicates.blocks("tfg:casings/machine_casing_blue_solar_panel")) .where("E", Predicates.blocks("ad_astra:iron_plateblock")) .where("F", Predicates.blocks("tfg:casings/machine_casing_iron_desh") .or(Predicates.autoAbilities(definition.getRecipeTypes())) .or(Predicates.abilities(PartAbility.MAINTENANCE).setExactLimit(1)) ) .where("G", Predicates.blocks(GTBlocks.CASING_TEMPERED_GLASS.get())) .where("I", Predicates.blocks("tfg:casings/machine_casing_iron_desh")) .where("K", Predicates.blocks(ChemicalHelper.getBlock(TagPrefix.block, GTMaterials.Silver))) .where(" ", Predicates.any()) .build() ) .workableCasingModel('tfg:block/casings/machine_casing_iron_desh', 'gtceu:block/multiblock/hpca') //Tier 2 event.create('large_solar_panel_tier2', 'multiblock') .regressWhenWaiting(false) .rotationState(RotationState.NON_Y_AXIS) .generator(true) .recipeType('large_solar_panel_tier2') .noRecipeModifier() .appearanceBlock(() => Block.getBlock('tfg:casings/machine_casing_iron_desh')) .pattern(definition => FactoryBlockPattern.start() .aisle(" A A ", " A A ", " S S ", " S S ", " CCCCCCC ", " ", " ", " ", " ", " ", " ", " ", " ", " ") .aisle(" A A ", " A A ", " S S ", " S S ", " CCC CCC ", " ", " ", " ", " ", " ", " ", " ", " ", " ") .aisle(" S S ", " S S ", " S S ", " CCCCCCC ", " CC CC ", " ", " ", " ", " ", " ", " ", " ", " ", " ") .aisle(" A S S A ", " A S S A ", " S S S S ", " S CC CC S ", " C C ", " ", " ", " ", " ", " ", " ", " ", " ", " ") .aisle(" S S ", " S S ", " CCCCC ", " C C ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ") .aisle(" A S S A ", " A S S A ", " S CC CC S ", " S CC CC S ", " CC CC ", " ", " ", " ", " ", " ", " ", " ", " ", " ") .aisle(" S S ", " CCCCC ", " CC CC ", " CC CC ", " CC CC ", " ", " ", " ", " ", " ", " ", " ", " ", " ") .aisle(" S S ", " CC CC ", " C C ", " C C ", " C C ", " ", " ", " ", " ", " ", " ", " ", " ", " ") .aisle(" A S CCC S A ", " A S CC CC S A ", " S S CC CC S S ", " S C C S ", " C C ", " ", " ", " ", " ", " ", " ", " ", " ", " ") .aisle(" S S CC CC S S ", " S C C S ", " C C ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ") .aisle("A S C C S A", "A S S A", "S S S S", "S C C S", "C C", " ", " ", " ", " ", " ", " ", " ", " ", " ") .aisle(" S S S S ", " S C C S ", " C C ", " C C ", "C C", " ", " ", " ", " ", " ", " ", " ", " ", " ") .aisle(" C III C ", " C B B C ", " C B B C ", " C B B C ", "C B B C", " B B ", " B B ", " B B ", " B B ", " B B ", " DDD ", " EEE ", " EEE ", " EEE ") .aisle(" C IFI C ", " C F C ", " C F C ", " C F C ", "C F C", " F ", " F ", " F ", " F ", " F ", " DFD ", " EFE ", " EGE ", " EEE ") .aisle(" C IHI C ", " C B B C ", " C B B C ", " C B B C ", "C B B C", " B B ", " B B ", " B B ", " B B ", " B B ", " DDD ", " EEE ", " EEE ", " EEE ") .aisle(" S S S S ", " S C C S ", " C C ", " C C ", "C C", " ", " ", " ", " ", " ", " ", " ", " ", " ") .aisle("A S C C S A", "A S S A", "S S S S", "S C C S", "C C", " ", " ", " ", " ", " ", " ", " ", " ", " ") .aisle(" S S CC CC S S ", " S C C S ", " C C ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ") .aisle(" A S CCC S A ", " A S CC CC S A ", " S S CC CC S S ", " S C C S ", " C C ", " ", " ", " ", " ", " ", " ", " ", " ", " ") .aisle(" S S ", " CC CC ", " C C ", " C C ", " C C ", " ", " ", " ", " ", " ", " ", " ", " ", " ") .aisle(" S S ", " CCCCC ", " CC CC ", " CC CC ", " CC CC ", " ", " ", " ", " ", " ", " ", " ", " ", " ") .aisle(" A S S A ", " A S S A ", " S CC CC S ", " S CC CC S ", " CC CC ", " ", " ", " ", " ", " ", " ", " ", " ", " ") .aisle(" S S ", " S S ", " CCCCC ", " C C ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ") .aisle(" A S S A ", " A S S A ", " S S S S ", " S CC CC S ", " C C ", " ", " ", " ", " ", " ", " ", " ", " ", " ") .aisle(" S S ", " S S ", " S S ", " CCCCCCC ", " CC CC ", " ", " ", " ", " ", " ", " ", " ", " ", " ") .aisle(" A A ", " A A ", " S S ", " S S ", " CCC CCC ", " ", " ", " ", " ", " ", " ", " ", " ", " ") .aisle(" A A ", " A A ", " S S ", " S S ", " CCCCCCC ", " ", " ", " ", " ", " ", " ", " ", " ", " ") .where("A", Predicates.blocks('gtceu:light_concrete') .or(Predicates.blocks('gtceu:polished_light_concrete')) .or(Predicates.blocks('gtceu:light_concrete_bricks')) .or(Predicates.blocks('gtceu:cracked_light_concrete_bricks')) .or(Predicates.blocks('gtceu:mossy_light_concrete_bricks')) .or(Predicates.blocks('gtceu:chiseled_light_concrete')) .or(Predicates.blocks('gtceu:light_concrete_tile')) .or(Predicates.blocks('gtceu:light_concrete_small_tile')) .or(Predicates.blocks('gtceu:light_concrete_windmill_a')) .or(Predicates.blocks('gtceu:light_concrete_windmill_b')) .or(Predicates.blocks('gtceu:small_light_concrete_bricks')) .or(Predicates.blocks('gtceu:square_light_concrete_bricks')) .or(Predicates.blocks('gtceu:dark_concrete')) .or(Predicates.blocks('gtceu:polished_dark_concrete')) .or(Predicates.blocks('gtceu:dark_concrete_bricks')) .or(Predicates.blocks('gtceu:cracked_dark_concrete_bricks')) .or(Predicates.blocks('gtceu:mossy_dark_concrete_bricks')) .or(Predicates.blocks('gtceu:chiseled_dark_concrete')) .or(Predicates.blocks('gtceu:dark_concrete_tile')) .or(Predicates.blocks('gtceu:dark_concrete_small_tile')) .or(Predicates.blocks('gtceu:dark_concrete_windmill_a')) .or(Predicates.blocks('gtceu:dark_concrete_windmill_b')) .or(Predicates.blocks('gtceu:small_dark_concrete_bricks')) .or(Predicates.blocks('gtceu:square_dark_concrete_bricks')) ) .where("B", Predicates.blocks(ChemicalHelper.getBlock(TagPrefix.frameGt, GTMaterials.TungstenSteel))) .where("S", Predicates.blocks(ChemicalHelper.getBlock(TagPrefix.frameGt, GTMaterials.Aluminium))) .where("C", Predicates.blocks("tfg:casings/machine_casing_green_solar_panel")) .where("D", Predicates.blocks("ad_astra:iron_plateblock")) .where("E", Predicates.blocks(GTBlocks.CASING_TEMPERED_GLASS.get())) .where("F", Predicates.blocks("tfg:casings/machine_casing_iron_desh")) .where("G", Predicates.blocks(ChemicalHelper.getBlock(TagPrefix.block, GTMaterials.Silver))) .where("H", Predicates.controller(Predicates.blocks(definition.get()))) .where("I", Predicates.blocks("tfg:casings/machine_casing_iron_desh") .or(Predicates.autoAbilities(definition.getRecipeTypes())) .or(Predicates.abilities(PartAbility.MAINTENANCE).setExactLimit(1)) ) .where(" ", Predicates.any()) .build() ) .workableCasingModel('tfg:block/casings/machine_casing_iron_desh', 'gtceu:block/multiblock/hpca') //Tier 3 event.create('large_solar_panel_tier3', 'multiblock') .regressWhenWaiting(false) .rotationState(RotationState.NON_Y_AXIS) .generator(true) .recipeType('large_solar_panel_tier3') .noRecipeModifier() .appearanceBlock(() => Block.getBlock('tfg:casings/machine_casing_iron_desh')) .pattern(definition => FactoryBlockPattern.start() .aisle(" A A ", " A A ", " A A ", " S S ", " S S ", " S S ", " CCCCCCCCC ", " ", " ", " ", " ", " ", " ", " ") .aisle(" A A ", " A A ", " A A ", " S S ", " S S ", " S S ", " CC CC ", " ", " ", " ", " ", " ", " ", " ") .aisle(" A A ", " A A ", " S S ", " S S ", " S S ", " CCCCCCC ", " CCC CCC ", " ", " ", " ", " ", " ", " ", " ") .aisle(" A A A A ", " A A A A ", " A S S A ", " S S S S ", " S S S S ", " S CCC CCC S ", " C C ", " ", " ", " ", " ", " ", " ", " ") .aisle(" A A S S A A ", " A A S S A A ", " A S S S S A ", " S S S S S S ", " S S CCCCCCC S S ", " S CCC CCC S ", " CC CC ", " ", " ", " ", " ", " ", " ", " ") .aisle(" A S S A ", " A S S A ", " S S S S ", " S S S S ", " S CCC CCC S ", " C C ", " CC CC ", " ", " ", " ", " ", " ", " ", " ") .aisle(" A S S A ", " A S S A ", " A S S A ", " S CCCCCCC S ", " S CC CC S ", " S CC CC S ", " C C ", " ", " ", " ", " ", " ", " ", " ") .aisle(" A S S S S A ", " A S S S S A ", " S S S S S S ", " S S CC CC S S ", " S C C S ", " CC CC ", " ", " ", " ", " ", " ", " ", " ", " ") .aisle(" AA S S AA ", " AA S S AA ", " AS CCCCC SA ", " SS C C SS ", " SS SS ", " SC CS ", " CC CC ", " ", " ", " ", " ", " ", " ", " ") .aisle(" S S S S ", " S S S S ", " S CC CC S ", " S CC CC S ", " CC CC ", " C C ", " C C ", " ", " ", " ", " ", " ", " ", " ") .aisle(" S S ", " CCCCC ", " CC CC ", " CC CC ", " CC CC ", " CC CC ", " CC CC ", " ", " ", " ", " ", " ", " ", " ") .aisle(" A S S A ", " A CC CC A ", " A C C A ", " S C C S ", " S C C S ", " S C C S ", " C C ", " ", " ", " ", " ", " ", " ", " ") .aisle(" A S S CCC S S A ", " A S S CC CC S S A ", " S S S CC CC S S S ", " S S C C S S ", " S C C S ", " C C ", " ", " ", " ", " ", " ", " ", " ", " ") .aisle("A S S CC CC S S A", "A S C C S A", "A C C A", "S S", "S S", "S S", "C C", " ", " ", " ", " ", " ", " ", " ") .aisle(" A S S C C S S A ", " A S S S S A ", " S S S S S S ", " S S C C S S ", " S C C S ", " C C ", "C C", " ", " ", " ", " ", " ", " ", " ") .aisle(" S S S S ", " S C C S ", " C C ", " C C ", " C C ", " C C ", "C C", " ", " ", " ", " ", " ", " ", " ") .aisle(" C III C ", " C B B C ", " C B B C ", " C B B C ", " C B B C ", " C B B C ", "C B B C", " B B ", " B B ", " B B ", " DDD ", " EEE ", " EEE ", " EEE ") .aisle(" C IFI C ", " C F C ", " C F C ", " C F C ", " C F C ", " C F C ", "C F C", " F ", " F ", " F ", " DFD ", " EFE ", " EGE ", " EEE ") .aisle(" C IHI C ", " C B B C ", " C B B C ", " C B B C ", " C B B C ", " C B B C ", "C B B C", " B B ", " B B ", " B B ", " DDD ", " EEE ", " EEE ", " EEE ") .aisle(" S S S S ", " S C C S ", " C C ", " C C ", " C C ", " C C ", "C C", " ", " ", " ", " ", " ", " ", " ") .aisle(" A S S C C S S A ", " A S S S S A ", " S S S S S S ", " S S C C S S ", " S C C S ", " C C ", "C C", " ", " ", " ", " ", " ", " ", " ") .aisle("A S S CC CC S S A", "A S C C S A", "A C C A", "S S", "S S", "S S", "C C", " ", " ", " ", " ", " ", " ", " ") .aisle(" A S S CCC S S A ", " A S S CC CC S S A ", " S S S CC CC S S S ", " S S C C S S ", " S C C S ", " C C ", " ", " ", " ", " ", " ", " ", " ", " ") .aisle(" A S S A ", " A CC CC A ", " A C C A ", " S C C S ", " S C C S ", " S C C S ", " C C ", " ", " ", " ", " ", " ", " ", " ") .aisle(" S S ", " CCCCC ", " CC CC ", " CC CC ", " CC CC ", " CC CC ", " CC CC ", " ", " ", " ", " ", " ", " ", " ") .aisle(" S S S S ", " S S S S ", " S CC CC S ", " S CC CC S ", " CC CC ", " C C ", " C C ", " ", " ", " ", " ", " ", " ", " ") .aisle(" AA S S AA ", " AA S S AA ", " AS CCCCC SA ", " SS C C SS ", " SS SS ", " SC CS ", " CC CC ", " ", " ", " ", " ", " ", " ", " ") .aisle(" A S S S S A ", " A S S S S A ", " S S S S S S ", " S S CC CC S S ", " S C C S ", " CC CC ", " ", " ", " ", " ", " ", " ", " ", " ") .aisle(" A S S A ", " A S S A ", " A S S A ", " S CCCCCCC S ", " S CC CC S ", " S CC CC S ", " C C ", " ", " ", " ", " ", " ", " ", " ") .aisle(" A S S A ", " A S S A ", " S S S S ", " S S S S ", " S CCC CCC S ", " C C ", " CC CC ", " ", " ", " ", " ", " ", " ", " ") .aisle(" A A S S A A ", " A A S S A A ", " A S S S S A ", " S S S S S S ", " S S CCCCCCC S S ", " S CCC CCC S ", " CC CC ", " ", " ", " ", " ", " ", " ", " ") .aisle(" A A A A ", " A A A A ", " A S S A ", " S S S S ", " S S S S ", " S CCC CCC S ", " C C ", " ", " ", " ", " ", " ", " ", " ") .aisle(" A A ", " A A ", " S S ", " S S ", " S S ", " CCCCCCC ", " CCC CCC ", " ", " ", " ", " ", " ", " ", " ") .aisle(" A A ", " A A ", " A A ", " S S ", " S S ", " S S ", " CC CC ", " ", " ", " ", " ", " ", " ", " ") .aisle(" A A ", " A A ", " A A ", " S S ", " S S ", " S S ", " CCCCCCCCC ", " ", " ", " ", " ", " ", " ", " ") .where("A", Predicates.blocks('gtceu:light_concrete') .or(Predicates.blocks('gtceu:polished_light_concrete')) .or(Predicates.blocks('gtceu:light_concrete_bricks')) .or(Predicates.blocks('gtceu:cracked_light_concrete_bricks')) .or(Predicates.blocks('gtceu:mossy_light_concrete_bricks')) .or(Predicates.blocks('gtceu:chiseled_light_concrete')) .or(Predicates.blocks('gtceu:light_concrete_tile')) .or(Predicates.blocks('gtceu:light_concrete_small_tile')) .or(Predicates.blocks('gtceu:light_concrete_windmill_a')) .or(Predicates.blocks('gtceu:light_concrete_windmill_b')) .or(Predicates.blocks('gtceu:small_light_concrete_bricks')) .or(Predicates.blocks('gtceu:square_light_concrete_bricks')) .or(Predicates.blocks('gtceu:dark_concrete')) .or(Predicates.blocks('gtceu:polished_dark_concrete')) .or(Predicates.blocks('gtceu:dark_concrete_bricks')) .or(Predicates.blocks('gtceu:cracked_dark_concrete_bricks')) .or(Predicates.blocks('gtceu:mossy_dark_concrete_bricks')) .or(Predicates.blocks('gtceu:chiseled_dark_concrete')) .or(Predicates.blocks('gtceu:dark_concrete_tile')) .or(Predicates.blocks('gtceu:dark_concrete_small_tile')) .or(Predicates.blocks('gtceu:dark_concrete_windmill_a')) .or(Predicates.blocks('gtceu:dark_concrete_windmill_b')) .or(Predicates.blocks('gtceu:small_dark_concrete_bricks')) .or(Predicates.blocks('gtceu:square_dark_concrete_bricks')) ) .where("B", Predicates.blocks(ChemicalHelper.getBlock(TagPrefix.frameGt, GTMaterials.RhodiumPlatedPalladium))) .where("S", Predicates.blocks(ChemicalHelper.getBlock(TagPrefix.frameGt, GTMaterials.StainlessSteel))) .where("C", Predicates.blocks("tfg:casings/machine_casing_red_solar_panel")) .where("D", Predicates.blocks("ad_astra:iron_plateblock")) .where("E", Predicates.blocks(GTBlocks.CASING_TEMPERED_GLASS.get())) .where("F", Predicates.blocks("tfg:casings/machine_casing_iron_desh")) .where("G", Predicates.blocks(ChemicalHelper.getBlock(TagPrefix.block, GTMaterials.Silver))) .where("H", Predicates.controller(Predicates.blocks(definition.get()))) .where("I", Predicates.blocks("tfg:casings/machine_casing_iron_desh") .or(Predicates.autoAbilities(definition.getRecipeTypes())) .or(Predicates.abilities(PartAbility.MAINTENANCE).setExactLimit(1)) ) .where(" ", Predicates.any()) .build() ) .workableCasingModel('tfg:block/casings/machine_casing_iron_desh', 'gtceu:block/multiblock/hpca') //#endregion //#region Nuclear Multiblocks // Nuclear Fuel Factory event.create('nuclear_fuel_factory', 'multiblock') .rotationState(RotationState.NON_Y_AXIS) .recipeType('nuclear_fuel_factory') .recipeModifiers([GTRecipeModifiers.PARALLEL_HATCH, GTRecipeModifiers.ELECTRIC_OVERCLOCK.apply(OverclockingLogic.NON_PERFECT_OVERCLOCK)]) .appearanceBlock(() => Block.getBlock('gtceu:atomic_casing')) .pattern(definition => FactoryBlockPattern.start() .aisle('RLLLR', 'I I', 'I I', 'I I', 'RLLLR') .aisle('LRRRL', ' KPK ', ' KPK ', ' KPK ', 'LRRRL') .aisle('LRSRL', ' PCP ', ' PCP ', ' PCP ', 'LRSRL') .aisle('LRRRL', ' KPK ', ' KPK ', ' KPK ', 'LRRRL') .aisle('RLXLR', 'I I', 'I I', 'I I', 'RLLLR') .where('X', Predicates.controller(Predicates.blocks(definition.get()))) .where('R', Predicates.blocks('gtceu:atomic_casing')) .where('I', Predicates.blocks('gtceu:stainless_steel_frame')) .where('G', Predicates.blocks('gtceu:high_temperature_smelting_casing')) .where('P', Predicates.blocks('gtceu:laminated_glass')) .where('S', Predicates.blocks(GTBlocks.CASING_ENGINE_INTAKE.get())) .where('K', Predicates.blocks('gtceu:high_temperature_smelting_casing')) .where('C', Predicates.blocks(GTBlocks.COIL_RTMALLOY.get())) .where('L', Predicates.blocks('gtceu:atomic_casing') .or(Predicates.abilities(PartAbility.IMPORT_ITEMS).setPreviewCount(1)) .or(Predicates.abilities(PartAbility.EXPORT_ITEMS).setPreviewCount(1)) .or(Predicates.abilities(PartAbility.MAINTENANCE).setExactLimit(1)) .or(Predicates.abilities(PartAbility.IMPORT_FLUIDS).setPreviewCount(1)) .or(Predicates.abilities(PartAbility.INPUT_ENERGY).setExactLimit(1)) .or(Predicates.abilities(PartAbility.PARALLEL_HATCH).setExactLimit(1))) .where('#', Predicates.air()) .where(' ', Predicates.any()) .build() ) .workableCasingModel( 'gtceu:block/casings/gcym/atomic_casing', 'gtceu:block/machines/fermenter') // Nuclear Heat Exchanger event.create('heat_exchanger', 'multiblock') .rotationState(RotationState.NON_Y_AXIS) .recipeType('heat_exchanger') .recipeModifiers([GTRecipeModifiers.OC_PERFECT_SUBTICK]) .appearanceBlock(() => Block.getBlock('gtceu:high_temperature_smelting_casing')) .pattern(definition => FactoryBlockPattern.start() .aisle(' ','BBBBBBB','BCCCCCB','BBBBBBB',' ') .aisle('AAAAAAA','A#####A','BDDDDDB','A#####A','AAAAAAA') .aisle('AFFFFFA','B#####B','LEEEEEL','B#####B','AFFFFFA') .aisle('AAAAAAA','A#####A','BDDDDDB','A#####A','AAAAAAA') .aisle(' ','BBBXBBB','BCCCCCB','BBBMBBB',' ') .where('X', Predicates.controller(Predicates.blocks(definition.get()))) .where('A', Predicates.blocks('gtceu:atomic_casing')) .where('B', Predicates.blocks('gtceu:high_temperature_smelting_casing') .or(Predicates.abilities(PartAbility.INPUT_ENERGY).setExactLimit(1))) .where('C', Predicates.blocks('gtceu:laminated_glass')) .where('D', Predicates.blocks(GTBlocks.FIREBOX_TITANIUM.get())) .where('E', Predicates.blocks(GTBlocks.CASING_TITANIUM_PIPE.get())) .where('F', Predicates.blocks(GTBlocks.CASING_ENGINE_INTAKE.get())) .where('L', Predicates.blocks('gtceu:high_temperature_smelting_casing') .or(Predicates.abilities(PartAbility.IMPORT_FLUIDS_4X).setExactLimit(1)) .or(Predicates.abilities(PartAbility.EXPORT_FLUIDS_4X).setExactLimit(1))) .where('M', Predicates.abilities(PartAbility.MAINTENANCE).setExactLimit(1) .or(Predicates.blocks('gtceu:high_temperature_smelting_casing'))) .where('#', Predicates.air()) .where(' ', Predicates.any()) .build() ) .workableCasingModel( "gtceu:block/casings/gcym/high_temperature_smelting_casing", "gtceu:block/machines/fluid_heater") // Nuclear Fission Reactor event.create('fission_reactor', 'multiblock') .rotationState(RotationState.NON_Y_AXIS) .recipeType('fission_reactor') .recipeModifiers([GTRecipeModifiers.OC_PERFECT_SUBTICK]) .appearanceBlock(() => Block.getBlock('gtceu:atomic_casing')) .pattern(definition => FactoryBlockPattern.start() .aisle('LLLLL','ABCBA','ABCBA','ABCBA','ABCBA','ABCBA','LLLLL') .aisle('LAAAL','BE#EB','BE#EB','BE#EB','BE#EB','BE#EB','LAAAL') .aisle('LAAAL','C#D#C','C#D#C','C#D#C','C#D#C','C#D#C','LAAAL') .aisle('LAAAL','BE#EB','BE#EB','BE#EB','BE#EB','BE#EB','LAAAL') .aisle('LLXLL','ABCBA','ABCBA','ABCBA','ABCBA','ABCBA','LLLLL') .where('X', Predicates.controller(Predicates.blocks(definition.get()))) .where('A', Predicates.blocks('gtceu:high_temperature_smelting_casing')) .where('B', Predicates.blocks('gtceu:atomic_casing')) .where('C', Predicates.blocks('gtceu:laminated_glass')) .where('D', Predicates.blocks(GTBlocks.FIREBOX_TITANIUM.get())) .where('E', Predicates.blocks('gtceu:titanium_frame')) .where('F', Predicates.blocks(GTBlocks.CASING_ENGINE_INTAKE.get())) .where('L', Predicates.blocks('gtceu:atomic_casing').setMinGlobalLimited(10) .or(Predicates.abilities(PartAbility.IMPORT_FLUIDS).setPreviewCount(1)) .or(Predicates.abilities(PartAbility.EXPORT_FLUIDS).setPreviewCount(1)) .or(Predicates.abilities(PartAbility.IMPORT_ITEMS).setPreviewCount(1)) .or(Predicates.abilities(PartAbility.INPUT_ENERGY).setExactLimit(1)) .or(Predicates.abilities(PartAbility.MAINTENANCE).setExactLimit(1))) .where('#', Predicates.air()) .where(' ', Predicates.any()) .build() ) .workableCasingModel( "gtceu:block/casings/gcym/atomic_casing", "gtceu:block/machines/electromagnetic_separator") //#endregion //#region Evaporation Tower event.create('evaporation_tower', 'multiblock') .rotationState(RotationState.NON_Y_AXIS) .recipeType('evaporation_tower') .noRecipeModifier() .appearanceBlock(() => Block.getBlock('tfg:casings/machine_casing_stainless_evaporation')) .pattern(definition => FactoryBlockPattern.start() .aisle('ZBZ','CCC','CCC','CCC',' A ') .aisle('BAB','C#C','C#C','C#C','AAA') .aisle('ZXZ','CCC','CCC','CCC',' A ') .where('X', Predicates.controller(Predicates.blocks(definition.get()))) .where('A', Predicates.blocks('tfg:casings/machine_casing_stainless_evaporation')) .where('B', Predicates.blocks('tfg:casings/machine_casing_stainless_evaporation') .or(Predicates.abilities(PartAbility.IMPORT_FLUIDS).setMaxGlobalLimited(1).setPreviewCount(1)) .or(Predicates.abilities(PartAbility.EXPORT_ITEMS).setMaxGlobalLimited(1).setPreviewCount(1)) .or(Predicates.abilities(PartAbility.INPUT_ENERGY).setExactLimit(1))) .where('C', Predicates.blocks('tfg:casings/machine_casing_stainless_evaporation') .or(Predicates.abilities(PartAbility.EXPORT_FLUIDS).setPreviewCount(1)) .or(Predicates.abilities(PartAbility.MAINTENANCE).setExactLimit(1))) .where('Z', Predicates.blocks('gtceu:aluminium_frame')) .where('#', Predicates.air()) .where(' ', Predicates.any()) .build() ) .workableCasingModel( 'gtceu:block/casings/solid/machine_casing_stainless_evaporation', 'gtceu:block/multiblock/distillation_tower') }