Commit 7e6adb61cdefcb0bcf6f8895744cda19938536c9
1 parent
5403adcb
LiteLoader for Minecraft 1.5
Showing
11 changed files
with
245 additions
and
155 deletions
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<P, T> |
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<P, T> |
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<P, T> |
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<P, T> |
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<P, T> |
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); | ... | ... |