方块接口
了解 Rebar 提供的各种方块接口及其用法
最后更新时间
方块接口
Rebar 内置了很多接口,可以给方块添加各种自定义行为,比如:
- 添加流体缓冲区(RebarFluidBufferBlock)
- 在点击方块时运行代码(RebarInteractBlock)
- 当玩家跳到方块顶部时运行代码(RebarJumpBlock)
- ...还有很多很多
如何使用接口 X?
- 检查此站点上是否有任何文档(向下滚动)。
- 阅读接口的 JavaDocs 和相关方法的文档。
- 在 Pylon 或其他附属组件中查找使用该接口的示例。
- 在 Pylon Discord 上寻求帮助。
举个例子,假设你想在右键点击方块时生成粒子效果,可以用 RebarInteractBlock 来实现:
public class ExampleBlock extends RebarBlock implements RebarInteractBlock {
// ...
@Override
public void onInteract(@NotNull PlayerInteractEvent event, @NotNull EventPriority priority) {
if (!event.getAction().isRightClick()
|| event.getPlayer().isSneaking()
|| event.getHand() != EquipmentSlot.HAND
) {
return;
}
new ParticleBuilder(Particle.CAMPFIRE_COSY_SMOKE)
.location(getBlock().getLocation().toCenterLocation().add(0, 0.7, 0))
.count(smokeCount)
.extra(0.1) // speed
.spawn();
}
}postLoad 方法
很多方块接口需要存储持久数据。Rebar 没有让你自己在 write 方法和加载构造函数里手动存取数据,而是提供了一套统一机制,把数据写入方块的 PDC。
但这带来一个副作用:当加载构造函数被调用时,方块接口的数据还没加载完。所以作为基本原则,不要在加载构造函数里调用任何依赖方块接口数据的方法。正确做法是覆写 postLoad 方法,把需要在加载后执行的逻辑放在那里。postLoad 会在所有关联的方块接口都完成数据加载之后才被调用。
postInitialise
另外还有个 postInitialise 方法,功能和 postLoad 一样,区别是它也会在 place 构造函数之后被调用。
接口快速参考
交互接口
与玩家产生交互时会触发相关逻辑的接口
| 接口 | Javadocs |
|---|---|
| RebarGuiBlock | Javadocs :material-arrow-right: |
| RebarInteractBlock | Javadocs :material-arrow-right: |
| RebarJumpBlock | Javadocs :material-arrow-right: |
| RebarSneakBlock | Javadocs :material-arrow-right: |
杂项接口
不属于任何特定类别的接口。
| 接口 | Javadocs |
|---|---|
| RebarBreakHandler | Javadocs :material-arrow-right: |
| RebarDirectionalBlock | Javadocs :material-arrow-right: |
| RebarFacadeBlock | Javadocs :material-arrow-right: |
| RebarFallingBlock | Javadocs :material-arrow-right: |
| RebarTickingBlock | Javadocs :material-arrow-right: |
| RebarUnloadBlock | Javadocs :material-arrow-right: |
| RebarVirtualInventoryBlock | Javadocs :material-arrow-right: |
物流接口
让方块和物流系统(包括 cargo)对接的接口。
如果你希望机器兼容 cargo 插入器/提取器,需要实现 RebarLogisticBlock。
| 接口 | Javadocs |
|---|---|
| RebarCargoBlock | Javadocs :material-arrow-right: |
| RebarLogisticBlock | Javadocs :material-arrow-right: |
流体接口
让方块和流体系统对接的接口。
没特殊需求的话,优先用 RebarFluidBufferBlock 和 RebarFluidTank。RebarFluidBlock 接口比较抽象,设计上追求最大灵活性,需要你自己实现流体存储逻辑。
| 接口 | Javadocs |
|---|---|
| RebarFluidBlock | Javadocs :material-arrow-right: |
| RebarFluidBufferBlock | Javadocs :material-arrow-right: |
| RebarFluidTank | Javadocs :material-arrow-right: |
处理器接口
跟踪进程的接口,例如燃料量或配方进度。
| 接口 | Javadocs |
|---|---|
| RebarProcessor | Javadocs :material-arrow-right: |
| RebarRecipeProcessor | Javadocs :material-arrow-right: |
多方块接口
把方块变成多方块的接口。
大多数多方块用 RebarSimpleMultiblock 就够了。更复杂的多方块可以用 [RebarMultiblock],不过它设计上追求最大灵活度,所以功能很基础——不提供虚影方块,也不处理旋转等。
得益于底层实现方式,多方块几乎没有性能开销(可能和你想的不一样)。即使是非常大的多方块,对性能的影响也很小。
| 接口 | Javadocs |
|---|---|
| RebarMultiblock | Javadocs :material-arrow-right: |
| RebarSimpleMultiblock | Javadocs :material-arrow-right: |
实体接口
与实体产生交互的接口。
| 接口 | Javadocs |
|---|---|
| RebarEntityChangedBlock | Javadocs :material-arrow-right: |
| RebarEntityHolderBlock | Javadocs :material-arrow-right: |
剔除接口
允许您的方块与 Rebar 的剔除系统交互的接口。
| 接口 | Javadocs |
|---|---|
| RebarCulledBlock | Javadocs :material-arrow-right: |
| RebarGroupCulledBlock | Javadocs :material-arrow-right: |
| RebarEntityCulledBlock | Javadocs :material-arrow-right: |
| RebarEntityGroupCulledBlock | Javadocs :material-arrow-right: |
原版接口
暴露原版方块功能的接口。比如你加了一个信标方块,想在信标停用时执行一些逻辑,就可以用 RebarBeacon。