本站为非官方 Pylon 文档站,大量内容均为 AI 生成·前往官方文档站● ● ●This is an unofficial Pylon documentation site, most content is AI-generated·Visit Official Docs● ● ●中文开发者交流·加入 QQ 群● ● ●本站为非官方 Pylon 文档站,大量内容均为 AI 生成·前往官方文档站● ● ●This is an unofficial Pylon documentation site, most content is AI-generated·Visit Official Docs● ● ●中文开发者交流·加入 QQ 群● ● ●
Pylon 中文文档
开发文档参考多方块

简单多方块

了解如何使用 RebarSimpleMultiblock 创建和管理多方块

最后更新时间

简单多方块

Rebar 中有两个类用于处理多方块:RebarMultiblockRebarSimpleMultiblock

本页只介绍 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,在构造函数中同时调用 setFacingsetMultiblockDirection。这样做可以让方块根据朝向正确显示纹理。

性能

这一点值得专门说明:Rebar 的多方块几乎没有性能开销,且开销随尺寸增长非常缓慢。 换句话说,多方块不会比普通方块更卡,大方块和小多方块的性能表现基本一致。

目录