From 1facfed7e648d5249a4535c138878bfa34b40270 Mon Sep 17 00:00:00 2001 From: Xiaro <62033805+Xiaro@users.noreply.github.com> Date: Mon, 11 Jan 2021 17:26:45 -0500 Subject: [PATCH] [enhancement] Added option to Strafe to cancel player inertia closes #1660 --- .../kami/module/modules/combat/Criticals.kt | 27 ++++---- .../module/modules/movement/ElytraFlight.kt | 6 +- .../module/modules/movement/EntitySpeed.kt | 36 ++++++----- .../kami/module/modules/movement/Flight.kt | 3 +- .../kami/module/modules/movement/Strafe.kt | 61 ++++++++++++------- .../kami/module/modules/player/Freecam.kt | 3 +- .../zeroeightsix/kami/util/MovementUtils.kt | 13 ++-- 7 files changed, 88 insertions(+), 61 deletions(-) diff --git a/src/main/java/me/zeroeightsix/kami/module/modules/combat/Criticals.kt b/src/main/java/me/zeroeightsix/kami/module/modules/combat/Criticals.kt index 8765e79b1..9d9d7171e 100644 --- a/src/main/java/me/zeroeightsix/kami/module/modules/combat/Criticals.kt +++ b/src/main/java/me/zeroeightsix/kami/module/modules/combat/Criticals.kt @@ -1,9 +1,10 @@ package me.zeroeightsix.kami.module.modules.combat +import me.zeroeightsix.kami.event.SafeClientEvent import me.zeroeightsix.kami.event.events.PacketEvent import me.zeroeightsix.kami.module.Module import me.zeroeightsix.kami.setting.ModuleConfig.setting -import me.zeroeightsix.kami.util.MovementUtils +import me.zeroeightsix.kami.util.MovementUtils.setSpeed import me.zeroeightsix.kami.util.MovementUtils.speed import me.zeroeightsix.kami.util.threads.safeListener import net.minecraft.entity.EntityLivingBase @@ -11,7 +12,6 @@ import net.minecraft.network.play.client.CPacketAnimation import net.minecraft.network.play.client.CPacketPlayer import net.minecraft.network.play.client.CPacketUseEntity import net.minecraftforge.fml.common.gameevent.TickEvent -import org.kamiblue.event.listener.listener object Criticals : Module( name = "Criticals", @@ -35,15 +35,16 @@ object Criticals : Module( delayTick = 0 } - listener { - if (mc.player == null || !(it.packet is CPacketAnimation || it.packet is CPacketUseEntity)) return@listener - if (mc.player.isInWater || mc.player.isInLava || !mc.player.onGround) return@listener /* Don't run if player is sprinting or weapon is still in cooldown */ + safeListener { + if (it.packet !is CPacketAnimation && it.packet !is CPacketUseEntity) return@safeListener + + if (player.isInWater || player.isInLava || !player.onGround) return@safeListener /* Don't run if player is sprinting or weapon is still in cooldown */ if (it.packet is CPacketUseEntity && it.packet.action == CPacketUseEntity.Action.ATTACK) { - val target = it.packet.getEntityFromWorld(mc.world) - if (target == null || target !is EntityLivingBase) return@listener - mc.player.isSprinting = false - if (mc.player.speed > 0.2) MovementUtils.setSpeed(0.2) + val target = it.packet.getEntityFromWorld(world) + if (target == null || target !is EntityLivingBase) return@safeListener + player.isSprinting = false + if (player.speed > 0.2) setSpeed(0.2) if (mode.value == CriticalMode.PACKET) { packetMode() } else { @@ -58,7 +59,7 @@ object Criticals : Module( /* Sends attack packet and swing packet when falling */ if (mode.value == CriticalMode.DELAY && delayTick != 0) { player.isSprinting = false - if (player.speed > 0.2) MovementUtils.setSpeed(0.2) + if (player.speed > 0.2) setSpeed(0.2) if (player.motionY < -0.1 && delayTick in 1..15) { sendingPacket = true connection.sendPacket(attackPacket) @@ -74,10 +75,10 @@ object Criticals : Module( } } - private fun packetMode() { + private fun SafeClientEvent.packetMode() { /* lol Minecraft checks for criticals if you're not on a block so just say you're not */ - mc.player.connection.sendPacket(CPacketPlayer.Position(mc.player.posX, mc.player.posY + 0.1f, mc.player.posZ, false)) - mc.player.connection.sendPacket(CPacketPlayer.Position(mc.player.posX, mc.player.posY, mc.player.posZ, false)) + connection.sendPacket(CPacketPlayer.Position(player.posX, player.posY + 0.1f, player.posZ, false)) + connection.sendPacket(CPacketPlayer.Position(player.posX, player.posY, player.posZ, false)) } private fun delayModeAttack(event: PacketEvent) { diff --git a/src/main/java/me/zeroeightsix/kami/module/modules/movement/ElytraFlight.kt b/src/main/java/me/zeroeightsix/kami/module/modules/movement/ElytraFlight.kt index 584bdef54..38b0f25e1 100644 --- a/src/main/java/me/zeroeightsix/kami/module/modules/movement/ElytraFlight.kt +++ b/src/main/java/me/zeroeightsix/kami/module/modules/movement/ElytraFlight.kt @@ -10,7 +10,7 @@ import me.zeroeightsix.kami.mixin.extension.timer import me.zeroeightsix.kami.module.Module import me.zeroeightsix.kami.module.modules.player.LagNotifier import me.zeroeightsix.kami.setting.ModuleConfig.setting -import me.zeroeightsix.kami.util.MovementUtils +import me.zeroeightsix.kami.util.MovementUtils.calcMoveYaw import me.zeroeightsix.kami.util.MovementUtils.speed import me.zeroeightsix.kami.util.WorldUtils.getGroundPos import me.zeroeightsix.kami.util.WorldUtils.isLiquidBelow @@ -312,8 +312,8 @@ object ElytraFlight : Module( * * @return Yaw in radians based on player rotation yaw and movement input */ - private fun getYaw(): Double { - val yawRad = MovementUtils.calcMoveYaw() + private fun SafeClientEvent.getYaw(): Double { + val yawRad = calcMoveYaw() packetYaw = Math.toDegrees(yawRad).toFloat() return yawRad } diff --git a/src/main/java/me/zeroeightsix/kami/module/modules/movement/EntitySpeed.kt b/src/main/java/me/zeroeightsix/kami/module/modules/movement/EntitySpeed.kt index c14cca425..88cc8bf2b 100644 --- a/src/main/java/me/zeroeightsix/kami/module/modules/movement/EntitySpeed.kt +++ b/src/main/java/me/zeroeightsix/kami/module/modules/movement/EntitySpeed.kt @@ -1,10 +1,13 @@ package me.zeroeightsix.kami.module.modules.movement +import me.zeroeightsix.kami.event.SafeClientEvent import me.zeroeightsix.kami.event.events.PacketEvent import me.zeroeightsix.kami.event.events.PlayerTravelEvent import me.zeroeightsix.kami.module.Module import me.zeroeightsix.kami.setting.ModuleConfig.setting import me.zeroeightsix.kami.util.MovementUtils +import me.zeroeightsix.kami.util.MovementUtils.calcMoveYaw +import me.zeroeightsix.kami.util.threads.safeListener import net.minecraft.entity.Entity import net.minecraft.entity.item.EntityBoat import net.minecraft.entity.passive.AbstractHorse @@ -16,7 +19,6 @@ import net.minecraft.network.play.client.CPacketVehicleMove import net.minecraft.network.play.server.SPacketMoveVehicle import net.minecraft.util.EnumHand import net.minecraft.world.chunk.EmptyChunk -import org.kamiblue.event.listener.listener import kotlin.math.cos import kotlin.math.sin @@ -35,28 +37,30 @@ object EntitySpeed : Module( private val interactTickDelay = setting("InteractTickDelay", 2, 1..20, 1, { forceInteract.value }) init { - listener { - val ridingEntity = mc.player?.ridingEntity + safeListener { + val ridingEntity = player.ridingEntity + + if (!forceInteract.value || ridingEntity !is EntityBoat) return@safeListener - if (!forceInteract.value || ridingEntity !is EntityBoat) return@listener if (it.packet is CPacketPlayer.Rotation || it.packet is CPacketInput) { it.cancel() } + if (it.packet is CPacketVehicleMove) { - if (mc.player.ticksExisted % interactTickDelay.value == 0) { - mc.playerController.interactWithEntity(mc.player, ridingEntity, EnumHand.MAIN_HAND) + if (player.ticksExisted % interactTickDelay.value == 0) { + playerController.interactWithEntity(player, ridingEntity, EnumHand.MAIN_HAND) } } } - listener { - if (!forceInteract.value || mc.player?.ridingEntity !is EntityBoat || it.packet !is SPacketMoveVehicle) return@listener + safeListener { + if (!forceInteract.value || player.ridingEntity !is EntityBoat || it.packet !is SPacketMoveVehicle) return@safeListener it.cancel() } - listener { - mc.player?.ridingEntity?.let { - if (it is EntityPig || it is AbstractHorse || it is EntityBoat && it.controllingPassenger == mc.player) { + safeListener { + player.ridingEntity?.let { + if (it is EntityPig || it is AbstractHorse || it is EntityBoat && it.controllingPassenger == player) { steerEntity(it) if (flight.value) fly(it) } @@ -64,8 +68,8 @@ object EntitySpeed : Module( } } - private fun steerEntity(entity: Entity) { - val yawRad = MovementUtils.calcMoveYaw() + private fun SafeClientEvent.steerEntity(entity: Entity) { + val yawRad = calcMoveYaw() val motionX = -sin(yawRad) * speed.value val motionZ = cos(yawRad) * speed.value @@ -79,7 +83,7 @@ object EntitySpeed : Module( } if (entity is EntityHorse || entity is EntityBoat) { - entity.rotationYaw = mc.player.rotationYaw + entity.rotationYaw = player.rotationYaw // Make sure the boat doesn't turn etc (params: isLeftDown, isRightDown, isForwardDown, isBackDown) if (entity is EntityBoat) entity.updateInputs(false, false, false, false) @@ -91,8 +95,8 @@ object EntitySpeed : Module( if (mc.gameSettings.keyBindJump.isKeyDown) entity.motionY += upSpeed.value / 2.0 } - private fun isBorderingChunk(entity: Entity, motionX: Double, motionZ: Double): Boolean { - return antiStuck.value && mc.world.getChunk((entity.posX + motionX).toInt() shr 4, (entity.posZ + motionZ).toInt() shr 4) is EmptyChunk + private fun SafeClientEvent.isBorderingChunk(entity: Entity, motionX: Double, motionZ: Double): Boolean { + return antiStuck.value && world.getChunk((entity.posX + motionX).toInt() shr 4, (entity.posZ + motionZ).toInt() shr 4) is EmptyChunk } @JvmStatic diff --git a/src/main/java/me/zeroeightsix/kami/module/modules/movement/Flight.kt b/src/main/java/me/zeroeightsix/kami/module/modules/movement/Flight.kt index 9b7b31ce8..e39d0923b 100644 --- a/src/main/java/me/zeroeightsix/kami/module/modules/movement/Flight.kt +++ b/src/main/java/me/zeroeightsix/kami/module/modules/movement/Flight.kt @@ -8,6 +8,7 @@ import me.zeroeightsix.kami.manager.managers.PlayerPacketManager import me.zeroeightsix.kami.module.Module import me.zeroeightsix.kami.setting.ModuleConfig.setting import me.zeroeightsix.kami.util.MovementUtils +import me.zeroeightsix.kami.util.MovementUtils.calcMoveYaw import me.zeroeightsix.kami.util.threads.runSafe import me.zeroeightsix.kami.util.threads.safeListener import net.minecraft.network.play.client.CPacketPlayer @@ -69,7 +70,7 @@ object Flight : Module( else -0.0622 } else { if (MovementUtils.isInputting) { - val yaw = MovementUtils.calcMoveYaw() + val yaw = calcMoveYaw() player.motionX = -sin(yaw) * 0.2f player.motionZ = cos(yaw) * 0.2f } diff --git a/src/main/java/me/zeroeightsix/kami/module/modules/movement/Strafe.kt b/src/main/java/me/zeroeightsix/kami/module/modules/movement/Strafe.kt index 8d273ab5a..be308dafc 100644 --- a/src/main/java/me/zeroeightsix/kami/module/modules/movement/Strafe.kt +++ b/src/main/java/me/zeroeightsix/kami/module/modules/movement/Strafe.kt @@ -1,16 +1,20 @@ package me.zeroeightsix.kami.module.modules.movement import me.zeroeightsix.kami.event.SafeClientEvent +import me.zeroeightsix.kami.event.events.PlayerTravelEvent import me.zeroeightsix.kami.mixin.extension.tickLength import me.zeroeightsix.kami.mixin.extension.timer import me.zeroeightsix.kami.module.Module import me.zeroeightsix.kami.setting.ModuleConfig.setting import me.zeroeightsix.kami.util.BaritoneUtils import me.zeroeightsix.kami.util.MovementUtils +import me.zeroeightsix.kami.util.MovementUtils.calcMoveYaw +import me.zeroeightsix.kami.util.MovementUtils.setSpeed import me.zeroeightsix.kami.util.MovementUtils.speed +import me.zeroeightsix.kami.util.TickTimer +import me.zeroeightsix.kami.util.TimeUnit import me.zeroeightsix.kami.util.threads.safeListener import net.minecraft.client.settings.KeyBinding -import net.minecraftforge.fml.common.gameevent.TickEvent import kotlin.math.cos import kotlin.math.sin @@ -22,9 +26,11 @@ object Strafe : Module( private val airSpeedBoost by setting("AirSpeedBoost", true) private val timerBoost by setting("TimerBoost", true) private val autoJump by setting("AutoJump", true) - private val onHolding by setting("OnHoldingSprint", false) + private val onHoldingSprint by setting("OnHoldingSprint", false) + private val cancelInertia by setting("CancelInertia", false) private var jumpTicks = 0 + private var strafeTimer = TickTimer(TimeUnit.TICKS) /* If you skid this you omega gay */ init { @@ -32,39 +38,50 @@ object Strafe : Module( reset() } - safeListener { + safeListener { if (!shouldStrafe()) { reset() + if (cancelInertia && !strafeTimer.tick(2L)) { + player.motionX = 0.0 + player.motionZ = 0.0 + } return@safeListener } - MovementUtils.setSpeed(player.speed) + + setSpeed(player.speed) if (airSpeedBoost) player.jumpMovementFactor = 0.029f if (timerBoost) mc.timer.tickLength = 45.87155914306640625f + if (autoJump) jump() - if (autoJump && player.onGround && jumpTicks <= 0) { - KeyBinding.setKeyBindState(mc.gameSettings.keyBindJump.keyCode, false) - player.motionY = 0.41 - if (player.isSprinting) { - val yaw = MovementUtils.calcMoveYaw() - player.motionX -= sin(yaw) * 0.2 - player.motionZ += cos(yaw) * 0.2 - } - player.isAirBorne = true - jumpTicks = 5 - } - if (jumpTicks > 0) jumpTicks-- + strafeTimer.reset() } } + private fun reset() { + mc.player?.jumpMovementFactor = 0.02f + mc.timer.tickLength = 50.0f + jumpTicks = 0 + } + private fun SafeClientEvent.shouldStrafe() = !BaritoneUtils.isPathing && !player.capabilities.isFlying && !player.isElytraFlying - && (mc.gameSettings.keyBindSprint.isKeyDown || !onHolding) - && (player.moveForward != 0f || player.moveStrafing != 0f) + && (!onHoldingSprint || mc.gameSettings.keyBindSprint.isKeyDown) + && MovementUtils.isInputting - private fun reset() { - mc.player?.jumpMovementFactor = 0.02F - mc.timer.tickLength = 50F - jumpTicks = 0 + private fun SafeClientEvent.jump() { + if (player.onGround && jumpTicks <= 0) { + KeyBinding.setKeyBindState(mc.gameSettings.keyBindJump.keyCode, false) + player.motionY = 0.41 + if (player.isSprinting) { + val yaw = calcMoveYaw() + player.motionX -= sin(yaw) * 0.2 + player.motionZ += cos(yaw) * 0.2 + } + player.isAirBorne = true + jumpTicks = 5 + } + + jumpTicks-- } } diff --git a/src/main/java/me/zeroeightsix/kami/module/modules/player/Freecam.kt b/src/main/java/me/zeroeightsix/kami/module/modules/player/Freecam.kt index 74441dda7..52a177675 100644 --- a/src/main/java/me/zeroeightsix/kami/module/modules/player/Freecam.kt +++ b/src/main/java/me/zeroeightsix/kami/module/modules/player/Freecam.kt @@ -8,6 +8,7 @@ import me.zeroeightsix.kami.event.events.PlayerAttackEvent import me.zeroeightsix.kami.module.Module import me.zeroeightsix.kami.setting.ModuleConfig.setting import me.zeroeightsix.kami.util.* +import me.zeroeightsix.kami.util.MovementUtils.calcMoveYaw import me.zeroeightsix.kami.util.math.RotationUtils import me.zeroeightsix.kami.util.math.VectorUtils.toBlockPos import me.zeroeightsix.kami.util.threads.runSafe @@ -194,7 +195,7 @@ object Freecam : Module( val movementInput = calcMovementInput(forward, strafe, false to false) val yawDiff = player.rotationYaw - it.rotationYaw - val yawRad = MovementUtils.calcMoveYaw(yawDiff, movementInput.first, movementInput.second).toFloat() + val yawRad = calcMoveYaw(yawDiff, movementInput.first, movementInput.second).toFloat() val inputTotal = min(abs(movementInput.first) + abs(movementInput.second), 1f) player.movementInput?.apply { diff --git a/src/main/java/me/zeroeightsix/kami/util/MovementUtils.kt b/src/main/java/me/zeroeightsix/kami/util/MovementUtils.kt index 8054ac631..220f095b2 100644 --- a/src/main/java/me/zeroeightsix/kami/util/MovementUtils.kt +++ b/src/main/java/me/zeroeightsix/kami/util/MovementUtils.kt @@ -1,5 +1,6 @@ package me.zeroeightsix.kami.util +import me.zeroeightsix.kami.event.SafeClientEvent import net.minecraft.client.Minecraft import net.minecraft.entity.Entity import kotlin.math.cos @@ -9,14 +10,16 @@ import kotlin.math.sin object MovementUtils { private val mc = Minecraft.getMinecraft() - val isInputting get() = mc.player.movementInput.moveForward != 0f || mc.player.movementInput.moveStrafe != 0f + val isInputting get() = mc.player?.movementInput?.let { + it.moveForward != 0f || it.moveStrafe != 0f + } ?: false val Entity.isMoving get() = speed > 0.0001 val Entity.speed get() = hypot(motionX, motionZ) val Entity.realSpeed get() = hypot(posX - prevPosX, posZ - prevPosZ) /* totally not taken from elytrafly */ - fun calcMoveYaw(yawIn: Float = mc.player.rotationYaw, moveForward: Float = roundedForward, moveString: Float = roundedStrafing): Double { + fun SafeClientEvent.calcMoveYaw(yawIn: Float = mc.player.rotationYaw, moveForward: Float = roundedForward, moveString: Float = roundedStrafing): Double { var strafe = 90 * moveString strafe *= if (moveForward != 0F) moveForward * 0.5F else 1F @@ -35,9 +38,9 @@ object MovementUtils { else -> 0f } - fun setSpeed(speed: Double) { + fun SafeClientEvent.setSpeed(speed: Double) { val yaw = calcMoveYaw() - mc.player.motionX = -sin(yaw) * speed - mc.player.motionZ = cos(yaw) * speed + player.motionX = -sin(yaw) * speed + player.motionZ = cos(yaw) * speed } } \ No newline at end of file