diff --git a/src/main/java/org/ultramine/core/service/EventBusRegisteredService.java b/src/main/java/org/ultramine/core/service/EventBusRegisteredService.java new file mode 100644 index 0000000..6e30ca6 --- /dev/null +++ b/src/main/java/org/ultramine/core/service/EventBusRegisteredService.java @@ -0,0 +1,33 @@ +package org.ultramine.core.service; + +import cpw.mods.fml.common.eventhandler.EventBus; +import net.minecraftforge.common.MinecraftForge; + +public abstract class EventBusRegisteredService implements ServiceStateHandler +{ + private final EventBus[] buses; + + public EventBusRegisteredService(EventBus... buses) + { + this.buses = buses; + } + + public EventBusRegisteredService() + { + this(MinecraftForge.EVENT_BUS); + } + + @Override + public void onEnabled() + { + for(EventBus bus : buses) + bus.register(this); + } + + @Override + public void onDisabled() + { + for(EventBus bus : buses) + bus.unregister(this); + } +} diff --git a/src/main/java/org/ultramine/core/service/ServiceStateHandler.java b/src/main/java/org/ultramine/core/service/ServiceStateHandler.java new file mode 100644 index 0000000..509fd2c --- /dev/null +++ b/src/main/java/org/ultramine/core/service/ServiceStateHandler.java @@ -0,0 +1,8 @@ +package org.ultramine.core.service; + +public interface ServiceStateHandler +{ + default void onEnabled() {} + + default void onDisabled() {} +} diff --git a/src/main/java/org/ultramine/server/service/UMServiceManager.java b/src/main/java/org/ultramine/server/service/UMServiceManager.java index ca214ab..df47790 100644 --- a/src/main/java/org/ultramine/server/service/UMServiceManager.java +++ b/src/main/java/org/ultramine/server/service/UMServiceManager.java @@ -5,6 +5,7 @@ import org.ultramine.core.service.ServiceDelegate; import org.ultramine.core.service.ServiceManager; import org.ultramine.core.service.ServiceProviderLoader; +import org.ultramine.core.service.ServiceStateHandler; import org.ultramine.core.service.ServiceSwitchEvent; import javax.annotation.Nonnull; @@ -89,8 +90,14 @@ ServiceProviderRegistration oldProvider = currentProvider; MinecraftForge.EVENT_BUS.post(new ServiceSwitchEvent.Pre(serviceClass, delegate, oldProvider == null ? null : oldProvider.providerLoader, newProvider.providerLoader)); if(oldProvider != null) + { + if(delegate.getProvider() instanceof ServiceStateHandler) + ((ServiceStateHandler)delegate.getProvider()).onDisabled(); oldProvider.providerLoader.unload(); + } newProvider.providerLoader.load(delegate); + if(delegate.getProvider() instanceof ServiceStateHandler) + ((ServiceStateHandler)delegate.getProvider()).onEnabled(); currentProvider = newProvider; MinecraftForge.EVENT_BUS.post(new ServiceSwitchEvent.Post(serviceClass, delegate, oldProvider == null ? null : oldProvider.providerLoader, newProvider.providerLoader)); }