User Tools

Site Tools


drafts:callbacks

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
drafts:callbacks [2023/09/13 18:47] – removed - external edit (Unknown date) 127.0.0.1drafts:callbacks [2023/09/13 18:47] (current) – ↷ Page moved from playground:callbacks to drafts:callbacks nebelnidas
Line 1: Line 1:
 +====== Listening to Events (DRAFT) ======
 +By the end of this tutorial, you will:
 +  - Understand Events and Callbacks,
 +  - Learn how to register a Callback on an existing Event,
 +  - Make Wool blocks drop Bedrock when broken
 +
 +===== What's a Callback? =====
 +Callback functions are pieces of code that you can register to run when certain events happen in Minecraft. (E.g. a block being broken, a  Mods register functions to be called by the They more or less work as less-invasive, less-powerful alternative to Mixin code, and they cover a lot of the cases where you might assume a Mixin is required.
 +
 +===== Callback Interfaces =====
 +There is a series of interfaces named [EventName]Callback. They will handle the events (get called by mixins), invoke callbacks which are registered on mod initialization.
 +
 +==== Callback Interfaces in Fabric API ====
 +Event Callbacks provided by Fabric API can be found in ''net.fabricmc.fabric.api.event'' package.
 +
 +Here is a partial list of existing callbacks.
 +
 +=== Player Interactive Events ===
 +Player: [[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]]
 +
 +Player (Client): [[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]]
 +
 +=== Registry Events ===
 +[[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]]
 +
 +=== Looting Events ===
 +[[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]]
 +
 +There is an example using ''LootTableLoadingCallback'' you can find [[tutorial:adding_to_loot_tables|here]].
 +
 +=== World Events ===
 +[[https://github.com/FabricMC/fabric/blob/1.15/fabric-events-lifecycle-v0/src/main/java/net/fabricmc/fabric/api/event/world/WorldTickCallback.java|WorldTickCallback]]
 +
 +=== Server Events ===
 +[[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]]
 +
 +=== Network Events ===
 +[[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]]
 +
 +==== Custom Callbacks ====
 +Although there are plenty of events already provided by Fabric API, you can still make your own events. Please refer to [[tutorial:events]].
 +
 +===== Practice ======
 +<!-- TODO: Add explaination -->
 +
 +Let's see Take ''AttackBlockCallback'' as an example for how register a listener
 +
 +Basically, we are going to ... (an event listener) callback to listen the event.
 +
 +Since there is not more a method that is able to be called on a block clicked, you may want to. If you want to make a ;
 +
 +
 +As stated in javadoc of ''AttackBlockCallback'', this event accepts ; You can interrupt and stop continuing by sending ActionResult.SUCCESS;
 +
 +<code java>
 +/**
 + * Callback for left-clicking ("attacking") a block.
 + * Is hooked in before the spectator check, so make sure to check for the player's game mode as well!
 + *
 + * <p>Upon return:
 + * <ul><li>SUCCESS cancels further processing and, on the client, sends a packet to the server.
 + * <li>PASS falls back to further processing.
 + * <li>FAIL cancels further processing and does not send a packet to the server.</ul>
 + *
 + * <p>ATTACK_BLOCK does not let you control the packet sending process yet.
 + */
 +</code>
 +
 +<!-- TODO: Really do sth. -->
 +
 +<code java [enable_line_numbers="true"]>
 +public class ExampleMod implements ModInitializer
 +{
 +    [...]
 +    
 +    @Override
 +    public void onInitialize() {
 +        AttackBlockCallback.EVENT.register((player, world, hand, pos, direction) -> {
 +            // Do sth...
 +            if ([condition]) {
 +                return ActionResult.SUCCESS;
 +            } else {
 +                return ActionResult.PASS;
 +            }
 +            
 +        })
 +    }
 +}
 +</code>
 +
 +<!-- TODO: An image of the effect of something have done -->