Commit c92c91ea81534b1f1545d7d4ccbfba6a8e28f8ef
1 parent
14886082
Liteloader 1.4.0
Showing
10 changed files
with
389 additions
and
113 deletions
.classpath
| 1 | 1 | <?xml version="1.0" encoding="UTF-8"?> |
| 2 | 2 | <classpath> |
| 3 | 3 | <classpathentry kind="src" path="java"/> |
| 4 | + <classpathentry kind="src" path="res"/> | |
| 4 | 5 | <classpathentry combineaccessrules="false" kind="src" path="/Client"/> |
| 5 | 6 | <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/jre6"/> |
| 6 | 7 | <classpathentry kind="lib" path="jars/bin/jinput.jar"> | ... | ... |
java/com/mumfrey/liteloader/core/CallableLiteLoaderMods.java
0 โ 100644
| 1 | +package com.mumfrey.liteloader.core; | |
| 2 | + | |
| 3 | +import java.util.concurrent.Callable; | |
| 4 | + | |
| 5 | +import net.minecraft.src.CrashReport; | |
| 6 | + | |
| 7 | +public class CallableLiteLoaderMods implements Callable<String> | |
| 8 | +{ | |
| 9 | + final CrashReport crashReport; | |
| 10 | + | |
| 11 | + public CallableLiteLoaderMods(CrashReport report) | |
| 12 | + { | |
| 13 | + this.crashReport = report; | |
| 14 | + } | |
| 15 | + | |
| 16 | + /* (non-Javadoc) | |
| 17 | + * @see java.util.concurrent.Callable#call() | |
| 18 | + */ | |
| 19 | + @Override | |
| 20 | + public String call() throws Exception | |
| 21 | + { | |
| 22 | + return LiteLoader.getInstance().getLoadedModsList(); | |
| 23 | + } | |
| 24 | +} | ... | ... |
java/com/mumfrey/liteloader/core/FilteringClassLoader.java
0 โ 100644
| 1 | +package com.mumfrey.liteloader.core; | |
| 2 | + | |
| 3 | +import java.io.IOException; | |
| 4 | +import java.io.InputStream; | |
| 5 | +import java.net.URL; | |
| 6 | +import java.net.URLClassLoader; | |
| 7 | +import java.util.Enumeration; | |
| 8 | + | |
| 9 | +import net.minecraft.client.Minecraft; | |
| 10 | + | |
| 11 | +public class FilteringClassLoader extends URLClassLoader | |
| 12 | +{ | |
| 13 | + public FilteringClassLoader() | |
| 14 | + { | |
| 15 | + super(new URL[0], Minecraft.class.getClassLoader()); | |
| 16 | + } | |
| 17 | + | |
| 18 | + /* (non-Javadoc) | |
| 19 | + * @see java.lang.ClassLoader#loadClass(java.lang.String) | |
| 20 | + */ | |
| 21 | + @Override | |
| 22 | + public Class<?> loadClass(String name) throws ClassNotFoundException | |
| 23 | + { | |
| 24 | + System.out.println("Parent is trying to load class " + name); | |
| 25 | + return super.loadClass(name); | |
| 26 | + } | |
| 27 | + | |
| 28 | + /* (non-Javadoc) | |
| 29 | + * @see java.lang.ClassLoader#findClass(java.lang.String) | |
| 30 | + */ | |
| 31 | + @Override | |
| 32 | + protected Class<?> findClass(String name) throws ClassNotFoundException | |
| 33 | + { | |
| 34 | + System.out.println("findClass " + name); | |
| 35 | + // TODO Auto-generated method stub | |
| 36 | + return super.findClass(name); | |
| 37 | + } | |
| 38 | + | |
| 39 | + /* (non-Javadoc) | |
| 40 | + * @see java.lang.ClassLoader#getResource(java.lang.String) | |
| 41 | + */ | |
| 42 | + @Override | |
| 43 | + public URL getResource(String name) | |
| 44 | + { | |
| 45 | + System.out.println("getResource " + name); | |
| 46 | + // TODO Auto-generated method stub | |
| 47 | + return super.getResource(name); | |
| 48 | + } | |
| 49 | + | |
| 50 | + /* (non-Javadoc) | |
| 51 | + * @see java.lang.ClassLoader#getResources(java.lang.String) | |
| 52 | + */ | |
| 53 | + @Override | |
| 54 | + public Enumeration<URL> getResources(String name) throws IOException | |
| 55 | + { | |
| 56 | + System.out.println("getResources " + name); | |
| 57 | + // TODO Auto-generated method stub | |
| 58 | + return super.getResources(name); | |
| 59 | + } | |
| 60 | + | |
| 61 | + /* (non-Javadoc) | |
| 62 | + * @see java.lang.ClassLoader#findResource(java.lang.String) | |
| 63 | + */ | |
| 64 | + @Override | |
| 65 | + public URL findResource(String name) | |
| 66 | + { | |
| 67 | + System.out.println("findResource " + name); | |
| 68 | + // TODO Auto-generated method stub | |
| 69 | + return super.findResource(name); | |
| 70 | + } | |
| 71 | + | |
| 72 | + /* (non-Javadoc) | |
| 73 | + * @see java.lang.ClassLoader#findResources(java.lang.String) | |
| 74 | + */ | |
| 75 | + @Override | |
| 76 | + public Enumeration<URL> findResources(String name) throws IOException | |
| 77 | + { | |
| 78 | + System.out.println("findResources " + name); | |
| 79 | + // TODO Auto-generated method stub | |
| 80 | + return super.findResources(name); | |
| 81 | + } | |
| 82 | + | |
| 83 | + /* (non-Javadoc) | |
| 84 | + * @see java.lang.ClassLoader#getResourceAsStream(java.lang.String) | |
| 85 | + */ | |
| 86 | + @Override | |
| 87 | + public InputStream getResourceAsStream(String name) | |
| 88 | + { | |
| 89 | + System.out.println("getResourceAsStream " + name); | |
| 90 | + // TODO Auto-generated method stub | |
| 91 | + return super.getResourceAsStream(name); | |
| 92 | + } | |
| 93 | + | |
| 94 | + /* (non-Javadoc) | |
| 95 | + * @see java.lang.ClassLoader#getPackage(java.lang.String) | |
| 96 | + */ | |
| 97 | + @Override | |
| 98 | + protected Package getPackage(String name) | |
| 99 | + { | |
| 100 | + System.out.println("getPackage " + name); | |
| 101 | + // TODO Auto-generated method stub | |
| 102 | + return super.getPackage(name); | |
| 103 | + } | |
| 104 | + | |
| 105 | + /* (non-Javadoc) | |
| 106 | + * @see java.lang.ClassLoader#getPackages() | |
| 107 | + */ | |
| 108 | + @Override | |
| 109 | + protected Package[] getPackages() | |
| 110 | + { | |
| 111 | + System.out.println("getPackages"); | |
| 112 | + // TODO Auto-generated method stub | |
| 113 | + return super.getPackages(); | |
| 114 | + } | |
| 115 | + | |
| 116 | + /* (non-Javadoc) | |
| 117 | + * @see java.lang.ClassLoader#findLibrary(java.lang.String) | |
| 118 | + */ | |
| 119 | + @Override | |
| 120 | + protected String findLibrary(String libname) | |
| 121 | + { | |
| 122 | + System.out.println("findLibrary " + libname); | |
| 123 | + // TODO Auto-generated method stub | |
| 124 | + return super.findLibrary(libname); | |
| 125 | + } | |
| 126 | + | |
| 127 | + /* (non-Javadoc) | |
| 128 | + * @see java.lang.ClassLoader#setDefaultAssertionStatus(boolean) | |
| 129 | + */ | |
| 130 | + @Override | |
| 131 | + public synchronized void setDefaultAssertionStatus(boolean enabled) | |
| 132 | + { | |
| 133 | + System.out.println("setDefaultAssertionStatus " + enabled); | |
| 134 | + // TODO Auto-generated method stub | |
| 135 | + super.setDefaultAssertionStatus(enabled); | |
| 136 | + } | |
| 137 | + | |
| 138 | + /* (non-Javadoc) | |
| 139 | + * @see java.lang.ClassLoader#setPackageAssertionStatus(java.lang.String, boolean) | |
| 140 | + */ | |
| 141 | + @Override | |
| 142 | + public synchronized void setPackageAssertionStatus(String packageName, boolean enabled) | |
| 143 | + { | |
| 144 | + System.out.println("setPackageAssertionStatus " + packageName + " " + enabled); | |
| 145 | + // TODO Auto-generated method stub | |
| 146 | + super.setPackageAssertionStatus(packageName, enabled); | |
| 147 | + } | |
| 148 | + | |
| 149 | + /* (non-Javadoc) | |
| 150 | + * @see java.lang.ClassLoader#setClassAssertionStatus(java.lang.String, boolean) | |
| 151 | + */ | |
| 152 | + @Override | |
| 153 | + public synchronized void setClassAssertionStatus(String className, boolean enabled) | |
| 154 | + { | |
| 155 | + System.out.println("setClassAssertionStatus " + className + " " + enabled); | |
| 156 | + // TODO Auto-generated method stub | |
| 157 | + super.setClassAssertionStatus(className, enabled); | |
| 158 | + } | |
| 159 | + | |
| 160 | + /* (non-Javadoc) | |
| 161 | + * @see java.lang.ClassLoader#clearAssertionStatus() | |
| 162 | + */ | |
| 163 | + @Override | |
| 164 | + public synchronized void clearAssertionStatus() | |
| 165 | + { | |
| 166 | + System.out.println("clearAssertionStatus"); | |
| 167 | + // TODO Auto-generated method stub | |
| 168 | + super.clearAssertionStatus(); | |
| 169 | + } | |
| 170 | +} | ... | ... |
java/com/mumfrey/liteloader/core/HookChat.java
| ... | ... | @@ -3,16 +3,12 @@ package com.mumfrey.liteloader.core; |
| 3 | 3 | import java.io.DataInputStream; |
| 4 | 4 | import java.io.DataOutputStream; |
| 5 | 5 | import java.io.IOException; |
| 6 | -import java.lang.reflect.Constructor; | |
| 7 | 6 | import java.util.Map; |
| 8 | 7 | |
| 9 | -import net.minecraft.src.IntHashMap; | |
| 10 | -import net.minecraft.src.NetHandler; | |
| 11 | -import net.minecraft.src.Packet; | |
| 12 | -import net.minecraft.src.Packet3Chat; | |
| 13 | - | |
| 14 | 8 | import com.mumfrey.liteloader.util.PrivateFields; |
| 15 | 9 | |
| 10 | +import net.minecraft.src.*; | |
| 11 | + | |
| 16 | 12 | /** |
| 17 | 13 | * Proxy packet which we will register in place of the original chat packet. The class will proxy the function calls |
| 18 | 14 | * through to the replaced class via reflection if the original (replaced) class is NOT the basic Packet3Chat (this | ... | ... |
java/com/mumfrey/liteloader/core/HookPluginChannels.java
| ... | ... | @@ -3,16 +3,11 @@ package com.mumfrey.liteloader.core; |
| 3 | 3 | import java.io.DataInputStream; |
| 4 | 4 | import java.io.DataOutputStream; |
| 5 | 5 | import java.io.IOException; |
| 6 | -import java.lang.reflect.Constructor; | |
| 7 | 6 | import java.util.Map; |
| 8 | 7 | |
| 9 | 8 | import com.mumfrey.liteloader.util.PrivateFields; |
| 10 | 9 | |
| 11 | -import net.minecraft.src.IntHashMap; | |
| 12 | -import net.minecraft.src.NetHandler; | |
| 13 | -import net.minecraft.src.Packet; | |
| 14 | -import net.minecraft.src.Packet250CustomPayload; | |
| 15 | -import net.minecraft.src.Packet3Chat; | |
| 10 | +import net.minecraft.src.*; | |
| 16 | 11 | |
| 17 | 12 | public class HookPluginChannels extends Packet250CustomPayload |
| 18 | 13 | { | ... | ... |
java/com/mumfrey/liteloader/core/LiteLoader.java
| 1 | 1 | package com.mumfrey.liteloader.core; |
| 2 | 2 | |
| 3 | -import java.io.BufferedReader; | |
| 4 | -import java.io.File; | |
| 5 | -import java.io.FileInputStream; | |
| 6 | -import java.io.FileNotFoundException; | |
| 7 | -import java.io.FilenameFilter; | |
| 8 | -import java.io.IOException; | |
| 9 | -import java.io.InputStream; | |
| 10 | -import java.io.InputStreamReader; | |
| 11 | -import java.io.PrintWriter; | |
| 3 | +import java.io.*; | |
| 12 | 4 | import java.lang.reflect.Constructor; |
| 13 | 5 | import java.lang.reflect.Method; |
| 14 | 6 | import java.net.URL; |
| 15 | 7 | import java.net.URLClassLoader; |
| 8 | +import java.nio.CharBuffer; | |
| 16 | 9 | import java.nio.charset.Charset; |
| 17 | -import java.util.Arrays; | |
| 18 | -import java.util.HashMap; | |
| 19 | -import java.util.Iterator; | |
| 20 | -import java.util.LinkedList; | |
| 21 | -import java.util.List; | |
| 22 | -import java.util.logging.ConsoleHandler; | |
| 23 | -import java.util.logging.FileHandler; | |
| 10 | +import java.util.*; | |
| 11 | +import java.util.concurrent.Callable; | |
| 12 | +import java.util.logging.*; | |
| 24 | 13 | import java.util.logging.Formatter; |
| 25 | -import java.util.logging.Level; | |
| 26 | -import java.util.logging.Logger; | |
| 27 | -import java.util.logging.StreamHandler; | |
| 28 | 14 | import java.util.zip.ZipEntry; |
| 29 | 15 | import java.util.zip.ZipFile; |
| 30 | 16 | import java.util.zip.ZipInputStream; |
| 31 | 17 | |
| 32 | -import net.minecraft.client.Minecraft; | |
| 33 | -import net.minecraft.src.ConsoleLogManager; | |
| 34 | -import net.minecraft.src.NetHandler; | |
| 35 | -import net.minecraft.src.Packet1Login; | |
| 36 | -import net.minecraft.src.Packet250CustomPayload; | |
| 37 | -import net.minecraft.src.Packet3Chat; | |
| 38 | -import net.minecraft.src.Timer; | |
| 39 | - | |
| 40 | -import com.mumfrey.liteloader.ChatFilter; | |
| 41 | -import com.mumfrey.liteloader.ChatListener; | |
| 42 | -import com.mumfrey.liteloader.InitCompleteListener; | |
| 43 | -import com.mumfrey.liteloader.LiteMod; | |
| 44 | -import com.mumfrey.liteloader.LoginListener; | |
| 45 | -import com.mumfrey.liteloader.PluginChannelListener; | |
| 46 | -import com.mumfrey.liteloader.Tickable; | |
| 18 | +import com.mumfrey.liteloader.*; | |
| 47 | 19 | import com.mumfrey.liteloader.util.ModUtilities; |
| 48 | 20 | import com.mumfrey.liteloader.util.PrivateFields; |
| 21 | +import com.sun.corba.se.impl.ior.ByteBuffer; | |
| 22 | + | |
| 23 | +import net.minecraft.client.Minecraft; | |
| 24 | +import net.minecraft.src.*; | |
| 25 | +import net.minecraft.src.Timer; | |
| 49 | 26 | |
| 50 | 27 | /** |
| 51 | 28 | * LiteLoader is a simple loader which provides tick events to loaded mods |
| 52 | 29 | * |
| 53 | 30 | * @author Adam Mummery-Smith |
| 54 | - * @version 1.3.2_03 | |
| 31 | + * @version 1.4.0 | |
| 55 | 32 | */ |
| 56 | 33 | public final class LiteLoader implements FilenameFilter |
| 57 | 34 | { |
| 58 | 35 | /** |
| 59 | 36 | * Liteloader version |
| 60 | 37 | */ |
| 61 | - private static final String LOADER_VERSION = "1.3.2_03"; | |
| 38 | + private static final String LOADER_VERSION = "1.4.0"; | |
| 39 | + | |
| 40 | + /** | |
| 41 | + * Loader revision, can be used by mods to determine whether the loader is sufficiently up-to-date | |
| 42 | + */ | |
| 43 | + private static final int LOADER_REVISION = 4; | |
| 62 | 44 | |
| 63 | 45 | /** |
| 64 | 46 | * Minecraft versions that we will load mods for, this will be compared |
| 65 | 47 | * against the version.txt value in mod files to prevent outdated mods being |
| 66 | 48 | * loaded!!! |
| 67 | 49 | */ |
| 68 | - private static final String[] SUPPORTED_VERSIONS = { "1.3.1", "1.3.2" }; | |
| 50 | + private static final String[] SUPPORTED_VERSIONS = { "1.4.0", "1.4" }; | |
| 69 | 51 | |
| 70 | 52 | /** |
| 71 | 53 | * LiteLoader is a singleton, this is the singleton instance |
| ... | ... | @@ -91,6 +73,11 @@ public final class LiteLoader implements FilenameFilter |
| 91 | 73 | * Reference to the minecraft timer |
| 92 | 74 | */ |
| 93 | 75 | private Timer minecraftTimer; |
| 76 | + | |
| 77 | + /** | |
| 78 | + * List of loaded mods, for crash reporting | |
| 79 | + */ | |
| 80 | + private String loadedModsList = "none"; | |
| 94 | 81 | |
| 95 | 82 | /** |
| 96 | 83 | * Global list of mods which we have loaded |
| ... | ... | @@ -157,16 +144,44 @@ public final class LiteLoader implements FilenameFilter |
| 157 | 144 | return instance; |
| 158 | 145 | } |
| 159 | 146 | |
| 147 | + /** | |
| 148 | + * Get the LiteLoader logger object | |
| 149 | + * | |
| 150 | + * @return | |
| 151 | + */ | |
| 160 | 152 | public static final Logger getLogger() |
| 161 | 153 | { |
| 162 | 154 | return logger; |
| 163 | 155 | } |
| 164 | 156 | |
| 165 | 157 | /** |
| 158 | + * Get LiteLoader version | |
| 159 | + * | |
| 160 | + * @return | |
| 161 | + */ | |
| 162 | + public static final String getVersion() | |
| 163 | + { | |
| 164 | + return LOADER_VERSION; | |
| 165 | + } | |
| 166 | + | |
| 167 | + /** | |
| 168 | + * Get the loader revision | |
| 169 | + * | |
| 170 | + * @return | |
| 171 | + */ | |
| 172 | + public static final int getRevision() | |
| 173 | + { | |
| 174 | + return LOADER_REVISION; | |
| 175 | + } | |
| 176 | + | |
| 177 | + /** | |
| 166 | 178 | * LiteLoader constructor |
| 167 | 179 | */ |
| 168 | 180 | private LiteLoader() |
| 169 | 181 | { |
| 182 | + // Set up base class overrides | |
| 183 | + prepareClassOverrides(); | |
| 184 | + | |
| 170 | 185 | // Set up loader, initialises any reflection methods needed |
| 171 | 186 | prepareLoader(); |
| 172 | 187 | |
| ... | ... | @@ -183,6 +198,52 @@ public final class LiteLoader implements FilenameFilter |
| 183 | 198 | } |
| 184 | 199 | |
| 185 | 200 | /** |
| 201 | + * | |
| 202 | + */ | |
| 203 | + private void prepareClassOverrides() | |
| 204 | + { | |
| 205 | + registerBaseClassOverride(ModUtilities.getObfuscatedFieldName("net.minecraft.src.CallableJVMFlags", "g"), "g"); | |
| 206 | + } | |
| 207 | + | |
| 208 | + /** | |
| 209 | + * Reads a base class overrride from a resource file | |
| 210 | + * | |
| 211 | + * @param binaryClassName | |
| 212 | + * @param fileName | |
| 213 | + */ | |
| 214 | + private void registerBaseClassOverride(String binaryClassName, String fileName) | |
| 215 | + { | |
| 216 | + try | |
| 217 | + { | |
| 218 | + Method mDefineClass = ClassLoader.class.getDeclaredMethod("defineClass", String.class, byte[].class, int.class, int.class); | |
| 219 | + mDefineClass.setAccessible(true); | |
| 220 | + | |
| 221 | + InputStream resourceInputStream = LiteLoader.class.getResourceAsStream("/classes/" + fileName + ".bin"); | |
| 222 | + | |
| 223 | + if (resourceInputStream != null) | |
| 224 | + { | |
| 225 | + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); | |
| 226 | + | |
| 227 | + for (int readBytes = resourceInputStream.read(); readBytes >= 0; readBytes = resourceInputStream.read()) | |
| 228 | + { | |
| 229 | + outputStream.write(readBytes); | |
| 230 | + } | |
| 231 | + | |
| 232 | + byte[] data = outputStream.toByteArray(); | |
| 233 | + | |
| 234 | + outputStream.close(); | |
| 235 | + resourceInputStream.close(); | |
| 236 | + | |
| 237 | + mDefineClass.invoke(Minecraft.class.getClassLoader(), binaryClassName, data, 0, data.length); | |
| 238 | + } | |
| 239 | + } | |
| 240 | + catch (Throwable th) | |
| 241 | + { | |
| 242 | + th.printStackTrace(); | |
| 243 | + } | |
| 244 | + } | |
| 245 | + | |
| 246 | + /** | |
| 186 | 247 | * Set up reflection methods required by the loader |
| 187 | 248 | */ |
| 188 | 249 | @SuppressWarnings("unchecked") |
| ... | ... | @@ -205,7 +266,7 @@ public final class LiteLoader implements FilenameFilter |
| 205 | 266 | } |
| 206 | 267 | catch (Exception ex) |
| 207 | 268 | { |
| 208 | - ConsoleLogManager.func_73699_a(); | |
| 269 | + ConsoleLogManager.init(); | |
| 209 | 270 | minecraftLogFormatter = ConsoleLogManager.loggerLogManager.getHandlers()[0].getFormatter(); |
| 210 | 271 | } |
| 211 | 272 | |
| ... | ... | @@ -250,6 +311,16 @@ public final class LiteLoader implements FilenameFilter |
| 250 | 311 | } |
| 251 | 312 | |
| 252 | 313 | /** |
| 314 | + * Used for crash reporting | |
| 315 | + * | |
| 316 | + * @return List of loaded mods as a string | |
| 317 | + */ | |
| 318 | + public String getLoadedModsList() | |
| 319 | + { | |
| 320 | + return loadedModsList; | |
| 321 | + } | |
| 322 | + | |
| 323 | + /** | |
| 253 | 324 | * Enumerate the java class path and "mods" folder to find mod classes, then load the classes |
| 254 | 325 | */ |
| 255 | 326 | private void prepareMods() |
| ... | ... | @@ -425,6 +496,9 @@ public final class LiteLoader implements FilenameFilter |
| 425 | 496 | */ |
| 426 | 497 | private void initMods() |
| 427 | 498 | { |
| 499 | + loadedModsList = ""; | |
| 500 | + int loadedModsCount = 0; | |
| 501 | + | |
| 428 | 502 | for (Iterator<LiteMod> iter = mods.iterator(); iter.hasNext();) |
| 429 | 503 | { |
| 430 | 504 | LiteMod mod = iter.next(); |
| ... | ... | @@ -464,6 +538,9 @@ public final class LiteLoader implements FilenameFilter |
| 464 | 538 | { |
| 465 | 539 | pluginChannelListeners.add((PluginChannelListener)mod); |
| 466 | 540 | } |
| 541 | + | |
| 542 | + loadedModsList += String.format("\n - %s version %s", mod.getName(), mod.getVersion()); | |
| 543 | + loadedModsCount++; | |
| 467 | 544 | } |
| 468 | 545 | catch (Throwable th) |
| 469 | 546 | { |
| ... | ... | @@ -471,6 +548,8 @@ public final class LiteLoader implements FilenameFilter |
| 471 | 548 | iter.remove(); |
| 472 | 549 | } |
| 473 | 550 | } |
| 551 | + | |
| 552 | + loadedModsList = String.format("%s loaded mod(s)%s", loadedModsCount, loadedModsList); | |
| 474 | 553 | } |
| 475 | 554 | |
| 476 | 555 | /** |
| ... | ... | @@ -633,6 +712,7 @@ public final class LiteLoader implements FilenameFilter |
| 633 | 712 | * @param classes |
| 634 | 713 | * @param className |
| 635 | 714 | */ |
| 715 | + @SuppressWarnings("unchecked") | |
| 636 | 716 | private static void checkAndAddClass(ClassLoader classloader, Class superClass, LinkedList<Class> classes, String className) |
| 637 | 717 | { |
| 638 | 718 | if (className.indexOf('$') > -1) |
| ... | ... | @@ -714,14 +794,15 @@ public final class LiteLoader implements FilenameFilter |
| 714 | 794 | if (tick || minecraftTimer == null) |
| 715 | 795 | { |
| 716 | 796 | minecraftTimer = PrivateFields.minecraftTimer.Get(minecraft); |
| 797 | + } | |
| 717 | 798 | |
| 718 | - // Hooray, we got the timer reference | |
| 719 | - if (minecraftTimer != null) | |
| 720 | - { | |
| 721 | - partialTicks = minecraftTimer.elapsedPartialTicks; | |
| 722 | - } | |
| 799 | + // Hooray, we got the timer reference | |
| 800 | + if (minecraftTimer != null) | |
| 801 | + { | |
| 802 | + partialTicks = minecraftTimer.elapsedPartialTicks; | |
| 803 | + tick = minecraftTimer.elapsedTicks > 0; | |
| 723 | 804 | } |
| 724 | - | |
| 805 | + | |
| 725 | 806 | // Flag indicates whether we are in game at the moment |
| 726 | 807 | boolean inGame = minecraft.renderViewEntity != null && minecraft.renderViewEntity.worldObj != null; |
| 727 | 808 | |
| ... | ... | @@ -845,20 +926,4 @@ public final class LiteLoader implements FilenameFilter |
| 845 | 926 | sendPluginChannelMessage("REGISTER", registrationData); |
| 846 | 927 | } |
| 847 | 928 | } |
| 848 | -} | |
| 849 | - | |
| 850 | - | |
| 851 | - | |
| 852 | - | |
| 853 | - | |
| 854 | - | |
| 855 | - | |
| 856 | - | |
| 857 | - | |
| 858 | - | |
| 859 | - | |
| 860 | - | |
| 861 | - | |
| 862 | - | |
| 863 | - | |
| 864 | - | |
| 929 | +} | |
| 865 | 930 | \ No newline at end of file | ... | ... |
java/com/mumfrey/liteloader/core/LiteLoaderHook.java
java/com/mumfrey/liteloader/util/ModUtilities.java
| 1 | 1 | package com.mumfrey.liteloader.util; |
| 2 | 2 | |
| 3 | -import java.lang.reflect.Field; | |
| 4 | 3 | import java.util.Arrays; |
| 5 | 4 | import java.util.LinkedList; |
| 6 | 5 | import java.util.Map; |
| 7 | 6 | |
| 8 | -import net.minecraft.client.Minecraft; | |
| 9 | -import net.minecraft.src.IntHashMap; | |
| 10 | -import net.minecraft.src.KeyBinding; | |
| 11 | -import net.minecraft.src.Packet; | |
| 12 | -import net.minecraft.src.Packet250CustomPayload; | |
| 13 | -import net.minecraft.src.Render; | |
| 14 | -import net.minecraft.src.RenderManager; | |
| 15 | -import net.minecraft.src.Tessellator; | |
| 16 | - | |
| 17 | 7 | import com.mumfrey.liteloader.core.LiteLoader; |
| 18 | 8 | |
| 9 | +import net.minecraft.client.Minecraft; | |
| 10 | +import net.minecraft.src.*; | |
| 11 | + | |
| 19 | 12 | public abstract class ModUtilities |
| 20 | 13 | { |
| 21 | 14 | /** |
| ... | ... | @@ -24,9 +17,10 @@ public abstract class ModUtilities |
| 24 | 17 | * @param entityClass |
| 25 | 18 | * @param renderer |
| 26 | 19 | */ |
| 27 | - public static void addRenderer(Class entityClass, Render renderer) | |
| 20 | + @SuppressWarnings("unchecked") | |
| 21 | + public static void addRenderer(Class<? extends Entity> entityClass, Render renderer) | |
| 28 | 22 | { |
| 29 | - Map entityRenderMap = PrivateFields.entityRenderMap.Get(RenderManager.instance); | |
| 23 | + Map<Class<? extends Entity>, Render> entityRenderMap = PrivateFields.entityRenderMap.Get(RenderManager.instance); | |
| 30 | 24 | entityRenderMap.put(entityClass, renderer); |
| 31 | 25 | renderer.setRenderManager(RenderManager.instance); |
| 32 | 26 | } |
| ... | ... | @@ -37,13 +31,14 @@ public abstract class ModUtilities |
| 37 | 31 | * @param packetId |
| 38 | 32 | * @param newPacket |
| 39 | 33 | */ |
| 40 | - public static boolean registerPacketOverride(int packetId, Class newPacket) | |
| 34 | + @SuppressWarnings("unchecked") | |
| 35 | + public static boolean registerPacketOverride(int packetId, Class<? extends Packet> newPacket) | |
| 41 | 36 | { |
| 42 | 37 | try |
| 43 | 38 | { |
| 44 | 39 | IntHashMap packetIdToClassMap = Packet.packetIdToClassMap; |
| 45 | 40 | PrivateFields.StaticFields.packetClassToIdMap.Get(); |
| 46 | - Map packetClassToIdMap = PrivateFields.StaticFields.packetClassToIdMap.Get(); | |
| 41 | + Map<Class<? extends Packet>, Integer> packetClassToIdMap = PrivateFields.StaticFields.packetClassToIdMap.Get(); | |
| 47 | 42 | |
| 48 | 43 | packetIdToClassMap.removeObject(packetId); |
| 49 | 44 | packetIdToClassMap.addKey(packetId, newPacket); |
| ... | ... | @@ -111,6 +106,7 @@ public abstract class ModUtilities |
| 111 | 106 | { |
| 112 | 107 | keyBindings.add(newBinding); |
| 113 | 108 | mc.gameSettings.keyBindings = keyBindings.toArray(new KeyBinding[0]); |
| 109 | + mc.gameSettings.loadOptions(); | |
| 114 | 110 | } |
| 115 | 111 | } |
| 116 | 112 | ... | ... |
java/com/mumfrey/liteloader/util/PrivateFields.java
| 1 | 1 | package com.mumfrey.liteloader.util; |
| 2 | 2 | |
| 3 | -import java.io.File; | |
| 4 | 3 | import java.lang.reflect.Field; |
| 5 | 4 | import java.lang.reflect.Modifier; |
| 6 | 5 | import java.util.Map; |
| 7 | -import java.util.Properties; | |
| 8 | -import java.util.zip.ZipFile; | |
| 9 | 6 | |
| 10 | 7 | import net.minecraft.client.Minecraft; |
| 11 | -import net.minecraft.src.GuiButton; | |
| 12 | -import net.minecraft.src.GuiIngame; | |
| 13 | -import net.minecraft.src.GuiScreen; | |
| 14 | -import net.minecraft.src.GuiSlot; | |
| 15 | -import net.minecraft.src.GuiTexturePacks; | |
| 16 | -import net.minecraft.src.NetClientHandler; | |
| 17 | -import net.minecraft.src.NetworkManager; | |
| 18 | -import net.minecraft.src.Packet; | |
| 19 | -import net.minecraft.src.Profiler; | |
| 20 | -import net.minecraft.src.RenderEngine; | |
| 21 | -import net.minecraft.src.RenderGlobal; | |
| 22 | -import net.minecraft.src.RenderManager; | |
| 23 | -import net.minecraft.src.SoundManager; | |
| 24 | -import net.minecraft.src.SoundPool; | |
| 25 | -import net.minecraft.src.StringTranslate; | |
| 26 | -import net.minecraft.src.TexturePackCustom; | |
| 27 | -import net.minecraft.src.TexturePackImplementation; | |
| 28 | -import net.minecraft.src.TexturePackList; | |
| 29 | -import net.minecraft.src.TileEntity; | |
| 30 | -import net.minecraft.src.Timer; | |
| 31 | -import net.minecraft.src.WorldInfo; | |
| 32 | -import net.minecraft.src.WorldRenderer; | |
| 33 | -import net.minecraft.src.WorldType; | |
| 8 | +import net.minecraft.src.*; | |
| 34 | 9 | |
| 35 | 10 | /** |
| 36 | 11 | * Wrapper for obf/mcp reflection-accessed private fields, mainly added to centralise the locations I have to update the obfuscated field names | ... | ... |
java/net/minecraft/src/CallableJVMFlags.java
0 โ 100644
| 1 | +package net.minecraft.src; | |
| 2 | + | |
| 3 | +import java.lang.management.ManagementFactory; | |
| 4 | +import java.lang.management.RuntimeMXBean; | |
| 5 | +import java.util.Iterator; | |
| 6 | +import java.util.List; | |
| 7 | +import java.util.concurrent.Callable; | |
| 8 | + | |
| 9 | +import com.mumfrey.liteloader.core.CallableLiteLoaderMods; | |
| 10 | + | |
| 11 | +class CallableJVMFlags implements Callable | |
| 12 | +{ | |
| 13 | + /** Gets additional Java Enviroment info for Crash Report. */ | |
| 14 | + final CrashReport crashReportJVMFlags; | |
| 15 | + | |
| 16 | + CallableJVMFlags(CrashReport par1CrashReport) | |
| 17 | + { | |
| 18 | + this.crashReportJVMFlags = par1CrashReport; | |
| 19 | + par1CrashReport.addCrashSectionCallable("LiteLoader Mods", new CallableLiteLoaderMods(par1CrashReport)); | |
| 20 | + } | |
| 21 | + | |
| 22 | + public String func_71487_a() | |
| 23 | + { | |
| 24 | + RuntimeMXBean var1 = ManagementFactory.getRuntimeMXBean(); | |
| 25 | + List var2 = var1.getInputArguments(); | |
| 26 | + int var3 = 0; | |
| 27 | + StringBuilder var4 = new StringBuilder(); | |
| 28 | + Iterator var5 = var2.iterator(); | |
| 29 | + | |
| 30 | + while (var5.hasNext()) | |
| 31 | + { | |
| 32 | + String var6 = (String)var5.next(); | |
| 33 | + | |
| 34 | + if (var6.startsWith("-X")) | |
| 35 | + { | |
| 36 | + if (var3++ > 0) | |
| 37 | + { | |
| 38 | + var4.append(" "); | |
| 39 | + } | |
| 40 | + | |
| 41 | + var4.append(var6); | |
| 42 | + } | |
| 43 | + } | |
| 44 | + | |
| 45 | + return String.format("%d total; %s", new Object[] {Integer.valueOf(var3), var4.toString()}); | |
| 46 | + } | |
| 47 | + | |
| 48 | + @Override | |
| 49 | + public Object call() | |
| 50 | + { | |
| 51 | + return this.func_71487_a(); | |
| 52 | + } | |
| 53 | +} | ... | ... |