// priority: 0 const registerGTCEuMachines = (event) => { const CoilWorkableElectricMultiblockMachine = Java.loadClass("com.gregtechceu.gtceu.api.machine.multiblock.CoilWorkableElectricMultiblockMachine") const $Tags = Java.loadClass("dev.latvian.mods.kubejs.util.Tags") //#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("ae2:quartz_glass")) .where("I", Predicates.blocks("tfg:casings/machine_casing_iron_desh")) .where("K", Predicates.blocks("tfg:reflector")) .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.blockTag($Tags.block("tfg:gtceu_concrete_blocks"))) .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("ae2:quartz_glass")) .where("F", Predicates.blocks("tfg:casings/machine_casing_iron_desh")) .where("G", Predicates.blocks("tfg:reflector")) .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') .recipeModifiers([GTRecipeModifiers.PARALLEL_HATCH]) .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.blockTag($Tags.block("tfg:gtceu_concrete_blocks"))) .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("ae2:quartz_glass")) .where("F", Predicates.blocks("tfg:casings/machine_casing_iron_desh")) .where("G", Predicates.blocks("tfg:reflector")) .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)) .or(Predicates.abilities(PartAbility.PARALLEL_HATCH).setMaxGlobalLimited(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') .machine((holder) => new CoilWorkableElectricMultiblockMachine(holder)) .rotationState(RotationState.NON_Y_AXIS) .recipeType('nuclear_fuel_factory') .recipeModifiers( [ GTRecipeModifiers.PARALLEL_HATCH, (machine, recipe) => GTRecipeModifiers.pyrolyseOvenOverclock(machine, recipe), GTRecipeModifiers.BATCH_MODE ] ) .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.heatingCoils()) .where('L', Predicates.blocks('gtceu:atomic_casing').setMinGlobalLimited(15) .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.EXPORT_FLUIDS).setPreviewCount(1)) .or(Predicates.abilities(PartAbility.INPUT_ENERGY).setExactLimit(1)) .or(Predicates.abilities(PartAbility.PARALLEL_HATCH).setMaxGlobalLimited(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, GTRecipeModifiers.BATCH_MODE]) .appearanceBlock(() => Block.getBlock('gtceu:high_temperature_smelting_casing')) .pattern(definition => FactoryBlockPattern.start() .aisle(' ','BBBBBBB','BCCCCCB','BBBBBBB',' ') .aisle('AAAAAAA','A#####A','ZDDDDDZ','A#####A','AAAAAAA') .aisle('AFFFFFA','B#####B','LEEEEEL','B#####B','AFFFFFA') .aisle('AAAAAAA','A#####A','ZDDDDDZ','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('Z', Predicates.blocks('gtceu:high_temperature_smelting_casing') .or(Predicates.abilities(PartAbility.IMPORT_FLUIDS_4X).setMaxGlobalLimited(2)) .or(Predicates.abilities(PartAbility.EXPORT_FLUIDS_4X).setMaxGlobalLimited(2))) .where('#', Predicates.air()) .where(' ', Predicates.any()) .build() ) .workableCasingModel( "gtceu:block/casings/gcym/high_temperature_smelting_casing", "gtceu:block/machines/fluid_heater") // Nuclear Fission Reactor - Just keeping it in case we got mod issues /* 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 Ore Line // Ostrum Harvester event.create('ostrum_harvester', 'multiblock') .machine((holder) => new CoilWorkableElectricMultiblockMachine(holder)) .rotationState(RotationState.NON_Y_AXIS) .recipeType('ostrum_harvester') .recipeModifiers([(machine, recipe) => GTRecipeModifiers.crackerOverclock(machine, recipe), GTRecipeModifiers.BATCH_MODE]) .appearanceBlock(() => Block.getBlock('gtceu:nonconducting_casing')) .pattern(definition => FactoryBlockPattern.start() .aisle(' ' ,'A A', 'AAAAA', 'ACCCA', 'AACAA', ' AAA ') .aisle(' G ' ,' ', 'BBBBB', 'B###B', 'BB#BB', ' BFB ') .aisle(' GGG ' ,' ', 'ADDDA', 'D###D', 'A###A', ' BFB ') .aisle('GGGGG' ,' ', 'ADDDA', 'D###D', 'A###A', ' BFB ') .aisle(' GGG ' ,' ', 'ADDDA', 'D###D', 'A###A', ' BFB ') .aisle(' G ' ,' ', 'BBBBB', 'B###B', 'BB#BB', ' BFB ') .aisle(' ' ,'A A', 'AAAAA', 'ACXCA', 'AACAA', ' AAA ') .where('X', Predicates.controller(Predicates.blocks(definition.get()))) .where('A', Predicates.blocks('gtceu:secure_maceration_casing')) .where('B', Predicates.blocks('gtceu:nonconducting_casing')) .where('C', Predicates.blocks('gtceu:nonconducting_casing') .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).setMaxGlobalLimited(2).setPreviewCount(2)) .or(Predicates.abilities(PartAbility.MAINTENANCE).setExactLimit(1).setPreviewCount(1))) .where('D', Predicates.blocks('tfg:casings/machine_casing_vacuum_engine_intake')) .where('F', Predicates.heatingCoils()) .where('G', Predicates.blocks('tfg:spice')) .where('#', Predicates.air()) .where(' ', Predicates.any()) .build() ) .workableCasingModel( 'gtceu:block/casings/gcym/nonconducting_casing', 'gtceu:block/multiblock/distillation_tower') // Moon Harvester event.create('moon_dust_harvester', 'multiblock') .machine((holder) => new CoilWorkableElectricMultiblockMachine(holder)) .rotationState(RotationState.NON_Y_AXIS) .recipeType('moon_dust_harvester') .recipeModifiers([(machine, recipe) => GTRecipeModifiers.crackerOverclock(machine, recipe), GTRecipeModifiers.BATCH_MODE]) .appearanceBlock(() => Block.getBlock('gtceu:nonconducting_casing')) .pattern(definition => FactoryBlockPattern.start() .aisle('A A', 'AAAAA', 'ACCCA', 'AAEAA', ' AAA ') .aisle(' ', 'BBBBB', 'B###B', 'BB#BB', ' BFB ') .aisle(' ', 'ADDDA', 'D###D', 'A###A', ' BFB ') .aisle(' ', 'ADDDA', 'D###D', 'A###A', ' BFB ') .aisle(' ', 'ADDDA', 'D###D', 'A###A', ' BFB ') .aisle(' ', 'BBBBB', 'B###B', 'BB#BB', ' BFB ') .aisle('A A', 'AAAAA', 'ACXCA', 'AACAA', ' AAA ') .where('X', Predicates.controller(Predicates.blocks(definition.get()))) .where('A', Predicates.blocks('tfg:casings/machine_casing_iron_desh')) .where('B', Predicates.blocks('gtceu:nonconducting_casing')) .where('C', Predicates.blocks('gtceu:nonconducting_casing') .or(Predicates.abilities(PartAbility.IMPORT_ITEMS).setMaxGlobalLimited(1).setPreviewCount(1)) .or(Predicates.abilities(PartAbility.EXPORT_ITEMS).setMaxGlobalLimited(1).setPreviewCount(1)) .or(Predicates.abilities(PartAbility.INPUT_ENERGY).setMinGlobalLimited(1).setMaxGlobalLimited(2).setPreviewCount(1)) .or(Predicates.abilities(PartAbility.MAINTENANCE).setExactLimit(1).setPreviewCount(1))) .where('D', Predicates.blocks('tfg:casings/machine_casing_vacuum_engine_intake')) .where('E', Predicates.blocks('gtceu:nonconducting_casing')) .where('F', Predicates.heatingCoils()) .where('#', Predicates.air()) .where(' ', Predicates.any()) .build() ) .workableCasingModel( 'gtceu:block/casings/gcym/nonconducting_casing', 'gtceu:block/multiblock/distillation_tower') //#region Power Rework // Coal Liquefaction Tower event.create('coal_liquefaction_tower', 'multiblock') .machine((holder) => new CoilWorkableElectricMultiblockMachine(holder)) .rotationState(RotationState.NON_Y_AXIS) .recipeType('coal_liquefaction_tower') .recipeModifiers([(machine, recipe) => GTRecipeModifiers.pyrolyseOvenOverclock(machine, recipe), GTRecipeModifiers.BATCH_MODE]) .appearanceBlock(() => Block.getBlock('gtceu:solid_machine_casing')) .pattern(definition => FactoryBlockPattern.start() .aisle('CCC', 'D D', 'D D', 'DED', 'DED', 'BBB') .aisle('CCC', ' Y ', ' E ', 'E#E', 'EEE', 'BMB') .aisle('CXC', 'D D', 'D D', 'DED', 'DED', 'BBB' ) .where('X', Predicates.controller(Predicates.blocks(definition.get()))) .where('B', Predicates.blocks('gtceu:solid_machine_casing').setMinGlobalLimited(4) .or(Predicates.abilities(PartAbility.IMPORT_FLUIDS).setPreviewCount(2)) .or(Predicates.abilities(PartAbility.IMPORT_ITEMS).setPreviewCount(1))) .where('C', Predicates.blocks('gtceu:solid_machine_casing') .or(Predicates.abilities(PartAbility.EXPORT_FLUIDS).setPreviewCount(2)) .or(Predicates.abilities(PartAbility.INPUT_ENERGY).setMinGlobalLimited(1).setMaxGlobalLimited(2).setPreviewCount(2)) .or(Predicates.abilities(PartAbility.MAINTENANCE).setExactLimit(1).setPreviewCount(1))) .where('D', Predicates.blocks('create:metal_girder')) .where('E', Predicates.blocks('gtceu:steam_machine_casing')) .where('Y', Predicates.heatingCoils()) .where('M', Predicates.abilities(PartAbility.MUFFLER).setExactLimit(1)) .where('#', Predicates.air()) .where(' ', Predicates.any()) .build() ) .workableCasingModel( 'gtceu:block/casings/solid/machine_casing_solid_steel', 'gtceu:block/multiblock/distillation_tower') }