Search in sources :

Example 1 with EventBus

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);
    }
}
Also used : IMixinEventBus(org.spongepowered.mod.interfaces.IMixinEventBus) EventBus(net.minecraftforge.fml.common.eventhandler.EventBus) IEventListener(net.minecraftforge.fml.common.eventhandler.IEventListener) SpongeModEventManager(org.spongepowered.mod.event.SpongeModEventManager) CauseStackManager(org.spongepowered.api.event.CauseStackManager) Event(net.minecraftforge.fml.common.eventhandler.Event) WorldEvent(net.minecraftforge.event.world.WorldEvent) LivingDropsEvent(net.minecraftforge.event.entity.living.LivingDropsEvent) AttackEntityEvent(net.minecraftforge.event.entity.player.AttackEntityEvent) IMixinASMEventHandler(org.spongepowered.mod.interfaces.IMixinASMEventHandler)

Example 2 with EventBus

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);
}
Also used : EventBus(net.minecraftforge.fml.common.eventhandler.EventBus) PrepareForTest(org.powermock.core.classloader.annotations.PrepareForTest) Test(org.junit.Test)

Aggregations

EventBus (net.minecraftforge.fml.common.eventhandler.EventBus)2 LivingDropsEvent (net.minecraftforge.event.entity.living.LivingDropsEvent)1 AttackEntityEvent (net.minecraftforge.event.entity.player.AttackEntityEvent)1 WorldEvent (net.minecraftforge.event.world.WorldEvent)1 Event (net.minecraftforge.fml.common.eventhandler.Event)1 IEventListener (net.minecraftforge.fml.common.eventhandler.IEventListener)1 Test (org.junit.Test)1 PrepareForTest (org.powermock.core.classloader.annotations.PrepareForTest)1 CauseStackManager (org.spongepowered.api.event.CauseStackManager)1 SpongeModEventManager (org.spongepowered.mod.event.SpongeModEventManager)1 IMixinASMEventHandler (org.spongepowered.mod.interfaces.IMixinASMEventHandler)1 IMixinEventBus (org.spongepowered.mod.interfaces.IMixinEventBus)1