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
)
})
未完待续......