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