diff options
| author | DJtheRedstoner <52044242+DJtheRedstoner@users.noreply.github.com> | 2020-10-04 21:02:19 -0400 |
|---|---|---|
| committer | DJtheRedstoner <52044242+DJtheRedstoner@users.noreply.github.com> | 2020-10-04 21:02:19 -0400 |
| commit | 6a24fdcf34170ae927b1c0952c50b05131084911 (patch) | |
| tree | 9a482c5d8111c7d677ba7d121f418d46714be3d2 /src/main/java/me/djtheredstoner/perspectivemod/asm | |
| parent | fd4353e56faf69effedecebca0e1af233ecff4bb (diff) | |
| download | PerspectiveModv4-6a24fdcf34170ae927b1c0952c50b05131084911.tar.gz PerspectiveModv4-6a24fdcf34170ae927b1c0952c50b05131084911.tar.bz2 PerspectiveModv4-6a24fdcf34170ae927b1c0952c50b05131084911.zip | |
Bug Fixes and new config
- Particles now face camera
- Sk1er Modcore integration
- New config gui using Vigilance
- Invert pitch option
Diffstat (limited to 'src/main/java/me/djtheredstoner/perspectivemod/asm')
5 files changed, 114 insertions, 5 deletions
diff --git a/src/main/java/me/djtheredstoner/perspectivemod/asm/ClassTransformer.java b/src/main/java/me/djtheredstoner/perspectivemod/asm/ClassTransformer.java index 63f693e..c7db68b 100644 --- a/src/main/java/me/djtheredstoner/perspectivemod/asm/ClassTransformer.java +++ b/src/main/java/me/djtheredstoner/perspectivemod/asm/ClassTransformer.java @@ -2,6 +2,7 @@ package me.djtheredstoner.perspectivemod.asm; import com.google.common.collect.ArrayListMultimap; import com.google.common.collect.Multimap; +import me.djtheredstoner.perspectivemod.asm.transformers.ActiveRenderInfoTransformer; import me.djtheredstoner.perspectivemod.asm.transformers.EntityRendererTransformer; import me.djtheredstoner.perspectivemod.asm.transformers.MinecraftTransformer; import me.djtheredstoner.perspectivemod.asm.transformers.RenderManagerTransformer; @@ -34,6 +35,7 @@ public class ClassTransformer implements IClassTransformer { registerTransformer(new EntityRendererTransformer()); registerTransformer(new RenderManagerTransformer()); registerTransformer(new MinecraftTransformer()); + registerTransformer(new ActiveRenderInfoTransformer()); } private void registerTransformer(ITransformer transformer) { diff --git a/src/main/java/me/djtheredstoner/perspectivemod/asm/hooks/ActiveRenderInfoHook.java b/src/main/java/me/djtheredstoner/perspectivemod/asm/hooks/ActiveRenderInfoHook.java new file mode 100644 index 0000000..e60ede4 --- /dev/null +++ b/src/main/java/me/djtheredstoner/perspectivemod/asm/hooks/ActiveRenderInfoHook.java @@ -0,0 +1,16 @@ +package me.djtheredstoner.perspectivemod.asm.hooks; + +import me.djtheredstoner.perspectivemod.PerspectiveMod; +import net.minecraft.entity.player.EntityPlayer; + +public class ActiveRenderInfoHook { + + public static float rotationYawHook(EntityPlayer entity) { + return PerspectiveMod.perspectiveToggled ? PerspectiveMod.cameraYaw : entity.rotationYaw; + } + + public static float rotationPitchHook(EntityPlayer entity) { + return PerspectiveMod.perspectiveToggled ? PerspectiveMod.cameraPitch : entity.rotationPitch; + } + +} diff --git a/src/main/java/me/djtheredstoner/perspectivemod/asm/hooks/EntityRendererHook.java b/src/main/java/me/djtheredstoner/perspectivemod/asm/hooks/EntityRendererHook.java index 3ee3c9e..193affb 100644 --- a/src/main/java/me/djtheredstoner/perspectivemod/asm/hooks/EntityRendererHook.java +++ b/src/main/java/me/djtheredstoner/perspectivemod/asm/hooks/EntityRendererHook.java @@ -26,4 +26,7 @@ public class EntityRendererHook { return PerspectiveMod.overrideMouse(); } + public static double distanceHook(double value) { + return value; + } } diff --git a/src/main/java/me/djtheredstoner/perspectivemod/asm/transformers/ActiveRenderInfoTransformer.java b/src/main/java/me/djtheredstoner/perspectivemod/asm/transformers/ActiveRenderInfoTransformer.java new file mode 100644 index 0000000..531ec90 --- /dev/null +++ b/src/main/java/me/djtheredstoner/perspectivemod/asm/transformers/ActiveRenderInfoTransformer.java @@ -0,0 +1,68 @@ +package me.djtheredstoner.perspectivemod.asm.transformers; + +import me.djtheredstoner.perspectivemod.asm.ITransformer; +import org.objectweb.asm.tree.*; + +import java.util.ListIterator; + +import static org.objectweb.asm.Opcodes.*; + +public class ActiveRenderInfoTransformer implements ITransformer { + + private static final String HOOK_CLASS = "me/djtheredstoner/perspectivemod/asm/hooks/ActiveRenderInfoHook"; + + @Override + public String[] getClassName() { + return new String[]{"net.minecraft.client.renderer.ActiveRenderInfo"}; + } + + @Override + public void transform(ClassNode classNode, String name) { + for (MethodNode method : classNode.methods) { + String methodName = mapMethodName(classNode, method); + + if (methodName.equals("updateRenderInfo") || methodName.equals("func_74583_a")) { + ListIterator<AbstractInsnNode> iterator = method.instructions.iterator(); + + while (iterator.hasNext()) { + AbstractInsnNode next = iterator.next(); + + if(next.getOpcode() == GETFIELD) { + FieldInsnNode insn = (FieldInsnNode) next; + + String ownerName = mapClassName(insn.owner); + String fieldName = mapClassName(insn.name); + + if(ownerName.equals("net/minecraft/entity/player/EntityPlayer") && insn.desc.equals("F")) { + InsnList insnList = null; + + switch (fieldName) { + case "rotationPitch": + case "field_70125_A": + insnList = insertRotationHook("Pitch"); + break; + case "rotationYaw": + case "field_70177_z": + insnList = insertRotationHook("Yaw"); + break; + } + + if(insnList != null) { + method.instructions.insertBefore(insn, insnList); + method.instructions.remove(insn); + } + } + } + } + } + } + } + + private InsnList insertRotationHook(String field) { + InsnList insnList = new InsnList(); + + insnList.add(new MethodInsnNode(INVOKESTATIC, HOOK_CLASS, "rotation" + field + "Hook", "(Lnet/minecraft/entity/player/EntityPlayer;)F", false)); + + return insnList; + } +} diff --git a/src/main/java/me/djtheredstoner/perspectivemod/asm/transformers/EntityRendererTransformer.java b/src/main/java/me/djtheredstoner/perspectivemod/asm/transformers/EntityRendererTransformer.java index dadb1e0..ac47621 100644 --- a/src/main/java/me/djtheredstoner/perspectivemod/asm/transformers/EntityRendererTransformer.java +++ b/src/main/java/me/djtheredstoner/perspectivemod/asm/transformers/EntityRendererTransformer.java @@ -3,6 +3,8 @@ package me.djtheredstoner.perspectivemod.asm.transformers; import me.djtheredstoner.perspectivemod.asm.ITransformer; import org.objectweb.asm.tree.*; +import java.lang.reflect.Field; +import java.lang.reflect.Method; import java.util.Iterator; import static org.objectweb.asm.Opcodes.*; @@ -37,7 +39,7 @@ public class EntityRendererTransformer implements ITransformer { String ownerName = mapClassName(insn.owner); String fieldName = mapFieldNameFromNode(insn); - if(ownerName.equals("net/minecraft/entity/Entity" )&& insn.desc.equals("F")) { + if(ownerName.equals("net/minecraft/entity/Entity" ) && insn.desc.equals("F")) { InsnList insnList = null; @@ -65,9 +67,14 @@ public class EntityRendererTransformer implements ITransformer { method.instructions.remove(insn); } } - } - } + } /*else if (next.getOpcode() == DLOAD) { + VarInsnNode insn = (VarInsnNode) next; + if(insn.getPrevious().getOpcode() == FCONST_0 && insn.getNext().getOpcode() == DNEG) { + method.instructions.insert(insn, insertDistanceHook()); + } + }*/ + } } else if (methodName.equals("updateCameraAndRender") || methodName.equals("func_181560_a")) { Iterator<AbstractInsnNode> iterator = method.instructions.iterator(); @@ -89,10 +96,15 @@ public class EntityRendererTransformer implements ITransformer { } } } + //Poggers Ultra FPS Praseodymium mode. + /* else if (methodName.equals("renderWorldPass") || methodName.equals("func_175068_a")) { + + method.instructions.insert(method.instructions.getFirst(), new InsnNode(RETURN)); + }*/ } } - public InsnList insertRotationHook(String field) { + private InsnList insertRotationHook(String field) { InsnList list = new InsnList(); list.add(new MethodInsnNode(INVOKESTATIC, HOOK_CLASS, field + "Hook", "(Lnet/minecraft/entity/Entity;)F", false)); @@ -100,11 +112,19 @@ public class EntityRendererTransformer implements ITransformer { return list; } - public InsnList insertMouseHook() { + private InsnList insertMouseHook() { InsnList list = new InsnList(); list.add(new MethodInsnNode(INVOKESTATIC, HOOK_CLASS, "mouseHook", "(Lnet/minecraft/client/Minecraft;)Z", false)); return list; } + + private InsnList insertDistanceHook() { + InsnList list = new InsnList(); + + list.add(new MethodInsnNode(INVOKESTATIC, HOOK_CLASS, "distanceHook", "(D)D", false)); + + return list; + } } |
