Commit 007e0673e3a17ce24ed9968b65a9955f81715e94

Authored by Mumfrey
1 parent 82c837c7

Remove MinecraftTransformer and replace with mixin injections

src/client/java/com/mumfrey/liteloader/client/api/LiteLoaderCoreAPIClient.java
@@ -42,7 +42,6 @@ public class LiteLoaderCoreAPIClient extends LiteLoaderCoreAPI @@ -42,7 +42,6 @@ public class LiteLoaderCoreAPIClient extends LiteLoaderCoreAPI
42 42
43 private static final String[] requiredDownstreamTransformers = { 43 private static final String[] requiredDownstreamTransformers = {
44 LiteLoaderCoreAPI.PKG_LITELOADER_COMMON + ".transformers.LiteLoaderPacketTransformer", 44 LiteLoaderCoreAPI.PKG_LITELOADER_COMMON + ".transformers.LiteLoaderPacketTransformer",
45 - LiteLoaderCoreAPIClient.PKG_LITELOADER_CLIENT + ".transformers.MinecraftTransformer",  
46 LiteLoaderCoreAPI.PKG_LITELOADER + ".transformers.event.json.ModEventInjectionTransformer" 45 LiteLoaderCoreAPI.PKG_LITELOADER + ".transformers.event.json.ModEventInjectionTransformer"
47 }; 46 };
48 47
src/client/java/com/mumfrey/liteloader/client/mixin/MixinMinecraft.java
@@ -19,7 +19,9 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @@ -19,7 +19,9 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
19 import com.mumfrey.liteloader.PlayerInteractionListener.MouseButton; 19 import com.mumfrey.liteloader.PlayerInteractionListener.MouseButton;
20 import com.mumfrey.liteloader.client.LiteLoaderEventBrokerClient; 20 import com.mumfrey.liteloader.client.LiteLoaderEventBrokerClient;
21 import com.mumfrey.liteloader.client.ducks.IFramebuffer; 21 import com.mumfrey.liteloader.client.ducks.IFramebuffer;
  22 +import com.mumfrey.liteloader.client.gui.startup.LoadingBar;
22 import com.mumfrey.liteloader.client.overlays.IMinecraft; 23 import com.mumfrey.liteloader.client.overlays.IMinecraft;
  24 +import com.mumfrey.liteloader.launch.LiteLoaderTweaker;
23 25
24 import net.minecraft.client.Minecraft; 26 import net.minecraft.client.Minecraft;
25 import net.minecraft.client.renderer.OpenGlHelper; 27 import net.minecraft.client.renderer.OpenGlHelper;
@@ -45,6 +47,25 @@ public abstract class MixinMinecraft implements IMinecraft @@ -45,6 +47,25 @@ public abstract class MixinMinecraft implements IMinecraft
45 47
46 private LiteLoaderEventBrokerClient broker; 48 private LiteLoaderEventBrokerClient broker;
47 49
  50 + @Inject(method = "init()V", at = @At(value = "NEW", target = "net/minecraft/client/renderer/EntityRenderer"))
  51 + private void init(CallbackInfo ci)
  52 + {
  53 + LiteLoaderTweaker.init();
  54 + LiteLoaderTweaker.postInit();
  55 + }
  56 +
  57 + @Inject(method = "init()V", at = @At(value = "NEW", target = "net/minecraft/client/renderer/texture/TextureMap"))
  58 + private void initTextures(CallbackInfo ci)
  59 + {
  60 + LoadingBar.initTextures();
  61 + }
  62 +
  63 + @Inject(method = "init()V", at = @At("INVOKE"))
  64 + private void progress(CallbackInfo ci)
  65 + {
  66 + LoadingBar.incrementProgress();
  67 + }
  68 +
48 @Inject(method = "init()V", at = @At("RETURN")) 69 @Inject(method = "init()V", at = @At("RETURN"))
49 private void onStartupComplete(CallbackInfo ci) 70 private void onStartupComplete(CallbackInfo ci)
50 { 71 {
src/client/java/com/mumfrey/liteloader/client/transformers/MinecraftTransformer.java deleted 100644 → 0
1 -/*  
2 - * This file is part of LiteLoader.  
3 - * Copyright (C) 2012-16 Adam Mummery-Smith  
4 - * All Rights Reserved.  
5 - */  
6 -package com.mumfrey.liteloader.client.transformers;  
7 -  
8 -import java.util.Iterator;  
9 -  
10 -import org.objectweb.asm.Opcodes;  
11 -import org.objectweb.asm.tree.AbstractInsnNode;  
12 -import org.objectweb.asm.tree.ClassNode;  
13 -import org.objectweb.asm.tree.InsnList;  
14 -import org.objectweb.asm.tree.LdcInsnNode;  
15 -import org.objectweb.asm.tree.MethodInsnNode;  
16 -import org.objectweb.asm.tree.MethodNode;  
17 -import org.objectweb.asm.tree.TypeInsnNode;  
18 -  
19 -import com.mumfrey.liteloader.core.runtime.Obf;  
20 -import com.mumfrey.liteloader.launch.LiteLoaderTweaker;  
21 -import com.mumfrey.liteloader.transformers.ClassTransformer;  
22 -import com.mumfrey.liteloader.util.log.LiteLoaderLogger;  
23 -  
24 -public class MinecraftTransformer extends ClassTransformer  
25 -{  
26 - private static final String TWEAKCLASS = LiteLoaderTweaker.class.getName().replace('.', '/');  
27 -  
28 - @Override  
29 - public byte[] transform(String name, String transformedName, byte[] basicClass)  
30 - {  
31 - if ((Obf.Minecraft.name.equals(transformedName) || Obf.Minecraft.obf.equals(transformedName)))  
32 - {  
33 - ClassNode classNode = this.readClass(basicClass, true);  
34 - for (MethodNode method : classNode.methods)  
35 - {  
36 - if (Obf.startGame.obf.equals(method.name) || Obf.startGame.srg.equals(method.name) || Obf.startGame.name.equals(method.name))  
37 - {  
38 - this.transformStartGame(method);  
39 - }  
40 - }  
41 - return this.writeClass(classNode);  
42 - }  
43 - return basicClass;  
44 - }  
45 -  
46 -  
47 - private void transformStartGame(MethodNode method)  
48 - {  
49 - InsnList insns = new InsnList();  
50 -  
51 - boolean loadingBarEnabled = LiteLoaderTweaker.loadingBarEnabled();  
52 - boolean found = false;  
53 -  
54 - Iterator<AbstractInsnNode> iter = method.instructions.iterator();  
55 - while (iter.hasNext())  
56 - {  
57 - AbstractInsnNode insn = iter.next();  
58 - if (loadingBarEnabled && insn instanceof MethodInsnNode)  
59 - {  
60 - insns.add(new MethodInsnNode(Opcodes.INVOKESTATIC, Obf.LoadingBar.ref, "incrementProgress", "()V", false));  
61 - }  
62 -  
63 - insns.add(insn);  
64 -  
65 - if (insn instanceof TypeInsnNode && insn.getOpcode() == Opcodes.NEW && insns.getLast() != null)  
66 - {  
67 - TypeInsnNode typeNode = (TypeInsnNode)insn;  
68 - if (!found && (Obf.EntityRenderer.obf.equals(typeNode.desc) || Obf.EntityRenderer.ref.equals(typeNode.desc)))  
69 - {  
70 - LiteLoaderLogger.info("MinecraftTransformer found INIT injection point, this is good.");  
71 - found = true;  
72 -  
73 - insns.add(new MethodInsnNode(Opcodes.INVOKESTATIC, MinecraftTransformer.TWEAKCLASS, Obf.init.name, "()V", false));  
74 - insns.add(new MethodInsnNode(Opcodes.INVOKESTATIC, MinecraftTransformer.TWEAKCLASS, Obf.postInit.name, "()V", false));  
75 - }  
76 - }  
77 -  
78 - if (loadingBarEnabled && insn instanceof LdcInsnNode)  
79 - {  
80 - LdcInsnNode ldcInsn = (LdcInsnNode)insn;  
81 - if ("textures/blocks".equals(ldcInsn.cst))  
82 - {  
83 - insns.add(new MethodInsnNode(Opcodes.INVOKESTATIC, Obf.LoadingBar.ref, "initTextures", "()V", false));  
84 - }  
85 - }  
86 - }  
87 -  
88 - method.instructions = insns;  
89 -  
90 - if (!found) LiteLoaderLogger.severe("MinecraftTransformer failed to find INIT injection point, the game will probably crash pretty soon.");  
91 - }  
92 -}  
src/main/java/com/mumfrey/liteloader/core/runtime/Obf.java
@@ -26,14 +26,11 @@ public class Obf @@ -26,14 +26,11 @@ public class Obf
26 public static final Obf BakedProfilingHandlerList = new Obf("com.mumfrey.liteloader.core.event.ProfilingHandlerList$BakedList" ); 26 public static final Obf BakedProfilingHandlerList = new Obf("com.mumfrey.liteloader.core.event.ProfilingHandlerList$BakedList" );
27 public static final Obf PacketEvents = new Obf("com.mumfrey.liteloader.core.PacketEvents" ); 27 public static final Obf PacketEvents = new Obf("com.mumfrey.liteloader.core.PacketEvents" );
28 public static final Obf PacketEventsClient = new Obf("com.mumfrey.liteloader.client.PacketEventsClient" ); 28 public static final Obf PacketEventsClient = new Obf("com.mumfrey.liteloader.client.PacketEventsClient" );
29 - public static final Obf LoadingBar = new Obf("com.mumfrey.liteloader.client.gui.startup.LoadingBar" );  
30 public static final Obf GameProfile = new Obf("com.mojang.authlib.GameProfile" ); 29 public static final Obf GameProfile = new Obf("com.mojang.authlib.GameProfile" );
31 public static final Obf MinecraftMain = new Obf("net.minecraft.client.main.Main" ); 30 public static final Obf MinecraftMain = new Obf("net.minecraft.client.main.Main" );
32 public static final Obf MinecraftServer = new Obf("net.minecraft.server.MinecraftServer" ); 31 public static final Obf MinecraftServer = new Obf("net.minecraft.server.MinecraftServer" );
33 public static final Obf GL11 = new Obf("org.lwjgl.opengl.GL11" ); 32 public static final Obf GL11 = new Obf("org.lwjgl.opengl.GL11" );
34 public static final Obf RealmsMainScreen = new Obf("com.mojang.realmsclient.RealmsMainScreen" ); 33 public static final Obf RealmsMainScreen = new Obf("com.mojang.realmsclient.RealmsMainScreen" );
35 - public static final Obf init = new Obf("init" );  
36 - public static final Obf postInit = new Obf("postInit" );  
37 public static final Obf constructor = new Obf("<init>" ); 34 public static final Obf constructor = new Obf("<init>" );
38 35
39 // CHECKSTYLE:OFF 36 // CHECKSTYLE:OFF