AnNingUI
完整的一个实例
在startup_scripts
const $PatchouliAPI = Java.loadClass('vazkii.patchouli.api.PatchouliAPI');
const $Character = Java.loadClass('java.lang.Character');
const $GlowItemFrame = Java.loadClass('net.minecraft.world.entity.decoration.GlowItemFrame');
global.ClayAltarBlock = {
O: Block.getBlock('minecraft:beacon'),
B: Block.getBlock('minecraft:diamond_block'),
I: Block.getBlock('minecraft:iron_block'),
}
global.ClayAltar = () =>
$PatchouliAPI.get().makeMultiblock(
[
["___", "_0_", "___"],
["___", "_B_", "___"],
["DFH", "JIK", "LZX"],
],
new $Character('_'),
$PatchouliAPI.get().anyMatcher(),
new $Character('J'), //面向玩家,玩家方向为北,方块为南,二阶数组从(各字符串内字符)左往右即玩家从北往南,方块从南往北,z递增
"minecraft:polished_diorite_stairs[facing=south,half=bottom,shape=straight,waterlogged=false]",
new $Character('K'), //玩家方向为南,方块为北
"minecraft:polished_diorite_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]",
new $Character('D'), //玩家方向为西,方块为东,二阶数组从(各字符串)左往右即玩家从西往东,方块从东往西,x递增
"minecraft:polished_diorite_stairs[facing=east,half=bottom,shape=outer_right,waterlogged=false]",
new $Character('F'),
"minecraft:polished_diorite_stairs[facing=east,half=bottom,shape=straight,waterlogged=false]",
new $Character('H'),
"minecraft:polished_diorite_stairs[facing=east,half=bottom,shape=outer_left,waterlogged=false]",
new $Character('L'),
"minecraft:polished_diorite_stairs[facing=west,half=bottom,shape=outer_left,waterlogged=false]",
new $Character('Z'),
"minecraft:polished_diorite_stairs[facing=west,half=bottom,shape=straight,waterlogged=false]",
new $Character('X'),
"minecraft:polished_diorite_stairs[facing=west,half=bottom,shape=outer_right,waterlogged=false]",
new $Character('I'),
global.ClayAltarBlock.I,
new $Character('B'),
global.ClayAltarBlock.B,
new $Character('0'),
global.ClayAltarBlock.O
)
global.MULTIBLOCK = {
ClayAltar: global.ClayAltar
}
StartupEvents.postInit((event) => {
$PatchouliAPI.get().registerMultiblock(
ResourceLocation("kubejs:clay_altar"),
global.ClayAltar()
);
})
在server_scripts
//PatchouliAPI多方块检测
BlockEvents.rightClicked((event) => {
const { item, level, block, player, } = event
const { pos } = block
if(item != "minecraft:stick" || level.isClientSide()) {
return
}
if(block == 'minecraft:beacon') {
let rotation1 = global.MULTIBLOCK.ClayAltar().validate(level, pos)
if(rotation1 === null){
return
}
block.up.popItem("clay_ball")
}
})

