event.create('thorium_heat_exchanger', 'multiblock')
.rotationState(RotationState.NON_Y_AXIS)
.recipeType('thorium_heat_exchanger')
.recipeModifiers(GTRecipeModifiers.PARALLEL_HATCH, GTRecipeModifiers.ELECTRIC_OVERCLOCK.apply(OverclockingLogic.PERFECT_OVERCLOCK))
.appearanceBlock(GTBlocks.CASING_TITANIUM_STABLE)
.pattern(definition => FactoryBlockPattern.start()
.aisle('BBCCC', 'BBCCC', 'BBCCC', 'BBCCC', 'BBCCC', 'BBCCC', 'BBCCC')
.aisle('BBCCC', 'BBCCC', 'BBCCC', 'ABCCC', 'BBCCC', 'BBCCC', 'BBCCC')
.aisle('BBCCC', 'BBCCC', 'BBCCC', 'BBCCC', 'BBCCC', 'BBCCC', 'BBCCC')
.where('A', Predicates.controller(Predicates.blocks(definition.get())))
.where('B', Predicates.blocks('nuclearscience:blocklead'.get())
.or(Predicates.autoAbilities(definition.getRecipeTypes()))
.or(Predicates.abilities(PartAbility.MAINTENANCE).setExactLimit(1))
.or(Predicates.abilities(PartAbility.PARALLEL_HATCH).setMaxGlobalLimited(1)))
.where('C', Predicates.blocks('immersiveengineering:radiator'.get())
.or(Predicates.autoAbilities(definition.getRecipeTypes()))
.or(Predicates.abilities(PartAbility.MAINTENANCE).setExactLimit(1))
.or(Predicates.abilities(PartAbility.PARALLEL_HATCH).setMaxGlobalLimited(1)))
.where(' ', Predicates.any())
.build())
.workableCasingRenderer("gtceu:block/casings/solid/machine_casing_stable_titanium",
"gtceu:block/multiblock/primitive_blast_furnace", false);
})```