====== Наблюдение за событиями ====== В этом уроке вы научитесь: - Понимать события и обратные вызовы - Зарегистрируйте обратный вызов для существующего события ===== События(Ивенты) ===== События представлены экземплярами ''net.fabricmc.fabric.api.event.Event'' , которое хранит и вызывает обратные вызовы. Часто для обратного вызова существует один экземпляр события, который хранится в статическом поле ''EVENT'' интерфейса обратного вызова, но существуют и другие шаблоны. Например [[https://github.com/FabricMC/fabric/blob/1.17/fabric-lifecycle-events-v1/src/main/java/net/fabricmc/fabric/api/client/event/lifecycle/v1/ClientTickEvents.java|ClientTickEvents]] группирует несколько связанных событий вместе. ===== Обратные вызовы ===== Каждое событие имеет соответствующий интерфейс обратного вызова, условно называемый ''EventNameCallback''. Обратные вызовы регистрируются путем вызова ''register()'' в экземпляре события с экземпляром интерфейса обратного вызова в качестве аргумента. ==== Интерфейсы обратного вызова в Fabric API ==== Все интерфейсы обратного вызова событий, предоставляемые Fabric API, можно найти в пакете ''net.fabricmc.fabric.api.event''. Неполный список существующих обратных вызовов приведен в нижней части этого руководства. ==== Пользовательские обратные вызовы ==== Несмотря на то, что Fabric API уже предоставляет множество событий, вы все равно можете создавать свои собственные события. Пожалуйста, обратитесь к [[ru:tutorial:events|этой статье]]. ===== Практика ====== В этом примере регистрируется ''AttackBlockCallback'' для нанесения урона игрокам, когда они попадают в блоки, которые не выпадают при ручной добыче. Он возвращает '''', поскольку другие обратные вызовы все равно должны быть вызваны. Смотрите [[https://github.com/FabricMC/fabric/blob/12865e786ce2102d344304a679b70084be84d166/fabric-events-interaction-v0/src/main/java/net/fabricmc/fabric/api/event/player/AttackBlockCallback.java#L29-L39|AttackBlockCallback]] JavaDoc в вашей IDE для определения других значений. public class ExampleMod implements ModInitializer { [...] @Override public void onInitialize() { AttackBlockCallback.EVENT.register((player, world, hand, pos, direction) -> { class_2680 state = world.method_8320(pos); /* Ручная проверка наблюдателя необходима, потому что AttackBlockCallbacks срабатывает до проверки наблюдателя */ if (state.method_29291() && !player.method_7325() && player.method_6047().method_7960()) { player.method_5643(class_1282.field_5869, 1.0F); } return class_1269.field_5811; }); } } ===== События Fabric API ====== === События взаимодействий с игроками === Игрок: [[https://github.com/FabricMC/fabric/blob/1.15/fabric-events-interaction-v0/src/main/java/net/fabricmc/fabric/api/event/player/AttackBlockCallback.java|AttackBlockCallback]] / [[https://github.com/FabricMC/fabric/blob/1.15/fabric-events-interaction-v0/src/main/java/net/fabricmc/fabric/api/event/player/AttackEntityCallback.java|AttackEntityCallback]] / [[https://github.com/FabricMC/fabric/blob/1.15/fabric-events-interaction-v0/src/main/java/net/fabricmc/fabric/api/event/player/UseBlockCallback.java|UseBlockCallback]] / [[https://github.com/FabricMC/fabric/blob/1.15/fabric-events-interaction-v0/src/main/java/net/fabricmc/fabric/api/event/player/UseEntityCallback.java|UseEntityCallback]] / [[https://github.com/FabricMC/fabric/blob/1.15/fabric-events-interaction-v0/src/main/java/net/fabricmc/fabric/api/event/player/UseItemCallback.java|UseItemCallback]] Игрок (Клиент): [[https://github.com/FabricMC/fabric/blob/1.15/fabric-events-interaction-v0/src/main/java/net/fabricmc/fabric/api/event/client/player/ClientPickBlockApplyCallback.java|ClientPickBlockApplyCallback]] / [[https://github.com/FabricMC/fabric/blob/1.15/fabric-events-interaction-v0/src/main/java/net/fabricmc/fabric/api/event/client/player/ClientPickBlockCallback.java|ClientPickBlockCallback]] / [[https://github.com/FabricMC/fabric/blob/1.15/fabric-events-interaction-v0/src/main/java/net/fabricmc/fabric/api/event/client/player/ClientPickBlockGatherCallback.java|ClientPickBlockGatherCallback]] === События реестра === [[https://github.com/FabricMC/fabric/blob/1.15/fabric-object-builders-v0/src/main/java/net/fabricmc/fabric/api/event/registry/BlockConstructedCallback.java|BlockConstructedCallback]] / [[https://github.com/FabricMC/fabric/blob/1.15/fabric-object-builders-v0/src/main/java/net/fabricmc/fabric/api/event/registry/ItemConstructedCallback.java|ItemConstructedCallback]] [[https://github.com/FabricMC/fabric/blob/1.15/fabric-registry-sync-v0/src/main/java/net/fabricmc/fabric/api/event/registry/RegistryEntryAddedCallback.java|RegistryEntryAddedCallback]] / [[https://github.com/FabricMC/fabric/blob/1.15/fabric-registry-sync-v0/src/main/java/net/fabricmc/fabric/api/event/registry/RegistryEntryRemovedCallback.java|RegistryEntryRemovedCallback]] / [[https://github.com/FabricMC/fabric/blob/1.15/fabric-registry-sync-v0/src/main/java/net/fabricmc/fabric/api/event/registry/RegistryIdRemapCallback.java|RegistryIdRemapCallback]] === События с списком дропа === [[https://github.com/FabricMC/fabric/blob/1.15/fabric-loot-tables-v1/src/main/java/net/fabricmc/fabric/api/loot/v1/event/LootTableLoadingCallback.java|LootTableLoadingCallback]] Есть пример использования ''LootTableLoadingCallback'' [[ru:tutorial:adding_to_loot_tables|здесь]]. === События мира === [[https://github.com/FabricMC/fabric/blob/1.15/fabric-events-lifecycle-v0/src/main/java/net/fabricmc/fabric/api/event/world/WorldTickCallback.java|WorldTickCallback]] === События сервера === [[https://github.com/FabricMC/fabric/blob/1.15/fabric-events-lifecycle-v0/src/main/java/net/fabricmc/fabric/api/event/server/ServerStartCallback.java|ServerStartCallback]] / [[https://github.com/FabricMC/fabric/blob/1.15/fabric-events-lifecycle-v0/src/main/java/net/fabricmc/fabric/api/event/server/ServerStopCallback.java|ServerStopCallback]] / [[https://github.com/FabricMC/fabric/blob/1.15/fabric-events-lifecycle-v0/src/main/java/net/fabricmc/fabric/api/event/server/ServerTickCallback.java|ServerTickCallback]] === События сети === [[https://github.com/FabricMC/fabric/blob/1.15/fabric-networking-v0/src/main/java/net/fabricmc/fabric/api/event/network/C2SPacketTypeCallback.java|C2SPacketTypeCallback]] / [[https://github.com/FabricMC/fabric/blob/1.15/fabric-networking-v0/src/main/java/net/fabricmc/fabric/api/event/network/S2CPacketTypeCallback.java|S2CPacketTypeCallback]]