package me.rigamortis.seppuku.impl.patch; import me.rigamortis.seppuku.api.patch.ClassPatch; import me.rigamortis.seppuku.api.patch.MethodPatch; import me.rigamortis.seppuku.api.util.RenderUtil; import me.rigamortis.seppuku.impl.management.PatchManager; import org.objectweb.asm.Type; import org.objectweb.asm.tree.InsnList; import org.objectweb.asm.tree.MethodInsnNode; import org.objectweb.asm.tree.MethodNode; import static org.objectweb.asm.Opcodes.INVOKESTATIC; /** * Author Seth * 4/16/2019 @ 2:39 AM. */ public final class ActiveRenderInfoPatch extends ClassPatch { public ActiveRenderInfoPatch() { super("net.minecraft.client.renderer.ActiveRenderInfo", "bhv"); } /** * This is where minecraft updates the ModelViewProjection matrix * * @param methodNode * @param env */ @MethodPatch( mcpName = "updateRenderInfo", notchName = "updateRenderInfo", mcpDesc = "(Lnet/minecraft/entity/Entity;Z)V", notchDesc = "(Lvg;Z)V") public void updateRenderInfo(MethodNode methodNode, PatchManager.Environment env) { //create a list of instructions final InsnList insnList = new InsnList(); //call our hook function insnList.add(new MethodInsnNode(INVOKESTATIC, Type.getInternalName(this.getClass()), "updateRenderInfoHook", "()V", false)); //insert the list of instructions at the bottom of the function methodNode.instructions.insert(insnList); } public static void updateRenderInfoHook() { //update our model view projection matrix used to converting 3D world coordinates //to 2D screen coordinates RenderUtil.updateModelViewProjectionMatrix(); } }