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 | +} | ... | ... |