
GTCEuStartupEvents.registry('gtceu:machine', event => {
    event.create('robust_extractinator', 'multiblock')
        .rotationState(RotationState.NON_Y_AXIS)
        .recipeType('extractinator')
        .recipeModifiers([GTRecipeModifiers.PARALLEL_HATCH, GTRecipeModifiers.OC_NON_PERFECT, GTRecipeModifiers.BATCH_MODE])
        .appearanceBlock(GTBlocks.MACHINE_CASING_IV)
        .pattern(definition => FactoryBlockPattern.start()
            .aisle('#CCC#', '#CDC#', '#CDC#', '#CCC#', '##C##')
            .aisle('CABAC', 'C###C', 'C###C', 'C###C', '#CCC#')
            .aisle('CBBBC', 'D#E#D', 'D#E#D', 'C#E#C', 'CCECC')
            .aisle('CABAC', 'C###C', 'C###C', 'C###C', '#CCC#')
            .aisle('#CKC#', '#CDC#', '#CDC#', '#CCC#', '##C##')
            .where('K', Predicates.controller(Predicates.blocks(definition.get())))
            .where('B', Predicates.blocks('gtceu:assembly_line_casing'))
            .where('D', Predicates.blocks('gtceu:fusion_glass'))
            .where('E', Predicates.blocks('gtceu:electrolytic_cell'))
            .where('A', Predicates.blocks('gtceu:solid_machine_casing'))
            .where("C", Predicates.blocks('gtceu:watertight_casing')
                  .or(Predicates.abilities(PartAbility.PARALLEL_HATCH))
                  .or(Predicates.abilities(PartAbility.EXPORT_ITEMS, PartAbility.IMPORT_ITEMS, PartAbility.EXPORT_FLUIDS, PartAbility.IMPORT_FLUIDS))
                  .or(Predicates.abilities(PartAbility.MAINTENANCE).setExactLimit(1))
                  .or(Predicates.abilities(PartAbility.INPUT_ENERGY).setExactLimit(1))
            )
            .where('#', Predicates.any())
            .build()
        )
        .workableCasingModel("gtceu:block/casings/gcym/watertight_casing", 'gtceu:block/machines/extractinator')
})