Commit 10400e12bd4cb12e59e3361cb43e748c0307261a
1 parent
7e6adb61
LiteLoader 1.5_01
+ Compatibility for FML's new runtime deobfuscation
Showing
3 changed files
with
33 additions
and
14 deletions
java/com/mumfrey/liteloader/core/LiteLoader.java
... | ... | @@ -65,7 +65,7 @@ public final class LiteLoader implements FilenameFilter |
65 | 65 | /** |
66 | 66 | * Liteloader version |
67 | 67 | */ |
68 | - private static final String LOADER_VERSION = "1.5"; | |
68 | + private static final String LOADER_VERSION = "1.5_01"; | |
69 | 69 | |
70 | 70 | /** |
71 | 71 | * Loader revision, can be used by mods to determine whether the loader is sufficiently up-to-date |
... | ... | @@ -336,7 +336,7 @@ public final class LiteLoader implements FilenameFilter |
336 | 336 | */ |
337 | 337 | private void prepareClassOverrides() |
338 | 338 | { |
339 | - this.registerBaseClassOverride(ModUtilities.getObfuscatedFieldName("net.minecraft.src.CallableJVMFlags", "h"), "h"); | |
339 | + this.registerBaseClassOverride(ModUtilities.getObfuscatedFieldName("net.minecraft.src.CallableJVMFlags", "h", "h"), "h"); | |
340 | 340 | } |
341 | 341 | |
342 | 342 | /** | ... | ... |
java/com/mumfrey/liteloader/util/ModUtilities.java
... | ... | @@ -8,14 +8,29 @@ import java.util.Set; |
8 | 8 | |
9 | 9 | import com.mumfrey.liteloader.core.LiteLoader; |
10 | 10 | |
11 | +import net.minecraft.client.ClientBrandRetriever; | |
11 | 12 | import net.minecraft.client.Minecraft; |
12 | 13 | import net.minecraft.src.*; |
13 | 14 | |
14 | 15 | public abstract class ModUtilities |
15 | 16 | { |
17 | + /** | |
18 | + * Collection of packets we have already overridden, so that duplicate registrations can generate a warning | |
19 | + */ | |
16 | 20 | private static Set<Integer> overriddenPackets = new HashSet<Integer>(); |
17 | 21 | |
18 | 22 | /** |
23 | + * True if FML is being used, in which case we use searge names instead of raw field/method names | |
24 | + */ | |
25 | + private static boolean forgeModLoader = false; | |
26 | + | |
27 | + static | |
28 | + { | |
29 | + // Check for FML | |
30 | + forgeModLoader = ClientBrandRetriever.getClientModName().contains("fml"); | |
31 | + } | |
32 | + | |
33 | + /** | |
19 | 34 | * Add a renderer map entry for the specified entity class |
20 | 35 | * |
21 | 36 | * @param entityClass |
... | ... | @@ -92,9 +107,10 @@ public abstract class ModUtilities |
92 | 107 | * @param fieldName Name of field to get, returned unmodified if in debug mode |
93 | 108 | * @return Obfuscated field name if present |
94 | 109 | */ |
95 | - public static String getObfuscatedFieldName(String fieldName, String obfuscatedFieldName) | |
110 | + public static String getObfuscatedFieldName(String fieldName, String obfuscatedFieldName, String seargeFieldName) | |
96 | 111 | { |
97 | - return (!net.minecraft.src.Tessellator.instance.getClass().getSimpleName().equals("Tessellator")) ? obfuscatedFieldName : fieldName; | |
112 | + if (forgeModLoader) return seargeFieldName; | |
113 | + return !net.minecraft.src.Tessellator.instance.getClass().getSimpleName().equals("Tessellator") ? obfuscatedFieldName : fieldName; | |
98 | 114 | } |
99 | 115 | |
100 | 116 | /** | ... | ... |
java/com/mumfrey/liteloader/util/PrivateFields.java
... | ... | @@ -33,6 +33,8 @@ public class PrivateFields<P, T> |
33 | 33 | */ |
34 | 34 | public final String name; |
35 | 35 | |
36 | + public final String seargeName; | |
37 | + | |
36 | 38 | /** |
37 | 39 | * Name used to access the field, determined at init |
38 | 40 | */ |
... | ... | @@ -45,13 +47,14 @@ public class PrivateFields<P, T> |
45 | 47 | * @param mcpName |
46 | 48 | * @param name |
47 | 49 | */ |
48 | - private PrivateFields(Class<P> owner, String mcpName, String name) | |
50 | + private PrivateFields(Class<P> owner, String mcpName, String name, String seargeName) | |
49 | 51 | { |
50 | 52 | this.parentClass = owner; |
51 | - this.mcpName = mcpName; | |
52 | - this.name = name; | |
53 | + this.mcpName = mcpName; | |
54 | + this.name = name; | |
55 | + this.seargeName = seargeName; | |
53 | 56 | |
54 | - this.fieldName = ModUtilities.getObfuscatedFieldName(mcpName, name); | |
57 | + this.fieldName = ModUtilities.getObfuscatedFieldName(mcpName, name, seargeName); | |
55 | 58 | } |
56 | 59 | |
57 | 60 | /** |
... | ... | @@ -127,16 +130,16 @@ public class PrivateFields<P, T> |
127 | 130 | */ |
128 | 131 | public static final class StaticFields<P, T> extends PrivateFields<P, T> |
129 | 132 | { |
130 | - public StaticFields(Class<P> owner, String mcpName, String name) { super(owner, mcpName, name); } | |
133 | + public StaticFields(Class<P> owner, String mcpName, String name, String fmlName) { super(owner, mcpName, name, fmlName); } | |
131 | 134 | public T get() { return get(null); } |
132 | 135 | public void set(T value) { set(null, value); } |
133 | 136 | |
134 | - public static final StaticFields<Packet, Map> packetClassToIdMap = new StaticFields<Packet, Map> (Packet.class, "packetClassToIdMap", "a"); // Packet/packetClassToIdMap | |
135 | - public static final StaticFields<TileEntity, Map> tileEntityNameToClassMap = new StaticFields<TileEntity, Map> (TileEntity.class, "nameToClassMap", "a"); // TileEntity/nameToClassMap | |
137 | + public static final StaticFields<Packet, Map> packetClassToIdMap = new StaticFields<Packet, Map> (Packet.class, "packetClassToIdMap", "a", "field_73291_a"); // Packet/packetClassToIdMap | |
138 | + public static final StaticFields<TileEntity, Map> tileEntityNameToClassMap = new StaticFields<TileEntity, Map> (TileEntity.class, "nameToClassMap", "a", "field_70326_a"); // TileEntity/nameToClassMap | |
136 | 139 | } |
137 | 140 | |
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 | |
141 | + public static final PrivateFields<Minecraft, Timer> minecraftTimer = new PrivateFields<Minecraft, Timer> (Minecraft.class, "timer", "V", "field_71428_T"); // Minecraft/timer | |
142 | + public static final PrivateFields<Minecraft, Profiler> minecraftProfiler = new PrivateFields<Minecraft, Profiler> (Minecraft.class, "mcProfiler", "J", "field_71424_I"); // Minecraft/mcProfiler | |
143 | + public static final PrivateFields<RenderManager, Map> entityRenderMap = new PrivateFields<RenderManager, Map> (RenderManager.class, "entityRenderMap", "q", "field_78729_o"); // RenderManager/entityRenderMap | |
141 | 144 | } |
142 | 145 | ... | ... |