方块合成 Block Crafting
方块合成使你能够通过搭建多方块结构来制作物品和其他东西。搭建特定结构,使用特定物品右键核心方块,结构会消失,并留下一些合成出的物品,召唤一些生物,或进行任何你想要的事情。
你可以使用KubeJS来自定义这种配方。
(后续把图补上)
在 server_scripts:
第一种(手动搭建)
BlockCrafting.addMultiblockStructure(MultiblockStructureBuilder.create("Test")
.pattern("ddd", "ggg")
.pattern("ddd", "ggg")
.pattern("pds", "gdg")
.center("s", Blocks.STONE)
.whereCond("d", b => b == Blocks.DIRT) // 表示 d 代表满足 b==... 的方块 b(可以用字符串)
.where("g", Blocks.GRASS_BLOCK) // 表示 g 代表草方块(可以用字符串)
.whereTag("p", "minecraft:planks") // 表示 p 代表带有 planks 标签的任意方块(可以用字符串)
.craftingItem("minecraft:stick") // 需要手持触发合成的 Item
.craftingItemTag("forge:ingots") // 需要手持触发合成的 Tag Item
.result("2x minecraft:diamond") // 输出
.result(Item.of("minecraft:golden_sword").withNBT({ Unbreakable: 1 })) // 输出的 Item(所附带的 NBT)
.build());
第二种(读取 .nbt 结构)
BlockCrafting.addMultiblockStructure(MultiblockStructureFileBuilder.create("FileTest")
.file("structures/filetest.nbt") // 可以读取任何路径(.minecraft 内)
.center(Blocks.OAK_LOG)
.craftingItem("minecraft:stick")
.craftingItemCond(i => i == Items.STICK)
.craftingItemTag("forge:ingots")
.result("100x minecraft:diamond")
.build());
实体输出
Block Crafting支持输出Entity
BlockCrafting.addMultiblockStructure(MultiblockStructureBuilder.create('test1')
.pattern('aaa', 'aaa', 'aaa')
.pattern('aaa', 'aba', 'aaa')
.pattern('aaa', 'aAa', 'aaa')
.where('a', 'minecraft:cobblestone')//多方块结构1
.where('b', 'minecraft:dirt')//多方块结构2
.center('A', 'minecraft:cobblestone')//右键点击的位置
.craftingItem('minecraft:stick')//合成的物品
.resultEntity('minecraft:pig')//输出实体:pig
.build()
)
物品输出
BlockCrafting.addMultiblockStructure(MultiblockStructureBuilder.create('test1')
.pattern('aaa', 'aaa', 'aaa')
.pattern('aaa', 'aba', 'aaa')
.pattern('aaa', 'aAa', 'aaa')
.where('a', 'minecraft:cobblestone')
.where('b', 'minecraft:redstone_block')
.center('A', 'minecraft:cobblestone')
.craftingItem('immersiveengineering:hammer')
.resultItem('minecraft:diamond_block')//输出物品:diamond_block
.build()
)
注意事项
在给多方块结构命名的时候请带上命名空间,例如:
minecraft:dirt √
dirt ×
如果不加上命名空间,KJS无法读取该结构。
温馨提醒
.pattern('aaa', 'aaa', 'bbb')
.pattern('aaa', 'aba', 'bbb')
.pattern('aaa', 'aAa', 'bbb')
这串pattern解读为
'aaa'
'aaa'
'aaa'
为第一层
'aaa'
'aba'
'aAa'
为第二层
'bbb'
'bbb'
'bbb'
为第三层