Commit 7e6adb61cdefcb0bcf6f8895744cda19938536c9

Authored by Mumfrey
1 parent 5403adcb

LiteLoader for Minecraft 1.5

java/com/mumfrey/liteloader/PluginChannelListener.java
... ... @@ -16,12 +16,12 @@ public interface PluginChannelListener extends LoginListener
16 16 */
17 17 public abstract List<String> getChannels();
18 18  
19   - /**
20   - * Called when a custom payload packet arrives on a channel this mod has registered
21   - *
22   - * @param channel Channel on which the custom payload was received
23   - * @param length Length of the custom payload data
24   - * @param data Custom payload data
25   - */
26   - public abstract void onCustomPayload(String channel, int length, byte[] data);
  19 + /**
  20 + * Called when a custom payload packet arrives on a channel this mod has registered
  21 + *
  22 + * @param channel Channel on which the custom payload was received
  23 + * @param length Length of the custom payload data
  24 + * @param data Custom payload data
  25 + */
  26 + public abstract void onCustomPayload(String channel, int length, byte[] data);
27 27 }
... ...
java/com/mumfrey/liteloader/core/HookChat.java
... ... @@ -117,15 +117,15 @@ public class HookChat extends Packet3Chat
117 117 {
118 118 if (proxyPacket != null)
119 119 return proxyPacket.getPacketSize();
120   - else
121   - return super.getPacketSize();
  120 +
  121 + return super.getPacketSize();
122 122 }
123 123  
124 124 /**
125 125 * Register the specified handler as the packet handler for this packet
126 126 * @param handler
127 127 */
128   - public static void RegisterPacketHandler(LiteLoader handler)
  128 + public static void registerPacketHandler(LiteLoader handler)
129 129 {
130 130 packetHandler = handler;
131 131 }
... ... @@ -133,9 +133,9 @@ public class HookChat extends Packet3Chat
133 133 /**
134 134 * Register this packet as the new packet for packet ID 3
135 135 */
136   - public static void Register()
  136 + public static void register()
137 137 {
138   - Register(false);
  138 + register(false);
139 139 }
140 140  
141 141 /**
... ... @@ -144,8 +144,8 @@ public class HookChat extends Packet3Chat
144 144 *
145 145 * @param force Force registration even if registration was already performed previously.
146 146 */
147   - @SuppressWarnings("unchecked")
148   - public static void Register(boolean force)
  147 + @SuppressWarnings({ "unchecked", "rawtypes" })
  148 + public static void register(boolean force)
149 149 {
150 150 if (!registered || force)
151 151 {
... ... @@ -162,7 +162,7 @@ public class HookChat extends Packet3Chat
162 162 packetIdToClassMap.removeObject(3);
163 163 packetIdToClassMap.addKey(3, HookChat.class);
164 164  
165   - Map packetClassToIdMap = PrivateFields.StaticFields.packetClassToIdMap.Get();
  165 + Map packetClassToIdMap = PrivateFields.StaticFields.packetClassToIdMap.get();
166 166 packetClassToIdMap.put(HookChat.class, Integer.valueOf(3));
167 167  
168 168 registered = true;
... ...
java/com/mumfrey/liteloader/core/HookPluginChannels.java
... ... @@ -109,15 +109,15 @@ public class HookPluginChannels extends Packet250CustomPayload
109 109 {
110 110 if (proxyPacket != null)
111 111 return proxyPacket.getPacketSize();
112   - else
113   - return super.getPacketSize();
  112 +
  113 + return super.getPacketSize();
114 114 }
115 115  
116 116 /**
117 117 * Register the specified handler as the packet handler for this packet
118 118 * @param handler
119 119 */
120   - public static void RegisterPacketHandler(LiteLoader handler)
  120 + public static void registerPacketHandler(LiteLoader handler)
121 121 {
122 122 packetHandler = handler;
123 123 }
... ... @@ -125,9 +125,9 @@ public class HookPluginChannels extends Packet250CustomPayload
125 125 /**
126 126 * Register this packet as the new packet for packet ID 250
127 127 */
128   - public static void Register()
  128 + public static void register()
129 129 {
130   - Register(false);
  130 + register(false);
131 131 }
132 132  
133 133 /**
... ... @@ -136,8 +136,8 @@ public class HookPluginChannels extends Packet250CustomPayload
136 136 *
137 137 * @param force Force registration even if registration was already performed previously.
138 138 */
139   - @SuppressWarnings("unchecked")
140   - public static void Register(boolean force)
  139 + @SuppressWarnings({ "unchecked", "rawtypes" })
  140 + public static void register(boolean force)
141 141 {
142 142 if (!registered || force)
143 143 {
... ... @@ -154,7 +154,7 @@ public class HookPluginChannels extends Packet250CustomPayload
154 154 packetIdToClassMap.removeObject(250);
155 155 packetIdToClassMap.addKey(250, HookPluginChannels.class);
156 156  
157   - Map packetClassToIdMap = PrivateFields.StaticFields.packetClassToIdMap.Get();
  157 + Map packetClassToIdMap = PrivateFields.StaticFields.packetClassToIdMap.get();
158 158 packetClassToIdMap.put(HookPluginChannels.class, Integer.valueOf(250));
159 159  
160 160 registered = true;
... ...
java/com/mumfrey/liteloader/core/HookProfiler.java
... ... @@ -5,10 +5,7 @@ import java.lang.reflect.Method;
5 5 import java.util.LinkedList;
6 6 import java.util.logging.Logger;
7 7  
8   -import com.mumfrey.liteloader.util.ModUtilities;
9   -
10 8 import net.minecraft.client.Minecraft;
11   -import net.minecraft.src.EntityPlayerSP;
12 9 import net.minecraft.src.GameSettings;
13 10 import net.minecraft.src.Profiler;
14 11  
... ... @@ -68,7 +65,7 @@ public class HookProfiler extends Profiler
68 65 this.logger = logger;
69 66  
70 67 // Detect optifine (duh!)
71   - DetectOptifine();
  68 + detectOptifine();
72 69 }
73 70  
74 71 /**
... ... @@ -76,7 +73,7 @@ public class HookProfiler extends Profiler
76 73 *
77 74 * @param logger
78 75 */
79   - private void DetectOptifine()
  76 + private void detectOptifine()
80 77 {
81 78 try
82 79 {
... ... @@ -91,7 +88,7 @@ public class HookProfiler extends Profiler
91 88 {
92 89 if (ofProfiler != null)
93 90 {
94   - logger.info(String.format("Optifine version %s detected, enabling compatibility check", GetOptifineVersion()));
  91 + logger.info(String.format("Optifine version %s detected, enabling compatibility check", getOptifineVersion()));
95 92 }
96 93 }
97 94 }
... ... @@ -101,15 +98,14 @@ public class HookProfiler extends Profiler
101 98 *
102 99 * @return
103 100 */
104   - private String GetOptifineVersion()
  101 + private String getOptifineVersion()
105 102 {
106 103 try
107 104 {
108   - Class config = Class.forName("Config");
  105 + Class<?> config = Class.forName("Config");
109 106  
110 107 if (config != null)
111 108 {
112   - @SuppressWarnings("unchecked")
113 109 Method getVersion = config.getDeclaredMethod("getVersion");
114 110  
115 111 if (getVersion != null)
... ...
java/com/mumfrey/liteloader/core/LiteLoader.java
... ... @@ -11,7 +11,6 @@ import java.io.IOException;
11 11 import java.io.InputStream;
12 12 import java.io.InputStreamReader;
13 13 import java.io.PrintStream;
14   -import java.lang.reflect.Constructor;
15 14 import java.lang.reflect.Method;
16 15 import java.net.URL;
17 16 import java.net.URLClassLoader;
... ... @@ -32,8 +31,9 @@ import java.util.zip.ZipEntry;
32 31 import java.util.zip.ZipFile;
33 32 import java.util.zip.ZipInputStream;
34 33  
  34 +import javax.activity.InvalidActivityException;
  35 +
35 36 import net.minecraft.client.Minecraft;
36   -import net.minecraft.src.ConsoleLogManager;
37 37 import net.minecraft.src.NetHandler;
38 38 import net.minecraft.src.Packet1Login;
39 39 import net.minecraft.src.Packet3Chat;
... ... @@ -57,7 +57,7 @@ import com.mumfrey.liteloader.util.PrivateFields;
57 57 * LiteLoader is a simple loader which provides tick events to loaded mods
58 58 *
59 59 * @author Adam Mummery-Smith
60   - * @version 1.4.7
  60 + * @version 1.5
61 61 */
62 62 @SuppressWarnings("rawtypes")
63 63 public final class LiteLoader implements FilenameFilter
... ... @@ -65,19 +65,19 @@ public final class LiteLoader implements FilenameFilter
65 65 /**
66 66 * Liteloader version
67 67 */
68   - private static final String LOADER_VERSION = "1.4.7";
  68 + private static final String LOADER_VERSION = "1.5";
69 69  
70 70 /**
71 71 * Loader revision, can be used by mods to determine whether the loader is sufficiently up-to-date
72 72 */
73   - private static final int LOADER_REVISION = 7;
  73 + private static final int LOADER_REVISION = 8;
74 74  
75 75 /**
76 76 * Minecraft versions that we will load mods for, this will be compared
77 77 * against the version.txt value in mod files to prevent outdated mods being
78 78 * loaded!!!
79 79 */
80   - private static final String[] SUPPORTED_VERSIONS = { "1.4.6", "1.4.7" };
  80 + private static final String[] SUPPORTED_VERSIONS = { "1.5", "1.5.r1" };
81 81  
82 82 /**
83 83 * Maximum recursion depth for mod discovery
... ... @@ -241,6 +241,11 @@ public final class LiteLoader implements FilenameFilter
241 241 return logger;
242 242 }
243 243  
  244 + /**
  245 + * Get the output stream which we are using for console output
  246 + *
  247 + * @return
  248 + */
244 249 public static final PrintStream getConsoleStream()
245 250 {
246 251 return useStdOut ? System.out : System.err;
... ... @@ -331,7 +336,7 @@ public final class LiteLoader implements FilenameFilter
331 336 */
332 337 private void prepareClassOverrides()
333 338 {
334   - this.registerBaseClassOverride(ModUtilities.getObfuscatedFieldName("net.minecraft.src.CallableJVMFlags", "g"), "g");
  339 + this.registerBaseClassOverride(ModUtilities.getObfuscatedFieldName("net.minecraft.src.CallableJVMFlags", "h"), "h");
335 340 }
336 341  
337 342 /**
... ... @@ -355,25 +360,25 @@ public final class LiteLoader implements FilenameFilter
355 360  
356 361 for (int readBytes = resourceInputStream.read(); readBytes >= 0; readBytes = resourceInputStream.read())
357 362 {
358   - outputStream.write(readBytes);
  363 + outputStream.write(readBytes);
359 364 }
360   -
  365 +
361 366 byte[] data = outputStream.toByteArray();
362 367  
363 368 outputStream.close();
364   - resourceInputStream.close();
  369 + resourceInputStream.close();
365 370  
366   - logger.info("Defining class override for " + binaryClassName);
367   - mDefineClass.invoke(Minecraft.class.getClassLoader(), binaryClassName, data, 0, data.length);
  371 + logger.info("Defining class override for " + binaryClassName);
  372 + mDefineClass.invoke(Minecraft.class.getClassLoader(), binaryClassName, data, 0, data.length);
368 373 }
369 374 else
370 375 {
371   - logger.info("Error defining class override for " + binaryClassName + ", file not found");
  376 + logger.info("Error defining class override for " + binaryClassName + ", file not found");
372 377 }
373 378 }
374 379 catch (Throwable th)
375 380 {
376   - logger.log(Level.WARNING, "Error defining class override for " + binaryClassName, th);
  381 + logger.log(Level.WARNING, "Error defining class override for " + binaryClassName, th);
377 382 }
378 383 }
379 384  
... ... @@ -417,34 +422,19 @@ public final class LiteLoader implements FilenameFilter
417 422 * @throws SecurityException
418 423 * @throws IOException
419 424 */
420   - @SuppressWarnings("unchecked")
421 425 private void prepareLogger() throws SecurityException, IOException
422 426 {
423   - Formatter minecraftLogFormatter = null;
424   -
425   - try
426   - {
427   - Class<? extends Formatter> formatterClass = (Class<? extends Formatter>)Minecraft.class.getClassLoader().loadClass(ModUtilities.getObfuscatedFieldName("net.minecraft.src.ConsoleLogFormatter", "em"));
428   - Constructor<? extends Formatter> defaultConstructor = formatterClass.getDeclaredConstructor();
429   - defaultConstructor.setAccessible(true);
430   - minecraftLogFormatter = defaultConstructor.newInstance();
431   - }
432   - catch (Exception ex)
433   - {
434   - ConsoleLogManager.init();
435   - minecraftLogFormatter = ConsoleLogManager.loggerLogManager.getHandlers()[0].getFormatter();
436   - }
  427 + Formatter logFormatter = new LiteLoaderLogFormatter();
437 428  
438 429 logger.setUseParentHandlers(false);
439   -
440 430 this.useStdOut = System.getProperty("liteloader.log", "stderr").equalsIgnoreCase("stdout") || this.localProperties.getProperty("log", "stderr").equalsIgnoreCase("stdout");
441 431  
442 432 StreamHandler consoleHandler = useStdOut ? new com.mumfrey.liteloader.util.log.ConsoleHandler() : new java.util.logging.ConsoleHandler();
443   - if (minecraftLogFormatter != null) consoleHandler.setFormatter(minecraftLogFormatter);
  433 + consoleHandler.setFormatter(logFormatter);
444 434 logger.addHandler(consoleHandler);
445 435  
446 436 FileHandler logFileHandler = new FileHandler(new File(Minecraft.getMinecraftDir(), "LiteLoader.txt").getAbsolutePath());
447   - if (minecraftLogFormatter != null) logFileHandler.setFormatter(minecraftLogFormatter);
  437 + logFileHandler.setFormatter(logFormatter);
448 438 logger.addHandler(logFileHandler);
449 439 }
450 440  
... ... @@ -470,6 +460,7 @@ public final class LiteLoader implements FilenameFilter
470 460  
471 461 try
472 462 {
  463 + this.localProperties = new Properties(this.internalProperties);
473 464 InputStream localPropertiesStream = this.getLocalPropertiesStream();
474 465  
475 466 if (localPropertiesStream != null)
... ... @@ -480,7 +471,7 @@ public final class LiteLoader implements FilenameFilter
480 471 }
481 472 catch (Throwable th)
482 473 {
483   - this.localProperties = new Properties();
  474 + this.localProperties = new Properties(this.internalProperties);
484 475 }
485 476 }
486 477  
... ... @@ -560,6 +551,34 @@ public final class LiteLoader implements FilenameFilter
560 551 }
561 552  
562 553 /**
  554 + * Get a reference to a loaded mod, if the mod exists
  555 + *
  556 + * @param modName Mod's name or class name
  557 + * @return
  558 + * @throws InvalidActivityException
  559 + */
  560 + @SuppressWarnings("unchecked")
  561 + public <T extends LiteMod> T getMod(String modName) throws InvalidActivityException, IllegalArgumentException
  562 + {
  563 + if (!this.loaderStartupComplete)
  564 + {
  565 + throw new InvalidActivityException("Attempted to get a reference to a mod before loader startup is complete");
  566 + }
  567 +
  568 + if (modName == null)
  569 + {
  570 + throw new IllegalArgumentException("Attempted to get a reference to a mod without specifying a mod name");
  571 + }
  572 +
  573 + for (LiteMod mod : this.mods)
  574 + {
  575 + if (modName.equalsIgnoreCase(mod.getName()) || modName.equalsIgnoreCase(mod.getClass().getSimpleName())) return (T)mod;
  576 + }
  577 +
  578 + return null;
  579 + }
  580 +
  581 + /**
563 582 * Enumerate the java class path and "mods" folder to find mod classes, then load the classes
564 583 */
565 584 private void prepareMods(boolean searchMods, boolean searchProtectionDomain, boolean searchClassPath)
... ... @@ -637,6 +656,10 @@ public final class LiteLoader implements FilenameFilter
637 656 {
638 657 modFiles.add(modFile);
639 658 }
  659 + else
  660 + {
  661 + logger.info("Not adding invalid or outdated mod file: " + modFile.getAbsolutePath());
  662 + }
640 663 }
641 664  
642 665 modZip.close();
... ... @@ -705,6 +728,11 @@ public final class LiteLoader implements FilenameFilter
705 728  
706 729 for (Class mod : modClasses)
707 730 {
  731 + if (modsToLoad.containsKey(mod.getSimpleName()))
  732 + {
  733 + logger.warning("Mod name collision for mod with class '" + mod.getSimpleName() + "', maybe you have more than one copy?");
  734 + }
  735 +
708 736 modsToLoad.put(mod.getSimpleName(), mod);
709 737 }
710 738  
... ... @@ -729,6 +757,11 @@ public final class LiteLoader implements FilenameFilter
729 757  
730 758 for (Class mod : modClasses)
731 759 {
  760 + if (modsToLoad.containsKey(mod.getSimpleName()))
  761 + {
  762 + logger.warning("Mod name collision for mod with class '" + mod.getSimpleName() + "', maybe you have more than one copy?");
  763 + }
  764 +
732 765 modsToLoad.put(mod.getSimpleName(), mod);
733 766 }
734 767  
... ... @@ -745,6 +778,11 @@ public final class LiteLoader implements FilenameFilter
745 778  
746 779 for (Class mod : modClasses)
747 780 {
  781 + if (modsToLoad.containsKey(mod.getSimpleName()))
  782 + {
  783 + logger.warning("Mod name collision for mod with class '" + mod.getSimpleName() + "', maybe you have more than one copy?");
  784 + }
  785 +
748 786 modsToLoad.put(mod.getSimpleName(), mod);
749 787 }
750 788  
... ... @@ -831,9 +869,16 @@ public final class LiteLoader implements FilenameFilter
831 869 this.addChatFilter((ChatFilter)mod);
832 870 }
833 871  
834   - if (mod instanceof ChatListener && !(mod instanceof ChatFilter))
  872 + if (mod instanceof ChatListener)
835 873 {
836   - this.addChatListener((ChatListener)mod);
  874 + if (mod instanceof ChatFilter)
  875 + {
  876 + this.logger.warning(String.format("Interface error initialising mod '%1s'. A mod implementing ChatFilter and ChatListener is not supported! Remove one of these interfaces", mod.getName()));
  877 + }
  878 + else
  879 + {
  880 + this.addChatListener((ChatListener)mod);
  881 + }
837 882 }
838 883  
839 884 if (mod instanceof PreLoginListener)
... ... @@ -875,8 +920,8 @@ public final class LiteLoader implements FilenameFilter
875 920 if ((this.chatListeners.size() > 0 || this.chatFilters.size() > 0) && !this.chatHooked)
876 921 {
877 922 this.chatHooked = true;
878   - HookChat.Register();
879   - HookChat.RegisterPacketHandler(this);
  923 + HookChat.register();
  924 + HookChat.registerPacketHandler(this);
880 925 }
881 926  
882 927 // Login hook
... ... @@ -891,15 +936,15 @@ public final class LiteLoader implements FilenameFilter
891 936 if (this.pluginChannelListeners.size() > 0 && !this.pluginChannelHooked)
892 937 {
893 938 this.pluginChannelHooked = true;
894   - HookPluginChannels.Register();
895   - HookPluginChannels.RegisterPacketHandler(this);
  939 + HookPluginChannels.register();
  940 + HookPluginChannels.registerPacketHandler(this);
896 941 }
897 942  
898 943 // Tick hook
899 944 if (!this.tickHooked)
900 945 {
901 946 this.tickHooked = true;
902   - PrivateFields.minecraftProfiler.SetFinal(this.minecraft, new HookProfiler(this, logger));
  947 + PrivateFields.minecraftProfiler.setFinal(this.minecraft, new HookProfiler(this, logger));
903 948 }
904 949 }
905 950 catch (Exception ex)
... ... @@ -1272,7 +1317,7 @@ public final class LiteLoader implements FilenameFilter
1272 1317 // Try to get the minecraft timer object and determine the value of the partialTicks
1273 1318 if (tick || this.minecraftTimer == null)
1274 1319 {
1275   - this.minecraftTimer = PrivateFields.minecraftTimer.Get(this.minecraft);
  1320 + this.minecraftTimer = PrivateFields.minecraftTimer.get(this.minecraft);
1276 1321 }
1277 1322  
1278 1323 // Hooray, we got the timer reference
... ... @@ -1421,9 +1466,9 @@ public final class LiteLoader implements FilenameFilter
1421 1466 separator = true;
1422 1467 }
1423 1468  
1424   - byte[] registrationData = channelList.toString().getBytes(Charset.forName("UTF8"));
1425   -
1426   - sendPluginChannelMessage("REGISTER", registrationData);
  1469 + byte[] registrationData = channelList.toString().getBytes(Charset.forName("UTF8"));
  1470 +
  1471 + sendPluginChannelMessage("REGISTER", registrationData);
1427 1472 }
1428 1473 }
1429 1474 }
1430 1475 \ No newline at end of file
... ...
java/com/mumfrey/liteloader/core/LiteLoaderLogFormatter.java 0 โ†’ 100644
  1 +package com.mumfrey.liteloader.core;
  2 +
  3 +import java.io.PrintWriter;
  4 +import java.io.StringWriter;
  5 +import java.text.SimpleDateFormat;
  6 +import java.util.logging.Formatter;
  7 +import java.util.logging.Level;
  8 +import java.util.logging.LogRecord;
  9 +
  10 +final class LiteLoaderLogFormatter extends Formatter
  11 +{
  12 + private SimpleDateFormat simpleDateFormatLogFormatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  13 +
  14 + @Override
  15 + public String format(LogRecord logRecord)
  16 + {
  17 + StringBuilder sb = new StringBuilder();
  18 + sb.append(this.simpleDateFormatLogFormatter.format(Long.valueOf(logRecord.getMillis())));
  19 + Level var3 = logRecord.getLevel();
  20 +
  21 + if (var3 == Level.SEVERE)
  22 + sb.append(" [").append(var3.getLocalizedName()).append("] ");
  23 + else
  24 + sb.append(" [").append(var3.toString().toUpperCase()).append("] ");
  25 +
  26 + sb.append(logRecord.getMessage());
  27 + sb.append('\n');
  28 + Throwable th = logRecord.getThrown();
  29 +
  30 + if (th != null)
  31 + {
  32 + StringWriter var5 = new StringWriter();
  33 + th.printStackTrace(new PrintWriter(var5));
  34 + sb.append(var5.toString());
  35 + }
  36 +
  37 + return sb.toString();
  38 + }
  39 +}
... ...
java/com/mumfrey/liteloader/util/ModUtilities.java
1 1 package com.mumfrey.liteloader.util;
2 2  
3 3 import java.util.Arrays;
  4 +import java.util.HashSet;
4 5 import java.util.LinkedList;
5 6 import java.util.Map;
  7 +import java.util.Set;
6 8  
7 9 import com.mumfrey.liteloader.core.LiteLoader;
8 10  
... ... @@ -11,48 +13,55 @@ import net.minecraft.src.*;
11 13  
12 14 public abstract class ModUtilities
13 15 {
14   - /**
15   - * Add a renderer map entry for the specified entity class
16   - *
17   - * @param entityClass
18   - * @param renderer
19   - */
  16 + private static Set<Integer> overriddenPackets = new HashSet<Integer>();
  17 +
  18 + /**
  19 + * Add a renderer map entry for the specified entity class
  20 + *
  21 + * @param entityClass
  22 + * @param renderer
  23 + */
20 24 @SuppressWarnings("unchecked")
21 25 public static void addRenderer(Class<? extends Entity> entityClass, Render renderer)
22 26 {
23   - Map<Class<? extends Entity>, Render> entityRenderMap = PrivateFields.entityRenderMap.Get(RenderManager.instance);
  27 + Map<Class<? extends Entity>, Render> entityRenderMap = PrivateFields.entityRenderMap.get(RenderManager.instance);
24 28 entityRenderMap.put(entityClass, renderer);
25 29 renderer.setRenderManager(RenderManager.instance);
26 30 }
27   -
28   - /**
29   - * Register a packet override
30   - *
31   - * @param packetId
32   - * @param newPacket
33   - */
34   - @SuppressWarnings("unchecked")
35   - public static boolean registerPacketOverride(int packetId, Class<? extends Packet> newPacket)
36   - {
37   - try
38   - {
39   - IntHashMap packetIdToClassMap = Packet.packetIdToClassMap;
40   - PrivateFields.StaticFields.packetClassToIdMap.Get();
41   - Map<Class<? extends Packet>, Integer> packetClassToIdMap = PrivateFields.StaticFields.packetClassToIdMap.Get();
42   -
43   - packetIdToClassMap.removeObject(packetId);
44   - packetIdToClassMap.addKey(packetId, newPacket);
45   - packetClassToIdMap.put(newPacket, Integer.valueOf(packetId));
46   -
47   - return true;
48   - }
49   - catch (Exception ex)
50   - {
51   - LiteLoader.logger.warning("Error registering packet override for packet id " + packetId + ": " + ex.getMessage());
52   - return false;
53   - }
54   - }
55   -
  31 +
  32 + /**
  33 + * Register a packet override
  34 + *
  35 + * @param packetId
  36 + * @param newPacket
  37 + */
  38 + @SuppressWarnings("unchecked")
  39 + public static boolean registerPacketOverride(int packetId, Class<? extends Packet> newPacket)
  40 + {
  41 + if (overriddenPackets.contains(Integer.valueOf(packetId)))
  42 + {
  43 + LiteLoader.getLogger().warning(String.format("Packet with ID %s was already overridden by another mod, one or mods may not function correctly", packetId));
  44 + }
  45 +
  46 + try
  47 + {
  48 + IntHashMap packetIdToClassMap = Packet.packetIdToClassMap;
  49 + PrivateFields.StaticFields.packetClassToIdMap.get();
  50 + Map<Class<? extends Packet>, Integer> packetClassToIdMap = PrivateFields.StaticFields.packetClassToIdMap.get();
  51 +
  52 + packetIdToClassMap.removeObject(packetId);
  53 + packetIdToClassMap.addKey(packetId, newPacket);
  54 + packetClassToIdMap.put(newPacket, Integer.valueOf(packetId));
  55 +
  56 + return true;
  57 + }
  58 + catch (Exception ex)
  59 + {
  60 + LiteLoader.logger.warning("Error registering packet override for packet id " + packetId + ": " + ex.getMessage());
  61 + return false;
  62 + }
  63 + }
  64 +
56 65 /**
57 66 * Send a plugin channel (custom payload) packet to the server
58 67 *
... ... @@ -99,17 +108,17 @@ public abstract class ModUtilities
99 108  
100 109 if (mc == null || mc.gameSettings == null) return;
101 110  
102   - LinkedList<KeyBinding> keyBindings = new LinkedList<KeyBinding>();
103   - keyBindings.addAll(Arrays.asList(mc.gameSettings.keyBindings));
104   -
105   - if (!keyBindings.contains(newBinding))
106   - {
107   - keyBindings.add(newBinding);
108   - mc.gameSettings.keyBindings = keyBindings.toArray(new KeyBinding[0]);
109   - mc.gameSettings.loadOptions();
110   - }
  111 + LinkedList<KeyBinding> keyBindings = new LinkedList<KeyBinding>();
  112 + keyBindings.addAll(Arrays.asList(mc.gameSettings.keyBindings));
  113 +
  114 + if (!keyBindings.contains(newBinding))
  115 + {
  116 + keyBindings.add(newBinding);
  117 + mc.gameSettings.keyBindings = keyBindings.toArray(new KeyBinding[0]);
  118 + mc.gameSettings.loadOptions();
  119 + }
111 120 }
112   -
  121 +
113 122 /**
114 123 * Unregisters a registered keybind with the game settings class, thus removing it from the "controls" screen
115 124 *
... ... @@ -120,14 +129,14 @@ public abstract class ModUtilities
120 129 Minecraft mc = Minecraft.getMinecraft();
121 130  
122 131 if (mc == null || mc.gameSettings == null) return;
123   -
  132 +
124 133 LinkedList<KeyBinding> keyBindings = new LinkedList<KeyBinding>();
125   - keyBindings.addAll(Arrays.asList(mc.gameSettings.keyBindings));
126   -
127   - if (keyBindings.contains(removeBinding))
128   - {
129   - keyBindings.remove(removeBinding);
130   - mc.gameSettings.keyBindings = keyBindings.toArray(new KeyBinding[0]);
131   - }
  134 + keyBindings.addAll(Arrays.asList(mc.gameSettings.keyBindings));
  135 +
  136 + if (keyBindings.contains(removeBinding))
  137 + {
  138 + keyBindings.remove(removeBinding);
  139 + mc.gameSettings.keyBindings = keyBindings.toArray(new KeyBinding[0]);
  140 + }
132 141 }
133 142 }
... ...
java/com/mumfrey/liteloader/util/PrivateFields.java
... ... @@ -15,12 +15,13 @@ import net.minecraft.src.*;
15 15 * @param <P> Parent class type, the type of the class that owns the field
16 16 * @param <T> Field type, the type of the field value
17 17 */
  18 +@SuppressWarnings("rawtypes")
18 19 public class PrivateFields<P, T>
19 20 {
20 21 /**
21 22 * Class to which this field belongs
22 23 */
23   - public final Class parentClass;
  24 + public final Class<P> parentClass;
24 25  
25 26 /**
26 27 * MCP name for this field
... ... @@ -44,7 +45,7 @@ public class PrivateFields&lt;P, T&gt;
44 45 * @param mcpName
45 46 * @param name
46 47 */
47   - private PrivateFields(Class owner, String mcpName, String name)
  48 + private PrivateFields(Class<P> owner, String mcpName, String name)
48 49 {
49 50 this.parentClass = owner;
50 51 this.mcpName = mcpName;
... ... @@ -60,7 +61,7 @@ public class PrivateFields&lt;P, T&gt;
60 61 * @return field value or null if errors occur
61 62 */
62 63 @SuppressWarnings("unchecked")
63   - public T Get(P instance)
  64 + public T get(P instance)
64 65 {
65 66 try
66 67 {
... ... @@ -81,7 +82,7 @@ public class PrivateFields&lt;P, T&gt;
81 82 * @param value value to set
82 83 * @return value
83 84 */
84   - public T Set(P instance, T value)
  85 + public T set(P instance, T value)
85 86 {
86 87 try
87 88 {
... ... @@ -101,7 +102,7 @@ public class PrivateFields&lt;P, T&gt;
101 102 * @param value value to set
102 103 * @return value
103 104 */
104   - public T SetFinal(P instance, T value)
  105 + public T setFinal(P instance, T value)
105 106 {
106 107 try
107 108 {
... ... @@ -126,16 +127,16 @@ public class PrivateFields&lt;P, T&gt;
126 127 */
127 128 public static final class StaticFields<P, T> extends PrivateFields<P, T>
128 129 {
129   - public StaticFields(Class owner, String mcpName, String name) { super(owner, mcpName, name); }
130   - public T Get() { return Get(null); }
131   - public void Set(T value) { Set(null, value); }
  130 + public StaticFields(Class<P> owner, String mcpName, String name) { super(owner, mcpName, name); }
  131 + public T get() { return get(null); }
  132 + public void set(T value) { set(null, value); }
132 133  
133 134 public static final StaticFields<Packet, Map> packetClassToIdMap = new StaticFields<Packet, Map> (Packet.class, "packetClassToIdMap", "a"); // Packet/packetClassToIdMap
134 135 public static final StaticFields<TileEntity, Map> tileEntityNameToClassMap = new StaticFields<TileEntity, Map> (TileEntity.class, "nameToClassMap", "a"); // TileEntity/nameToClassMap
135 136 }
136 137  
137   - public static final PrivateFields<Minecraft, Timer> minecraftTimer = new PrivateFields<Minecraft, Timer> (Minecraft.class, "timer", "T"); // Minecraft/timer
138   - public static final PrivateFields<Minecraft, Profiler> minecraftProfiler = new PrivateFields<Minecraft, Profiler> (Minecraft.class, "mcProfiler", "I"); // Minecraft/mcProfiler
139   - public static final PrivateFields<RenderManager, Map> entityRenderMap = new PrivateFields<RenderManager, Map> (RenderManager.class, "entityRenderMap", "p"); // RenderManager/entityRenderMap
  138 + public static final PrivateFields<Minecraft, Timer> minecraftTimer = new PrivateFields<Minecraft, Timer> (Minecraft.class, "timer", "V"); // Minecraft/timer
  139 + public static final PrivateFields<Minecraft, Profiler> minecraftProfiler = new PrivateFields<Minecraft, Profiler> (Minecraft.class, "mcProfiler", "J"); // Minecraft/mcProfiler
  140 + public static final PrivateFields<RenderManager, Map> entityRenderMap = new PrivateFields<RenderManager, Map> (RenderManager.class, "entityRenderMap", "q"); // RenderManager/entityRenderMap
140 141 }
141 142  
... ...
java/net/minecraft/src/CallableJVMFlags.java
... ... @@ -9,14 +9,14 @@ import java.util.concurrent.Callable;
9 9 import com.mumfrey.liteloader.core.CallableLiteLoaderBrand;
10 10 import com.mumfrey.liteloader.core.CallableLiteLoaderMods;
11 11  
12   -class CallableJVMFlags implements Callable
  12 +class CallableJVMFlags implements Callable<String>
13 13 {
14   - /** Gets additional Java Enviroment info for Crash Report. */
15   - final CrashReport crashReportJVMFlags;
  14 + /** Reference to the CrashReport object. */
  15 + final CrashReport theCrashReport;
16 16  
17 17 CallableJVMFlags(CrashReport par1CrashReport)
18 18 {
19   - this.crashReportJVMFlags = par1CrashReport;
  19 + this.theCrashReport = par1CrashReport;
20 20 par1CrashReport.func_85056_g().addCrashSectionCallable("Mod Pack", new CallableLiteLoaderBrand(par1CrashReport));
21 21 par1CrashReport.func_85056_g().addCrashSectionCallable("LiteLoader Mods", new CallableLiteLoaderMods(par1CrashReport));
22 22 }
... ... @@ -27,14 +27,14 @@ class CallableJVMFlags implements Callable
27 27 public String getJVMFlagsAsString()
28 28 {
29 29 RuntimeMXBean var1 = ManagementFactory.getRuntimeMXBean();
30   - List var2 = var1.getInputArguments();
  30 + List<String> var2 = var1.getInputArguments();
31 31 int var3 = 0;
32 32 StringBuilder var4 = new StringBuilder();
33   - Iterator var5 = var2.iterator();
  33 + Iterator<String> var5 = var2.iterator();
34 34  
35 35 while (var5.hasNext())
36 36 {
37   - String var6 = (String)var5.next();
  37 + String var6 = var5.next();
38 38  
39 39 if (var6.startsWith("-X"))
40 40 {
... ... @@ -51,7 +51,7 @@ class CallableJVMFlags implements Callable
51 51 }
52 52  
53 53 @Override
54   - public Object call()
  54 + public String call()
55 55 {
56 56 return this.getJVMFlagsAsString();
57 57 }
... ...
java/net/minecraft/src/RenderLightningBolt.java
1 1 package net.minecraft.src;
2 2  
3 3 import java.util.Random;
4   -
5 4 import org.lwjgl.opengl.GL11;
6 5  
7 6 import com.mumfrey.liteloader.core.LiteLoader;
... ... @@ -13,11 +12,12 @@ public class RenderLightningBolt extends Render
13 12 // LiteLoader init
14 13 LiteLoader.getInstance();
15 14 }
16   -
17   - /**
  15 +
  16 + /**
18 17 * Actually renders the lightning bolt. This method is called through the doRender method.
19 18 */
20   - public void doRenderLightningBolt(EntityLightningBolt par1EntityLightningBolt, double par2, double par4, double par6, float par8, float par9)
  19 + @SuppressWarnings("cast")
  20 + public void doRenderLightningBolt(EntityLightningBolt par1EntityLightningBolt, double par2, double par4, double par6, float par8, float par9)
21 21 {
22 22 Tessellator var10 = Tessellator.instance;
23 23 GL11.glDisable(GL11.GL_TEXTURE_2D);
... ...
res/liteloader.properties
... ... @@ -2,5 +2,5 @@ search.mods=true
2 2 search.jar=true
3 3 search.classpath=true
4 4 log=stderr
5   -
  5 +brand=The Voxel Modpack
6 6  
... ...