Table of Contents
Наблюдение за событиями
В этом уроке вы научитесь:
- Понимать события и обратные вызовы
- Зарегистрируйте обратный вызов для существующего события
События(Ивенты)
События представлены экземплярами 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 для определения других значений.
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
здесь.