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 | 15 | field_110449_ao=defaultResourcePacks |
16 | 16 | field_71475_ae=serverName |
17 | 17 | field_71477_af=serverPort |
18 | +field_147712_ad=shaderResourceLocations | |
19 | +field_147713_ae=shaderIndex | |
20 | +field_175083_ad=useShader | |
18 | 21 | func_148833_a=processPacket |
19 | 22 | func_71411_J=runGameLoop |
20 | 23 | func_71407_l=runTick |
... | ... | @@ -45,4 +48,8 @@ func_148260_a=saveScreenshot |
45 | 48 | func_148822_b=isFramebufferEnabled |
46 | 49 | func_147939_a=doRenderEntity |
47 | 50 | func_76986_a=doRender |
48 | -func_71370_a=resize | |
49 | 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 | 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 | 25 | { |
26 | 26 | this.addAccessor(Obf.IMinecraft.name); |
27 | 27 | this.addAccessor(Obf.IGuiTextField.name); |
28 | + this.addAccessor(Obf.IEntityRenderer.name); | |
29 | + this.addAccessor(Obf.ISoundHandler.name); | |
28 | 30 | } |
29 | 31 | |
30 | 32 | @Override | ... | ... |
java/common/com/mumfrey/liteloader/core/runtime/Obf.java
... | ... | @@ -25,8 +25,6 @@ public class Obf |
25 | 25 | public static final Obf PacketEvents = new Obf("com.mumfrey.liteloader.core.PacketEvents" ); |
26 | 26 | public static final Obf PacketEventsClient = new Obf("com.mumfrey.liteloader.client.PacketEventsClient" ); |
27 | 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 | 28 | public static final Obf GameProfile = new Obf("com.mojang.authlib.GameProfile" ); |
31 | 29 | public static final Obf MinecraftMain = new Obf("net.minecraft.client.main.Main" ); |
32 | 30 | public static final Obf MinecraftServer = new Obf("net.minecraft.server.MinecraftServer" ); |
... | ... | @@ -36,6 +34,13 @@ public class Obf |
36 | 34 | public static final Obf postInit = new Obf("postInit" ); |
37 | 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 | 44 | // Classes |
40 | 45 | // ----------------------------------------------------------------------------------------- |
41 | 46 | public static final Obf Minecraft = new Obf("net.minecraft.client.Minecraft", "bsu" ); |
... | ... | @@ -64,6 +69,7 @@ public class Obf |
64 | 69 | public static final Obf RenderManager = new Obf("net.minecraft.client.renderer.entity.RenderManager", "cpt" ); |
65 | 70 | public static final Obf Render = new Obf("net.minecraft.client.renderer.entity.Render", "cpu" ); |
66 | 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 | 74 | // Fields |
69 | 75 | // ----------------------------------------------------------------------------------------- |
... | ... | @@ -84,6 +90,9 @@ public class Obf |
84 | 90 | public static final Obf defaultResourcePacks = new Obf("field_110449_ao", "aw" ); |
85 | 91 | public static final Obf serverName = new Obf("field_71475_ae", "am" ); |
86 | 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 | 97 | // Methods |
89 | 98 | // ----------------------------------------------------------------------------------------- |
... | ... | @@ -119,6 +128,10 @@ public class Obf |
119 | 128 | public static final Obf doRender = new Obf("func_76986_a", "a" ); |
120 | 129 | public static final Obf doRenderShadowAndFire = new Obf("func_76979_b", "b" ); |
121 | 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 | 136 | public static final int MCP = 0; |
124 | 137 | public static final int SRG = 1; |
... | ... | @@ -249,6 +262,12 @@ public class Obf |
249 | 262 | { |
250 | 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 | 273 | * @param seargeName |
... | ... | @@ -300,7 +319,7 @@ public class Obf |
300 | 319 | { |
301 | 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 | 324 | String fieldName = fd.getName(); |
306 | 325 | Obf entry = (Obf)fd.get(null); | ... | ... |
java/common/com/mumfrey/liteloader/transformers/ByteCodeUtilities.java
... | ... | @@ -531,16 +531,16 @@ public abstract class ByteCodeUtilities |
531 | 531 | * Find a method in the target class which matches the specified method name and descriptor |
532 | 532 | * |
533 | 533 | * @param classNode |
534 | - * @param methodName | |
534 | + * @param searchFor | |
535 | 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 | 539 | int ordinal = 0; |
540 | 540 | |
541 | 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 | 544 | return method; |
545 | 545 | } |
546 | 546 | |
... | ... | @@ -551,15 +551,15 @@ public abstract class ByteCodeUtilities |
551 | 551 | * Find a field in the target class which matches the specified field name |
552 | 552 | * |
553 | 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 | 558 | int ordinal = 0; |
559 | 559 | |
560 | 560 | for (FieldNode field : classNode.fields) |
561 | 561 | { |
562 | - if (obf.matches(field.name, ordinal++)) | |
562 | + if (searchFor.matches(field.name, ordinal++)) | |
563 | 563 | return field; |
564 | 564 | } |
565 | 565 | ... | ... |
java/common/com/mumfrey/liteloader/transformers/ObfProvider.java
java/common/com/mumfrey/liteloader/transformers/access/Accessor.java
java/common/com/mumfrey/liteloader/transformers/access/AccessorTransformer.java
... | ... | @@ -105,8 +105,10 @@ public abstract class AccessorTransformer extends ClassTransformer |
105 | 105 | * |
106 | 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 | 112 | Matcher ordinalPattern = AccessorTransformer.ordinalRefPattern.matcher(name); |
111 | 113 | if (ordinalPattern.matches()) |
112 | 114 | { |
... | ... | @@ -128,8 +130,15 @@ public abstract class AccessorTransformer extends ClassTransformer |
128 | 130 | { |
129 | 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 | 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 | 188 | if (targetClass == null || targetClass.isEmpty()) |
180 | 189 | { |
181 | 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 | 242 | |
234 | 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 | 246 | AnnotationNode accessor = ByteCodeUtilities.getInvisibleAnnotation(method, Accessor.class); |
238 | 247 | AnnotationNode invoker = ByteCodeUtilities.getInvisibleAnnotation(method, Invoker.class); |
239 | 248 | if (accessor != null) |
240 | 249 | { |
241 | - targetId = ByteCodeUtilities.<String>getAnnotationValue(accessor); | |
250 | + targetId = ByteCodeUtilities.<List<String>>getAnnotationValue(accessor); | |
242 | 251 | Obf target = this.getObf(targetId); |
243 | 252 | if (this.injectAccessor(classNode, method, target)) return; |
244 | 253 | } |
245 | 254 | else if (invoker != null) |
246 | 255 | { |
247 | - targetId = ByteCodeUtilities.<String>getAnnotationValue(invoker); | |
256 | + targetId = ByteCodeUtilities.<List<String>>getAnnotationValue(invoker); | |
248 | 257 | Obf target = this.getObf(targetId); |
249 | 258 | if (this.injectInvoker(classNode, method, target)) return; |
250 | 259 | } |
... | ... | @@ -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 | 469 | * List of accessors to inject |
453 | 470 | */ |
... | ... | @@ -514,7 +531,6 @@ public abstract class AccessorTransformer extends ClassTransformer |
514 | 531 | * @param transformedName |
515 | 532 | * @param basicClass |
516 | 533 | * @param classNode |
517 | - * @return | |
518 | 534 | */ |
519 | 535 | public ClassNode apply(String name, String transformedName, byte[] basicClass, ClassNode classNode) |
520 | 536 | { | ... | ... |
java/common/com/mumfrey/liteloader/transformers/access/Invoker.java