[enhancement] Added option to Strafe to cancel player inertia

closes #1660
This commit is contained in:
Xiaro 2021-01-11 17:26:45 -05:00
parent 35bcaf8d85
commit 1facfed7e6
No known key found for this signature in database
GPG Key ID: 996D265D6E155377
7 changed files with 88 additions and 61 deletions

View File

@ -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<PacketEvent.Send> {
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<PacketEvent.Send> {
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) {

View File

@ -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
}

View File

@ -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<PacketEvent.Send> {
val ridingEntity = mc.player?.ridingEntity
safeListener<PacketEvent.Send> {
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<PacketEvent.Receive> {
if (!forceInteract.value || mc.player?.ridingEntity !is EntityBoat || it.packet !is SPacketMoveVehicle) return@listener
safeListener<PacketEvent.Receive> {
if (!forceInteract.value || player.ridingEntity !is EntityBoat || it.packet !is SPacketMoveVehicle) return@safeListener
it.cancel()
}
listener<PlayerTravelEvent> {
mc.player?.ridingEntity?.let {
if (it is EntityPig || it is AbstractHorse || it is EntityBoat && it.controllingPassenger == mc.player) {
safeListener<PlayerTravelEvent> {
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

View File

@ -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
}

View File

@ -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<TickEvent.ClientTickEvent> {
safeListener<PlayerTravelEvent> {
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--
}
}

View File

@ -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 {

View File

@ -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
}
}