开发文档参考多方块
简单多方块
了解如何使用 RebarSimpleMultiblock 创建和管理多方块
最后更新时间
简单多方块
Rebar 中有两个类用于处理多方块:RebarMultiblock 和 RebarSimpleMultiblock。
本页只介绍 RebarSimpleMultiblock。它封装程度高、上手简单,能满足大多数需求。而 RebarMultiblock 虽然更灵活,但功能非常基础——不提供虚影方块、不处理旋转等,需要你自己实现大部分逻辑。
多方块基础
使用 RebarSimpleMultiblock 只需让你的方块实现该接口,然后定义组件列表即可:
public class ExampleMultiblock extends RebarBlock implements RebarSimpleMultiblock {
public ExampleMultiblock(@NotNull Block block, @NotNull BlockCreateContext context) {
super(block, context);
}
public ExampleMultiblock(@NotNull Block block, @NotNull PersistentDataContainer pdc) {
super(block, pdc);
}
@Override
public @NotNull Map<@NotNull Vector3i, @NotNull MultiblockComponent> getComponents() {
return Map.of(
new Vector3i(0, 0, 1), MultiblockComponent.of(Material.SEA_LANTERN),
new Vector3i(0, 2, 0), MultiblockComponent.of(PylonKeys.BRONZE_BLOCK)
);
}
}以上就是实现一个简单多方块的最低要求。RebarSimpleMultiblock 会自动完成以下工作:
- 创建并管理虚影方块,告诉玩家如何搭建
- 玩家建造完成后,自动将所有组件分配为实现了
RebarSimpleMultiblock的方块实例 - 任一组件被破坏时自动恢复
多方块组件
MultiblockComponent 支持多种匹配方式:
原版方块
MultiblockComponent.of(Material.SEA_LANTERN)Rebar 方块
MultiblockComponent.of(PylonKeys.BRONZE_BLOCK)指定状态的原版方块
MultiblockComponent.of(Material.REDSTONE_LAMP.createBlockData("[lit=false]"))原版或 Rebar 方块(二选一)
MultiblockComponent.of(
List.of(Material.CAMPFIRE.createBlockData()),
List.of(PylonKeys.BRONZE_BLOCK)
)指定状态的原版或 Rebar 方块(多选一)
MultiblockComponent.of(
List.of(
Material.CAMPFIRE.createBlockData(),
Material.REDSTONE_LAMP.createBlockData("[lit=false]")
),
List.of(
PylonKeys.BRONZE_BLOCK,
PylonKeys.CHARCOAL_BLOCK
)
)多方块方向
除非所有组件都在 Y 轴上,否则多方块是有方向性的。在 place 构造函数中调用 setMultiblockDirection 来设置方向:
public ExampleMultiblock(@NotNull Block block, @NotNull BlockCreateContext context) {
super(block, context);
setMultiblockDirection(context.getFacing());
}按惯例,你还应该同时实现 RebarDirectionalBlock,在构造函数中同时调用 setFacing 和 setMultiblockDirection。这样做可以让方块根据朝向正确显示纹理。
性能
这一点值得专门说明:Rebar 的多方块几乎没有性能开销,且开销随尺寸增长非常缓慢。 换句话说,多方块不会比普通方块更卡,大方块和小多方块的性能表现基本一致。