use of net.minecraftforge.fml.common.eventhandler.EventBus in project SpongeForge by SpongePowered.
the class MixinEventBus method post.
@Override
public boolean post(Event event, boolean forced) {
org.spongepowered.api.event.Event spongeEvent = null;
if (!isSpongeSetUp) {
try {
Sponge.getCauseStackManager();
} catch (Exception e) {
return false;
}
}
isSpongeSetUp = true;
// TODO verify the frame is necessary here or if it can be placed elsewhere
final boolean isMainThread = Sponge.isServerAvailable() && Sponge.getServer().isMainThread();
try (final CauseStackManager.StackFrame frame = isMainThread ? Sponge.getCauseStackManager().pushCauseFrame() : null) {
if (!forced) {
if (!isEventAllowed(event)) {
return false;
}
spongeEvent = SpongeForgeEventFactory.createSpongeEvent(event);
}
IEventListener[] listeners = event.getListenerList().getListeners(this.busID);
if (!forced && (event instanceof org.spongepowered.api.event.Event || spongeEvent != null) && !Sponge.getGame().getPlatform().getExecutionType().isClient()) {
boolean cancelled = ((SpongeModEventManager) SpongeImpl.getGame().getEventManager()).post(spongeEvent, event, listeners, SpongeModEventManager.shouldUseCauseStackManager(false));
if (!cancelled) {
SpongeForgeEventFactory.onForgePost(event);
}
return cancelled;
}
listeners = event.getListenerList().getListeners(this.busID);
int index = 0;
IMixinASMEventHandler modListener = null;
try {
for (; index < listeners.length; index++) {
final IEventListener listener = listeners[index];
if (listener instanceof IMixinASMEventHandler) {
modListener = (IMixinASMEventHandler) listener;
modListener.getTimingsHandler().startTimingIfSync();
try (PhaseContext<?> context = SpongeForgeEventHooks.preEventPhaseCheck(listener, event)) {
listener.invoke(event);
}
modListener.getTimingsHandler().stopTimingIfSync();
} else {
listener.invoke(event);
}
}
} catch (Throwable throwable) {
if (modListener != null) {
modListener.getTimingsHandler().stopTimingIfSync();
}
this.exceptionHandler.handleException((EventBus) (Object) this, event, listeners, index, throwable);
throw new RuntimeException(throwable);
}
return (event.isCancelable() ? event.isCanceled() : false);
}
}
use of net.minecraftforge.fml.common.eventhandler.EventBus in project SpongeForge by SpongePowered.
the class SpongeModEventManagerTest method testSpawn.
@Test
public void testSpawn() throws ClassNotFoundException {
SpawnListener listener = new SpawnListener();
Assert.assertFalse("SPAWN_ENTITY_EVENT is not false!", ShouldFire.SPAWN_ENTITY_EVENT);
Assert.assertFalse("SPAWN_ENTITY_EVENT_CHUNKLOAD is not false!", ShouldFire.SPAWN_ENTITY_EVENT_CHUNKLOAD);
this.eventManager.registerListeners(this.plugin, listener);
Assert.assertTrue("SPAWN_ENTITY_EVENT is not true!", ShouldFire.SPAWN_ENTITY_EVENT);
Assert.assertFalse("SPAWN_ENTITY_EVENT_CHUNKLOAD is not false!", ShouldFire.SPAWN_ENTITY_EVENT_CHUNKLOAD);
this.eventManager.unregisterListeners(listener);
Assert.assertFalse("SPAWN_ENTITY_EVENT is not false!", ShouldFire.SPAWN_ENTITY_EVENT);
Assert.assertFalse("SPAWN_ENTITY_EVENT_CHUNKLOAD is not false!", ShouldFire.SPAWN_ENTITY_EVENT_CHUNKLOAD);
ForgeSpawnEventListener forgeListener = new ForgeSpawnEventListener();
EventBus eventBus = new EventBus();
eventBus.register(forgeListener);
Assert.assertTrue("SPAWN_ENTITY_EVENT is not true!", ShouldFire.SPAWN_ENTITY_EVENT);
}
Aggregations