Commit 7bd1f7fcb9c104020a50606cd30964e2bca49fca
1 parent
3810e896
add ShutdownListener
Showing
4 changed files
with
50 additions
and
3 deletions
java/client/com/mumfrey/liteloader/client/api/LiteLoaderCoreAPIClient.java
@@ -125,10 +125,13 @@ public class LiteLoaderCoreAPIClient extends LiteLoaderCoreAPI | @@ -125,10 +125,13 @@ public class LiteLoaderCoreAPIClient extends LiteLoaderCoreAPI | ||
125 | @Override | 125 | @Override |
126 | public List<Observer> getObservers() | 126 | public List<Observer> getObservers() |
127 | { | 127 | { |
128 | + ObjectFactory<?, ?> objectFactory = this.getObjectFactory(); | ||
129 | + | ||
128 | return ImmutableList.<Observer>of | 130 | return ImmutableList.<Observer>of |
129 | ( | 131 | ( |
130 | new ResourceObserver(), | 132 | new ResourceObserver(), |
131 | - this.getObjectFactory().getPanelManager() | 133 | + objectFactory.getPanelManager(), |
134 | + objectFactory.getEventBroker() | ||
132 | ); | 135 | ); |
133 | } | 136 | } |
134 | 137 |
java/common/com/mumfrey/liteloader/ShutdownListener.java
0 → 100644
1 | +package com.mumfrey.liteloader; | ||
2 | + | ||
3 | +/** | ||
4 | + * Interface for mods that want to receive an event when the game is shutting down due to a user request. They do | ||
5 | + * not receive the callback when the VM is terminating for other reasons, use a regular VM shutdownhook for that. | ||
6 | + * | ||
7 | + * @author Adam Mummery-Smith | ||
8 | + */ | ||
9 | +public interface ShutdownListener extends LiteMod | ||
10 | +{ | ||
11 | + public abstract void onShutDown(); | ||
12 | +} |
java/common/com/mumfrey/liteloader/core/LiteLoaderEventBroker.java
@@ -35,8 +35,10 @@ import com.mumfrey.liteloader.ServerCommandProvider; | @@ -35,8 +35,10 @@ import com.mumfrey.liteloader.ServerCommandProvider; | ||
35 | import com.mumfrey.liteloader.ServerPlayerListener; | 35 | import com.mumfrey.liteloader.ServerPlayerListener; |
36 | import com.mumfrey.liteloader.ServerPluginChannelListener; | 36 | import com.mumfrey.liteloader.ServerPluginChannelListener; |
37 | import com.mumfrey.liteloader.ServerTickable; | 37 | import com.mumfrey.liteloader.ServerTickable; |
38 | +import com.mumfrey.liteloader.ShutdownListener; | ||
38 | import com.mumfrey.liteloader.api.InterfaceProvider; | 39 | import com.mumfrey.liteloader.api.InterfaceProvider; |
39 | import com.mumfrey.liteloader.api.Listener; | 40 | import com.mumfrey.liteloader.api.Listener; |
41 | +import com.mumfrey.liteloader.api.ShutdownObserver; | ||
40 | import com.mumfrey.liteloader.common.GameEngine; | 42 | import com.mumfrey.liteloader.common.GameEngine; |
41 | import com.mumfrey.liteloader.common.LoadingProgress; | 43 | import com.mumfrey.liteloader.common.LoadingProgress; |
42 | import com.mumfrey.liteloader.core.event.HandlerList; | 44 | import com.mumfrey.liteloader.core.event.HandlerList; |
@@ -54,7 +56,7 @@ import com.mumfrey.liteloader.util.log.LiteLoaderLogger; | @@ -54,7 +56,7 @@ import com.mumfrey.liteloader.util.log.LiteLoaderLogger; | ||
54 | * @param <TClient> Type of the client runtime, "Minecraft" on client and null on the server | 56 | * @param <TClient> Type of the client runtime, "Minecraft" on client and null on the server |
55 | * @param <TServer> Type of the server runtime, "IntegratedServer" on the client, "MinecraftServer" on the server | 57 | * @param <TServer> Type of the server runtime, "IntegratedServer" on the client, "MinecraftServer" on the server |
56 | */ | 58 | */ |
57 | -public abstract class LiteLoaderEventBroker<TClient, TServer extends MinecraftServer> implements InterfaceProvider | 59 | +public abstract class LiteLoaderEventBroker<TClient, TServer extends MinecraftServer> implements InterfaceProvider, ShutdownObserver |
58 | { | 60 | { |
59 | /** | 61 | /** |
60 | * @author Adam Mummery-Smith | 62 | * @author Adam Mummery-Smith |
@@ -152,6 +154,11 @@ public abstract class LiteLoaderEventBroker<TClient, TServer extends MinecraftSe | @@ -152,6 +154,11 @@ public abstract class LiteLoaderEventBroker<TClient, TServer extends MinecraftSe | ||
152 | private FastIterable<ServerTickable> serverTickListeners = new HandlerList<ServerTickable>(ServerTickable.class); | 154 | private FastIterable<ServerTickable> serverTickListeners = new HandlerList<ServerTickable>(ServerTickable.class); |
153 | 155 | ||
154 | /** | 156 | /** |
157 | + * List of mods which want to be notified when the game is shutting down | ||
158 | + */ | ||
159 | + private FastIterable<ShutdownListener> shutdownListeners = new HandlerList<ShutdownListener>(ShutdownListener.class); | ||
160 | + | ||
161 | + /** | ||
155 | * ctor | 162 | * ctor |
156 | * | 163 | * |
157 | * @param loader | 164 | * @param loader |
@@ -210,6 +217,7 @@ public abstract class LiteLoaderEventBroker<TClient, TServer extends MinecraftSe | @@ -210,6 +217,7 @@ public abstract class LiteLoaderEventBroker<TClient, TServer extends MinecraftSe | ||
210 | delegate.registerInterface(PlayerMoveListener.class); | 217 | delegate.registerInterface(PlayerMoveListener.class); |
211 | delegate.registerInterface(CommonPluginChannelListener.class); | 218 | delegate.registerInterface(CommonPluginChannelListener.class); |
212 | delegate.registerInterface(ServerTickable.class); | 219 | delegate.registerInterface(ServerTickable.class); |
220 | + delegate.registerInterface(ShutdownListener.class); | ||
213 | } | 221 | } |
214 | 222 | ||
215 | /** | 223 | /** |
@@ -264,6 +272,14 @@ public abstract class LiteLoaderEventBroker<TClient, TServer extends MinecraftSe | @@ -264,6 +272,14 @@ public abstract class LiteLoaderEventBroker<TClient, TServer extends MinecraftSe | ||
264 | { | 272 | { |
265 | this.serverTickListeners.add(serverTickable); | 273 | this.serverTickListeners.add(serverTickable); |
266 | } | 274 | } |
275 | + | ||
276 | + /** | ||
277 | + * @param shutdownListener | ||
278 | + */ | ||
279 | + public void addShutdownListener(ShutdownListener shutdownListener) | ||
280 | + { | ||
281 | + this.shutdownListeners.add(shutdownListener); | ||
282 | + } | ||
267 | 283 | ||
268 | /** | 284 | /** |
269 | * @param instance | 285 | * @param instance |
@@ -510,4 +526,20 @@ public abstract class LiteLoaderEventBroker<TClient, TServer extends MinecraftSe | @@ -510,4 +526,20 @@ public abstract class LiteLoaderEventBroker<TClient, TServer extends MinecraftSe | ||
510 | this.playerStateList.remove(playerState); | 526 | this.playerStateList.remove(playerState); |
511 | } | 527 | } |
512 | } | 528 | } |
529 | + | ||
530 | + @Override | ||
531 | + public void onShutDown() | ||
532 | + { | ||
533 | + for (ShutdownListener listener : this.shutdownListeners) | ||
534 | + { | ||
535 | + try | ||
536 | + { | ||
537 | + listener.onShutDown(); | ||
538 | + } | ||
539 | + catch (Throwable th) | ||
540 | + { | ||
541 | + th.printStackTrace(); | ||
542 | + } | ||
543 | + } | ||
544 | + } | ||
513 | } | 545 | } |
java/common/com/mumfrey/liteloader/interfaces/FastIterable.java
@@ -7,7 +7,7 @@ package com.mumfrey.liteloader.interfaces; | @@ -7,7 +7,7 @@ package com.mumfrey.liteloader.interfaces; | ||
7 | * | 7 | * |
8 | * @param <T> | 8 | * @param <T> |
9 | */ | 9 | */ |
10 | -public interface FastIterable<T> | 10 | +public interface FastIterable<T> extends Iterable<T> |
11 | { | 11 | { |
12 | /** | 12 | /** |
13 | * Add an entry to the iterable | 13 | * Add an entry to the iterable |