Table of Contents

Наблюдение за событиями

В этом уроке вы научитесь:

  1. Понимать события и обратные вызовы
  2. Зарегистрируйте обратный вызов для существующего события

События(Ивенты)

События представлены экземплярами net.fabricmc.fabric.api.event.Event , которое хранит и вызывает обратные вызовы. Часто для обратного вызова существует один экземпляр события, который хранится в статическом поле EVENT интерфейса обратного вызова, но существуют и другие шаблоны. Например ClientTickEvents группирует несколько связанных событий вместе.

Обратные вызовы

Каждое событие имеет соответствующий интерфейс обратного вызова, условно называемый EventNameCallback. Обратные вызовы регистрируются путем вызова register() в экземпляре события с экземпляром интерфейса обратного вызова в качестве аргумента.

Интерфейсы обратного вызова в Fabric API

Все интерфейсы обратного вызова событий, предоставляемые Fabric API, можно найти в пакете net.fabricmc.fabric.api.event. Неполный список существующих обратных вызовов приведен в нижней части этого руководства.

Пользовательские обратные вызовы

Несмотря на то, что Fabric API уже предоставляет множество событий, вы все равно можете создавать свои собственные события. Пожалуйста, обратитесь к этой статье.

Практика

В этом примере регистрируется AttackBlockCallback для нанесения урона игрокам, когда они попадают в блоки, которые не выпадают при ручной добыче. Он возвращает ActionResult.PASS, поскольку другие обратные вызовы все равно должны быть вызваны. Смотрите AttackBlockCallback JavaDoc в вашей IDE для определения других значений.

  1. public class ExampleMod implements ModInitializer
  2. {
  3. [...]
  4.  
  5. @Override
  6. public void onInitialize()
  7. {
  8. AttackBlockCallback.EVENT.register((player, world, hand, pos, direction) ->
  9. {
  10. BlockState state = world.getBlockState(pos);
  11. /* Ручная проверка наблюдателя необходима, потому что AttackBlockCallbacks
  12.   срабатывает до проверки наблюдателя */
  13. if (state.isToolRequired() && !player.isSpectator() &&
  14. player.getMainHandStack().isEmpty())
  15. {
  16. player.damage(DamageSource.field_5869, 1.0F);
  17. }
  18. return ActionResult.PASS;
  19. });
  20. }
  21. }

События Fabric API

События взаимодействий с игроками

Игрок: AttackBlockCallback / AttackEntityCallback / UseBlockCallback / UseEntityCallback / UseItemCallback

Игрок (Клиент): ClientPickBlockApplyCallback / ClientPickBlockCallback / ClientPickBlockGatherCallback

События реестра

BlockConstructedCallback / ItemConstructedCallback

RegistryEntryAddedCallback / RegistryEntryRemovedCallback / RegistryIdRemapCallback

События с списком дропа

LootTableLoadingCallback

Есть пример использования LootTableLoadingCallback здесь.

События мира

WorldTickCallback

События сервера

ServerStartCallback / ServerStopCallback / ServerTickCallback

События сети

C2SPacketTypeCallback / S2CPacketTypeCallback