
GTCEuStartupEvents.registry('gtceu:recipe_type', event => {
    event.create('kinetic_sieve')
        .category('kinetic_sieve')
        .setMaxIOSize(2, 10, 0, 0)
        .setSound(GTSoundEntries.MACERATOR);
});

GTCEuStartupEvents.registry('gtceu:machine', event => {
    event.create('kinetic_sieve', 'multiblock')
        .rotationState(RotationState.NON_Y_AXIS)
        .recipeType('kinetic_sieve')
        //.appearanceBlock('kubejs:wood_casing')
        .pattern(definition => FactoryBlockPattern.start()
            .aisle('F...F', 'F...F', 'F...F', 'FFFFF', 'WWWWW', 'WWWWW', 'WWWWW')
            .aisle('.....', '.....', '.....', 'FWWWF', 'WMMMW', 'W...W', 'W...W')
            .aisle('.....', '.....', '.....', 'FWWWF', 'WMMMW', 'W...W', 'W...W')
            .aisle('.....', '.....', '.....', 'FWWWF', 'WMMMW', 'W...W', 'W...W')
            .aisle('F...F', 'F...F', 'F...F', 'FFFFF', 'WWCWW', 'WWWWW', 'WWWWW')
            .where('C', Predicates.controller(Predicates.blocks(definition.get())))
            .where('W', Predicates.blocks('kubejs:wood_casing')
                .or(Predicates.abilities(PartAbility.INPUT_KINETIC).setExactLimit(1))
                .or(Predicates.abilities(PartAbility.EXPORT_ITEMS))
                .or(Predicates.abilities(PartAbility.IMPORT_ITEMS)))
            .where('F', Predicates.blocks('gtceu:treated_wood_frame'))     
            .where('M', Predicates.blocks('kubejs:meshblock'))
            .where('.', Predicates.any())
            .build())
        .workableCasingRenderer("kubejs:block/casings/casing-wood",
        "gtceu:block/multiblock/coke_oven", false);
});