const FusionReactorMachine = Java.loadClass("com.gregtechceu.gtceu.common.machine.multiblock.electric.FusionReactorMachine")

GTCEuStartupEvents.registry('gtceu:machine', event => {
    event.create('uev_fusion_reactor', 'multiblock').machine((holder) => new FusionReactorMachine(holder, GTValues.UEV))
        .rotationState(RotationState.ALL)
        .recipeTypes(GTRecipeTypes.FUSION_RECIPES)
        .noRecipeModifier()
        .appearanceBlock(() => Block.getBlock('kubejs:fusion_casing_mk4'))
        .pattern(definition => FactoryBlockPattern.start()
            .aisle('###############', '######CBC######', '###############')
            .aisle('######CCC######', '####BB###BB####', '######CCC######')
            .aisle('####CC###CC####', '###E##CBC##E###', '####CC###CC####')
            .aisle('###C#######C###', '##EAEBCACBEAE##', '###C#######C###')
            .aisle('##C#########C##', '#B#E##C#C##E#B#', '##C#########C##')
            .aisle('##C###CCC###C##', '#B#B##BBB##B#B#', '##C###CCC###C##')
            .aisle('#C###C##CC###C#', 'C#CCCB###BCCC#C', '#C###CC##C###C#')
            .aisle('#C###C#C#C###C#', 'B#BA#B#B#B#AB#B', '#C###C#C#C###C#')
            .aisle('#C###CC##C###C#', 'C#CCCB###BCCC#C', '#C###C##CC###C#')
            .aisle('##C###CCC###C##', '#B#B##BBB##B#B#', '##C###CCC###C##')
            .aisle('##C#########C##', '#B#E##C#C##E#B#', '##C#########C##')
            .aisle('###C#######C###', '##EAEBCACBEAE##', '###C#######C###')
            .aisle('####CC###CC####', '###E##CBC##E###', '####CC###CC####')
            .aisle('######CCC######', '####BB###BB####', '######CCC######')
            .aisle('###############', '######CKC######', '###############')
            .where('K', Predicates.controller(Predicates.blocks(definition.get())))
            .where('E', Predicates.blocks('gtceu:uev_energy_input_hatch').setMinGlobalLimited(1).setMaxGlobalLimited(16).setPreviewCount(16)
                .or(Predicates.blocks('kubejs:fusion_casing_mk4')))
            .where('B', Predicates.blocks('kubejs:fusion_glass_mk2')
                .or(Predicates.blocks('kubejs:fusion_casing_mk4')))
            .where('A', Predicates.blocks('kubejs:fusion_coil_mk2'))
            .where("C", Predicates.blocks('kubejs:fusion_casing_mk4').setMinGlobalLimited(115)
                .or(Predicates.abilities(PartAbility.IMPORT_FLUIDS).setMinGlobalLimited(2))
                .or(Predicates.abilities(PartAbility.EXPORT_FLUIDS).setMinGlobalLimited(1))
                .or(Predicates.abilities(PartAbility.MAINTENANCE).setExactLimit(1))
                .or(Predicates.abilities(PartAbility.COMPUTATION_DATA_RECEPTION).setExactLimit(1))
            )
            .where('#', Predicates.any())
            .build()
        )
        .workableCasingRenderer("kubejs:block/fusion/fusion_casing_mk4", 'gtceu:block/multiblock/fusion_reactor', true)
})