diff options
Diffstat (limited to 'src/main/java/rosegoldaddons/utils/ShadyRotation.java')
-rw-r--r-- | src/main/java/rosegoldaddons/utils/ShadyRotation.java | 55 |
1 files changed, 52 insertions, 3 deletions
diff --git a/src/main/java/rosegoldaddons/utils/ShadyRotation.java b/src/main/java/rosegoldaddons/utils/ShadyRotation.java index 111ea6e..3125aa2 100644 --- a/src/main/java/rosegoldaddons/utils/ShadyRotation.java +++ b/src/main/java/rosegoldaddons/utils/ShadyRotation.java @@ -2,10 +2,13 @@ package rosegoldaddons.utils; import net.minecraft.entity.Entity; import net.minecraft.util.BlockPos; +import net.minecraft.util.MovementInput; import net.minecraft.util.Vec3; +import net.minecraftforge.fml.common.eventhandler.EventPriority; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import net.minecraftforge.fml.common.gameevent.TickEvent; import rosegoldaddons.Main; +import rosegoldaddons.events.PlayerMoveEvent; public class ShadyRotation { private static float pitchDifference; @@ -13,16 +16,33 @@ public class ShadyRotation { private static int ticks = -1; private static int tickCounter = 0; private static Runnable callback = null; + private static boolean async = false; + + private static float serverPitch; + private static float serverYaw; public static boolean running = false; + public static boolean runningAsync = false; public static class Rotation { public float pitch; public float yaw; + public boolean async; public Rotation(float pitch, float yaw) { this.pitch = pitch; this.yaw = yaw; + this.async = false; + } + + public Rotation(float pitch, float yaw, boolean async) { + this.pitch = pitch; + this.yaw = yaw; + this.async = async; + } + + public void setAsync(boolean async) { + this.async = async; } } @@ -76,7 +96,7 @@ public class ShadyRotation { return new Rotation(pitch, yaw); } - public static void smoothLook(Rotation rotation, int ticks, Runnable callback) { + public static void smoothLook(Rotation rotation, int ticks, Runnable callback, boolean async) { if(ticks == 0) { look(rotation); callback.run(); @@ -85,6 +105,7 @@ public class ShadyRotation { ShadyRotation.callback = callback; + ShadyRotation.async = rotation.async; pitchDifference = wrapAngleTo180(rotation.pitch - Main.mc.thePlayer.rotationPitch); yawDifference = wrapAngleTo180(rotation.yaw - Main.mc.thePlayer.rotationYaw); @@ -92,6 +113,10 @@ public class ShadyRotation { ShadyRotation.tickCounter = 0; } + public static void smoothLook(Rotation rotation, int ticks, Runnable callback) { + smoothLook(rotation, ticks, callback, false); + } + public static void smartLook(Rotation rotation, int ticksPer180, Runnable callback) { float rotationDifference = Math.max( Math.abs(rotation.pitch - Main.mc.thePlayer.rotationPitch), @@ -105,16 +130,40 @@ public class ShadyRotation { Main.mc.thePlayer.rotationYaw = rotation.yaw; } + @SubscribeEvent(priority = EventPriority.HIGHEST) + public void onUpdatePre(PlayerMoveEvent.Pre pre) { + //if(Main.oringo) return; + serverPitch = Main.mc.thePlayer.rotationPitch; + serverYaw = Main.mc.thePlayer.rotationYaw; + } + + @SubscribeEvent(priority = EventPriority.LOWEST) + public void onUpdatePost(PlayerMoveEvent.Post post) { + //if(Main.oringo) return; + Main.mc.thePlayer.rotationPitch = serverPitch; + Main.mc.thePlayer.rotationYaw = serverYaw; + } + @SubscribeEvent public void onTick(TickEvent event) { if(Main.mc.thePlayer == null) return; if(tickCounter < ticks) { - running = true; + if(!async) { + running = true; + runningAsync = false; + } else { + runningAsync = true; + running = false; + } Main.mc.thePlayer.rotationPitch += pitchDifference / ticks; Main.mc.thePlayer.rotationYaw += yawDifference / ticks; tickCounter++; } else if(callback != null) { - running = false; + if(!async) { + running = false; + } else { + runningAsync = false; + } callback.run(); callback = null; } |