Fractal Softworks Forum

Starsector => Bug Reports & Support => Bug Reports & Support (modded) => Topic started by: LazyWizard on November 16, 2018, 06:50:50 PM

Title: CampaignEventListener not being called
Post by: LazyWizard on November 16, 2018, 06:50:50 PM
For some reason, reportPlayerEngagement() and reportPlayerMarketTransaction() aren't being called for my campaign event listener. Those are the only two listener methods I'm using, so I'm not sure if the others are affected.

The listener is being registered with
Code: java
        Global.getSector().addTransientScript(saver);
        Global.getSector().getListenerManager().addListener(saver, true);

And the source of the listener itself is here (https://bitbucket.org/LazyWizard/autosave/src/default/org/lazywizard/autosave/Autosaver.java). ListenerManagerAPI.getListeners() shows it's been registered, but the listener's methods are never called.
Title: Re: CampaignEventListener not being called
Post by: Alex on November 16, 2018, 06:55:01 PM
Those are CampaignEventListener methods, so that's only going to get called if you add it via SectorAPI.addListener().

ListenerManager supports the interfaces in the com.fs.starfarer.api.campaign.listeners package.
Title: Re: CampaignEventListener not being called
Post by: LazyWizard on November 16, 2018, 07:08:39 PM
Ah, my mistake. And I just remembered that you actually mentioned the new listener system in a PM you sent me a while back. Sorry about that! :-[
Title: Re: CampaignEventListener not being called
Post by: Alex on November 16, 2018, 07:09:18 PM
No worries :) I can see how that might be unclear.
Title: Re: CampaignEventListener not being called
Post by: Nick XR on November 17, 2018, 03:12:56 PM
If I register my plugin via:

Code
        Global.getSector().getListenerManager().addListener(new BaseCampaignEventListener(false) {
            public void reportPlayerEngagement(EngagementResultAPI result) {
                log.debug("reportPlayerEngagement " + result);
            }
        }, true);

the 'reportPlayerEngagement' doesn't get invoked at the end of combat.  I see that addListener takes an object, should I be implementing a different class?
Title: Re: CampaignEventListener not being called
Post by: Alex on November 17, 2018, 09:37:53 PM
If you're extending BaseCampaignEventListener, you need to add the plugin using SectorAPI.getListener().

Basically:
Those are CampaignEventListener methods, so that's only going to get called if you add it via SectorAPI.addListener().

ListenerManager supports the interfaces in the com.fs.starfarer.api.campaign.listeners package.
Title: Re: CampaignEventListener not being called
Post by: Nick XR on November 18, 2018, 02:13:36 PM
Those are CampaignEventListener methods, so that's only going to get called if you add it via SectorAPI.addListener().

ListenerManager supports the interfaces in the com.fs.starfarer.api.campaign.listeners package.

Ok. Apologies for not reading your first post carefully.

I think part of my confusion was/is SectorAPI.addListener(CampaignEventListener listener) is @Deprecated and the comment says to use getListenerManager instead.   :-\
Title: Re: CampaignEventListener not being called
Post by: Alex on November 18, 2018, 02:44:00 PM
... well, when you put it that way.

That's actually not even accurate, since a few callbacks don't have corresponding ListenerManager-used interfaces. Let me undeprecate those, not sure what I was thinking.