public boolean post( Event spongeEvent, net.minecraftforge.fml.common.eventhandler.Event forgeEvent, IEventListener[] listeners) { checkNotNull(forgeEvent, "forgeEvent"); if (spongeEvent == null) { // Fired by Forge spongeEvent = ((IMixinEvent) forgeEvent).createSpongeEvent(); } RegisteredListener.Cache listenerCache = getHandlerCache(spongeEvent); // Fire events to plugins before modifications for (Order order : Order.values()) { post(spongeEvent, listenerCache.getListenersByOrder(order), true, false); } // If there are no forge listeners for event, skip sync if (listeners.length > 0) { // sync plugin data for Mods ((IMixinEvent) forgeEvent).syncDataToForge(spongeEvent); for (IEventListener listener : listeners) { try { listener.invoke(forgeEvent); } catch (Throwable throwable) { SpongeImpl.getLogger().catching(throwable); } } // sync Forge data for Plugins ((IMixinEvent) spongeEvent).syncDataToSponge(forgeEvent); } // Fire events to plugins after modifications (default) for (Order order : Order.values()) { post(spongeEvent, listenerCache.getListenersByOrder(order), false, false); } // sync plugin data for Forge ((IMixinEvent) forgeEvent).syncDataToForge(spongeEvent); if (spongeEvent instanceof Cancellable) { if (((Cancellable) spongeEvent).isCancelled()) { forgeEvent.setCanceled(true); } } return forgeEvent.isCancelable() && forgeEvent.isCanceled(); }