Line 8: |
Line 8: |
| '''Generic events''' are events which supply additional generic type information, allowing event listeners to filter based on that secondary type. Generic events must implement <code>IGenericEvent<T></code>, and return their generic type from the <code>IGenericEvent#getType()</code> method. As a convenience, events that wish to be generic events may extend the <code>GenericEvent<T></code> instead of manually implementing the interface. | | '''Generic events''' are events which supply additional generic type information, allowing event listeners to filter based on that secondary type. Generic events must implement <code>IGenericEvent<T></code>, and return their generic type from the <code>IGenericEvent#getType()</code> method. As a convenience, events that wish to be generic events may extend the <code>GenericEvent<T></code> instead of manually implementing the interface. |
| | | |
− | For generic events, the generic type must be an exact match with the listener's generic type filter to pass; if an <code>AttachCapabilitiesEvent<ItemStack></code> is fired and a listener is listening for <code>AttachCapabilitiesEvent<Object></code>, the listener does not receive the event. A event listener may listen to events with any generic type by supplying a wildcard generic (<code><?></code>). Nested generic types are ignored. | + | For generic events, the generic type must be an exact match with the listener's generic type filter to pass; if an <code>AttachCapabilitiesEvent<ItemStack></code> is fired and a listener is listening for <code>AttachCapabilitiesEvent<Object></code>, the listener does not receive the event. If an event listener is registered using <code>EventBus#register(Object)</code>, it may listen to events with any generic type by supplying a wildcard generic (<code><?></code>). Nested generic types are ignored. |
| | | |
| == Cancellable Events == | | == Cancellable Events == |
Line 29: |
Line 29: |
| An '''event bus''' is an object which holds a list of event listeners, and the logic for firing the events. Events may be posted on these event buses, which then invokes the handlers. The main class for event buses is <code>IEventBus</code>, and a bus is created using <code>BusBuilder</code>. | | An '''event bus''' is an object which holds a list of event listeners, and the logic for firing the events. Events may be posted on these event buses, which then invokes the handlers. The main class for event buses is <code>IEventBus</code>, and a bus is created using <code>BusBuilder</code>. |
| | | |
− | You can find a more detailed explanation on the Event Bus pattern[https://dzone.com/articles/design-patterns-event-bus here.] | + | You can find a more detailed explanation on the Event Bus pattern [https://dzone.com/articles/design-patterns-event-bus here.] |
| ===Existing Buses=== | | ===Existing Buses=== |
| Forge exposes three main families of event buses: the main Forge event bus, the mod-specific event buses, and the network channel event buses. | | Forge exposes three main families of event buses: the main Forge event bus, the mod-specific event buses, and the network channel event buses. |
Line 45: |
Line 45: |
| | | |
| {{Tip|title=Tip|The mod-specific event buses are provided by the <code>javafml</code> language provider which is builtin to Forge Mod Loader. Custom language providers may provide other ways for mods to receive the different mod-related initialization and registration events; see the documentation of your custom language provider for details.}} | | {{Tip|title=Tip|The mod-specific event buses are provided by the <code>javafml</code> language provider which is builtin to Forge Mod Loader. Custom language providers may provide other ways for mods to receive the different mod-related initialization and registration events; see the documentation of your custom language provider for details.}} |
| + | |
| + | List of events fired on the Mod-Specific event bus{{:Events/Mod bus}} |
| + | |
| ====Network Channel Event Buses==== | | ====Network Channel Event Buses==== |
| The '''network channel event buses''' are the family of event buses where different network-related events are fired. Each registered [[Networking|networking channel]] has their own instance of an event-bus in <code>NetworkInstance</code>, where only events pertinent to that channel are fired on. | | The '''network channel event buses''' are the family of event buses where different network-related events are fired. Each registered [[Networking|networking channel]] has their own instance of an event-bus in <code>NetworkInstance</code>, where only events pertinent to that channel are fired on. |
Line 203: |
Line 206: |
| | | |
| | | |
− | An example for a static event listener listening to <code>RenderWorldLastEvent</code> which will only be called on the physical client: | + | An example for a static event listener listening to <code>RenderLevelLastEvent</code> which will only be called on the physical client: |
| | | |
| <syntaxhighlight lang="java"> | | <syntaxhighlight lang="java"> |
Line 209: |
Line 212: |
| public class MyStaticClientOnlyEventHandler { | | public class MyStaticClientOnlyEventHandler { |
| @SubscribeEvent | | @SubscribeEvent |
− | public static void drawLast(RenderWorldLastEvent event) { | + | public static void drawLast(RenderLevelLastEvent event) { |
| System.out.println("Drawing!"); | | System.out.println("Drawing!"); |
| } | | } |
Line 289: |
Line 292: |
| * <code>Event</code> - ''The root event class'' | | * <code>Event</code> - ''The root event class'' |
| ** '''Rendering events''' ('''client-only''') | | ** '''Rendering events''' ('''client-only''') |
− | *** <code>RenderWorldLastEvent</code> - Fired after world rendering to allow mods to add custom renders | + | *** <code>RenderLevelLastEvent</code> - Fired after level rendering to allow mods to add custom renders |
| *** <code>RenderHandEvent</code> - Fired before and after the hand of the player is rendered in the first person POV | | *** <code>RenderHandEvent</code> - Fired before and after the hand of the player is rendered in the first person POV |
| *** <code>RenderLivingEvent</code> - Fired before and after a <code>LivingRenderer</code> is executed | | *** <code>RenderLivingEvent</code> - Fired before and after a <code>LivingRenderer</code> is executed |
Line 298: |
Line 301: |
| *** <code>EntityViewRenderEvent</code> - Superclass for events relating to the player's viewpoint | | *** <code>EntityViewRenderEvent</code> - Superclass for events relating to the player's viewpoint |
| *** <code>RenderGameOverlayEvent</code> - Superclass, fired for each element on the player's HUD or game overlay | | *** <code>RenderGameOverlayEvent</code> - Superclass, fired for each element on the player's HUD or game overlay |
− | *** <code>FOVUpdateEvent</code> - Fired when the FOV of the player is requested (?) | + | *** <code>FOVModifierEvent</code> - Fired when the FOV of the player is requested (?) |
− | ** '''GUI/Screen events''' ('''client-only''') | + | ** '''Screen events''' ('''client-only''') |
− | *** <code>GuiScreenEvent</code> - Superclass for events relating to <code>Screen</code>s | + | *** <code>ScreenEvent</code> - Superclass for events relating to <code>Screen</code>s |
− | *** <code>GuiContainerEvent</code> - Superclsas for events relating to <code>ContainerScreen</code>s | + | *** <code>ScreenContainerEvent</code> - Superclsas for events relating to <code>ContainerScreen</code>s |
− | *** <code>GuiOpenEvent</code> - Fired before a new screen is opened on the game window | + | *** <code>ScreenOpenEvent</code> - Fired before a new screen is opened on the game window |
| ** '''Superclass events''' - ''These events exist to be superclasses of other events'' | | ** '''Superclass events''' - ''These events exist to be superclasses of other events'' |
| *** <code>GenericEvent</code> - ''from EventBus'', superclass of events which have a generic type | | *** <code>GenericEvent</code> - ''from EventBus'', superclass of events which have a generic type |
− | *** <code>BlockEvent</code> - Superclass for events relating to a block within the world | + | *** <code>BlockEvent</code> - Superclass for events relating to a block within the level |
− | *** <code>WorldEvent</code> - Superclass for events relating to the world | + | *** <code>LevelEvent</code> - Superclass for events relating to the level |
| *** <code>InputEvent</code> - ('''client-only''') Superclass for events relating to the player's keyboard and mouse inputs | | *** <code>InputEvent</code> - ('''client-only''') Superclass for events relating to the player's keyboard and mouse inputs |
| *** <code>NetworkEvent</code> - Superclass for events relating to networking | | *** <code>NetworkEvent</code> - Superclass for events relating to networking |
− | *** <code>ExplosionEvent</code> - Fired before an explosion explodes in the world | + | *** <code>ExplosionEvent</code> - Fired before an explosion explodes in the level |
| *** <code>SoundEvent</code> - ('''client-only''') Superclass for events related to sounds | | *** <code>SoundEvent</code> - ('''client-only''') Superclass for events related to sounds |
| *** <code>EntityEvent</code> - Superclass for events relating to entities | | *** <code>EntityEvent</code> - Superclass for events relating to entities |
Line 328: |
Line 331: |
| ** '''Gamemode events''' | | ** '''Gamemode events''' |
| *** <code>DifficultyChangeEvent</code> | | *** <code>DifficultyChangeEvent</code> |
− | *** <code>ClientPlayerChangeGamemodeEvent</code> | + | *** <code>ClientPlayerChangeGameTypeEvent</code> |
| **'''Trade events''' | | **'''Trade events''' |
| *** <code>WandererTradesEvent</code> | | *** <code>WandererTradesEvent</code> |