Table of Contents
监听事件
在本教程中,你会学到:
- 理解事件和回调
- 对已有的事件注册回调
事件
事件是用存储并调用回调的 net.fabricmc.fabric.api.event.Event
的实例代表的,通常回调有单个事件实例,存储在回调接口的 EVENT
静态字段中,但也有其他的形式。例如,ClientTickEvents 将几个有关的事件分组在一起。
回调
每个事件都有对应的回调接口,通常命名为 EventNameCallback
。回调是通过在事件接口调用 register()
来注册的,调用时需要一个回调接口实例作为参数。
Fabric API 中的回调接口
Fabric API 提供的所有事件回调接口可以在 net.fabricmc.fabric.api.event
包中找到。本教程底部提供了部分存在的回调的列表。
自定义回调
虽然 Fabric API 已经提供了许多事件,你还是可以制作你自己的事件,请参考events。
实例
此例注册一个 AttackBlockCallback
,玩家击打不能徒手挖掘掉落的方块时,会受到伤害。会返回 ActionResult.PASS
因为还需要调用其他的回调。关于其他值的含义,请参考你的 IDE 中 AttackBlockCallback 的 JavaDoc。
public class ExampleMod implements ModInitializer { [...] @Override public void onInitialize() { AttackBlockCallback.EVENT.register((player, world, hand, pos, direction) -> { BlockState state = world.getBlockState(pos); /* 手动的旁观者检查是必要的,因为 AttackBlockCallbacks 会在旁观者检查之前应用 */ if (state.isToolRequired() && !player.isSpectator() && player.getMainHandStack().isEmpty()) { player.damage(DamageSource.field_5869, 1.0F); } return ActionResult.PASS; }); } }
Fabric API 事件
玩家交互事件
玩家:AttackBlockCallback / AttackEntityCallback / UseBlockCallback / UseEntityCallback / UseItemCallback
玩家(客户端):ClientPickBlockApplyCallback / ClientPickBlockCallback / ClientPickBlockGatherCallback
注册表事件
BlockConstructedCallback / ItemConstructedCallback
RegistryEntryAddedCallback / RegistryEntryRemovedCallback / RegistryIdRemapCallback
战利品事件
关于使用 LootTableLoadingCallback
的例子,请参考此教程。