Skip to content

Example_MultiBlock

LiangquHMF edited this page Aug 15, 2026 · 12 revisions
  • Begining from V1.1.0-Beta1 :energyMultiplier and durationMultiplier are now configurable.

  • 从 V1.1.0-Beta1 开始:能耗倍率和时长倍率可以配置。

    event.create('kjs_config_parallel', 'multiblock')
         .machine((holder) => new ConfigurableElectricParallelMachine(holder, 32,0.5,0.5))
         //Builder(holder, maxParallel, energyMultiplier, durationMultiplier)
         //Builder(holder,最大并行,能耗倍率,时长倍率)
         .rotationState(RotationState.ALL)
         .appearanceBlock(GCYMBlocks.CASING_INDUSTRIAL_STEAM)
         .recipeType('forge_hammer')
         .recipeModifier((machine, recipe) => ConfigurableElectricParallelMachine.recipeModifier(machine, recipe), true)
         .addOutputLimit(ItemRecipeCapability.CAP, 1)
         .pattern(definition => FactoryBlockPattern.start()
             .aisle('AAAAAA', 'ACCCCA', 'AAAAAA')
             .aisle('AAAAAA', 'ADDDDA', 'AAAAAA')
             .aisle('AAAAAA', 'ACACCA', 'AAAAAA')
             .aisle('AAA###', 'AKA###', 'AAA###')
             .where('#', Predicates.any())
             .where('K', Predicates.controller(Predicates.blocks(definition.get())))
             .where('D', Predicates.blocks('gtceu:bronze_gearbox'))
             .where('C', Predicates.blocks('gtceu:frame_bronze'))
             .where('A', Predicates.blocks('gtceu:industrial_steam_casing').setMinGlobalLimited(45)
                 .or(Predicates.abilities(PartAbility.IMPORT_ITEMS).setPreviewCount(1))
                 .or(Predicates.abilities(PartAbility.EXPORT_ITEMS).setPreviewCount(1))
                 .or(Predicates.abilities(PartAbility.INPUT_ENERGY).setExactLimit(1)))
             .build())
         .model(GTMachineModels.createWorkableCasingMachineModel(
             GTCEu.id('block/casings/gcym/industrial_steam_casing'),
             GTCEu.id('block/multiblock/large_chemical_reactor')))
  • Max_parallels = Base_parallels * 2 ^ ( CasingTier - 1 )

  • Duration = Base_Duration * ( 1 - ( PipeTier - 1 ) * 0.1 )

  • Energy_consumer = Base_Energy_consumer * ( 1 - ( FrameTier - 1 ) * 0.05 )

  • 最大并行数 = 初始并行数 × 2^(外壳等级-1)

  • 配方时长倍率 = 1 - (管道等级-1) × 0.1

  • 能耗倍率 = 1 - (框架等级-1) × 0.05

    event.create('kjs_enhanceable_electric', 'multiblock')
       .machine((holder) => new EnhanceableElectricMachine(holder, true, true))
       /*Builder(holder,useFrame,usePipe):
         useFrame-When set to true, enables the frame tier mechanism.
         usePipe-When set to true, enables the pipe tier mechanism.
         useFrame-当设置为 true 时,启用框架等级机制
         usePipe-当设置为 true 时,启用管道方块等级机制
       */
       .rotationState(RotationState.ALL)
       .appearanceBlock(GTBlocks.CASING_STEEL_SOLID)
       .recipeType('forge_hammer')
       .recipeModifier((machine, recipe) => EnhanceableElectricMachine.recipeModifier(machine, recipe), true)
       .addOutputLimit(ItemRecipeCapability.CAP, 1)
       .pattern(definition => FactoryBlockPattern.start()
           .aisle('AAAAAA', 'ACCCCA', 'AAAAAA')
           .aisle('AAAAAA', 'ADDDDA', 'AAAAAA')
           .aisle('AAAAAA', 'ACACCA', 'AAAAAA')
           .aisle('AAA###', 'AKA###', 'AAA###')
           .where('#', Predicates.any())
           .where('K', Predicates.controller(Predicates.blocks(definition.get())))
           .where('D', GTUFPatternPredicates.UniversalPipeTier())
           .where('C', GTUFPatternPredicates.UniversalFrameTier())
           .where('A', GTUFPatternPredicates.UniversalCasingTier().setMinGlobalLimited(40)
           /*
             GTUF_PatternPredicates:
             UniversalCasingTier:CASING_STEEL_SOLID=1,CASING_ALUMINIUM_FROSTPROOF=2,
                                 CASING_STAINLESS_CLEAN=3,CASING_TITANIUM_STABLE=4,CASING_TUNGSTENSTEEL_ROBUST=5
             UniversalFrameTier:Steel=1,Aluminium=2,StainlessSteel=3,Titanium=4,TungstenSteel=5
             UniversalPipeTier:CASING_BRONZE_PIPE=1,CASING_STEEL_PIPE=2,CASING_TITANIUM_PIPE=3,CASING_TUNGSTENSTEEL_PIPE=4
             UniversalGearboxTier:Not used yet(暂无使用)
             SteamCasingTier:CASING_BRONZE_BRICKS=1,CASING_STEEL_SOLID=2
             SteamFrameTier:Bronze=1,Steel=2
           */
               .or(Predicates.abilities(PartAbility.IMPORT_ITEMS).setPreviewCount(1))
               .or(Predicates.abilities(PartAbility.EXPORT_ITEMS).setPreviewCount(1))
               .or(Predicates.abilities(PartAbility.INPUT_ENERGY).setExactLimit(1))
               .or(Predicates.abilities(GTUFPartAbility.THREAD_HATCH).setPreviewCount(1)))
           .build())
       .model(GTUFModels.createTieredMachineModel(
           GTCEu.id('block/casings/solid/machine_casing_solid_steel'),
           GTCEu.id('block/multiblock/large_chemical_reactor')))
  • Begining from V1.1.0-Beta1 :energyMultiplier and durationMultiplier are now configurable.

  • 从 V1.1.0-Beta1 开始:能耗倍率和时长倍率可以配置。

  • Begining from V1.1.0-Beta1-Fix1: the voltage-based extra energy consumption multiplier and the voltage-based extra speed multiplier are now configurable.

  • 从 V1.1.0-Beta1-Fix1 开始:电压额外能耗倍率和电压额外加速倍率可以配置。

  • Max_parallels = Math.max(1,parallelMultiplier * tier)

  • 最大并行数 = Math.max(1,并行倍率 * 电压等级)

    event.create('kjs_tier_parallel', 'multiblock')
       .machine((holder) => new TierElectricParallelMachine(holder,2,0.5,0.5,1,1))
       //Builder(holder,parallelMultiplier,durationMultiplier,energyMultiplier,TierenergyMultiplier(default=1),TierspeedMultiplier(default=1))
       //Builder(holder,并行倍率,时长倍率,能耗倍率,电压额外能耗倍率(1=默认),电压额外加速倍率(1=默认))
       .rotationState(RotationState.ALL)                       
       .appearanceBlock(GCYMBlocks.CASING_INDUSTRIAL_STEAM)    
       .recipeType('forge_hammer')                             
       .recipeModifier((machine, recipe) => TierElectricParallelMachine.recipeModifier(machine, recipe), true)
       .addOutputLimit(ItemRecipeCapability.CAP, 1)           
       .pattern(definition => FactoryBlockPattern.start()
           .aisle('AAAAAA', 'ACCCCA', 'AAAAAA')
           .aisle('AAAAAA', 'ADDDDA', 'AAAAAA')
           .aisle('AAAAAA', 'ACACCA', 'AAAAAA')
           .aisle('AAA###', 'AKA###', 'AAA###')
           .where('#', Predicates.any())
           .where('K', Predicates.controller(Predicates.blocks(definition.get())))
           .where('D', Predicates.blocks('gtceu:bronze_gearbox'))
           .where('C', Predicates.blocks('gtceu:frame_bronze'))
           .where('A', Predicates.blocks('gtceu:industrial_steam_casing').setMinGlobalLimited(45)
               .or(Predicates.abilities(PartAbility.IMPORT_ITEMS).setPreviewCount(1))
               .or(Predicates.abilities(PartAbility.EXPORT_ITEMS).setPreviewCount(1))
               .or(Predicates.abilities(PartAbility.INPUT_ENERGY).setExactLimit(1)))
           .build())
       .model(GTMachineModels.createWorkableCasingMachineModel(
           GTCEu.id('block/casings/gcym/industrial_steam_casing'),
           GTCEu.id('block/multiblock/large_chemical_reactor')))
event.create('kjs_adjustable_steam', 'multiblock')
     .machine((holder) => new AdjustableSteamParallelMachine(
         holder, GTRecipeTypes.MIXER_RECIPES, 64, 64, 0.5, true))
    /* Builder(holder,RecipeType,Base_Parallels,Max_Parallels,Duration,GuiConfig)
       Builder(holder,配方类型,初始并行数,最大并行数,配方时长倍率,并行数是否GUI可调)*/
     .rotationState(RotationState.NON_Y_AXIS)
     .appearanceBlock(GTBlocks.BRONZE_HULL)
     .recipeType('mixer')
     .pattern(definition => FactoryBlockPattern.start()
         .aisle('#######', '#######', '#######', '#######', '#######', '#######')
         .aisle('##A#A##', '##A#A##', '##CCC##', '##CCC##', '##CCC##', '#######')
         .aisle('#######', '#######', '##CCC##', '##CDC##', '##CCC##', '#######')
         .aisle('##A#A##', '##A#A##', '##CCC##', '##CDC##', '##CCC##', '#######')
         .aisle('##BBB##', '#######', '#######', '###D###', '##BBB##', '#######')
         .aisle('#BBBBB#', '##BBB##', '##BBB##', '##BDB##', '#BBBBB#', '##BBB##')
         .aisle('BBEEEBB', '#BF#FB#', '#B###B#', '#BFDFB#', 'BBBBBBB', '#BGGGB#')
         .aisle('BBEDEBB', '#G#D#G#', '#G#D#G#', '#G#D#G#', 'BBBBBBB', '#BGGGB#')
         .aisle('BBEEEBB', '#BF#FB#', '#B###B#', '#BF#FB#', 'BBBBBBB', '#BGGGB#')
         .aisle('#BBBBB#', '##BKB##', '##BGB##', '##BGB##', '#BBBBB#', '##BBB##')
         .aisle('##BBB##', '#######', '#######', '#######', '##BBB##', '#######')
         .where('K', Predicates.controller(Predicates.blocks(definition.get())))
         .where('C', GTUFPatternPredicates.Casing('minecraft:stone').setMinGlobalLimited(20)
             /*
             ⭐⭐⭐GTUF_PatternPredicates.Casing() – Applicable when .appearanceBlock does not match the block you intend to be replaced by hatches.
             ⭐⭐⭐GTUF_PatternPredicates.Casing():适用于当你的.appearanceBlock()与你期望被仓室替换的机械方块不同时。
             */
             .or(Predicates.abilities(PartAbility.STEAM_IMPORT_ITEMS).setPreviewCount(1))
             .or(Predicates.abilities(PartAbility.STEAM_EXPORT_ITEMS).setPreviewCount(1))
             .or(Predicates.abilities(PartAbility.STEAM).setExactLimit(1))
             .or(Predicates.abilities(PartAbility.EXPORT_FLUIDS))
             .or(Predicates.abilities(PartAbility.IMPORT_FLUIDS)))
         .where('B', Predicates.blocks('gtceu:steam_machine_casing'))
         .where('A', Predicates.blocks('gtceu:frame_bronze'))
         .where('F', Predicates.blocks('gtceu:bronze_gearbox'))
         .where('D', Predicates.blocks('gtceu:bronze_pipe_casing'))
         .where('E', Predicates.blocks('gtceu:bronze_firebox_casing'))
         .where('G', Predicates.blocks('minecraft:glass'))
         .where('#', Predicates.any())
         .build())
     .model(GTUFModels.createTieredSteamMachineModel(
         GTCEu.id('block/casings/solid/machine_casing_bronze_plated_bricks'),
         GTCEu.id('block/multiblock/large_chemical_reactor')))
  • Max_Parallel = Base_Parallels * 4 ^ ( CasingTier - 1 )

  • Duration = Base_Duration ^ ( 1 - ( FrameTier - 1 ) * 0.1 )

  • 最大并行数 = 初始并行数 × 4 ^ ( 外壳等级 - 1 )

  • 实际配方时间 = 原始配方时间 ^ ( 1 - ( 框架等级 - 1 ) × 0.1 )

    event.create('kjs_enhanceable_steam', 'multiblock')
         .machine((holder) => new EnhanceableSteamMachine(holder, GTRecipeTypes.MIXER_RECIPES, 2))
         //Base_Parallels = 2 (int) *初始并行数可调
         .rotationState(RotationState.NON_Y_AXIS)
         .appearanceBlock(GTBlocks.BRONZE_HULL)
         .recipeType('mixer')
         .pattern(definition => FactoryBlockPattern.start()
             .aisle('AAAAAA', 'ACCCCA', 'AAAAAA')
             .aisle('AAAAAA', 'ACCCCA', 'AAAAAA')
             .aisle('AAAAAA', 'ACCCCA', 'AAAAAA')
             .aisle('AAA###', 'AKA###', 'AAA###')
             .where('#', Predicates.any())
             .where('K', Predicates.controller(Predicates.blocks(definition.get())))
             .where('C', GTUFPatternPredicates.SteamFrameTier())
             .where('A', GTUFPatternPredicates.SteamCasingTier().setMinGlobalLimited(40)
                 .or(Predicates.abilities(PartAbility.STEAM_IMPORT_ITEMS).setPreviewCount(1))
                 .or(Predicates.abilities(PartAbility.STEAM_EXPORT_ITEMS).setPreviewCount(1))
                 .or(Predicates.abilities(PartAbility.STEAM).setExactLimit(1))
                 .or(Predicates.abilities(PartAbility.EXPORT_FLUIDS))
                 .or(Predicates.abilities(PartAbility.IMPORT_FLUIDS)))
             .build())
         .model(GTUFModels.createTieredSteamMachineModel(
             GTCEu.id('block/casings/solid/machine_casing_bronze_plated_bricks'),
             GTCEu.id('block/multiblock/large_chemical_reactor')))
  • When use IndustrialSteamHatchPartMachine 1 mB Steam = 4 EU , with OC to MV

  • 当使用 IndustrialSteamHatchPartMachine的蒸汽仓时,1 mB 蒸汽被转换为 4 EU, 且允许超频至 MV

    event.create('kjs_industrial_steam', 'multiblock')
         .machine((holder) => new IndustrialSteamMachine(holder, GTRecipeTypes.MIXER_RECIPES, 32))
         //Max_Parallels:32(int) 最大并行数32
         .rotationState(RotationState.NON_Y_AXIS)
         .appearanceBlock(GTBlocks.BRONZE_HULL)
         .recipeType('mixer')
         .pattern(definition => FactoryBlockPattern.start()
             .aisle('AAAAAA', 'ACCCCA', 'AAAAAA')
             .aisle('AAAAAA', 'ACCCCA', 'AAAAAA')
             .aisle('AAAAAA', 'ACCCCA', 'AAAAAA')
             .aisle('AAA###', 'AKA###', 'AAA###')
             .where('#', Predicates.any())
             .where('K', Predicates.controller(Predicates.blocks(definition.get())))
             .where('C', GTUFPatternPredicates.SteamFrameTier())
             .where('A', GTUFPatternPredicates.SteamCasingTier().setMinGlobalLimited(40)
                 .or(Predicates.abilities(PartAbility.STEAM_IMPORT_ITEMS).setPreviewCount(1))
                 .or(Predicates.abilities(PartAbility.STEAM_EXPORT_ITEMS).setPreviewCount(1))
                 .or(Predicates.abilities(PartAbility.STEAM).setExactLimit(1))
                 .or(Predicates.abilities(PartAbility.EXPORT_FLUIDS))
                 .or(Predicates.abilities(PartAbility.IMPORT_FLUIDS)))
             .build())
         .model(GTUFModels.createTieredSteamMachineModel(
             GTCEu.id('block/casings/solid/machine_casing_bronze_plated_bricks'),
             GTCEu.id('block/multiblock/large_chemical_reactor')))
  • MaxParallel = BaseParallel + CoilTier * ParallelMultiplier

  • Duration = 1 - CoilTier * DurationMultiplier

  • Energy = 1 - CoilTier * EnergyMultiplier

  • 最大并行数 = 起始并行数 + 线圈等级 * 并行倍率

  • 配方时长 = 1 - 线圈等级 * 时长倍率

  • 配方能耗 = 1 - 线圈等级 * 能耗倍率

    event.create('kjs_coil_enhance', 'multiblock')
         .machine((holder) => new EnhancedCoilElectricMachine(holder, 4, 0.1, 8.0, 0.05, true))
       //Builder(holder,baseParallel,DurationMultiplier,ParallelMultiplier,EnergyMultiplier,POC/NPOC)
       //Builder(holder,初始并行,时长倍率,并行倍率,能耗倍率,完美超频/非完美超频)
         .rotationState(RotationState.ALL)
         .appearanceBlock(GTBlocks.CASING_STEEL_SOLID)
         .recipeType('test_recipetype')
         .recipeModifier((machine, recipe) => EnhancedCoilElectricMachine.recipeModifier(machine, recipe)), true)
         .addOutputLimit(ItemRecipeCapability.CAP, 1)
         .pattern(definition => FactoryBlockPattern.start()
             .aisle('AAAAAA', 'ACCCCA', 'AAAAAA')
             .aisle('AAAAAA', 'ACCCCA', 'AAAAAA')
             .aisle('AAAAAA', 'ACCCCA', 'AAAAAA')
             .aisle('AAA###', 'AKA###', 'AAA###')
             .where('#', Predicates.any())
             .where('K', Predicates.controller(Predicates.blocks(definition.get())))
             .where('C', Predicates.heatingCoils())
             .where('A', Predicates.blocks('gtceu:industrial_steam_casing').setMinGlobalLimited(10)
                 .or(Predicates.abilities(PartAbility.EXPORT_FLUIDS).setPreviewCount(1))
                 .or(Predicates.abilities(PartAbility.IMPORT_FLUIDS).setPreviewCount(1))
                 .or(Predicates.abilities(PartAbility.INPUT_ENERGY).setExactLimit(1))
                 .or(Predicates.abilities(PartAbility.PARALLEL_HATCH).setExactLimit(1))
                 .or(Predicates.abilities(GTUFPartAbility.THREAD_HATCH).setExactLimit(1)))
             .build())
         .model(GTUFModels.createTieredMachineModel(
             GTCEu.id('block/casings/solid/machine_casing_solid_steel'),
             GTCEu.id('block/multiblock/large_chemical_reactor')))
  event.create('gtuf_distillation_tower', 'multiblock')
       .machine((holder) => new EnhancedDistillationTowerMachine(holder, 1, 4, 0.75, 0.8))
       //Builder(holder,yOffest,Parallel,DurationMultiplier,EnergyMultiplier)
       //Builder(holder,输出起始层数,并行数,时长倍率,能耗倍率)
       .rotationState(RotationState.ALL)
       .appearanceBlock(GTBlocks.CASING_STAINLESS_CLEAN)
       .recipeType('distillation_tower')
       .recipeModifier((machine, recipe) =>  
EnhancedDistillationTowerMachine.recipeModifier(machine, recipe), true)
       .pattern(definition => FactoryBlockPattern.start()
           .aisle('YSY', 'YYY', 'YYY')
           .aisle('XXX', 'X#X', 'XXX')
           .aisle('XXX', 'XXX', 'XXX')
           .where('#', Predicates.any())
           .where('S', Predicates.controller(Predicates.blocks(definition.get())))
           .where('Y', Predicates.blocks('gtceu:clean_machine_casing')
               .or(Predicates.abilities(PartAbility.EXPORT_ITEMS).setMaxGlobalLimited(1))
               .or(Predicates.abilities(PartAbility.INPUT_ENERGY).setMinGlobalLimited(1).setMaxGlobalLimited(2))
               .or(Predicates.abilities(PartAbility.IMPORT_FLUIDS).setExactLimit(1))
               .or(Predicates.abilities(PartAbility.EXPORT_FLUIDS).setPreviewCount(1)))
           .where('X', Predicates.blocks('gtceu:clean_machine_casing')
               .or(Predicates.abilities(PartAbility.EXPORT_FLUIDS).setPreviewCount(1)))
           .build())
       .model(GTMachineModels.createWorkableCasingMachineModel(
           GTCEu.id('block/casings/solid/machine_casing_clean_stainless_steel'),
           GTCEu.id('block/multiblock/distillation_tower')))
event.create('gtuf_fluid_drilling_rig', 'multiblock')
    .machine((holder) => new EnhancedFluidDrillMachine(holder, 4, 2, 0.75, 1.0))
    //Builder(holder,Tier,Parallel,DurationMultiplier,EnergyMultiplier)
    //Builder(holder,电压等级,并行数,时长倍率,能耗倍率)
    .rotationState(RotationState.ALL)
    .appearanceBlock(GTBlocks.CASING_TUNGSTENSTEEL_ROBUST)
    .recipeType('dummy')
    .pattern(definition => FactoryBlockPattern.start()
        .aisle('XXX', '###', '###')
        .aisle('XXX', '#X#', '###')
        .aisle('XSX', '###', '###')
        .where('#', Predicates.any())
        .where('S', Predicates.controller(Predicates.blocks(definition.get())))
        .where('X', Predicates.blocks('gtceu:robust_machine_casing')
            .or(Predicates.abilities(PartAbility.INPUT_ENERGY).setMinGlobalLimited(1).setMaxGlobalLimited(2))
            .or(Predicates.abilities(PartAbility.EXPORT_FLUIDS).setMaxGlobalLimited(1)))
        .build())
    .workableCasingModel(GTCEu.id('block/casings/solid/machine_casing_robust_tungstensteel'),
        GTCEu.id('block/multiblock/fluid_drilling_rig'))
event.create('gtuf_large_miner', 'multiblock')
     .machine((holder) => new EnhancedLargeMinerMachine(holder, 5, 12, 5, 5, 5, 3, 1.0, 0.9))
     //Builder(holder,Tier,speed,maximumChunkDiameter,fortune,drillingFluidConsumePerTick,Parallel,DurationMultiplier,Energy Multiplier)
     //Builder(holder,电压等级,速率,直径,时运等级,钻井液消耗速率,并行,时长倍率,能耗倍率)
     .rotationState(RotationState.NON_Y_AXIS)
     .appearanceBlock(GTBlocks.CASING_TITANIUM_STABLE)
     .recipeType('macerator')
     .pattern(definition => FactoryBlockPattern.start()
         .aisle('XXX', '###', '###')
         .aisle('XXX', '#C#', '###')
         .aisle('XSX', '###', '###')
         .where('#', Predicates.any())
         .where('S', Predicates.controller(Predicates.blocks(definition.get())))
         .where('C', Predicates.blocks('gtceu:stable_machine_casing'))
         .where('X', Predicates.blocks('gtceu:stable_machine_casing')
             .or(Predicates.abilities(PartAbility.EXPORT_ITEMS).setExactLimit(1).setPreviewCount(1))
             .or(Predicates.abilities(PartAbility.IMPORT_FLUIDS).setExactLimit(1).setPreviewCount(1))
             .or(Predicates.abilities(PartAbility.INPUT_ENERGY).setMinGlobalLimited(1)
                 .setMaxGlobalLimited(2).setPreviewCount(1)))
         .build())
     .model(GTMachineModels.createWorkableCasingMachineModel(
         GTCEu.id('block/casings/solid/machine_casing_stable_titanium'),
         GTCEu.id('block/multiblock/large_miner')))
  • Mechanism Pressure :github.com/LiangquHMF/GregTech-Universal-Frame/wiki/PressureSystem

  • RelaxRate = 0.1 / CasingTier * relaxMultiplier

  • 回归速率 = 0.1 / 外壳等级 * 回归倍率

  • Final upper bound = max(Final lower bound + 1, Base upper bound × toleranceMultiplier)

  • Final lower bound = max(0.1, Base lower bound ÷ toleranceMultiplier)

  • Base upper bound = 400 + (Glass tier − 1) × 200

  • Base lower bound = max(0.1, 50 − (Glass tier − 1) × 10)

  • 最终上限 = max(最终下限 + 1, 基础上限 × toleranceMultiplier )

  • 最终下限 = max(0.1, 基础下限 ÷ toleranceMultiplier )

  • 基础上限 = 400 + (玻璃等级−1) × 200

  • 基础下限 = max(0.1, 50 − (玻璃等级−1) × 10 )

    event.create('pressure_test', 'multiblock')
        .machine((holder) => new PressureMultiblockMachine(holder, 1, 1, 1, 2, 1.5))
        //Builder(holder,maxParallel, durationMultiplier, energyMultiplier, relaxMultiplier, toleranceMultiplier)
        //Builder(holder,最大并行,时长倍率,能耗倍率,回归倍率,耐压倍率)
        .rotationState(RotationState.ALL)
        .appearanceBlock(GTBlocks.CASING_STEEL_SOLID)
        .recipeType('test_recipetype2')
        .recipeModifier((machine, recipe) => PressureMultiblockMachine.recipeModifier(machine, recipe), true)
        .addOutputLimit(ItemRecipeCapability.CAP, 1)
        .pattern(definition => FactoryBlockPattern.start()
            .aisle('AAAAAA', 'ACCCCA', 'AAAAAA')
            .aisle('AAAAAA', 'ADDDDA', 'AAAAAA')
            .aisle('AAAAAA', 'ACACCA', 'AAAAAA')
            .aisle('AAA###', 'AKA###', 'AAA###')
            .where('#', Predicates.any())
            .where('K', Predicates.controller(Predicates.blocks(definition.get())))
            .where('C', GTUFPatternPredicates.GlassTier())
            .where('D', GTUFPatternPredicates.GlassTier())
            .where('A', GTUFPatternPredicates.UniversalCasingTier().setMinGlobalLimited(40)
                .or(Predicates.abilities(PartAbility.IMPORT_ITEMS).setPreviewCount(1))
                .or(Predicates.abilities(PartAbility.EXPORT_ITEMS).setPreviewCount(1))
                .or(Predicates.abilities(PartAbility.INPUT_ENERGY).setExactLimit(1))
                .or(Predicates.abilities(GTUFPartAbility.PRESSURE).setExactLimit(1)))
            .build())
        .model(GTUFModels.createTieredMachineModel(
            GTCEu.id('block/casings/solid/machine_casing_solid_steel'),
            GTCEu.id('block/multiblock/large_chemical_reactor')))
event.create('enhanced_boiler_test', 'multiblock')
      .machine((holder) => new EnhancedLargeBoilerMachine(holder, 1000, 10, 4, 2.0))
      //Builder(holder,Temp,heatSpeed,Parallel,durationMultiplier)
      //Builder(holder,温度上限,温度上升速度,并行,时长倍率)
      .rotationState(RotationState.ALL)
      .appearanceBlock(GTBlocks.CASING_STEEL_SOLID)
      .recipeType('enhanced_boiler_fuel')
      .recipeModifier((machine, recipe) => EnhancedLargeBoilerMachine.recipeModifier(machine, recipe), true)
      .pattern(definition => FactoryBlockPattern.start()
          .aisle('AAAAA', 'A###A', 'AAAAA')
          .aisle('AAAAA', 'A###A', 'AAAAA')
          .aisle('AA###', 'AK###', 'AA###')
          .where('#', Predicates.any())
          .where('K', Predicates.controller(Predicates.blocks(definition.get())))
          .where('A', Predicates.blocks('gtceu:steel_machine_casing')
              .or(Predicates.abilities(PartAbility.IMPORT_ITEMS))   // 燃料
              .or(Predicates.abilities(PartAbility.IMPORT_FLUIDS))  // 水
              .or(Predicates.abilities(PartAbility.EXPORT_FLUIDS))) // 蒸汽
          .build())
      .model(GTUFModels.createTieredMachineModel(
          GTCEu.id('block/casings/solid/machine_casing_solid_steel'),
          GTCEu.id('block/multiblock/large_chemical_reactor'))) //