Commit d59d4fa2e25934c7389d90fc5416b826fda241e1

Authored by Mumfrey
1 parent 70ad9fc2

LiteLoader 1.6.4_02 - dev only - merge NPE fix from 1.7 branch

java/com/mumfrey/liteloader/core/Events.java
... ... @@ -9,14 +9,7 @@ import net.minecraft.src.*;
9 9  
10 10 import com.mumfrey.liteloader.*;
11 11 import com.mumfrey.liteloader.Tickable;
12   -import com.mumfrey.liteloader.core.hooks.HookChat;
13   -import com.mumfrey.liteloader.core.hooks.HookLogin;
14 12 import com.mumfrey.liteloader.core.hooks.HookProfiler;
15   -import com.mumfrey.liteloader.core.hooks.asm.ASMHookProxy;
16   -import com.mumfrey.liteloader.core.hooks.asm.ChatPacketTransformer;
17   -import com.mumfrey.liteloader.core.hooks.asm.LoginPacketTransformer;
18   -import com.mumfrey.liteloader.core.hooks.asm.PacketTransformer;
19   -import com.mumfrey.liteloader.util.ModUtilities;
20 13 import com.mumfrey.liteloader.util.PrivateFields;
21 14  
22 15 /**
... ... @@ -41,11 +34,6 @@ public class Events implements IPlayerUsage
41 34 private final PluginChannels pluginChannels;
42 35  
43 36 /**
44   - * ASM hook proxy
45   - */
46   - private final ASMHookProxy asmProxy;
47   -
48   - /**
49 37 * Reference to the minecraft timer
50 38 */
51 39 private Timer minecraftTimer;
... ... @@ -53,7 +41,7 @@ public class Events implements IPlayerUsage
53 41 /**
54 42 * Flags which keep track of whether hooks have been applied
55 43 */
56   - private boolean hookInitDone, lateInitDone, chatHooked, loginHooked, tickHooked;
  44 + private boolean hookInitDone, lateInitDone, tickHooked;
57 45  
58 46 /**
59 47 * Profiler hook objects
... ... @@ -153,12 +141,11 @@ public class Events implements IPlayerUsage
153 141 * @param minecraft
154 142 * @param pluginChannels
155 143 */
156   - Events(LiteLoader loader, Minecraft minecraft, PluginChannels pluginChannels, ASMHookProxy asmProxy)
  144 + Events(LiteLoader loader, Minecraft minecraft, PluginChannels pluginChannels)
157 145 {
158 146 this.loader = loader;
159 147 this.minecraft = minecraft;
160 148 this.pluginChannels = pluginChannels;
161   - this.asmProxy = asmProxy;
162 149 }
163 150  
164 151 /**
... ... @@ -245,40 +232,6 @@ public class Events implements IPlayerUsage
245 232 {
246 233 LiteLoader.getLogger().info("Event manager is registering hooks");
247 234  
248   - // Chat hook
249   - if ((this.chatListeners.size() > 0 || this.chatFilters.size() > 0) && !this.chatHooked)
250   - {
251   - this.chatHooked = true;
252   -
253   - if (ChatPacketTransformer.isInjected())
254   - {
255   - PacketTransformer.registerProxy(Packet3Chat.class, this.asmProxy);
256   - }
257   - else
258   - {
259   - LiteLoader.getLogger().info("Callback injection failed for chat packet, injecting reflection hook");
260   - HookChat.register();
261   - HookChat.registerPacketHandler(this);
262   - }
263   - }
264   -
265   - // Login hook
266   - if ((this.preLoginListeners.size() > 0 || this.loginListeners.size() > 0) && !this.loginHooked)
267   - {
268   - this.loginHooked = true;
269   -
270   - if (LoginPacketTransformer.isInjected())
271   - {
272   - PacketTransformer.registerProxy(Packet1Login.class, this.asmProxy);
273   - }
274   - else
275   - {
276   - LiteLoader.getLogger().info("Callback injection failed for login packet, injecting reflection hook");
277   - ModUtilities.registerPacketOverride(1, HookLogin.class);
278   - HookLogin.events = this;
279   - }
280   - }
281   -
282 235 // Tick hook
283 236 if (!this.tickHooked)
284 237 {
... ... @@ -289,8 +242,6 @@ public class Events implements IPlayerUsage
289 242 // Sanity hook
290 243 PlayerUsageSnooper snooper = this.minecraft.getPlayerUsageSnooper();
291 244 PrivateFields.playerStatsCollector.setFinal(snooper, this);
292   -
293   - this.pluginChannels.initHook();
294 245 }
295 246 catch (Exception ex)
296 247 {
... ...
java/com/mumfrey/liteloader/core/LiteLoader.java
... ... @@ -35,7 +35,6 @@ import net.minecraft.src.SimpleReloadableResourceManager;
35 35 import net.minecraft.src.World;
36 36  
37 37 import com.mumfrey.liteloader.*;
38   -import com.mumfrey.liteloader.core.hooks.asm.ASMHookProxy;
39 38 import com.mumfrey.liteloader.crashreport.CallableLiteLoaderBrand;
40 39 import com.mumfrey.liteloader.crashreport.CallableLiteLoaderMods;
41 40 import com.mumfrey.liteloader.gui.GuiControlsPaginated;
... ... @@ -151,11 +150,6 @@ public final class LiteLoader
151 150 private final LinkedList<ModFile> disabledMods = new LinkedList<ModFile>();
152 151  
153 152 /**
154   - * ASM hook proxy
155   - */
156   - private final ASMHookProxy asmProxy = new ASMHookProxy();
157   -
158   - /**
159 153 * Event manager
160 154 */
161 155 private Events events;
... ... @@ -163,7 +157,7 @@ public final class LiteLoader
163 157 /**
164 158 * Plugin channel manager
165 159 */
166   - private final PluginChannels pluginChannels = new PluginChannels(this.asmProxy);
  160 + private final PluginChannels pluginChannels = new PluginChannels();
167 161  
168 162 /**
169 163 * Permission Manager
... ... @@ -357,7 +351,7 @@ public final class LiteLoader
357 351 this.minecraft = minecraft;
358 352  
359 353 // Create the event broker
360   - this.events = new Events(this, this.minecraft, this.pluginChannels, this.asmProxy);
  354 + this.events = new Events(this, this.minecraft, this.pluginChannels);
361 355  
362 356 // Spawn mod instances
363 357 this.loadMods();
... ...
java/com/mumfrey/liteloader/core/PluginChannels.java
... ... @@ -11,10 +11,6 @@ import net.minecraft.src.Packet1Login;
11 11 import net.minecraft.src.Packet250CustomPayload;
12 12  
13 13 import com.mumfrey.liteloader.PluginChannelListener;
14   -import com.mumfrey.liteloader.core.hooks.HookPluginChannels;
15   -import com.mumfrey.liteloader.core.hooks.asm.ASMHookProxy;
16   -import com.mumfrey.liteloader.core.hooks.asm.CustomPayloadPacketTransformer;
17   -import com.mumfrey.liteloader.core.hooks.asm.PacketTransformer;
18 14 import com.mumfrey.liteloader.permissions.PermissionsManagerClient;
19 15  
20 16 /**
... ... @@ -29,11 +25,6 @@ public class PluginChannels
29 25 private static final String CHANNEL_UNREGISTER = "UNREGISTER";
30 26  
31 27 /**
32   - * True if we have initialised the hook
33   - */
34   - private boolean hookInitDone;
35   -
36   - /**
37 28 * Mapping of plugin channel names to listeners
38 29 */
39 30 private HashMap<String, LinkedList<PluginChannelListener>> pluginChannels = new HashMap<String, LinkedList<PluginChannelListener>>();
... ... @@ -43,40 +34,13 @@ public class PluginChannels
43 34 */
44 35 private LinkedList<PluginChannelListener> pluginChannelListeners = new LinkedList<PluginChannelListener>();
45 36  
46   - private ASMHookProxy asmProxy;
47   -
48 37 /**
49 38 * Package private
50 39 */
51   - PluginChannels(ASMHookProxy proxy)
52   - {
53   - this.asmProxy = proxy;
54   - }
55   -
56   - /**
57   - *
58   - */
59   - public void initHook()
  40 + PluginChannels()
60 41 {
61   - // Plugin channels hook
62   - if (this.pluginChannelListeners.size() > 0 && !this.hookInitDone)
63   - {
64   - if (CustomPayloadPacketTransformer.isInjected())
65   - {
66   - PacketTransformer.registerProxy(Packet250CustomPayload.class, this.asmProxy);
67   - }
68   - else
69   - {
70   - LiteLoader.getLogger().info("Callback injection failed for custom payload packet, injecting reflection hook");
71   - HookPluginChannels.register();
72   - HookPluginChannels.registerPacketHandler(this);
73   - }
74   -
75   - this.hookInitDone = true;
76   - }
77 42 }
78 43  
79   -
80 44 /**
81 45 * @param pluginChannelListener
82 46 */
... ... @@ -85,8 +49,6 @@ public class PluginChannels
85 49 if (!this.pluginChannelListeners.contains(pluginChannelListener))
86 50 {
87 51 this.pluginChannelListeners.add(pluginChannelListener);
88   - if (this.hookInitDone)
89   - this.initHook();
90 52 }
91 53 }
92 54  
... ...
java/com/mumfrey/liteloader/core/hooks/asm/ASMHookProxy.java
... ... @@ -16,15 +16,17 @@ import net.minecraft.src.Packet3Chat;
16 16 *
17 17 * @author Adam Mummery-Smith
18 18 */
19   -public class ASMHookProxy
  19 +public abstract class ASMHookProxy
20 20 {
  21 + private ASMHookProxy() {}
  22 +
21 23 /**
22 24 * Packet3Chat::processPacket()
23 25 *
24 26 * @param netHandler
25 27 * @param packet
26 28 */
27   - public void handleChatPacket(NetHandler netHandler, Packet3Chat packet)
  29 + public static void handleChatPacket(NetHandler netHandler, Packet3Chat packet)
28 30 {
29 31 Events events = LiteLoader.getEvents();
30 32 if (events.onChat(packet))
... ... @@ -39,7 +41,7 @@ public class ASMHookProxy
39 41 * @param netHandler
40 42 * @param packet
41 43 */
42   - public void handleLoginPacket(NetHandler netHandler, Packet1Login packet)
  44 + public static void handleLoginPacket(NetHandler netHandler, Packet1Login packet)
43 45 {
44 46 Events events = LiteLoader.getEvents();
45 47 if (events.onPreLogin(netHandler, packet))
... ... @@ -55,7 +57,7 @@ public class ASMHookProxy
55 57 * @param netHandler
56 58 * @param packet
57 59 */
58   - public void handleCustomPayloadPacket(NetHandler netHandler, Packet250CustomPayload packet)
  60 + public static void handleCustomPayloadPacket(NetHandler netHandler, Packet250CustomPayload packet)
59 61 {
60 62 netHandler.handleCustomPayload(packet);
61 63  
... ...
java/com/mumfrey/liteloader/core/hooks/asm/PacketTransformer.java
1 1 package com.mumfrey.liteloader.core.hooks.asm;
2 2  
3   -import java.lang.reflect.Field;
4 3 import java.util.List;
5 4  
6 5 import org.objectweb.asm.ClassReader;
... ... @@ -146,7 +145,7 @@ public abstract class PacketTransformer implements IClassTransformer
146 145 method.instructions.add(new VarInsnNode(Opcodes.ALOAD, 0));
147 146  
148 147 // Invoke the handler function with the args we just pushed onto the stack
149   - method.instructions.add(new MethodInsnNode(Opcodes.INVOKEVIRTUAL, "com/mumfrey/liteloader/core/hooks/asm/ASMHookProxy", this.handlerMethodName, targetMethodSig));
  148 + method.instructions.add(new MethodInsnNode(Opcodes.INVOKESTATIC, "com/mumfrey/liteloader/core/hooks/asm/ASMHookProxy", this.handlerMethodName, targetMethodSig));
150 149  
151 150 // Return
152 151 method.instructions.add(new InsnNode(Opcodes.RETURN));
... ... @@ -175,24 +174,4 @@ public abstract class PacketTransformer implements IClassTransformer
175 174  
176 175 return null;
177 176 }
178   -
179   - /**
180   - * Register the proxy (handler) for a packet
181   - *
182   - * @param packetClass
183   - * @param proxy
184   - */
185   - public static void registerProxy(Class<?> packetClass, ASMHookProxy proxy)
186   - {
187   - try
188   - {
189   - Field fProxy = packetClass.getDeclaredField("proxy");
190   - fProxy.setAccessible(true);
191   - fProxy.set(null, proxy);
192   - }
193   - catch (Exception ex)
194   - {
195   - ex.printStackTrace();
196   - }
197   - }
198 177 }
199 178 \ No newline at end of file
... ...