Thank you kindly.
Your reply has come at an interesting time actually.
When working with C++, everything was fine.
When it came to Blueprints, I had managed to get Register/Unregister to correctly list the events, but was unable to call events or modify event values.
I decided to change the events from struct based to UObject based.
By this stage, there was so little left of the original EventManager class, I ended up just making a new plugin.
If I didn’t need to work with Blueprints, there would be no need, but alas…
It also takes worlds into account, allowing for world specific events (allows PIE multiplayer to work) or global (ignores world).