From 233307f4af6a158e4771d9826064566be6257c3f Mon Sep 17 00:00:00 2001 From: jackh Date: Fri, 4 Apr 2025 13:54:37 -0700 Subject: [PATCH] Latest release --- .../module/impl/combat/KillAura.java | 51 ++--- .../module/impl/combat/Velocity.java | 4 +- .../module/impl/movement/KeepSprint.java | 4 +- .../module/impl/player/AntiVoid.java | 11 +- .../module/impl/player/BedAura.java | 3 + .../module/impl/player/Blink.java | 4 +- .../module/impl/player/Disabler.java | 9 +- .../module/impl/player/NoFall.java | 182 ++++++++++++++++-- .../module/impl/player/Scaffold.java | 6 +- .../keystrokesmod/utility/ModuleUtils.java | 6 +- .../java/keystrokesmod/utility/Utils.java | 27 +++ 11 files changed, 243 insertions(+), 64 deletions(-) diff --git a/src/main/java/keystrokesmod/module/impl/combat/KillAura.java b/src/main/java/keystrokesmod/module/impl/combat/KillAura.java index 8ba83b9..e4c4ca0 100644 --- a/src/main/java/keystrokesmod/module/impl/combat/KillAura.java +++ b/src/main/java/keystrokesmod/module/impl/combat/KillAura.java @@ -76,7 +76,7 @@ public class KillAura extends Module { private ButtonSetting silentSwing; private ButtonSetting weaponOnly; - private String[] autoBlockModes = new String[] { "Manual", "Vanilla", "Partial", "Via A", "Via B", "Post", "Swap", "Delay" }; + private String[] autoBlockModes = new String[] { "Manual", "Vanilla", "Partial", "Blink A", "Blink B", "Post", "Swap", "Delay" }; private String[] rotationModes = new String[] { "Silent", "Lock view", "None" }; private String[] rotateModes = new String[] { "Attacking", "Swinging" }; private String[] sortModes = new String[] { "Distance", "Health", "Hurttime", "Yaw" }; @@ -338,6 +338,13 @@ public class KillAura extends Module { disableCheckUsing = true; return; } + if (ModuleManager.noFall.isBlinking) { + if (blinking.get() || lag) { + resetBlinkState(true); + } + setTarget(null); + return; + } if (ModuleManager.antiVoid.started) { if (blinking.get() || lag) { resetBlinkState(true); @@ -960,7 +967,7 @@ public class KillAura extends Module { break; } break; - case 3: // via a + case 3: // blink a if (interactTicks >= 3) { interactTicks = 0; } @@ -968,19 +975,10 @@ public class KillAura extends Module { if (firstCycle) { switch (interactTicks) { case 1: - blinking.set(true); - ++cycleCount1; - if (cycleCount1 > 2) { - cycleCount1 = 0; - } if (ModuleUtils.isBlocked) { - if (cycleCount1 <= -1) { - sendUnBlockPacket(); - } - else { - setSwapSlot(); - swapped = true; - } + blinking.set(true); + setSwapSlot(); + swapped = true; } break; case 2: @@ -991,6 +989,7 @@ public class KillAura extends Module { handleInteractAndAttack(distance, true, true, swung); sendBlockPacket(); releasePackets(); // release + blinking.set(false); interactTicks = 0; ++cycleCount2; if (cycleCount2 > 5) { @@ -1004,6 +1003,7 @@ public class KillAura extends Module { switch (interactTicks) { case 1: if (ModuleUtils.isBlocked) { + blinking.set(true); setSwapSlot(); swapped = true; } @@ -1016,6 +1016,7 @@ public class KillAura extends Module { handleInteractAndAttack(distance, true, true, swung); sendBlockPacket(); releasePackets(); // release + blinking.set(false); break; case 3: firstCycle = true; @@ -1024,32 +1025,22 @@ public class KillAura extends Module { } } break; - case 4: // via b + case 4: // blink b interactTicks++; switch (interactTicks) { case 1: - blinking.set(true); if (ModuleUtils.isBlocked) { - setSwapSlot(); - swapped = true; + blinking.set(true); + sendUnBlockPacket(); } break; case 2: - if (swapped) { - setCurrentSlot(); - swapped = false; - } handleInteractAndAttack(distance, true, true, swung); sendBlockPacket(); - if (++cycleCount2 > 1) { - interactTicks = 0; - } - else { - releasePackets(); // release - } + releasePackets(); // release + blinking.set(false); break; case 3: - releasePackets(); // release interactTicks = 0; firstCycle = false; break; @@ -1095,8 +1086,8 @@ public class KillAura extends Module { interactTicks++; switch (interactTicks) { case 1: - blinking.set(true); if (ModuleUtils.isBlocked) { + blinking.set(true); setSwapSlot(); swapped = true; } diff --git a/src/main/java/keystrokesmod/module/impl/combat/Velocity.java b/src/main/java/keystrokesmod/module/impl/combat/Velocity.java index 401adbe..4d6d52e 100644 --- a/src/main/java/keystrokesmod/module/impl/combat/Velocity.java +++ b/src/main/java/keystrokesmod/module/impl/combat/Velocity.java @@ -119,7 +119,7 @@ public class Velocity extends Module { @SubscribeEvent public void onReceivePacketAll(ReceiveAllPacketsEvent e) { if (velocityModes.getInput() >= 1) { - if (!Utils.nullCheck() || LongJump.stopVelocity || e.isCanceled() || ModuleManager.blink.isEnabled() && ModuleManager.blink.cancelKnockback.isToggled() || ModuleManager.bedAura.cancelKnockback() || ModuleManager.tower.cancelKnockback() || velocityModes.getInput() == 2 && ModuleUtils.firstDamage || ModuleManager.bhop.isEnabled() && ModuleManager.bhop.damageBoost.isToggled() && ModuleUtils.firstDamage && (!ModuleManager.bhop.damageBoostRequireKey.isToggled() || ModuleManager.bhop.damageBoostKey.isPressed())) { + if (!Utils.nullCheck() || LongJump.stopVelocity || e.isCanceled() || velocityModes.getInput() == 2 && ModuleUtils.firstDamage || ModuleManager.bhop.isEnabled() && ModuleManager.bhop.damageBoost.isToggled() && ModuleUtils.firstDamage && (!ModuleManager.bhop.damageBoostRequireKey.isToggled() || ModuleManager.bhop.damageBoostKey.isPressed())) { return; } if (e.getPacket() instanceof S27PacketExplosion) { @@ -239,7 +239,7 @@ public class Velocity extends Module { } private boolean dontEditMotion() { - if (velocityModes.getInput() == 1 && zzWhileNotTargeting.isToggled() && !ModuleManager.killAura.isTargeting) { + if (velocityModes.getInput() == 1 && zzWhileNotTargeting.isToggled() && !ModuleManager.killAura.isTargeting || ModuleManager.noFall.start || ModuleManager.blink.isEnabled() && ModuleManager.blink.cancelKnockback.isToggled() || ModuleManager.bedAura.cancelKnockback() || ModuleManager.tower.cancelKnockback()) { return true; } return false; diff --git a/src/main/java/keystrokesmod/module/impl/movement/KeepSprint.java b/src/main/java/keystrokesmod/module/impl/movement/KeepSprint.java index a5bb43e..8a55a0e 100644 --- a/src/main/java/keystrokesmod/module/impl/movement/KeepSprint.java +++ b/src/main/java/keystrokesmod/module/impl/movement/KeepSprint.java @@ -13,18 +13,20 @@ public class KeepSprint extends Module { public static SliderSetting slow; public static ButtonSetting disableWhileJump; public static ButtonSetting reduceReachHits; + public static ButtonSetting onlyDamage; public KeepSprint() { super("KeepSprint", Module.category.movement, 0); this.registerSetting(new DescriptionSetting(new String("Default is 40% motion reduction."))); this.registerSetting(slow = new SliderSetting("Slow %", 40.0D, 0.0D, 40.0D, 1.0D)); this.registerSetting(disableWhileJump = new ButtonSetting("Disable while jumping", false)); + this.registerSetting(onlyDamage = new ButtonSetting("Only while hurt", false)); this.registerSetting(reduceReachHits = new ButtonSetting("Only reduce reach hits", false)); } public static void keepSprint(Entity en) { boolean vanilla = false; - if (disableWhileJump.isToggled() && !mc.thePlayer.onGround) { + if (disableWhileJump.isToggled() && !mc.thePlayer.onGround || onlyDamage.isToggled() && mc.thePlayer.hurtTime == 0) { vanilla = true; } else if (reduceReachHits.isToggled() && !mc.thePlayer.capabilities.isCreativeMode) { diff --git a/src/main/java/keystrokesmod/module/impl/player/AntiVoid.java b/src/main/java/keystrokesmod/module/impl/player/AntiVoid.java index 6d0d7c1..0e56980 100644 --- a/src/main/java/keystrokesmod/module/impl/player/AntiVoid.java +++ b/src/main/java/keystrokesmod/module/impl/player/AntiVoid.java @@ -2,6 +2,7 @@ package keystrokesmod.module.impl.player; import keystrokesmod.Raven; import keystrokesmod.event.PreUpdateEvent; +import keystrokesmod.event.ReceiveAllPacketsEvent; import keystrokesmod.event.ReceivePacketEvent; import keystrokesmod.event.SendPacketEvent; import keystrokesmod.module.Module; @@ -63,7 +64,7 @@ public class AntiVoid extends Module { return; } Packet packet = e.getPacket(); - if (!started && (!Utils.overVoid(mc.thePlayer.posX, mc.thePlayer.posY, mc.thePlayer.posZ) || mc.thePlayer.onGround)) { + if (!started && (!Utils.overVoid() || mc.thePlayer.onGround)) { y = mc.thePlayer.posY; wait = false; return; @@ -74,8 +75,8 @@ public class AntiVoid extends Module { if (packet.getClass().getSimpleName().startsWith("S")) { return; } - if (ModuleManager.killAura.isTargeting || ModuleManager.killAura.justUnTargeted) { - //return; + if (ModuleManager.noFall.isBlinking) { + return; } if (wait) { return; @@ -97,10 +98,10 @@ public class AntiVoid extends Module { @SubscribeEvent public void onPreUpdate(PreUpdateEvent e) { - if (!Utils.overVoid(mc.thePlayer.posX, mc.thePlayer.posY, mc.thePlayer.posZ) || mc.thePlayer.onGround) { + if (!Utils.overVoid() || mc.thePlayer.onGround) { release(); } - if (dist() && Utils.overVoid(mc.thePlayer.posX, mc.thePlayer.posY, mc.thePlayer.posZ) || disableLJ.isToggled() && LongJump.function) { + if (dist() && Utils.overVoid() || disableLJ.isToggled() && LongJump.function) { release(); wait = true; } diff --git a/src/main/java/keystrokesmod/module/impl/player/BedAura.java b/src/main/java/keystrokesmod/module/impl/player/BedAura.java index ad9f2cb..d818d58 100644 --- a/src/main/java/keystrokesmod/module/impl/player/BedAura.java +++ b/src/main/java/keystrokesmod/module/impl/player/BedAura.java @@ -105,6 +105,9 @@ public class BedAura extends Module { reset(true, true); return; } + if (ModuleManager.noFall.start) { + return; + } if (Utils.isBedwarsPractice() || Utils.isReplay()) { return; } diff --git a/src/main/java/keystrokesmod/module/impl/player/Blink.java b/src/main/java/keystrokesmod/module/impl/player/Blink.java index 75a4536..fe40935 100644 --- a/src/main/java/keystrokesmod/module/impl/player/Blink.java +++ b/src/main/java/keystrokesmod/module/impl/player/Blink.java @@ -122,17 +122,17 @@ public class Blink extends Module { } - @SubscribeEvent(priority = EventPriority.LOWEST) + @SubscribeEvent public void onReceivePacketAll(ReceiveAllPacketsEvent e) { if (!Utils.nullCheck() || e.isCanceled() || !cancelKnockback.isToggled()) { return; } if (e.getPacket() instanceof S12PacketEntityVelocity) { if (((S12PacketEntityVelocity) e.getPacket()).getEntityID() == mc.thePlayer.getEntityId()) { + blinkedPackets.add(e.getPacket()); e.setCanceled(true); } } - } @Override diff --git a/src/main/java/keystrokesmod/module/impl/player/Disabler.java b/src/main/java/keystrokesmod/module/impl/player/Disabler.java index e044887..2498341 100644 --- a/src/main/java/keystrokesmod/module/impl/player/Disabler.java +++ b/src/main/java/keystrokesmod/module/impl/player/Disabler.java @@ -69,6 +69,8 @@ public class Disabler extends Module { } private void resetState() { + savedYaw = mc.thePlayer.rotationYaw; + savedPitch = mc.thePlayer.rotationPitch; shouldRun = true; tickCounter = 0; applyingMotion = false; @@ -111,11 +113,7 @@ public class Disabler extends Module { if ((now - lobbyTime) < activationDelayMillis) { return; } - if (!running) { - savedYaw = e.getYaw(); - savedPitch = e.getPitch(); - running = true; - } + running = true; e.setRotations(savedYaw, savedPitch); if (waitingForGround) { @@ -161,6 +159,7 @@ public class Disabler extends Module { if (mc.thePlayer.ticksExisted % 2 == 0) { e.setPosZ(e.getPosZ() + 0.075); + e.setPosX(e.getPosX() + 0.075); } tickCounter++; diff --git a/src/main/java/keystrokesmod/module/impl/player/NoFall.java b/src/main/java/keystrokesmod/module/impl/player/NoFall.java index 424a05d..81ed88f 100644 --- a/src/main/java/keystrokesmod/module/impl/player/NoFall.java +++ b/src/main/java/keystrokesmod/module/impl/player/NoFall.java @@ -1,21 +1,25 @@ package keystrokesmod.module.impl.player; +import keystrokesmod.Raven; import keystrokesmod.event.PreMotionEvent; import keystrokesmod.event.PreUpdateEvent; import keystrokesmod.event.ReceivePacketEvent; import keystrokesmod.event.SendPacketEvent; import keystrokesmod.module.Module; import keystrokesmod.module.ModuleManager; +import keystrokesmod.module.impl.movement.LongJump; +import keystrokesmod.module.impl.render.HUD; import keystrokesmod.module.setting.impl.ButtonSetting; import keystrokesmod.module.setting.impl.SliderSetting; import keystrokesmod.script.classes.Block; -import keystrokesmod.utility.BlockUtils; -import keystrokesmod.utility.PacketUtils; -import keystrokesmod.utility.Reflection; -import keystrokesmod.utility.Utils; +import keystrokesmod.utility.*; import net.minecraft.client.gui.GuiIngame; +import net.minecraft.client.gui.ScaledResolution; import net.minecraft.init.Blocks; import net.minecraft.network.Packet; +import net.minecraft.network.handshake.client.C00Handshake; +import net.minecraft.network.login.client.C00PacketLoginStart; +import net.minecraft.network.play.client.C02PacketUseEntity; import net.minecraft.network.play.client.C03PacketPlayer; import net.minecraft.network.play.client.C08PacketPlayerBlockPlacement; import net.minecraft.network.play.server.*; @@ -24,16 +28,21 @@ import net.minecraftforge.client.event.ClientChatReceivedEvent; import net.minecraftforge.client.event.sound.SoundEvent; import net.minecraftforge.fml.common.eventhandler.EventPriority; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; +import net.minecraftforge.fml.common.gameevent.TickEvent; +import java.awt.*; import java.util.Objects; +import java.util.concurrent.ConcurrentLinkedQueue; public class NoFall extends Module { public SliderSetting mode; private SliderSetting minFallDistance; private ButtonSetting disableAdventure; private ButtonSetting ignoreVoid, voidC; - private ButtonSetting hideSound; - private String[] modes = new String[]{"Spoof", "NoGround", "Packet A", "Packet B", "CTW Packet", "Prediction"}; + private ButtonSetting hideSound, renderTimer; + private String[] modes = new String[]{"Spoof", "NoGround", "Packet A", "Packet B", "CTW Packet", "Prediction", "Blink"}; + + private int color = new Color(0, 187, 255, 255).getRGB(); private double initialY; private double dynamic; @@ -42,6 +51,15 @@ public class NoFall extends Module { private int n; + private ConcurrentLinkedQueue blinkedPackets = new ConcurrentLinkedQueue<>(); + private ConcurrentLinkedQueue regularPackets = new ConcurrentLinkedQueue<>(); + public boolean isBlinking; + public boolean bnFalling, start; + + private int blinkTicks; + + private int y; + public NoFall() { super("NoFall", category.player); this.registerSetting(mode = new SliderSetting("Mode", 2, modes)); @@ -49,11 +67,22 @@ public class NoFall extends Module { this.registerSetting(minFallDistance = new SliderSetting("Minimum fall distance", 3, 0, 10, 0.1)); this.registerSetting(ignoreVoid = new ButtonSetting("Ignore void", false)); this.registerSetting(voidC = new ButtonSetting("Experimental void check", true)); + this.registerSetting(renderTimer = new ButtonSetting("Render Blink Timer", true)); //this.registerSetting(hideSound = new ButtonSetting("Hide fall damage sound", false)); } + public void guiUpdate() { + this.renderTimer.setVisible(mode.getInput() == 6, this); + } + public void onDisable() { Utils.resetTimer(); + + if (mc.thePlayer.onGround) { + finishBlink(); + } else { + finishBlinkRegular(); + } } /*@SubscribeEvent @@ -85,6 +114,34 @@ public class NoFall extends Module { @SubscribeEvent public void onPreUpdate(PreUpdateEvent e) { + if (mode.getInput() == 6) { + if (Utils.fallDist() >= minFallDistance.getInput() && Utils.isEdgeOfBlock() && mc.thePlayer.onGround && !Utils.jumpDown() && !ModuleManager.scaffold.isEnabled && !ModuleManager.bhop.isEnabled() && !LongJump.function) { + start = true; + y = (int) mc.thePlayer.posY; + } + else if (start && !bnFalling && mc.thePlayer.posY > y) { + finishBlinkRegular(); + } + if (isBlinking) { + ++blinkTicks; + } + if (mc.thePlayer.posY < y && !mc.thePlayer.onGround && start) { + bnFalling = true; + } + else if (bnFalling) { + finishBlink(); + } + if (mc.thePlayer.posY <= y - 31 && start) { + finishBlinkRegular(); + } + } + + + + + + + if (reset()) { Utils.resetTimer(); initialY = mc.thePlayer.posY; @@ -171,7 +228,6 @@ public class NoFall extends Module { n++; } } - //Utils.print("" + mc.thePlayer.ticksExisted + " " + mc.thePlayer.motionY + " " + edging); } @SubscribeEvent(priority = EventPriority.LOWEST) @@ -183,23 +239,119 @@ public class NoFall extends Module { case 1: e.setOnGround(false); break; + case 6: + if (start) { + e.setOnGround(true); + } + break; } } + private void finishBlink() { + isBlinking = bnFalling = start = false; + blinkTicks = 0; + if (!blinkedPackets.isEmpty()) { + synchronized (blinkedPackets) { + for (Packet packet : blinkedPackets) { + Raven.packetsHandler.handlePacket(packet); + PacketUtils.sendPacketNoEvent(packet); + } + } + } + blinkedPackets.clear(); + regularPackets.clear(); + } + + private void finishBlinkRegular() { + isBlinking = bnFalling = start = false; + blinkTicks = 0; + if (!regularPackets.isEmpty()) { + synchronized (regularPackets) { + for (Packet packet : regularPackets) { + Raven.packetsHandler.handlePacket(packet); + PacketUtils.sendPacketNoEvent(packet); + } + } + } + regularPackets.clear(); + blinkedPackets.clear(); + } + + /* + if (mc.thePlayer.onGround) { + synchronized (blinkedPackets) { + for (Packet packet : blinkedPackets) { + Raven.packetsHandler.handlePacket(packet); + PacketUtils.sendPacketNoEvent(packet); + } + } + } else { + synchronized (regularPackets) { + for (Packet packet : regularPackets) { + Raven.packetsHandler.handlePacket(packet); + PacketUtils.sendPacketNoEvent(packet); + } + } + } + blinkedPackets.clear(); + regularPackets.clear(); + */ + + @SubscribeEvent + public void onRenderTick(TickEvent.RenderTickEvent ev) { + if (!Utils.nullCheck() || !renderTimer.isToggled() || mode.getInput() != 6 || blinkTicks == 0 || blinkTicks >= 99999) { + return; + } + if (ev.phase == TickEvent.Phase.END) { + if (mc.currentScreen != null) { + return; + } + } + color = Theme.getGradient((int) HUD.theme.getInput(), 0); + int widthOffset = (blinkTicks < 10) ? 4 : (blinkTicks >= 10 && blinkTicks < 100) ? 7 : (blinkTicks >= 100 && blinkTicks < 1000) ? 10 : (blinkTicks >= 1000) ? 13 : 16; + String text = ("" + blinkTicks); + int width = mc.fontRendererObj.getStringWidth(text) + Utils.getBoldWidth(text) / 2; + final ScaledResolution scaledResolution = new ScaledResolution(mc); + int[] display = {scaledResolution.getScaledWidth(), scaledResolution.getScaledHeight(), scaledResolution.getScaleFactor()}; + mc.fontRendererObj.drawString(text, display[0] / 2 - width + widthOffset, display[1] / 2 + 8, color, true); + } + + @SubscribeEvent + public void onSendPacket(SendPacketEvent e) { + if (!Utils.nullCheck()) { + return; + } + Packet packet = e.getPacket(); + if (packet.getClass().getSimpleName().startsWith("S")) { + return; + } + if (packet instanceof C00PacketLoginStart || packet instanceof C00Handshake) { + return; + } + if (!start) { + return; + } + if (!e.isCanceled()) { + isBlinking = true; + regularPackets.add(packet); + blinkedPackets.add(packet); + e.setCanceled(true); + } + } + + private boolean otherc03(Packet packet) { + return ((packet instanceof C03PacketPlayer.C04PacketPlayerPosition) || (packet instanceof C03PacketPlayer.C05PacketPlayerLook) || (packet instanceof C03PacketPlayer.C06PacketPlayerPosLook)); + } + @Override public String getInfo() { return modes[(int) mode.getInput()]; } - - private boolean isVoid() { - return Utils.overVoid(mc.thePlayer.posX, mc.thePlayer.posY, mc.thePlayer.posZ); - } - private boolean reset() { if (disableAdventure.isToggled() && mc.playerController.getCurrentGameType().isAdventure()) { return true; } - if (ignoreVoid.isToggled() && isVoid()) { + if (ignoreVoid.isToggled() && Utils.overVoid()) { return true; } if (Utils.isBedwarsPractice()) { @@ -223,13 +375,13 @@ public class NoFall extends Module { if (mc.thePlayer.capabilities.isCreativeMode) { return true; } - if (isVoid() && mc.thePlayer.posY <= 41) { + if (Utils.overVoid() && mc.thePlayer.posY <= 41) { return true; } if (mc.thePlayer.capabilities.isFlying) { return true; } - if (voidC.isToggled() && Utils.overVoid(mc.thePlayer.posX, mc.thePlayer.posY, mc.thePlayer.posZ) && !dist()) { + if (voidC.isToggled() && Utils.overVoid() && !dist()) { return true; } return false; diff --git a/src/main/java/keystrokesmod/module/impl/player/Scaffold.java b/src/main/java/keystrokesmod/module/impl/player/Scaffold.java index 6f67fc7..e133cf0 100644 --- a/src/main/java/keystrokesmod/module/impl/player/Scaffold.java +++ b/src/main/java/keystrokesmod/module/impl/player/Scaffold.java @@ -160,6 +160,10 @@ public class Scaffold extends Module { } disabledModule = true; moduleEnabled = false; + + if (!isEnabled) { + scaffoldBlockCount.beginFade(); + } } public void onEnable() { @@ -348,7 +352,7 @@ public class Scaffold extends Module { } if (quad > 42 && quad <= 45 || quad >= 45 && quad < 48) { yawAngle = 140F; - minOffset = 5; + minOffset = 4; } minPitch = 80.25F; diff --git a/src/main/java/keystrokesmod/utility/ModuleUtils.java b/src/main/java/keystrokesmod/utility/ModuleUtils.java index f2a005c..37c9320 100644 --- a/src/main/java/keystrokesmod/utility/ModuleUtils.java +++ b/src/main/java/keystrokesmod/utility/ModuleUtils.java @@ -208,9 +208,9 @@ public class ModuleUtils { if (canSlow || ModuleManager.scaffold.moduleEnabled && !ModuleManager.tower.canTower()) { double motionVal = 0.9507832 - ((double) inAirTicks / 10000) - Utils.randomizeDouble(0.00001, 0.00006); if (!hasSlowed) motionVal = motionVal - 0.15; - if (mc.thePlayer.hurtTime == 0 && inAirTicks >= 3 && !setSlow && ModuleManager.scaffold.rotation.getInput() == 2) { - mc.thePlayer.motionX *= motionVal; - mc.thePlayer.motionZ *= motionVal; + if (mc.thePlayer.hurtTime == 0 && !setSlow && !mc.thePlayer.onGround) { + //mc.thePlayer.motionX *= motionVal; + //mc.thePlayer.motionZ *= motionVal; setSlow = hasSlowed = true; //Utils.print("Slow " + motionVal); } diff --git a/src/main/java/keystrokesmod/utility/Utils.java b/src/main/java/keystrokesmod/utility/Utils.java index cb340a1..f4c8128 100644 --- a/src/main/java/keystrokesmod/utility/Utils.java +++ b/src/main/java/keystrokesmod/utility/Utils.java @@ -210,6 +210,15 @@ public class Utils { return true; } + public static boolean overVoid() { + for (int i = (int) mc.thePlayer.posY; i > -1; i--) { + if (!(mc.theWorld.getBlockState(new BlockPos(mc.thePlayer.posX, i, mc.thePlayer.posZ)).getBlock() instanceof BlockAir)) { + return false; + } + } + return true; + } + public static boolean canPlayerBeSeen(EntityLivingBase player) { double x = player.posX; double y = player.posY; @@ -924,6 +933,24 @@ public class Utils { return entity.getHeldItem() != null && entity.getHeldItem().getItem() instanceof ItemFood; } + public static double fallDist() { + if (overVoid()) { + return 9999; + } + double fallDistance = -1; + double y = mc.thePlayer.posY; + if (mc.thePlayer.posY % 1 == 0) { + y--; + } + for (int i = (int) Math.floor(y); i > -1; i--) { + if (!isPlaceable(new BlockPos(mc.thePlayer.posX, i, mc.thePlayer.posZ))) { + fallDistance = y - i; + break; + } + } + return fallDistance - 1; + } + public static double distanceToGround(Entity entity) { if (entity.onGround) { return 0;