mirror of https://github.com/kami-blue/client
[enhancement] Added option to Strafe to cancel player inertia
closes #1660
This commit is contained in:
parent
35bcaf8d85
commit
1facfed7e6
|
@ -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) {
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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--
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue