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); | ... | ... |