public boolean postBulk( Event spongeEvent, Class<? extends net.minecraftforge.fml.common.eventhandler.Event> clazz) { RegisteredListener.Cache listenerCache = getHandlerCache(spongeEvent); // Fire events to plugins before modifications for (Order order : Order.values()) { post(spongeEvent, listenerCache.getListenersByOrder(order), true, false); } StaticMixinHelper.processingInternalForgeEvent = true; spongeEvent = SpongeForgeEventFactory.callForgeEvent(spongeEvent, clazz); StaticMixinHelper.processingInternalForgeEvent = false; // Fire events to plugins after modifications (default) for (Order order : Order.values()) { post(spongeEvent, listenerCache.getListenersByOrder(order), false, false); } return spongeEvent instanceof Cancellable && ((Cancellable) spongeEvent).isCancelled(); }
@Override public boolean post(Event spongeEvent, boolean allowClientThread) { if (!allowClientThread & SpongeMod.instance.isClientThread()) { return false; } if (spongeEvent.getClass().getInterfaces().length > 0) { Class<? extends net.minecraftforge.fml.common.eventhandler.Event> clazz = this.eventMappings.get(spongeEvent.getClass().getInterfaces()[0]); if (clazz == null) { clazz = eventBulkMappings.get(spongeEvent.getClass().getInterfaces()[0]); if (clazz != null) { return postBulk(spongeEvent, clazz); } } else { StaticMixinHelper.processingInternalForgeEvent = true; net.minecraftforge.fml.common.eventhandler.Event forgeEvent = SpongeForgeEventFactory.findAndCreateForgeEvent(spongeEvent, clazz); StaticMixinHelper.processingInternalForgeEvent = false; if (forgeEvent != null) { // Avoid separate mappings for events defined as inner classes Class<?> enclosingClass = forgeEvent.getClass().getEnclosingClass(); EventBus bus = this.busMappings.get(enclosingClass == null ? forgeEvent.getClass() : enclosingClass); if (bus == null) { bus = MinecraftForge.EVENT_BUS; } return post( spongeEvent, forgeEvent, forgeEvent.getListenerList().getListeners(((IMixinEventBus) bus).getBusID())); } } } return post( spongeEvent, getHandlerCache(spongeEvent).getListeners(), false, true); // no checking for modifications required }