GTCEu Modern中自带了使用KubeJS创建自定义机器和多方块结构的功能,但是官方wiki的相关内容一言难尽,所以在这开个坑希望能帮到各位魔改包作者,也欢迎各位来纠错

自定义配方类型:

GTCEuStartupEvents.registry('gtceu:recipe_type', event => {
    // 创建一个新的配方类型
    event.create('example_recipe')
    // 配方类型的分类,暂时作用不明
    .category('example')
    // 设置配方的输入和输出,setMaxIOSize(物品输入, 物品输出, 流体输入, 流体输出)
    .setMaxIOSize(3, 3, 3, 3)
    // 设置电力的 输入/输出 模式,in/out
    .setEUIO('in')
    // 设置进度条样式,setProgressBar(图标, 填充模式)
    .setProgressBar(GuiTextures.PROGRESS_BAR_ARROW, FillDirection.LEFT_TO_RIGHT)
    // 设置物品栏的图标,目前实测没有效果
    // setSlotOverlay(是否为输出, 是否为流体, 图标) 
    .setSlotOverlay(true, false, GuiTextures.CRUSHED_ORE_OVERLAY)
    // 设置机器工作时的声音
    .setSound(GTSoundEntries.COOLING)
})

自定义蒸汽机器:

GTCEuStartupEvents.registry('gtceu:machine', event => {
    let isHp = false
    event.create('example_steam_machine', 'steam', true) // 机器名称,机器类型,是否有高压版本
    // 为机器设置可用的配方类型,机器会根据配方类型自动生成ui
    .recipeType('example_recipe')
    // 设置机器的旋转,一般为NON_Y_AXIS
    .rotationState(RotationState.NON_Y_AXIS)
    // 使用workableSteamHullRenderer来为机器设定材质
    // "block/machines/sifter"为需要使用的overlay
    // 由于某些未知原因,如果想为低压和高压设置不同的材质,你需要这么写
    // 材质为带砖块的蒸汽机器贴图,源码中并未发现修改该贴图的相关方法
    // 解决方案来自于官方discord的讨论内容
    .allTiers((tier, builder) => {
        // workableSteamHullRenderer(是否为高压, 贴图的ResourceLocation)
        // 寻找需要的贴图请自行拆包,也可以使用自定义的机器贴图,后面会讲
        builder.workableSteamHullRenderer(isHp, GTCEu.id("block/machines/sifter"))
        isHp = true
    })
})

自定义电力机器:

GTCEuStartupEvents.registry('gtceu:machine', event => {
    event.create('test_electric', 'simple', GTValues.LV, GTValues.MV, GTValues.HV)
        .rotationState(RotationState.NON_Y_AXIS)
        .recipeType('test_recipe_type')
        .tankScalingFunction(tier => tier * 3200)
})

自定义动能机器(机械动力联动):

GTCEuStartupEvents.registry('gtceu:machine', event => {
    event.create('test_kinetic', 'kinetic', GTValues.LV, GTValues.MV, GTValues.HV)
        .rotationState(RotationState.NON_Y_AXIS)
        .recipeType('test_kinetic_recipe_type')
        .tankScalingFunction(tier => tier * 3200)
})

自定义多方块:

GTCEuStartupEvents.registry('gtceu:machine', event => {
    event.create('test_generator', 'multiblock')
        .rotationState(RotationState.NON_Y_AXIS)
        .appearanceBlock(GTBlocks.CASING_STEEL_SOLID)
        .recipeTypes(['test_recipe_type_1', 'test_recipe_type_2'])
        .pattern(definition => FactoryBlockPattern.start()
            .aisle('CCC', 'GGG', 'CCC')
            .aisle('CCC', 'GDG', 'CSC')
            .aisle('CKC', 'GGG', 'CMC')
            .where('K', Predicates.controller(Predicates.blocks(definition.get())))
            .where('M', Predicates.abilities(PartAbility.MAINTENANCE))
            .where('S', Predicates.abilities(PartAbility.MUFFLER))
            .where('D', Predicates.blocks(GTBlocks.COIL_CUPRONICKEL.get()))
            .where('G', Predicates.blocks('minecraft:glass'))
            .where('C', Predicates.blocks(GTBlocks.CASING_STEEL_SOLID.get())
                .or(Predicates.autoAbilities(definition.getRecipeTypes())))
        .build())
        .shapeInfo(controller => MultiblockShapeInfo.builder()
            .aisle('eCe', 'GGG', 'CCC')
            .aisle('CCC', 'GDG', 'CSC')
            .aisle('iKo', 'GGG', 'CMC')
            .where('K', controller, Direction.SOUTH)
            .where('C', GTBlocks.CASING_STEEL_SOLID.get())
            .where('G', Block.getBlock('minecraft:glass'))
            .where('D', GTBlocks.COIL_CUPRONICKEL.get())
            .where('S', GTMachines.MUFFLER_HATCH[1], Direction.UP)
            .where('M', GTMachines.MAINTENANCE_HATCH[1], Direction.SOUTH)
            .where('e', GTMachines.ENERGY_INPUT_HATCH[1], Direction.NORTH)
            .where('i', GTMachines.ITEM_IMPORT_BUS[1], Direction.SOUTH)
            .where('0', GTMachines.ITEM_EXPORT_BUS[1], Direction.SOUTH)
        .build())
        .workableCasingRenderer(
            "gtceu:block/casings/solid/machine_casing_inert_ptfe",
            "gtceu:block/multiblock/large_chemical_reactor",
            false
        )
})


未完待续......