在本教程中,你会学到:
事件是用存储并调用回调的 net.fabricmc.fabric.api.event.Event
的实例代表的,通常回调有单个事件实例,存储在回调接口的 EVENT
静态字段中,但也有其他的形式。例如,ClientTickEvents 将几个有关的事件分组在一起。
每个事件都有对应的回调接口,通常命名为 EventNameCallback
。回调是通过在事件接口调用 register()
来注册的,调用时需要一个回调接口实例作为参数。
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; }); } }
玩家:AttackBlockCallback / AttackEntityCallback / UseBlockCallback / UseEntityCallback / UseItemCallback
玩家(客户端):ClientPickBlockApplyCallback / ClientPickBlockCallback / ClientPickBlockGatherCallback
BlockConstructedCallback / ItemConstructedCallback
RegistryEntryAddedCallback / RegistryEntryRemovedCallback / RegistryIdRemapCallback
关于使用 LootTableLoadingCallback
的例子,请参考此教程。