Search in sources :

Example 1 with RegisteredListener

use of org.spongepowered.common.event.manager.RegisteredListener in project SpongeCommon by SpongePowered.

the class ForgeEventManager method postDualBus.

// Implementation
private boolean postDualBus(final org.spongepowered.api.event.Event spongeEvent, final Collection<? extends Event> forgeEvents, final IEventBusInvokeDispatcher dispatcher) {
    try (final NoExceptionClosable ignored = this.preparePost(spongeEvent)) {
        final RegisteredListener.Cache listeners = this.getHandlerCache(spongeEvent);
        final List<RegisteredListener<?>> beforeModifications = listeners.beforeModifications();
        if (!beforeModifications.isEmpty()) {
            // First, we fire the Sponge beforeModifications on the Sponge event
            this.post(spongeEvent, beforeModifications);
            // Then we sync to the Forge events
            for (final Event forgeEvent : forgeEvents) {
                ((ForgeEventBridge_Forge) forgeEvent).bridge$syncFrom(spongeEvent);
            }
        }
        // Then, we fire all our Forge events
        for (final Event forgeEvent : forgeEvents) {
            this.wrappedEventBus.post(forgeEvent, dispatcher);
            // We must sync back the event's changes, if there are any.
            // For complex events, this will be a partial sync.
            ((ForgeEventBridge_Forge) forgeEvent).bridge$syncTo(spongeEvent);
        }
        // and now we do our standard event listener stuff.
        return this.post(spongeEvent, listeners.afterModifications());
    }
}
Also used : Event(net.minecraftforge.eventbus.api.Event) GenericEvent(net.minecraftforge.eventbus.api.GenericEvent) RegisteredListener(org.spongepowered.common.event.manager.RegisteredListener) ForgeEventBridge_Forge(org.spongepowered.forge.launch.bridge.event.ForgeEventBridge_Forge)

Aggregations

Event (net.minecraftforge.eventbus.api.Event)1 GenericEvent (net.minecraftforge.eventbus.api.GenericEvent)1 RegisteredListener (org.spongepowered.common.event.manager.RegisteredListener)1 ForgeEventBridge_Forge (org.spongepowered.forge.launch.bridge.event.ForgeEventBridge_Forge)1