Commit b4c52de03b8444ad6674ca81b584d2ae3bb103eb
1 parent
58a0b663
switch everything possible to HandlerList
Showing
7 changed files
with
78 additions
and
122 deletions
java/client/com/mumfrey/liteloader/client/ClientEvents.java
@@ -28,6 +28,8 @@ import com.mumfrey.liteloader.core.Events; | @@ -28,6 +28,8 @@ import com.mumfrey.liteloader.core.Events; | ||
28 | import com.mumfrey.liteloader.core.InterfaceRegistrationDelegate; | 28 | import com.mumfrey.liteloader.core.InterfaceRegistrationDelegate; |
29 | import com.mumfrey.liteloader.core.LiteLoader; | 29 | import com.mumfrey.liteloader.core.LiteLoader; |
30 | import com.mumfrey.liteloader.core.event.HandlerList; | 30 | import com.mumfrey.liteloader.core.event.HandlerList; |
31 | +import com.mumfrey.liteloader.core.event.HandlerList.ReturnLogicOp; | ||
32 | +import com.mumfrey.liteloader.interfaces.FastIterableDeque; | ||
31 | import com.mumfrey.liteloader.launch.LoaderProperties; | 33 | import com.mumfrey.liteloader.launch.LoaderProperties; |
32 | import com.mumfrey.liteloader.transformers.event.EventInfo; | 34 | import com.mumfrey.liteloader.transformers.event.EventInfo; |
33 | import com.mumfrey.liteloader.util.log.LiteLoaderLogger; | 35 | import com.mumfrey.liteloader.util.log.LiteLoaderLogger; |
@@ -82,22 +84,22 @@ public class ClientEvents extends Events<Minecraft, IntegratedServer> | @@ -82,22 +84,22 @@ public class ClientEvents extends Events<Minecraft, IntegratedServer> | ||
82 | */ | 84 | */ |
83 | private int worldHashCode = 0; | 85 | private int worldHashCode = 0; |
84 | 86 | ||
85 | - private HandlerList<Tickable> tickListeners = new HandlerList<Tickable>(Tickable.class); | ||
86 | - private HandlerList<GameLoopListener> loopListeners = new HandlerList<GameLoopListener>(GameLoopListener.class); | ||
87 | - private HandlerList<RenderListener> renderListeners = new HandlerList<RenderListener>(RenderListener.class); | ||
88 | - private HandlerList<PostRenderListener> postRenderListeners = new HandlerList<PostRenderListener>(PostRenderListener.class); | ||
89 | - private HandlerList<HUDRenderListener> hudRenderListeners = new HandlerList<HUDRenderListener>(HUDRenderListener.class); | ||
90 | - private HandlerList<ChatRenderListener> chatRenderListeners = new HandlerList<ChatRenderListener>(ChatRenderListener.class); | ||
91 | - private HandlerList<ChatListener> chatListeners = new HandlerList<ChatListener>(ChatListener.class); | ||
92 | - private HandlerList<PostLoginListener> postLoginListeners = new HandlerList<PostLoginListener>(PostLoginListener.class); | ||
93 | - private HandlerList<JoinGameListener> joinGameListeners = new HandlerList<JoinGameListener>(JoinGameListener.class); | ||
94 | - private HandlerList<OutboundChatListener> outboundChatListeners = new HandlerList<OutboundChatListener>(OutboundChatListener.class); | ||
95 | - private HandlerList<ViewportListener> viewportListeners = new HandlerList<ViewportListener>(ViewportListener.class); | ||
96 | - private HandlerList<FrameBufferListener> frameBufferListeners = new HandlerList<FrameBufferListener>(FrameBufferListener.class); | ||
97 | - private HandlerList<InitCompleteListener> initListeners = new HandlerList<InitCompleteListener>(InitCompleteListener.class); | ||
98 | - private HandlerList<ChatFilter> chatFilters = new HandlerList<ChatFilter>(ChatFilter.class); | ||
99 | - private HandlerList<PreJoinGameListener> preJoinGameListeners = new HandlerList<PreJoinGameListener>(PreJoinGameListener.class); | ||
100 | - private HandlerList<OutboundChatFilter> outboundChatFilters = new HandlerList<OutboundChatFilter>(OutboundChatFilter.class); | 87 | + private FastIterableDeque<Tickable> tickListeners = new HandlerList<Tickable>(Tickable.class); |
88 | + private FastIterableDeque<GameLoopListener> loopListeners = new HandlerList<GameLoopListener>(GameLoopListener.class); | ||
89 | + private FastIterableDeque<RenderListener> renderListeners = new HandlerList<RenderListener>(RenderListener.class); | ||
90 | + private FastIterableDeque<PostRenderListener> postRenderListeners = new HandlerList<PostRenderListener>(PostRenderListener.class); | ||
91 | + private FastIterableDeque<HUDRenderListener> hudRenderListeners = new HandlerList<HUDRenderListener>(HUDRenderListener.class); | ||
92 | + private FastIterableDeque<ChatRenderListener> chatRenderListeners = new HandlerList<ChatRenderListener>(ChatRenderListener.class); | ||
93 | + private FastIterableDeque<ChatListener> chatListeners = new HandlerList<ChatListener>(ChatListener.class); | ||
94 | + private FastIterableDeque<PostLoginListener> postLoginListeners = new HandlerList<PostLoginListener>(PostLoginListener.class); | ||
95 | + private FastIterableDeque<JoinGameListener> joinGameListeners = new HandlerList<JoinGameListener>(JoinGameListener.class); | ||
96 | + private FastIterableDeque<OutboundChatListener> outboundChatListeners = new HandlerList<OutboundChatListener>(OutboundChatListener.class); | ||
97 | + private FastIterableDeque<ViewportListener> viewportListeners = new HandlerList<ViewportListener>(ViewportListener.class); | ||
98 | + private FastIterableDeque<FrameBufferListener> frameBufferListeners = new HandlerList<FrameBufferListener>(FrameBufferListener.class); | ||
99 | + private FastIterableDeque<InitCompleteListener> initListeners = new HandlerList<InitCompleteListener>(InitCompleteListener.class); | ||
100 | + private FastIterableDeque<ChatFilter> chatFilters = new HandlerList<ChatFilter>(ChatFilter.class, ReturnLogicOp.AND_BREAK_ON_FALSE); | ||
101 | + private FastIterableDeque<PreJoinGameListener> preJoinGameListeners = new HandlerList<PreJoinGameListener>(PreJoinGameListener.class, ReturnLogicOp.OR); | ||
102 | + private FastIterableDeque<OutboundChatFilter> outboundChatFilters = new HandlerList<OutboundChatFilter>(OutboundChatFilter.class, ReturnLogicOp.AND); | ||
101 | 103 | ||
102 | @SuppressWarnings("cast") | 104 | @SuppressWarnings("cast") |
103 | public ClientEvents(LiteLoader loader, GameEngineClient engine, LoaderProperties properties) | 105 | public ClientEvents(LiteLoader loader, GameEngineClient engine, LoaderProperties properties) |
@@ -251,10 +253,7 @@ public class ClientEvents extends Events<Minecraft, IntegratedServer> | @@ -251,10 +253,7 @@ public class ClientEvents extends Events<Minecraft, IntegratedServer> | ||
251 | */ | 253 | */ |
252 | public void addChatFilter(ChatFilter chatFilter) | 254 | public void addChatFilter(ChatFilter chatFilter) |
253 | { | 255 | { |
254 | - if (!this.chatFilters.contains(chatFilter)) | ||
255 | - { | ||
256 | - this.chatFilters.add(chatFilter); | ||
257 | - } | 256 | + this.chatFilters.add(chatFilter); |
258 | } | 257 | } |
259 | 258 | ||
260 | /** | 259 | /** |
@@ -596,10 +595,9 @@ public class ClientEvents extends Events<Minecraft, IntegratedServer> | @@ -596,10 +595,9 @@ public class ClientEvents extends Events<Minecraft, IntegratedServer> | ||
596 | */ | 595 | */ |
597 | void onSendChatMessage(EventInfo<EntityClientPlayerMP> e, String message) | 596 | void onSendChatMessage(EventInfo<EntityClientPlayerMP> e, String message) |
598 | { | 597 | { |
599 | - for (OutboundChatFilter outboundChatFilter : this.outboundChatFilters) | 598 | + if (!this.outboundChatFilters.all().onSendChatMessage(message)) |
600 | { | 599 | { |
601 | - if (!outboundChatFilter.onSendChatMessage(message)) | ||
602 | - e.cancel(); | 600 | + e.cancel(); |
603 | } | 601 | } |
604 | } | 602 | } |
605 | 603 | ||
@@ -627,14 +625,7 @@ public class ClientEvents extends Events<Minecraft, IntegratedServer> | @@ -627,14 +625,7 @@ public class ClientEvents extends Events<Minecraft, IntegratedServer> | ||
627 | */ | 625 | */ |
628 | boolean onPreJoinGame(INetHandler netHandler, S01PacketJoinGame loginPacket) | 626 | boolean onPreJoinGame(INetHandler netHandler, S01PacketJoinGame loginPacket) |
629 | { | 627 | { |
630 | - boolean cancelled = false; | ||
631 | - | ||
632 | - for (PreJoinGameListener joinGameListener : this.preJoinGameListeners) | ||
633 | - { | ||
634 | - cancelled |= !joinGameListener.onPreJoinGame(netHandler, loginPacket); | ||
635 | - } | ||
636 | - | ||
637 | - return !cancelled; | 628 | + return !this.preJoinGameListeners.all().onPreJoinGame(netHandler, loginPacket); |
638 | } | 629 | } |
639 | 630 | ||
640 | /** | 631 | /** |
java/common/com/mumfrey/liteloader/core/ClientPluginChannels.java
@@ -5,6 +5,8 @@ import net.minecraft.network.play.server.S3FPacketCustomPayload; | @@ -5,6 +5,8 @@ import net.minecraft.network.play.server.S3FPacketCustomPayload; | ||
5 | 5 | ||
6 | import com.mumfrey.liteloader.PluginChannelListener; | 6 | import com.mumfrey.liteloader.PluginChannelListener; |
7 | import com.mumfrey.liteloader.api.Listener; | 7 | import com.mumfrey.liteloader.api.Listener; |
8 | +import com.mumfrey.liteloader.core.event.HandlerList; | ||
9 | +import com.mumfrey.liteloader.interfaces.FastIterableDeque; | ||
8 | import com.mumfrey.liteloader.permissions.PermissionsManagerClient; | 10 | import com.mumfrey.liteloader.permissions.PermissionsManagerClient; |
9 | import com.mumfrey.liteloader.util.log.LiteLoaderLogger; | 11 | import com.mumfrey.liteloader.util.log.LiteLoaderLogger; |
10 | 12 | ||
@@ -19,8 +21,15 @@ public abstract class ClientPluginChannels extends PluginChannels<PluginChannelL | @@ -19,8 +21,15 @@ public abstract class ClientPluginChannels extends PluginChannels<PluginChannelL | ||
19 | 21 | ||
20 | protected ClientPluginChannels() | 22 | protected ClientPluginChannels() |
21 | { | 23 | { |
24 | + if (ClientPluginChannels.instance != null) throw new RuntimeException("Plugin Channels Startup Error", new InstantiationException("Only a single instance of ClientPluginChannels is allowed")); | ||
22 | ClientPluginChannels.instance = this; | 25 | ClientPluginChannels.instance = this; |
23 | } | 26 | } |
27 | + | ||
28 | + @Override | ||
29 | + protected FastIterableDeque<PluginChannelListener> createHandlerList() | ||
30 | + { | ||
31 | + return new HandlerList<PluginChannelListener>(PluginChannelListener.class); | ||
32 | + } | ||
24 | 33 | ||
25 | protected static ClientPluginChannels getInstance() | 34 | protected static ClientPluginChannels getInstance() |
26 | { | 35 | { |
java/common/com/mumfrey/liteloader/core/Events.java
@@ -29,6 +29,8 @@ import com.mumfrey.liteloader.api.Listener; | @@ -29,6 +29,8 @@ import com.mumfrey.liteloader.api.Listener; | ||
29 | import com.mumfrey.liteloader.common.GameEngine; | 29 | import com.mumfrey.liteloader.common.GameEngine; |
30 | import com.mumfrey.liteloader.common.LoadingProgress; | 30 | import com.mumfrey.liteloader.common.LoadingProgress; |
31 | import com.mumfrey.liteloader.core.event.HandlerList; | 31 | import com.mumfrey.liteloader.core.event.HandlerList; |
32 | +import com.mumfrey.liteloader.core.event.HandlerList.ReturnLogicOp; | ||
33 | +import com.mumfrey.liteloader.interfaces.FastIterable; | ||
32 | import com.mumfrey.liteloader.launch.LoaderProperties; | 34 | import com.mumfrey.liteloader.launch.LoaderProperties; |
33 | import com.mumfrey.liteloader.util.log.LiteLoaderLogger; | 35 | import com.mumfrey.liteloader.util.log.LiteLoaderLogger; |
34 | 36 | ||
@@ -60,17 +62,17 @@ public abstract class Events<TClient, TServer extends MinecraftServer> implement | @@ -60,17 +62,17 @@ public abstract class Events<TClient, TServer extends MinecraftServer> implement | ||
60 | /** | 62 | /** |
61 | * List of mods which can filter server chat | 63 | * List of mods which can filter server chat |
62 | */ | 64 | */ |
63 | - private HandlerList<ServerChatFilter> serverChatFilters = new HandlerList<ServerChatFilter>(ServerChatFilter.class); | 65 | + private FastIterable<ServerChatFilter> serverChatFilters = new HandlerList<ServerChatFilter>(ServerChatFilter.class, ReturnLogicOp.AND_BREAK_ON_FALSE); |
64 | 66 | ||
65 | /** | 67 | /** |
66 | * List of mods which provide server commands | 68 | * List of mods which provide server commands |
67 | */ | 69 | */ |
68 | - private HandlerList<ServerCommandProvider> serverCommandProviders = new HandlerList<ServerCommandProvider>(ServerCommandProvider.class); | 70 | + private FastIterable<ServerCommandProvider> serverCommandProviders = new HandlerList<ServerCommandProvider>(ServerCommandProvider.class); |
69 | 71 | ||
70 | /** | 72 | /** |
71 | * List of mods which monitor server player events | 73 | * List of mods which monitor server player events |
72 | */ | 74 | */ |
73 | - private HandlerList<ServerPlayerListener> serverPlayerListeners = new HandlerList<ServerPlayerListener>(ServerPlayerListener.class); | 75 | + private FastIterable<ServerPlayerListener> serverPlayerListeners = new HandlerList<ServerPlayerListener>(ServerPlayerListener.class); |
74 | 76 | ||
75 | /** | 77 | /** |
76 | * Package private ctor | 78 | * Package private ctor |
@@ -157,10 +159,7 @@ public abstract class Events<TClient, TServer extends MinecraftServer> implement | @@ -157,10 +159,7 @@ public abstract class Events<TClient, TServer extends MinecraftServer> implement | ||
157 | */ | 159 | */ |
158 | public void addServerChatFilter(ServerChatFilter serverChatFilter) | 160 | public void addServerChatFilter(ServerChatFilter serverChatFilter) |
159 | { | 161 | { |
160 | - if (!this.serverChatFilters.contains(serverChatFilter)) | ||
161 | - { | ||
162 | - this.serverChatFilters.add(serverChatFilter); | ||
163 | - } | 162 | + this.serverChatFilters.add(serverChatFilter); |
164 | } | 163 | } |
165 | 164 | ||
166 | /** | 165 | /** |
@@ -196,15 +195,7 @@ public abstract class Events<TClient, TServer extends MinecraftServer> implement | @@ -196,15 +195,7 @@ public abstract class Events<TClient, TServer extends MinecraftServer> implement | ||
196 | { | 195 | { |
197 | EntityPlayerMP player = netHandler instanceof NetHandlerPlayServer ? ((NetHandlerPlayServer)netHandler).playerEntity : null; | 196 | EntityPlayerMP player = netHandler instanceof NetHandlerPlayServer ? ((NetHandlerPlayServer)netHandler).playerEntity : null; |
198 | 197 | ||
199 | - for (ServerChatFilter chatFilter : this.serverChatFilters) | ||
200 | - { | ||
201 | - if (!chatFilter.onChat(player, chatPacket, chatPacket.func_149439_c())) | ||
202 | - { | ||
203 | - return false; | ||
204 | - } | ||
205 | - } | ||
206 | - | ||
207 | - return true; | 198 | + return this.serverChatFilters.all().onChat(player, chatPacket, chatPacket.func_149439_c()); |
208 | } | 199 | } |
209 | 200 | ||
210 | /** | 201 | /** |
java/common/com/mumfrey/liteloader/core/LiteLoader.java
@@ -4,7 +4,6 @@ import java.io.File; | @@ -4,7 +4,6 @@ import java.io.File; | ||
4 | import java.io.PrintStream; | 4 | import java.io.PrintStream; |
5 | import java.util.ArrayList; | 5 | import java.util.ArrayList; |
6 | import java.util.Collection; | 6 | import java.util.Collection; |
7 | -import java.util.LinkedList; | ||
8 | import java.util.List; | 7 | import java.util.List; |
9 | 8 | ||
10 | import javax.activity.InvalidActivityException; | 9 | import javax.activity.InvalidActivityException; |
@@ -35,9 +34,11 @@ import com.mumfrey.liteloader.common.GameEngine; | @@ -35,9 +34,11 @@ import com.mumfrey.liteloader.common.GameEngine; | ||
35 | import com.mumfrey.liteloader.common.LoadingProgress; | 34 | import com.mumfrey.liteloader.common.LoadingProgress; |
36 | import com.mumfrey.liteloader.core.api.LiteLoaderCoreAPI; | 35 | import com.mumfrey.liteloader.core.api.LiteLoaderCoreAPI; |
37 | import com.mumfrey.liteloader.core.event.EventProxy; | 36 | import com.mumfrey.liteloader.core.event.EventProxy; |
37 | +import com.mumfrey.liteloader.core.event.HandlerList; | ||
38 | import com.mumfrey.liteloader.crashreport.CallableLaunchWrapper; | 38 | import com.mumfrey.liteloader.crashreport.CallableLaunchWrapper; |
39 | import com.mumfrey.liteloader.crashreport.CallableLiteLoaderBrand; | 39 | import com.mumfrey.liteloader.crashreport.CallableLiteLoaderBrand; |
40 | import com.mumfrey.liteloader.crashreport.CallableLiteLoaderMods; | 40 | import com.mumfrey.liteloader.crashreport.CallableLiteLoaderMods; |
41 | +import com.mumfrey.liteloader.interfaces.FastIterableDeque; | ||
41 | import com.mumfrey.liteloader.interfaces.Loadable; | 42 | import com.mumfrey.liteloader.interfaces.Loadable; |
42 | import com.mumfrey.liteloader.interfaces.LoadableMod; | 43 | import com.mumfrey.liteloader.interfaces.LoadableMod; |
43 | import com.mumfrey.liteloader.interfaces.LoaderEnumerator; | 44 | import com.mumfrey.liteloader.interfaces.LoaderEnumerator; |
@@ -128,27 +129,11 @@ public final class LiteLoader | @@ -128,27 +129,11 @@ public final class LiteLoader | ||
128 | /** | 129 | /** |
129 | * Core providers | 130 | * Core providers |
130 | */ | 131 | */ |
131 | - private final List<CoreProvider> coreProviders = new LinkedList<CoreProvider>(); | ||
132 | - | ||
133 | - /** | ||
134 | - * | ||
135 | - */ | ||
136 | - private final List<TickObserver> tickObservers = new LinkedList<TickObserver>(); | ||
137 | - | ||
138 | - /** | ||
139 | - * | ||
140 | - */ | ||
141 | - private final List<WorldObserver> worldObservers = new LinkedList<WorldObserver>(); | ||
142 | - | ||
143 | - /** | ||
144 | - * | ||
145 | - */ | ||
146 | - private final List<ShutdownObserver> shutdownObservers = new LinkedList<ShutdownObserver>(); | ||
147 | - | ||
148 | - /** | ||
149 | - * | ||
150 | - */ | ||
151 | - private final List<PostRenderObserver> postRenderObservers = new LinkedList<PostRenderObserver>(); | 132 | + private final FastIterableDeque<CoreProvider> coreProviders = new HandlerList<CoreProvider>(CoreProvider.class); |
133 | + private final FastIterableDeque<TickObserver> tickObservers = new HandlerList<TickObserver>(TickObserver.class); | ||
134 | + private final FastIterableDeque<WorldObserver> worldObservers = new HandlerList<WorldObserver>(WorldObserver.class); | ||
135 | + private final FastIterableDeque<ShutdownObserver> shutdownObservers = new HandlerList<ShutdownObserver>(ShutdownObserver.class); | ||
136 | + private final FastIterableDeque<PostRenderObserver> postRenderObservers = new HandlerList<PostRenderObserver>(PostRenderObserver.class); | ||
152 | 137 | ||
153 | /** | 138 | /** |
154 | * Mod panel manager, deliberately raw | 139 | * Mod panel manager, deliberately raw |
@@ -245,10 +230,7 @@ public final class LiteLoader | @@ -245,10 +230,7 @@ public final class LiteLoader | ||
245 | this.shutdownObservers.addAll(this.apiAdapter.getAllObservers(ShutdownObserver.class)); | 230 | this.shutdownObservers.addAll(this.apiAdapter.getAllObservers(ShutdownObserver.class)); |
246 | this.postRenderObservers.addAll(this.apiAdapter.getAllObservers(PostRenderObserver.class)); | 231 | this.postRenderObservers.addAll(this.apiAdapter.getAllObservers(PostRenderObserver.class)); |
247 | 232 | ||
248 | - for (CoreProvider coreProvider : this.coreProviders) | ||
249 | - { | ||
250 | - coreProvider.onInit(); | ||
251 | - } | 233 | + this.coreProviders.all().onInit(); |
252 | 234 | ||
253 | this.enumerator.onInit(); | 235 | this.enumerator.onInit(); |
254 | this.mods.init(this.apiAdapter.getAllObservers(ModLoadObserver.class)); | 236 | this.mods.init(this.apiAdapter.getAllObservers(ModLoadObserver.class)); |
@@ -273,10 +255,7 @@ public final class LiteLoader | @@ -273,10 +255,7 @@ public final class LiteLoader | ||
273 | // Spawn mod instances and initialise them | 255 | // Spawn mod instances and initialise them |
274 | this.loadAndInitMods(); | 256 | this.loadAndInitMods(); |
275 | 257 | ||
276 | - for (CoreProvider coreProvider : this.coreProviders) | ||
277 | - { | ||
278 | - coreProvider.onPostInitComplete(this.mods); | ||
279 | - } | 258 | + this.coreProviders.all().onPostInitComplete(this.mods); |
280 | 259 | ||
281 | // Save stuff | 260 | // Save stuff |
282 | this.properties.writeProperties(); | 261 | this.properties.writeProperties(); |
@@ -884,10 +863,7 @@ public final class LiteLoader | @@ -884,10 +863,7 @@ public final class LiteLoader | ||
884 | */ | 863 | */ |
885 | private void postInitCoreProviders() | 864 | private void postInitCoreProviders() |
886 | { | 865 | { |
887 | - for (CoreProvider coreProvider : this.coreProviders) | ||
888 | - { | ||
889 | - coreProvider.onPostInit(this.engine); | ||
890 | - } | 866 | + this.coreProviders.all().onPostInit(this.engine); |
891 | 867 | ||
892 | this.interfaceManager.registerInterfaces(); | 868 | this.interfaceManager.registerInterfaces(); |
893 | } | 869 | } |
@@ -950,10 +926,7 @@ public final class LiteLoader | @@ -950,10 +926,7 @@ public final class LiteLoader | ||
950 | { | 926 | { |
951 | this.permissionsManagerClient.onJoinGame(netHandler, loginPacket); | 927 | this.permissionsManagerClient.onJoinGame(netHandler, loginPacket); |
952 | 928 | ||
953 | - for (CoreProvider coreProvider : this.coreProviders) | ||
954 | - { | ||
955 | - coreProvider.onJoinGame(netHandler, loginPacket); | ||
956 | - } | 929 | + this.coreProviders.all().onJoinGame(netHandler, loginPacket); |
957 | } | 930 | } |
958 | 931 | ||
959 | /** | 932 | /** |
@@ -969,10 +942,7 @@ public final class LiteLoader | @@ -969,10 +942,7 @@ public final class LiteLoader | ||
969 | this.permissionsManagerClient.scheduleRefresh(); | 942 | this.permissionsManagerClient.scheduleRefresh(); |
970 | } | 943 | } |
971 | 944 | ||
972 | - for (WorldObserver worldObserver : this.worldObservers) | ||
973 | - { | ||
974 | - worldObserver.onWorldChanged(world); | ||
975 | - } | 945 | + this.worldObservers.all().onWorldChanged(world); |
976 | } | 946 | } |
977 | 947 | ||
978 | /** | 948 | /** |
@@ -983,12 +953,7 @@ public final class LiteLoader | @@ -983,12 +953,7 @@ public final class LiteLoader | ||
983 | void onPostRender(int mouseX, int mouseY, float partialTicks) | 953 | void onPostRender(int mouseX, int mouseY, float partialTicks) |
984 | { | 954 | { |
985 | this.profiler.startSection("core"); | 955 | this.profiler.startSection("core"); |
986 | - | ||
987 | - for (PostRenderObserver postRenderObserver : this.postRenderObservers) | ||
988 | - { | ||
989 | - postRenderObserver.onPostRender(mouseX, mouseY, partialTicks); | ||
990 | - } | ||
991 | - | 956 | + this.postRenderObservers.all().onPostRender(mouseX, mouseY, partialTicks); |
992 | this.profiler.endSection(); | 957 | this.profiler.endSection(); |
993 | } | 958 | } |
994 | 959 | ||
@@ -1020,10 +985,7 @@ public final class LiteLoader | @@ -1020,10 +985,7 @@ public final class LiteLoader | ||
1020 | 985 | ||
1021 | this.profiler.startSection("observers"); | 986 | this.profiler.startSection("observers"); |
1022 | 987 | ||
1023 | - for (TickObserver tickObserver : this.tickObservers) | ||
1024 | - { | ||
1025 | - tickObserver.onTick(clock, partialTicks, inGame); | ||
1026 | - } | 988 | + this.tickObservers.all().onTick(clock, partialTicks, inGame); |
1027 | 989 | ||
1028 | this.profiler.endSection(); | 990 | this.profiler.endSection(); |
1029 | } | 991 | } |
@@ -1032,10 +994,7 @@ public final class LiteLoader | @@ -1032,10 +994,7 @@ public final class LiteLoader | ||
1032 | { | 994 | { |
1033 | LiteLoaderLogger.info("LiteLoader is shutting down, shutting down core providers and syncing configuration"); | 995 | LiteLoaderLogger.info("LiteLoader is shutting down, shutting down core providers and syncing configuration"); |
1034 | 996 | ||
1035 | - for (ShutdownObserver lifeCycleObserver : this.shutdownObservers) | ||
1036 | - { | ||
1037 | - lifeCycleObserver.onShutDown(); | ||
1038 | - } | 997 | + this.shutdownObservers.all().onShutDown(); |
1039 | 998 | ||
1040 | this.configManager.syncConfig(); | 999 | this.configManager.syncConfig(); |
1041 | } | 1000 | } |
java/common/com/mumfrey/liteloader/core/LiteLoaderInterfaceManager.java
@@ -4,7 +4,6 @@ import java.lang.reflect.Method; | @@ -4,7 +4,6 @@ import java.lang.reflect.Method; | ||
4 | import java.util.ArrayList; | 4 | import java.util.ArrayList; |
5 | import java.util.HashMap; | 5 | import java.util.HashMap; |
6 | import java.util.Iterator; | 6 | import java.util.Iterator; |
7 | -import java.util.LinkedList; | ||
8 | import java.util.List; | 7 | import java.util.List; |
9 | import java.util.Map; | 8 | import java.util.Map; |
10 | 9 | ||
@@ -15,6 +14,8 @@ import com.mumfrey.liteloader.api.LiteAPI; | @@ -15,6 +14,8 @@ import com.mumfrey.liteloader.api.LiteAPI; | ||
15 | import com.mumfrey.liteloader.api.Observer; | 14 | import com.mumfrey.liteloader.api.Observer; |
16 | import com.mumfrey.liteloader.api.exceptions.InvalidProviderException; | 15 | import com.mumfrey.liteloader.api.exceptions.InvalidProviderException; |
17 | import com.mumfrey.liteloader.api.manager.APIAdapter; | 16 | import com.mumfrey.liteloader.api.manager.APIAdapter; |
17 | +import com.mumfrey.liteloader.core.event.HandlerList; | ||
18 | +import com.mumfrey.liteloader.interfaces.FastIterable; | ||
18 | import com.mumfrey.liteloader.interfaces.InterfaceRegistry; | 19 | import com.mumfrey.liteloader.interfaces.InterfaceRegistry; |
19 | import com.mumfrey.liteloader.util.log.LiteLoaderLogger; | 20 | import com.mumfrey.liteloader.util.log.LiteLoaderLogger; |
20 | 21 | ||
@@ -152,10 +153,7 @@ public class LiteLoaderInterfaceManager implements InterfaceRegistry | @@ -152,10 +153,7 @@ public class LiteLoaderInterfaceManager implements InterfaceRegistry | ||
152 | 153 | ||
153 | this.registeredListeners.add(listener); | 154 | this.registeredListeners.add(listener); |
154 | 155 | ||
155 | - for (InterfaceObserver observer : LiteLoaderInterfaceManager.this.observers) | ||
156 | - { | ||
157 | - observer.onRegisterListener(this.provider, this.interfaceType, listener); | ||
158 | - } | 156 | + LiteLoaderInterfaceManager.this.observers.all().onRegisterListener(this.provider, this.interfaceType, listener); |
159 | 157 | ||
160 | return true; | 158 | return true; |
161 | } | 159 | } |
@@ -197,7 +195,7 @@ public class LiteLoaderInterfaceManager implements InterfaceRegistry | @@ -197,7 +195,7 @@ public class LiteLoaderInterfaceManager implements InterfaceRegistry | ||
197 | /** | 195 | /** |
198 | * Interface observers | 196 | * Interface observers |
199 | */ | 197 | */ |
200 | - protected final List<InterfaceObserver> observers = new LinkedList<InterfaceObserver>(); | 198 | + protected final FastIterable<InterfaceObserver> observers = new HandlerList<InterfaceObserver>(InterfaceObserver.class); |
201 | 199 | ||
202 | /** | 200 | /** |
203 | * True once the initial init phase (in which all registered providers are initialised) is completed, we | 201 | * True once the initial init phase (in which all registered providers are initialised) is completed, we |
@@ -321,10 +319,7 @@ public class LiteLoaderInterfaceManager implements InterfaceRegistry | @@ -321,10 +319,7 @@ public class LiteLoaderInterfaceManager implements InterfaceRegistry | ||
321 | */ | 319 | */ |
322 | public void registerObserver(InterfaceObserver observer) | 320 | public void registerObserver(InterfaceObserver observer) |
323 | { | 321 | { |
324 | - if (!this.observers.contains(observer)) | ||
325 | - { | ||
326 | - this.observers.add(observer); | ||
327 | - } | 322 | + this.observers.add(observer); |
328 | } | 323 | } |
329 | 324 | ||
330 | /* (non-Javadoc) | 325 | /* (non-Javadoc) |
java/common/com/mumfrey/liteloader/core/PluginChannels.java
@@ -11,6 +11,7 @@ import java.util.Map; | @@ -11,6 +11,7 @@ import java.util.Map; | ||
11 | import java.util.Set; | 11 | import java.util.Set; |
12 | 12 | ||
13 | import com.mumfrey.liteloader.api.InterfaceProvider; | 13 | import com.mumfrey.liteloader.api.InterfaceProvider; |
14 | +import com.mumfrey.liteloader.interfaces.FastIterableDeque; | ||
14 | import com.mumfrey.liteloader.util.log.LiteLoaderLogger; | 15 | import com.mumfrey.liteloader.util.log.LiteLoaderLogger; |
15 | 16 | ||
16 | import net.minecraft.network.INetHandler; | 17 | import net.minecraft.network.INetHandler; |
@@ -34,31 +35,37 @@ public abstract class PluginChannels<L extends CommonPluginChannelListener> impl | @@ -34,31 +35,37 @@ public abstract class PluginChannels<L extends CommonPluginChannelListener> impl | ||
34 | /** | 35 | /** |
35 | * Mapping of plugin channel names to listeners | 36 | * Mapping of plugin channel names to listeners |
36 | */ | 37 | */ |
37 | - protected HashMap<String, LinkedList<L>> pluginChannels = new HashMap<String, LinkedList<L>>(); | 38 | + protected final HashMap<String, LinkedList<L>> pluginChannels = new HashMap<String, LinkedList<L>>(); |
38 | 39 | ||
39 | /** | 40 | /** |
40 | * List of mods which implement PluginChannelListener interface | 41 | * List of mods which implement PluginChannelListener interface |
41 | */ | 42 | */ |
42 | - protected LinkedList<L> pluginChannelListeners = new LinkedList<L>(); | 43 | + protected final FastIterableDeque<L> pluginChannelListeners; |
43 | 44 | ||
44 | /** | 45 | /** |
45 | * Plugin channels that we know the server supports | 46 | * Plugin channels that we know the server supports |
46 | */ | 47 | */ |
47 | - protected Set<String> remotePluginChannels = new HashSet<String>(); | 48 | + protected final Set<String> remotePluginChannels = new HashSet<String>(); |
48 | 49 | ||
49 | /** | 50 | /** |
50 | * Keep track of faulting listeners so that we can periodically log a message if a listener is throwing LOTS of exceptions | 51 | * Keep track of faulting listeners so that we can periodically log a message if a listener is throwing LOTS of exceptions |
51 | */ | 52 | */ |
52 | - protected Map<L, Integer> faultingPluginChannelListeners = new HashMap<L, Integer>(); | 53 | + protected final Map<L, Integer> faultingPluginChannelListeners = new HashMap<L, Integer>(); |
53 | 54 | ||
54 | /** | 55 | /** |
55 | * Package private | 56 | * Package private |
56 | */ | 57 | */ |
57 | PluginChannels() | 58 | PluginChannels() |
58 | { | 59 | { |
60 | + this.pluginChannelListeners = this.createHandlerList(); | ||
59 | } | 61 | } |
60 | 62 | ||
61 | /** | 63 | /** |
64 | + * @return | ||
65 | + */ | ||
66 | + protected abstract FastIterableDeque<L> createHandlerList(); | ||
67 | + | ||
68 | + /** | ||
62 | * Get the current set of registered client-side channels | 69 | * Get the current set of registered client-side channels |
63 | */ | 70 | */ |
64 | public Set<String> getLocalChannels() | 71 | public Set<String> getLocalChannels() |
@@ -90,10 +97,7 @@ public abstract class PluginChannels<L extends CommonPluginChannelListener> impl | @@ -90,10 +97,7 @@ public abstract class PluginChannels<L extends CommonPluginChannelListener> impl | ||
90 | */ | 97 | */ |
91 | protected void addPluginChannelListener(L pluginChannelListener) | 98 | protected void addPluginChannelListener(L pluginChannelListener) |
92 | { | 99 | { |
93 | - if (!this.pluginChannelListeners.contains(pluginChannelListener)) | ||
94 | - { | ||
95 | - this.pluginChannelListeners.add(pluginChannelListener); | ||
96 | - } | 100 | + this.pluginChannelListeners.add(pluginChannelListener); |
97 | } | 101 | } |
98 | 102 | ||
99 | /** | 103 | /** |
java/common/com/mumfrey/liteloader/core/ServerPluginChannels.java
@@ -8,7 +8,9 @@ import net.minecraft.network.play.server.S3FPacketCustomPayload; | @@ -8,7 +8,9 @@ import net.minecraft.network.play.server.S3FPacketCustomPayload; | ||
8 | 8 | ||
9 | import com.mumfrey.liteloader.ServerPluginChannelListener; | 9 | import com.mumfrey.liteloader.ServerPluginChannelListener; |
10 | import com.mumfrey.liteloader.api.Listener; | 10 | import com.mumfrey.liteloader.api.Listener; |
11 | +import com.mumfrey.liteloader.core.event.HandlerList; | ||
11 | import com.mumfrey.liteloader.core.exceptions.UnregisteredChannelException; | 12 | import com.mumfrey.liteloader.core.exceptions.UnregisteredChannelException; |
13 | +import com.mumfrey.liteloader.interfaces.FastIterableDeque; | ||
12 | import com.mumfrey.liteloader.permissions.PermissionsManagerServer; | 14 | import com.mumfrey.liteloader.permissions.PermissionsManagerServer; |
13 | import com.mumfrey.liteloader.util.log.LiteLoaderLogger; | 15 | import com.mumfrey.liteloader.util.log.LiteLoaderLogger; |
14 | 16 | ||
@@ -24,10 +26,15 @@ public class ServerPluginChannels extends PluginChannels<ServerPluginChannelList | @@ -24,10 +26,15 @@ public class ServerPluginChannels extends PluginChannels<ServerPluginChannelList | ||
24 | public ServerPluginChannels() | 26 | public ServerPluginChannels() |
25 | { | 27 | { |
26 | if (ServerPluginChannels.instance != null) throw new RuntimeException("Plugin Channels Startup Error", new InstantiationException("Only a single instance of ServerPluginChannels is allowed")); | 28 | if (ServerPluginChannels.instance != null) throw new RuntimeException("Plugin Channels Startup Error", new InstantiationException("Only a single instance of ServerPluginChannels is allowed")); |
27 | - | ||
28 | ServerPluginChannels.instance = this; | 29 | ServerPluginChannels.instance = this; |
29 | } | 30 | } |
30 | 31 | ||
32 | + @Override | ||
33 | + protected FastIterableDeque<ServerPluginChannelListener> createHandlerList() | ||
34 | + { | ||
35 | + return new HandlerList<ServerPluginChannelListener>(ServerPluginChannelListener.class); | ||
36 | + } | ||
37 | + | ||
31 | public static ServerPluginChannels getInstance() | 38 | public static ServerPluginChannels getInstance() |
32 | { | 39 | { |
33 | return instance; | 40 | return instance; |