Commit c92c91ea81534b1f1545d7d4ccbfba6a8e28f8ef
1 parent
14886082
Liteloader 1.4.0
Showing
10 changed files
with
389 additions
and
113 deletions
.classpath
1 | <?xml version="1.0" encoding="UTF-8"?> | 1 | <?xml version="1.0" encoding="UTF-8"?> |
2 | <classpath> | 2 | <classpath> |
3 | <classpathentry kind="src" path="java"/> | 3 | <classpathentry kind="src" path="java"/> |
4 | + <classpathentry kind="src" path="res"/> | ||
4 | <classpathentry combineaccessrules="false" kind="src" path="/Client"/> | 5 | <classpathentry combineaccessrules="false" kind="src" path="/Client"/> |
5 | <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/jre6"/> | 6 | <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/jre6"/> |
6 | <classpathentry kind="lib" path="jars/bin/jinput.jar"> | 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,16 +3,12 @@ package com.mumfrey.liteloader.core; | ||
3 | import java.io.DataInputStream; | 3 | import java.io.DataInputStream; |
4 | import java.io.DataOutputStream; | 4 | import java.io.DataOutputStream; |
5 | import java.io.IOException; | 5 | import java.io.IOException; |
6 | -import java.lang.reflect.Constructor; | ||
7 | import java.util.Map; | 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 | import com.mumfrey.liteloader.util.PrivateFields; | 8 | import com.mumfrey.liteloader.util.PrivateFields; |
15 | 9 | ||
10 | +import net.minecraft.src.*; | ||
11 | + | ||
16 | /** | 12 | /** |
17 | * Proxy packet which we will register in place of the original chat packet. The class will proxy the function calls | 13 | * Proxy packet which we will register in place of the original chat packet. The class will proxy the function calls |
18 | * through to the replaced class via reflection if the original (replaced) class is NOT the basic Packet3Chat (this | 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,16 +3,11 @@ package com.mumfrey.liteloader.core; | ||
3 | import java.io.DataInputStream; | 3 | import java.io.DataInputStream; |
4 | import java.io.DataOutputStream; | 4 | import java.io.DataOutputStream; |
5 | import java.io.IOException; | 5 | import java.io.IOException; |
6 | -import java.lang.reflect.Constructor; | ||
7 | import java.util.Map; | 6 | import java.util.Map; |
8 | 7 | ||
9 | import com.mumfrey.liteloader.util.PrivateFields; | 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 | public class HookPluginChannels extends Packet250CustomPayload | 12 | public class HookPluginChannels extends Packet250CustomPayload |
18 | { | 13 | { |
java/com/mumfrey/liteloader/core/LiteLoader.java
1 | package com.mumfrey.liteloader.core; | 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 | import java.lang.reflect.Constructor; | 4 | import java.lang.reflect.Constructor; |
13 | import java.lang.reflect.Method; | 5 | import java.lang.reflect.Method; |
14 | import java.net.URL; | 6 | import java.net.URL; |
15 | import java.net.URLClassLoader; | 7 | import java.net.URLClassLoader; |
8 | +import java.nio.CharBuffer; | ||
16 | import java.nio.charset.Charset; | 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 | import java.util.logging.Formatter; | 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 | import java.util.zip.ZipEntry; | 14 | import java.util.zip.ZipEntry; |
29 | import java.util.zip.ZipFile; | 15 | import java.util.zip.ZipFile; |
30 | import java.util.zip.ZipInputStream; | 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 | import com.mumfrey.liteloader.util.ModUtilities; | 19 | import com.mumfrey.liteloader.util.ModUtilities; |
48 | import com.mumfrey.liteloader.util.PrivateFields; | 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 | * LiteLoader is a simple loader which provides tick events to loaded mods | 28 | * LiteLoader is a simple loader which provides tick events to loaded mods |
52 | * | 29 | * |
53 | * @author Adam Mummery-Smith | 30 | * @author Adam Mummery-Smith |
54 | - * @version 1.3.2_03 | 31 | + * @version 1.4.0 |
55 | */ | 32 | */ |
56 | public final class LiteLoader implements FilenameFilter | 33 | public final class LiteLoader implements FilenameFilter |
57 | { | 34 | { |
58 | /** | 35 | /** |
59 | * Liteloader version | 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 | * Minecraft versions that we will load mods for, this will be compared | 46 | * Minecraft versions that we will load mods for, this will be compared |
65 | * against the version.txt value in mod files to prevent outdated mods being | 47 | * against the version.txt value in mod files to prevent outdated mods being |
66 | * loaded!!! | 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 | * LiteLoader is a singleton, this is the singleton instance | 53 | * LiteLoader is a singleton, this is the singleton instance |
@@ -91,6 +73,11 @@ public final class LiteLoader implements FilenameFilter | @@ -91,6 +73,11 @@ public final class LiteLoader implements FilenameFilter | ||
91 | * Reference to the minecraft timer | 73 | * Reference to the minecraft timer |
92 | */ | 74 | */ |
93 | private Timer minecraftTimer; | 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 | * Global list of mods which we have loaded | 83 | * Global list of mods which we have loaded |
@@ -157,16 +144,44 @@ public final class LiteLoader implements FilenameFilter | @@ -157,16 +144,44 @@ public final class LiteLoader implements FilenameFilter | ||
157 | return instance; | 144 | return instance; |
158 | } | 145 | } |
159 | 146 | ||
147 | + /** | ||
148 | + * Get the LiteLoader logger object | ||
149 | + * | ||
150 | + * @return | ||
151 | + */ | ||
160 | public static final Logger getLogger() | 152 | public static final Logger getLogger() |
161 | { | 153 | { |
162 | return logger; | 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 | * LiteLoader constructor | 178 | * LiteLoader constructor |
167 | */ | 179 | */ |
168 | private LiteLoader() | 180 | private LiteLoader() |
169 | { | 181 | { |
182 | + // Set up base class overrides | ||
183 | + prepareClassOverrides(); | ||
184 | + | ||
170 | // Set up loader, initialises any reflection methods needed | 185 | // Set up loader, initialises any reflection methods needed |
171 | prepareLoader(); | 186 | prepareLoader(); |
172 | 187 | ||
@@ -183,6 +198,52 @@ public final class LiteLoader implements FilenameFilter | @@ -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 | * Set up reflection methods required by the loader | 247 | * Set up reflection methods required by the loader |
187 | */ | 248 | */ |
188 | @SuppressWarnings("unchecked") | 249 | @SuppressWarnings("unchecked") |
@@ -205,7 +266,7 @@ public final class LiteLoader implements FilenameFilter | @@ -205,7 +266,7 @@ public final class LiteLoader implements FilenameFilter | ||
205 | } | 266 | } |
206 | catch (Exception ex) | 267 | catch (Exception ex) |
207 | { | 268 | { |
208 | - ConsoleLogManager.func_73699_a(); | 269 | + ConsoleLogManager.init(); |
209 | minecraftLogFormatter = ConsoleLogManager.loggerLogManager.getHandlers()[0].getFormatter(); | 270 | minecraftLogFormatter = ConsoleLogManager.loggerLogManager.getHandlers()[0].getFormatter(); |
210 | } | 271 | } |
211 | 272 | ||
@@ -250,6 +311,16 @@ public final class LiteLoader implements FilenameFilter | @@ -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 | * Enumerate the java class path and "mods" folder to find mod classes, then load the classes | 324 | * Enumerate the java class path and "mods" folder to find mod classes, then load the classes |
254 | */ | 325 | */ |
255 | private void prepareMods() | 326 | private void prepareMods() |
@@ -425,6 +496,9 @@ public final class LiteLoader implements FilenameFilter | @@ -425,6 +496,9 @@ public final class LiteLoader implements FilenameFilter | ||
425 | */ | 496 | */ |
426 | private void initMods() | 497 | private void initMods() |
427 | { | 498 | { |
499 | + loadedModsList = ""; | ||
500 | + int loadedModsCount = 0; | ||
501 | + | ||
428 | for (Iterator<LiteMod> iter = mods.iterator(); iter.hasNext();) | 502 | for (Iterator<LiteMod> iter = mods.iterator(); iter.hasNext();) |
429 | { | 503 | { |
430 | LiteMod mod = iter.next(); | 504 | LiteMod mod = iter.next(); |
@@ -464,6 +538,9 @@ public final class LiteLoader implements FilenameFilter | @@ -464,6 +538,9 @@ public final class LiteLoader implements FilenameFilter | ||
464 | { | 538 | { |
465 | pluginChannelListeners.add((PluginChannelListener)mod); | 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 | catch (Throwable th) | 545 | catch (Throwable th) |
469 | { | 546 | { |
@@ -471,6 +548,8 @@ public final class LiteLoader implements FilenameFilter | @@ -471,6 +548,8 @@ public final class LiteLoader implements FilenameFilter | ||
471 | iter.remove(); | 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,6 +712,7 @@ public final class LiteLoader implements FilenameFilter | ||
633 | * @param classes | 712 | * @param classes |
634 | * @param className | 713 | * @param className |
635 | */ | 714 | */ |
715 | + @SuppressWarnings("unchecked") | ||
636 | private static void checkAndAddClass(ClassLoader classloader, Class superClass, LinkedList<Class> classes, String className) | 716 | private static void checkAndAddClass(ClassLoader classloader, Class superClass, LinkedList<Class> classes, String className) |
637 | { | 717 | { |
638 | if (className.indexOf('$') > -1) | 718 | if (className.indexOf('$') > -1) |
@@ -714,14 +794,15 @@ public final class LiteLoader implements FilenameFilter | @@ -714,14 +794,15 @@ public final class LiteLoader implements FilenameFilter | ||
714 | if (tick || minecraftTimer == null) | 794 | if (tick || minecraftTimer == null) |
715 | { | 795 | { |
716 | minecraftTimer = PrivateFields.minecraftTimer.Get(minecraft); | 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 | // Flag indicates whether we are in game at the moment | 806 | // Flag indicates whether we are in game at the moment |
726 | boolean inGame = minecraft.renderViewEntity != null && minecraft.renderViewEntity.worldObj != null; | 807 | boolean inGame = minecraft.renderViewEntity != null && minecraft.renderViewEntity.worldObj != null; |
727 | 808 | ||
@@ -845,20 +926,4 @@ public final class LiteLoader implements FilenameFilter | @@ -845,20 +926,4 @@ public final class LiteLoader implements FilenameFilter | ||
845 | sendPluginChannelMessage("REGISTER", registrationData); | 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 | \ No newline at end of file | 930 | \ No newline at end of file |
java/com/mumfrey/liteloader/core/LiteLoaderHook.java
@@ -105,6 +105,7 @@ public class LiteLoaderHook extends Profiler | @@ -105,6 +105,7 @@ public class LiteLoaderHook extends Profiler | ||
105 | 105 | ||
106 | if (config != null) | 106 | if (config != null) |
107 | { | 107 | { |
108 | + @SuppressWarnings("unchecked") | ||
108 | Method getVersion = config.getDeclaredMethod("getVersion"); | 109 | Method getVersion = config.getDeclaredMethod("getVersion"); |
109 | 110 | ||
110 | if (getVersion != null) | 111 | if (getVersion != null) |
java/com/mumfrey/liteloader/util/ModUtilities.java
1 | package com.mumfrey.liteloader.util; | 1 | package com.mumfrey.liteloader.util; |
2 | 2 | ||
3 | -import java.lang.reflect.Field; | ||
4 | import java.util.Arrays; | 3 | import java.util.Arrays; |
5 | import java.util.LinkedList; | 4 | import java.util.LinkedList; |
6 | import java.util.Map; | 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 | import com.mumfrey.liteloader.core.LiteLoader; | 7 | import com.mumfrey.liteloader.core.LiteLoader; |
18 | 8 | ||
9 | +import net.minecraft.client.Minecraft; | ||
10 | +import net.minecraft.src.*; | ||
11 | + | ||
19 | public abstract class ModUtilities | 12 | public abstract class ModUtilities |
20 | { | 13 | { |
21 | /** | 14 | /** |
@@ -24,9 +17,10 @@ public abstract class ModUtilities | @@ -24,9 +17,10 @@ public abstract class ModUtilities | ||
24 | * @param entityClass | 17 | * @param entityClass |
25 | * @param renderer | 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 | entityRenderMap.put(entityClass, renderer); | 24 | entityRenderMap.put(entityClass, renderer); |
31 | renderer.setRenderManager(RenderManager.instance); | 25 | renderer.setRenderManager(RenderManager.instance); |
32 | } | 26 | } |
@@ -37,13 +31,14 @@ public abstract class ModUtilities | @@ -37,13 +31,14 @@ public abstract class ModUtilities | ||
37 | * @param packetId | 31 | * @param packetId |
38 | * @param newPacket | 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 | try | 37 | try |
43 | { | 38 | { |
44 | IntHashMap packetIdToClassMap = Packet.packetIdToClassMap; | 39 | IntHashMap packetIdToClassMap = Packet.packetIdToClassMap; |
45 | PrivateFields.StaticFields.packetClassToIdMap.Get(); | 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 | packetIdToClassMap.removeObject(packetId); | 43 | packetIdToClassMap.removeObject(packetId); |
49 | packetIdToClassMap.addKey(packetId, newPacket); | 44 | packetIdToClassMap.addKey(packetId, newPacket); |
@@ -111,6 +106,7 @@ public abstract class ModUtilities | @@ -111,6 +106,7 @@ public abstract class ModUtilities | ||
111 | { | 106 | { |
112 | keyBindings.add(newBinding); | 107 | keyBindings.add(newBinding); |
113 | mc.gameSettings.keyBindings = keyBindings.toArray(new KeyBinding[0]); | 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 | package com.mumfrey.liteloader.util; | 1 | package com.mumfrey.liteloader.util; |
2 | 2 | ||
3 | -import java.io.File; | ||
4 | import java.lang.reflect.Field; | 3 | import java.lang.reflect.Field; |
5 | import java.lang.reflect.Modifier; | 4 | import java.lang.reflect.Modifier; |
6 | import java.util.Map; | 5 | import java.util.Map; |
7 | -import java.util.Properties; | ||
8 | -import java.util.zip.ZipFile; | ||
9 | 6 | ||
10 | import net.minecraft.client.Minecraft; | 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 | * Wrapper for obf/mcp reflection-accessed private fields, mainly added to centralise the locations I have to update the obfuscated field names | 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 | +} |