Commit c35f486df2c03c449caaf6315dcc566bd476603f
1 parent
89fce7f9
adding new overlays, fixing minor bugs in AccessorTransformer
Showing
10 changed files
with
107 additions
and
21 deletions
debug/obfuscation.properties
@@ -15,6 +15,9 @@ field_71425_J=running | @@ -15,6 +15,9 @@ field_71425_J=running | ||
15 | field_110449_ao=defaultResourcePacks | 15 | field_110449_ao=defaultResourcePacks |
16 | field_71475_ae=serverName | 16 | field_71475_ae=serverName |
17 | field_71477_af=serverPort | 17 | field_71477_af=serverPort |
18 | +field_147712_ad=shaderResourceLocations | ||
19 | +field_147713_ae=shaderIndex | ||
20 | +field_175083_ad=useShader | ||
18 | func_148833_a=processPacket | 21 | func_148833_a=processPacket |
19 | func_71411_J=runGameLoop | 22 | func_71411_J=runGameLoop |
20 | func_71407_l=runTick | 23 | func_71407_l=runTick |
@@ -45,4 +48,8 @@ func_148260_a=saveScreenshot | @@ -45,4 +48,8 @@ func_148260_a=saveScreenshot | ||
45 | func_148822_b=isFramebufferEnabled | 48 | func_148822_b=isFramebufferEnabled |
46 | func_147939_a=doRenderEntity | 49 | func_147939_a=doRenderEntity |
47 | func_76986_a=doRender | 50 | func_76986_a=doRender |
48 | -func_71370_a=resize | ||
49 | \ No newline at end of file | 51 | \ No newline at end of file |
52 | +func_71370_a=resize | ||
53 | +func_175069_a=loadShader | ||
54 | +func_78481_a=getFOVModifier | ||
55 | +func_78479_a=setupCameraTransform | ||
56 | +func_147693_a=loadSoundResource | ||
50 | \ No newline at end of file | 57 | \ No newline at end of file |
java/client/com/mumfrey/liteloader/client/overlays/IEntityRenderer.java
0 → 100644
1 | +package com.mumfrey.liteloader.client.overlays; | ||
2 | + | ||
3 | +import net.minecraft.util.ResourceLocation; | ||
4 | + | ||
5 | +import com.mumfrey.liteloader.transformers.access.Accessor; | ||
6 | +import com.mumfrey.liteloader.transformers.access.Invoker; | ||
7 | + | ||
8 | +/** | ||
9 | + * Adapter for EntityRenderer to expose some private functionality | ||
10 | + * | ||
11 | + * @author Adam Mummery-Smith | ||
12 | + */ | ||
13 | +@Accessor("EntityRenderer") | ||
14 | +public interface IEntityRenderer | ||
15 | +{ | ||
16 | + @Accessor("useShader") public abstract boolean getUseShader(); | ||
17 | + @Accessor("useShader") public abstract void setUseShader(boolean useShader); | ||
18 | + | ||
19 | + @Accessor("shaderResourceLocations") public abstract ResourceLocation[] getShaders(); | ||
20 | + | ||
21 | + @Accessor("shaderIndex") public abstract int getShaderIndex(); | ||
22 | + @Accessor("shaderIndex") public abstract void setShaderIndex(int shaderIndex); | ||
23 | + | ||
24 | + @Invoker("loadShader") public abstract void selectShader(ResourceLocation shader); | ||
25 | + | ||
26 | + @Invoker("getFOVModifier") public abstract float getFOV(float partialTicks, boolean armFOV); | ||
27 | + | ||
28 | + @Invoker("setupCameraTransform") public abstract void setupCamera(float partialTicks, int pass); | ||
29 | +} |
java/client/com/mumfrey/liteloader/client/overlays/ISoundHandler.java
0 → 100644
1 | +package com.mumfrey.liteloader.client.overlays; | ||
2 | + | ||
3 | +import net.minecraft.client.audio.SoundList; | ||
4 | +import net.minecraft.util.ResourceLocation; | ||
5 | + | ||
6 | +import com.mumfrey.liteloader.transformers.access.Accessor; | ||
7 | +import com.mumfrey.liteloader.transformers.access.Invoker; | ||
8 | + | ||
9 | +@Accessor("SoundHandler") | ||
10 | +public interface ISoundHandler | ||
11 | +{ | ||
12 | + @Invoker("loadSoundResource") | ||
13 | + public abstract void addSound(ResourceLocation sound, SoundList soundList); | ||
14 | +} |
java/client/com/mumfrey/liteloader/client/transformers/MinecraftTransformer.java
@@ -25,6 +25,8 @@ public class MinecraftTransformer extends AccessorTransformer | @@ -25,6 +25,8 @@ public class MinecraftTransformer extends AccessorTransformer | ||
25 | { | 25 | { |
26 | this.addAccessor(Obf.IMinecraft.name); | 26 | this.addAccessor(Obf.IMinecraft.name); |
27 | this.addAccessor(Obf.IGuiTextField.name); | 27 | this.addAccessor(Obf.IGuiTextField.name); |
28 | + this.addAccessor(Obf.IEntityRenderer.name); | ||
29 | + this.addAccessor(Obf.ISoundHandler.name); | ||
28 | } | 30 | } |
29 | 31 | ||
30 | @Override | 32 | @Override |
java/common/com/mumfrey/liteloader/core/runtime/Obf.java
@@ -25,8 +25,6 @@ public class Obf | @@ -25,8 +25,6 @@ public class Obf | ||
25 | public static final Obf PacketEvents = new Obf("com.mumfrey.liteloader.core.PacketEvents" ); | 25 | public static final Obf PacketEvents = new Obf("com.mumfrey.liteloader.core.PacketEvents" ); |
26 | public static final Obf PacketEventsClient = new Obf("com.mumfrey.liteloader.client.PacketEventsClient" ); | 26 | public static final Obf PacketEventsClient = new Obf("com.mumfrey.liteloader.client.PacketEventsClient" ); |
27 | public static final Obf LoadingBar = new Obf("com.mumfrey.liteloader.client.gui.startup.LoadingBar" ); | 27 | public static final Obf LoadingBar = new Obf("com.mumfrey.liteloader.client.gui.startup.LoadingBar" ); |
28 | - public static final Obf IMinecraft = new Obf("com.mumfrey.liteloader.client.overlays.IMinecraft" ); | ||
29 | - public static final Obf IGuiTextField = new Obf("com.mumfrey.liteloader.client.overlays.IGuiTextField" ); | ||
30 | public static final Obf GameProfile = new Obf("com.mojang.authlib.GameProfile" ); | 28 | public static final Obf GameProfile = new Obf("com.mojang.authlib.GameProfile" ); |
31 | public static final Obf MinecraftMain = new Obf("net.minecraft.client.main.Main" ); | 29 | public static final Obf MinecraftMain = new Obf("net.minecraft.client.main.Main" ); |
32 | public static final Obf MinecraftServer = new Obf("net.minecraft.server.MinecraftServer" ); | 30 | public static final Obf MinecraftServer = new Obf("net.minecraft.server.MinecraftServer" ); |
@@ -36,6 +34,13 @@ public class Obf | @@ -36,6 +34,13 @@ public class Obf | ||
36 | public static final Obf postInit = new Obf("postInit" ); | 34 | public static final Obf postInit = new Obf("postInit" ); |
37 | public static final Obf constructor = new Obf("<init>" ); | 35 | public static final Obf constructor = new Obf("<init>" ); |
38 | 36 | ||
37 | + // Overlays and Accessor Interfaces | ||
38 | + // ----------------------------------------------------------------------------------------- | ||
39 | + public static final Obf IMinecraft = new Obf("com.mumfrey.liteloader.client.overlays.IMinecraft" ); | ||
40 | + public static final Obf IGuiTextField = new Obf("com.mumfrey.liteloader.client.overlays.IGuiTextField" ); | ||
41 | + public static final Obf IEntityRenderer = new Obf("com.mumfrey.liteloader.client.overlays.IEntityRenderer" ); | ||
42 | + public static final Obf ISoundHandler = new Obf("com.mumfrey.liteloader.client.overlays.ISoundHandler" ); | ||
43 | + | ||
39 | // Classes | 44 | // Classes |
40 | // ----------------------------------------------------------------------------------------- | 45 | // ----------------------------------------------------------------------------------------- |
41 | public static final Obf Minecraft = new Obf("net.minecraft.client.Minecraft", "bsu" ); | 46 | public static final Obf Minecraft = new Obf("net.minecraft.client.Minecraft", "bsu" ); |
@@ -64,6 +69,7 @@ public class Obf | @@ -64,6 +69,7 @@ public class Obf | ||
64 | public static final Obf RenderManager = new Obf("net.minecraft.client.renderer.entity.RenderManager", "cpt" ); | 69 | public static final Obf RenderManager = new Obf("net.minecraft.client.renderer.entity.RenderManager", "cpt" ); |
65 | public static final Obf Render = new Obf("net.minecraft.client.renderer.entity.Render", "cpu" ); | 70 | public static final Obf Render = new Obf("net.minecraft.client.renderer.entity.Render", "cpu" ); |
66 | public static final Obf GuiTextField = new Obf("net.minecraft.client.gui.GuiTextField", "bul" ); | 71 | public static final Obf GuiTextField = new Obf("net.minecraft.client.gui.GuiTextField", "bul" ); |
72 | + public static final Obf SoundHandler = new Obf("net.minecraft.client.audio.SoundHandler", "czh" ); | ||
67 | 73 | ||
68 | // Fields | 74 | // Fields |
69 | // ----------------------------------------------------------------------------------------- | 75 | // ----------------------------------------------------------------------------------------- |
@@ -84,6 +90,9 @@ public class Obf | @@ -84,6 +90,9 @@ public class Obf | ||
84 | public static final Obf defaultResourcePacks = new Obf("field_110449_ao", "aw" ); | 90 | public static final Obf defaultResourcePacks = new Obf("field_110449_ao", "aw" ); |
85 | public static final Obf serverName = new Obf("field_71475_ae", "am" ); | 91 | public static final Obf serverName = new Obf("field_71475_ae", "am" ); |
86 | public static final Obf serverPort = new Obf("field_71477_af", "an" ); | 92 | public static final Obf serverPort = new Obf("field_71477_af", "an" ); |
93 | + public static final Obf shaderResourceLocations = new Obf("field_147712_ad", "ab" ); | ||
94 | + public static final Obf shaderIndex = new Obf("field_147713_ae", "ac" ); | ||
95 | + public static final Obf useShader = new Obf("field_175083_ad", "ad" ); | ||
87 | 96 | ||
88 | // Methods | 97 | // Methods |
89 | // ----------------------------------------------------------------------------------------- | 98 | // ----------------------------------------------------------------------------------------- |
@@ -119,6 +128,10 @@ public class Obf | @@ -119,6 +128,10 @@ public class Obf | ||
119 | public static final Obf doRender = new Obf("func_76986_a", "a" ); | 128 | public static final Obf doRender = new Obf("func_76986_a", "a" ); |
120 | public static final Obf doRenderShadowAndFire = new Obf("func_76979_b", "b" ); | 129 | public static final Obf doRenderShadowAndFire = new Obf("func_76979_b", "b" ); |
121 | public static final Obf resize = new Obf("func_71370_a", "a" ); | 130 | public static final Obf resize = new Obf("func_71370_a", "a" ); |
131 | + public static final Obf loadShader = new Obf("func_175069_a", "a" ); | ||
132 | + public static final Obf getFOVModifier = new Obf("func_78481_a", "a" ); | ||
133 | + public static final Obf setupCameraTransform = new Obf("func_78479_a", "a" ); | ||
134 | + public static final Obf loadSoundResource = new Obf("func_147693_a", "a" ); | ||
122 | 135 | ||
123 | public static final int MCP = 0; | 136 | public static final int MCP = 0; |
124 | public static final int SRG = 1; | 137 | public static final int SRG = 1; |
@@ -249,6 +262,12 @@ public class Obf | @@ -249,6 +262,12 @@ public class Obf | ||
249 | { | 262 | { |
250 | return -1; | 263 | return -1; |
251 | } | 264 | } |
265 | + | ||
266 | + @Override | ||
267 | + public String toString() | ||
268 | + { | ||
269 | + return String.format("%s[%s,%s,%s]@%d", this.getClass().getSimpleName(), this.name, this.srg, this.obf, this.getOrdinal()); | ||
270 | + } | ||
252 | 271 | ||
253 | /** | 272 | /** |
254 | * @param seargeName | 273 | * @param seargeName |
@@ -300,7 +319,7 @@ public class Obf | @@ -300,7 +319,7 @@ public class Obf | ||
300 | { | 319 | { |
301 | for (Field fd : obf.getFields()) | 320 | for (Field fd : obf.getFields()) |
302 | { | 321 | { |
303 | - if (fd.getType().equals(Obf.class)) | 322 | + if (Obf.class.isAssignableFrom(fd.getType())) |
304 | { | 323 | { |
305 | String fieldName = fd.getName(); | 324 | String fieldName = fd.getName(); |
306 | Obf entry = (Obf)fd.get(null); | 325 | Obf entry = (Obf)fd.get(null); |
java/common/com/mumfrey/liteloader/transformers/ByteCodeUtilities.java
@@ -531,16 +531,16 @@ public abstract class ByteCodeUtilities | @@ -531,16 +531,16 @@ public abstract class ByteCodeUtilities | ||
531 | * Find a method in the target class which matches the specified method name and descriptor | 531 | * Find a method in the target class which matches the specified method name and descriptor |
532 | * | 532 | * |
533 | * @param classNode | 533 | * @param classNode |
534 | - * @param methodName | 534 | + * @param searchFor |
535 | * @param desc | 535 | * @param desc |
536 | */ | 536 | */ |
537 | - public static MethodNode findMethod(ClassNode classNode, Obf obf, String desc) | 537 | + public static MethodNode findMethod(ClassNode classNode, Obf searchFor, String desc) |
538 | { | 538 | { |
539 | int ordinal = 0; | 539 | int ordinal = 0; |
540 | 540 | ||
541 | for (MethodNode method : classNode.methods) | 541 | for (MethodNode method : classNode.methods) |
542 | { | 542 | { |
543 | - if (obf.matches(method.name, ordinal++) && method.desc.equals(desc)) | 543 | + if (searchFor.matches(method.name, ordinal++) && method.desc.equals(desc)) |
544 | return method; | 544 | return method; |
545 | } | 545 | } |
546 | 546 | ||
@@ -551,15 +551,15 @@ public abstract class ByteCodeUtilities | @@ -551,15 +551,15 @@ public abstract class ByteCodeUtilities | ||
551 | * Find a field in the target class which matches the specified field name | 551 | * Find a field in the target class which matches the specified field name |
552 | * | 552 | * |
553 | * @param classNode | 553 | * @param classNode |
554 | - * @param fieldName | 554 | + * @param searchFor |
555 | */ | 555 | */ |
556 | - public static FieldNode findField(ClassNode classNode, Obf obf) | 556 | + public static FieldNode findField(ClassNode classNode, Obf searchFor) |
557 | { | 557 | { |
558 | int ordinal = 0; | 558 | int ordinal = 0; |
559 | 559 | ||
560 | for (FieldNode field : classNode.fields) | 560 | for (FieldNode field : classNode.fields) |
561 | { | 561 | { |
562 | - if (obf.matches(field.name, ordinal++)) | 562 | + if (searchFor.matches(field.name, ordinal++)) |
563 | return field; | 563 | return field; |
564 | } | 564 | } |
565 | 565 |
java/common/com/mumfrey/liteloader/transformers/ObfProvider.java
@@ -14,7 +14,6 @@ public interface ObfProvider | @@ -14,7 +14,6 @@ public interface ObfProvider | ||
14 | * Try to locate an obfuscation table entry by name (id), returns null if no entry was found | 14 | * Try to locate an obfuscation table entry by name (id), returns null if no entry was found |
15 | * | 15 | * |
16 | * @param name | 16 | * @param name |
17 | - * @return | ||
18 | */ | 17 | */ |
19 | public abstract Obf getByName(String name); | 18 | public abstract Obf getByName(String name); |
20 | } | 19 | } |
java/common/com/mumfrey/liteloader/transformers/access/Accessor.java
@@ -14,5 +14,5 @@ import java.lang.annotation.Target; | @@ -14,5 +14,5 @@ import java.lang.annotation.Target; | ||
14 | @Retention(RetentionPolicy.CLASS) | 14 | @Retention(RetentionPolicy.CLASS) |
15 | public @interface Accessor | 15 | public @interface Accessor |
16 | { | 16 | { |
17 | - public String value(); | 17 | + public String[] value(); |
18 | } | 18 | } |
java/common/com/mumfrey/liteloader/transformers/access/AccessorTransformer.java
@@ -105,8 +105,10 @@ public abstract class AccessorTransformer extends ClassTransformer | @@ -105,8 +105,10 @@ public abstract class AccessorTransformer extends ClassTransformer | ||
105 | * | 105 | * |
106 | * @param name Obfuscation table entry to fetch | 106 | * @param name Obfuscation table entry to fetch |
107 | */ | 107 | */ |
108 | - private Obf getObf(String name) | 108 | + private Obf getObf(List<String> names) |
109 | { | 109 | { |
110 | + String name = names.get(0); | ||
111 | + | ||
110 | Matcher ordinalPattern = AccessorTransformer.ordinalRefPattern.matcher(name); | 112 | Matcher ordinalPattern = AccessorTransformer.ordinalRefPattern.matcher(name); |
111 | if (ordinalPattern.matches()) | 113 | if (ordinalPattern.matches()) |
112 | { | 114 | { |
@@ -128,8 +130,15 @@ public abstract class AccessorTransformer extends ClassTransformer | @@ -128,8 +130,15 @@ public abstract class AccessorTransformer extends ClassTransformer | ||
128 | { | 130 | { |
129 | return obf; | 131 | return obf; |
130 | } | 132 | } |
131 | - | ||
132 | - throw new RuntimeException("No obfuscation table entry could be found for '" + name + "'"); | 133 | + |
134 | + if (names.size() > 0 && names.size() < 4) | ||
135 | + { | ||
136 | + String name2 = names.size() > 1 ? names.get(1) : name; | ||
137 | + String name3 = names.size() > 2 ? names.get(2) : name; | ||
138 | + return new AccessorTransformer.Mapping(name, name2, name3); | ||
139 | + } | ||
140 | + | ||
141 | + throw new RuntimeException("Invalid obfuscation table entry specified: '" + names + "'"); | ||
133 | } | 142 | } |
134 | 143 | ||
135 | /** | 144 | /** |
@@ -175,7 +184,7 @@ public abstract class AccessorTransformer extends ClassTransformer | @@ -175,7 +184,7 @@ public abstract class AccessorTransformer extends ClassTransformer | ||
175 | throw new RuntimeException("Accessor interfaces must be annotated with an @Accessor annotation specifying the target class"); | 184 | throw new RuntimeException("Accessor interfaces must be annotated with an @Accessor annotation specifying the target class"); |
176 | } | 185 | } |
177 | 186 | ||
178 | - String targetClass = ByteCodeUtilities.<String>getAnnotationValue(annotation); | 187 | + List<String> targetClass = ByteCodeUtilities.<List<String>>getAnnotationValue(annotation); |
179 | if (targetClass == null || targetClass.isEmpty()) | 188 | if (targetClass == null || targetClass.isEmpty()) |
180 | { | 189 | { |
181 | throw new RuntimeException("Invalid @Accessor annotation, the annotation must specify a target class"); | 190 | throw new RuntimeException("Invalid @Accessor annotation, the annotation must specify a target class"); |
@@ -233,18 +242,18 @@ public abstract class AccessorTransformer extends ClassTransformer | @@ -233,18 +242,18 @@ public abstract class AccessorTransformer extends ClassTransformer | ||
233 | 242 | ||
234 | LiteLoaderLogger.debug("[AccessorTransformer] Attempting to add %s to %s", method.name, classNode.name); | 243 | LiteLoaderLogger.debug("[AccessorTransformer] Attempting to add %s to %s", method.name, classNode.name); |
235 | 244 | ||
236 | - String targetId = null; | 245 | + List<String> targetId = null; |
237 | AnnotationNode accessor = ByteCodeUtilities.getInvisibleAnnotation(method, Accessor.class); | 246 | AnnotationNode accessor = ByteCodeUtilities.getInvisibleAnnotation(method, Accessor.class); |
238 | AnnotationNode invoker = ByteCodeUtilities.getInvisibleAnnotation(method, Invoker.class); | 247 | AnnotationNode invoker = ByteCodeUtilities.getInvisibleAnnotation(method, Invoker.class); |
239 | if (accessor != null) | 248 | if (accessor != null) |
240 | { | 249 | { |
241 | - targetId = ByteCodeUtilities.<String>getAnnotationValue(accessor); | 250 | + targetId = ByteCodeUtilities.<List<String>>getAnnotationValue(accessor); |
242 | Obf target = this.getObf(targetId); | 251 | Obf target = this.getObf(targetId); |
243 | if (this.injectAccessor(classNode, method, target)) return; | 252 | if (this.injectAccessor(classNode, method, target)) return; |
244 | } | 253 | } |
245 | else if (invoker != null) | 254 | else if (invoker != null) |
246 | { | 255 | { |
247 | - targetId = ByteCodeUtilities.<String>getAnnotationValue(invoker); | 256 | + targetId = ByteCodeUtilities.<List<String>>getAnnotationValue(invoker); |
248 | Obf target = this.getObf(targetId); | 257 | Obf target = this.getObf(targetId); |
249 | if (this.injectInvoker(classNode, method, target)) return; | 258 | if (this.injectInvoker(classNode, method, target)) return; |
250 | } | 259 | } |
@@ -448,6 +457,14 @@ public abstract class AccessorTransformer extends ClassTransformer | @@ -448,6 +457,14 @@ public abstract class AccessorTransformer extends ClassTransformer | ||
448 | } | 457 | } |
449 | } | 458 | } |
450 | 459 | ||
460 | + protected static class Mapping extends Obf | ||
461 | + { | ||
462 | + protected Mapping(String seargeName, String obfName, String mcpName) | ||
463 | + { | ||
464 | + super(seargeName, obfName, mcpName); | ||
465 | + } | ||
466 | + } | ||
467 | + | ||
451 | /** | 468 | /** |
452 | * List of accessors to inject | 469 | * List of accessors to inject |
453 | */ | 470 | */ |
@@ -514,7 +531,6 @@ public abstract class AccessorTransformer extends ClassTransformer | @@ -514,7 +531,6 @@ public abstract class AccessorTransformer extends ClassTransformer | ||
514 | * @param transformedName | 531 | * @param transformedName |
515 | * @param basicClass | 532 | * @param basicClass |
516 | * @param classNode | 533 | * @param classNode |
517 | - * @return | ||
518 | */ | 534 | */ |
519 | public ClassNode apply(String name, String transformedName, byte[] basicClass, ClassNode classNode) | 535 | public ClassNode apply(String name, String transformedName, byte[] basicClass, ClassNode classNode) |
520 | { | 536 | { |
java/common/com/mumfrey/liteloader/transformers/access/Invoker.java
@@ -14,5 +14,5 @@ import java.lang.annotation.Target; | @@ -14,5 +14,5 @@ import java.lang.annotation.Target; | ||
14 | @Retention(RetentionPolicy.CLASS) | 14 | @Retention(RetentionPolicy.CLASS) |
15 | public @interface Invoker | 15 | public @interface Invoker |
16 | { | 16 | { |
17 | - public String value(); | 17 | + public String[] value(); |
18 | } | 18 | } |