mirror of https://github.com/kami-blue/client
[fix] Freecam movement input compatibility (#1651)
Co-authored-by: Dominika <sokolov.dominika@gmail.com>
This commit is contained in:
parent
9a8ffbb480
commit
239221805f
|
@ -1,42 +0,0 @@
|
|||
package me.zeroeightsix.kami.mixin.client.player;
|
||||
|
||||
import me.zeroeightsix.kami.event.KamiEventBus;
|
||||
import me.zeroeightsix.kami.event.events.PlayerUpdateMoveEvent;
|
||||
import me.zeroeightsix.kami.module.modules.player.Freecam;
|
||||
import net.minecraft.util.MovementInput;
|
||||
import net.minecraft.util.MovementInputFromOptions;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.Inject;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
|
||||
/**
|
||||
* @author ionar2
|
||||
* Used with explicit permission and MIT license permission
|
||||
* https://github.com/ionar2/salhack/blob/fa9e383/src/main/java/me/ionar/salhack/mixin/client/MixinMovementInputFromOptions.java
|
||||
* @see me.zeroeightsix.kami.module.modules.movement.InventoryMove
|
||||
*/
|
||||
@Mixin(MovementInputFromOptions.class)
|
||||
public abstract class MixinMovementInputFromOptions extends MovementInput {
|
||||
@Inject(method = "updatePlayerMoveState", at = @At("RETURN"))
|
||||
public void updatePlayerMoveStateReturn(CallbackInfo callback) {
|
||||
KamiEventBus.INSTANCE.post(new PlayerUpdateMoveEvent());
|
||||
}
|
||||
|
||||
// We have to cancel this so original player doesn't move around, also reset movement input when we enable Freecam
|
||||
@Inject(method = "updatePlayerMoveState", at = @At("HEAD"), cancellable = true)
|
||||
public void updatePlayerMoveStateHead(CallbackInfo ci) {
|
||||
if (Freecam.INSTANCE.isEnabled() && Freecam.INSTANCE.getCameraGuy() != null) ci.cancel();
|
||||
if (Freecam.INSTANCE.getResetInput()) {
|
||||
this.moveForward = 0f;
|
||||
this.moveStrafe = 0f;
|
||||
this.forwardKeyDown = false;
|
||||
this.backKeyDown = false;
|
||||
this.leftKeyDown = false;
|
||||
this.rightKeyDown = false;
|
||||
this.jump = false;
|
||||
this.sneak = false;
|
||||
Freecam.INSTANCE.setResetInput(false);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -12,6 +12,7 @@ import me.zeroeightsix.kami.util.TimerUtils
|
|||
import me.zeroeightsix.kami.util.event.listener
|
||||
import me.zeroeightsix.kami.util.math.Direction
|
||||
import me.zeroeightsix.kami.util.text.MessageSendHelper
|
||||
import net.minecraft.util.MovementInputFromOptions
|
||||
import net.minecraftforge.client.event.InputUpdateEvent
|
||||
import kotlin.math.floor
|
||||
|
||||
|
@ -60,6 +61,8 @@ object AutoWalk : Module() {
|
|||
}
|
||||
|
||||
listener<InputUpdateEvent>(6969) {
|
||||
if (it.movementInput !is MovementInputFromOptions) return@listener
|
||||
|
||||
when (mode.value) {
|
||||
AutoWalkMode.FORWARD -> {
|
||||
it.movementInput.moveForward = 1.0f
|
||||
|
|
|
@ -1,13 +1,14 @@
|
|||
package me.zeroeightsix.kami.module.modules.movement
|
||||
|
||||
import me.zeroeightsix.kami.KamiMod
|
||||
import me.zeroeightsix.kami.event.events.PlayerUpdateMoveEvent
|
||||
import me.zeroeightsix.kami.module.Module
|
||||
import me.zeroeightsix.kami.setting.Settings
|
||||
import me.zeroeightsix.kami.util.event.listener
|
||||
import net.minecraft.client.gui.GuiChat
|
||||
import net.minecraft.client.gui.GuiRepair
|
||||
import net.minecraft.client.gui.inventory.GuiEditSign
|
||||
import net.minecraft.util.MovementInputFromOptions
|
||||
import net.minecraftforge.client.event.InputUpdateEvent
|
||||
import org.lwjgl.input.Keyboard
|
||||
|
||||
@Module.Info(
|
||||
|
@ -22,8 +23,8 @@ object InventoryMove : Module() {
|
|||
private var hasSent = false
|
||||
|
||||
init {
|
||||
listener<PlayerUpdateMoveEvent> {
|
||||
if (mc.currentScreen == null || mc.currentScreen is GuiChat || mc.currentScreen is GuiEditSign || mc.currentScreen is GuiRepair) return@listener
|
||||
listener<InputUpdateEvent> {
|
||||
if (it.movementInput !is MovementInputFromOptions || checkGui()) return@listener
|
||||
|
||||
if (Keyboard.isKeyDown(Keyboard.KEY_LEFT)) {
|
||||
mc.player.rotationYaw = mc.player.rotationYaw - rotateSpeed.value
|
||||
|
@ -40,44 +41,44 @@ object InventoryMove : Module() {
|
|||
mc.player.rotationPitch = (mc.player.rotationPitch + rotateSpeed.value).coerceAtMost(90.0f)
|
||||
}
|
||||
|
||||
mc.player.movementInput.moveStrafe = 0.0f
|
||||
mc.player.movementInput.moveForward = 0.0f
|
||||
it.movementInput.moveStrafe = 0.0f
|
||||
it.movementInput.moveForward = 0.0f
|
||||
|
||||
try {
|
||||
if (Keyboard.isKeyDown(mc.gameSettings.keyBindForward.keyCode)) {
|
||||
++mc.player.movementInput.moveForward
|
||||
mc.player.movementInput.forwardKeyDown = true
|
||||
++it.movementInput.moveForward
|
||||
it.movementInput.forwardKeyDown = true
|
||||
} else {
|
||||
mc.player.movementInput.forwardKeyDown = false
|
||||
it.movementInput.forwardKeyDown = false
|
||||
}
|
||||
|
||||
if (Keyboard.isKeyDown(mc.gameSettings.keyBindBack.keyCode)) {
|
||||
--mc.player.movementInput.moveForward
|
||||
mc.player.movementInput.backKeyDown = true
|
||||
--it.movementInput.moveForward
|
||||
it.movementInput.backKeyDown = true
|
||||
} else {
|
||||
mc.player.movementInput.backKeyDown = false
|
||||
it.movementInput.backKeyDown = false
|
||||
}
|
||||
|
||||
if (Keyboard.isKeyDown(mc.gameSettings.keyBindLeft.keyCode)) {
|
||||
++mc.player.movementInput.moveStrafe
|
||||
mc.player.movementInput.leftKeyDown = true
|
||||
++it.movementInput.moveStrafe
|
||||
it.movementInput.leftKeyDown = true
|
||||
} else {
|
||||
mc.player.movementInput.leftKeyDown = false
|
||||
it.movementInput.leftKeyDown = false
|
||||
}
|
||||
|
||||
if (Keyboard.isKeyDown(mc.gameSettings.keyBindRight.keyCode)) {
|
||||
--mc.player.movementInput.moveStrafe
|
||||
mc.player.movementInput.rightKeyDown = true
|
||||
--it.movementInput.moveStrafe
|
||||
it.movementInput.rightKeyDown = true
|
||||
} else {
|
||||
mc.player.movementInput.rightKeyDown = false
|
||||
it.movementInput.rightKeyDown = false
|
||||
}
|
||||
|
||||
if (Keyboard.isKeyDown(mc.gameSettings.keyBindJump.keyCode)) {
|
||||
mc.player.movementInput.jump = true
|
||||
it.movementInput.jump = true
|
||||
}
|
||||
|
||||
if (Keyboard.isKeyDown(mc.gameSettings.keyBindSneak.keyCode) && sneak.value) {
|
||||
mc.player.movementInput.sneak = true
|
||||
it.movementInput.sneak = true
|
||||
}
|
||||
} catch (e: IndexOutOfBoundsException) {
|
||||
if (!hasSent) {
|
||||
|
@ -88,4 +89,9 @@ object InventoryMove : Module() {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun checkGui() = mc.currentScreen == null
|
||||
|| mc.currentScreen is GuiChat
|
||||
|| mc.currentScreen is GuiEditSign
|
||||
|| mc.currentScreen is GuiRepair
|
||||
}
|
|
@ -16,7 +16,11 @@ import net.minecraft.client.entity.EntityPlayerSP
|
|||
import net.minecraft.entity.MoverType
|
||||
import net.minecraft.entity.player.EntityPlayer
|
||||
import net.minecraft.network.play.client.CPacketUseEntity
|
||||
import net.minecraft.util.MovementInput
|
||||
import net.minecraft.util.MovementInputFromOptions
|
||||
import net.minecraft.util.math.RayTraceResult
|
||||
import net.minecraft.util.math.Vec3d
|
||||
import net.minecraftforge.client.event.InputUpdateEvent
|
||||
import net.minecraftforge.fml.common.gameevent.InputEvent
|
||||
import net.minecraftforge.fml.common.gameevent.TickEvent
|
||||
import org.lwjgl.input.Keyboard
|
||||
|
@ -39,13 +43,13 @@ object Freecam : Module() {
|
|||
|
||||
private var prevThirdPersonViewSetting = -1
|
||||
var cameraGuy: EntityPlayer? = null; private set
|
||||
var resetInput = false
|
||||
|
||||
private const val ENTITY_ID = -6969420
|
||||
|
||||
override fun onDisable() {
|
||||
mc.renderChunksMany = true
|
||||
resetCameraGuy()
|
||||
resetMovementInput(mc.player?.movementInput)
|
||||
}
|
||||
|
||||
override fun onEnable() {
|
||||
|
@ -65,6 +69,10 @@ object Freecam : Module() {
|
|||
if (it.packet.getEntityFromWorld(mc.world) == mc.player) it.cancel()
|
||||
}
|
||||
|
||||
listener<ClientPlayerAttackEvent> {
|
||||
if (it.entity == mc.player) it.cancel()
|
||||
}
|
||||
|
||||
listener<InputEvent.KeyInputEvent> {
|
||||
if (mc.world == null || mc.player == null) return@listener
|
||||
// Force it to stay in first person lol
|
||||
|
@ -80,16 +88,28 @@ object Freecam : Module() {
|
|||
}
|
||||
|
||||
if (cameraGuy == null && mc.player.ticksExisted > 20) spawnCameraGuy()
|
||||
|
||||
if (!BaritoneUtils.isPathing && !BaritoneUtils.isActive) {
|
||||
if (autoRotate.value) updatePlayerRotation()
|
||||
|
||||
if (arrowKeyMove.value) updatePlayerMovement()
|
||||
}
|
||||
}
|
||||
|
||||
listener<ClientPlayerAttackEvent> {
|
||||
if (it.entity == mc.player) it.cancel()
|
||||
listener<InputUpdateEvent>(9999) {
|
||||
if (it.movementInput !is MovementInputFromOptions || BaritoneUtils.isPathing || BaritoneUtils.isActive) return@listener
|
||||
|
||||
resetMovementInput(it.movementInput)
|
||||
if (autoRotate.value) updatePlayerRotation()
|
||||
if (arrowKeyMove.value) updatePlayerMovement()
|
||||
}
|
||||
}
|
||||
|
||||
private fun resetMovementInput(movementInput: MovementInput?) {
|
||||
if (movementInput !is MovementInputFromOptions) return
|
||||
movementInput.apply {
|
||||
moveForward = 0f
|
||||
moveStrafe = 0f
|
||||
forwardKeyDown = false
|
||||
backKeyDown = false
|
||||
leftKeyDown = false
|
||||
rightKeyDown = false
|
||||
jump = false
|
||||
sneak = false
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -97,13 +117,13 @@ object Freecam : Module() {
|
|||
// Create a cloned player
|
||||
cameraGuy = FakeCamera(mc.player).also {
|
||||
// Add it to the world
|
||||
mc.world.addEntityToWorld(ENTITY_ID, it)
|
||||
mc.world?.addEntityToWorld(ENTITY_ID, it)
|
||||
|
||||
// Set the render view entity to our camera guy
|
||||
mc.renderViewEntity = it
|
||||
|
||||
// Reset player movement input
|
||||
resetInput = true
|
||||
resetMovementInput(mc.player?.movementInput)
|
||||
|
||||
// Stores prev third person view setting
|
||||
prevThirdPersonViewSetting = mc.gameSettings.thirdPersonView
|
||||
|
@ -112,32 +132,40 @@ object Freecam : Module() {
|
|||
}
|
||||
|
||||
private fun updatePlayerRotation() {
|
||||
mc.objectMouseOver?.hitVec?.let {
|
||||
val rotation = Vec2f(RotationUtils.getRotationTo(it, true))
|
||||
mc.player.rotationYaw = rotation.x
|
||||
mc.player.rotationPitch = rotation.y
|
||||
mc.objectMouseOver?.let {
|
||||
val hitVec = it.hitVec
|
||||
if (it.typeOfHit == RayTraceResult.Type.MISS || hitVec == null) return
|
||||
val rotation = Vec2f(RotationUtils.getRotationTo(hitVec, true))
|
||||
mc.player?.apply {
|
||||
rotationYaw = rotation.x
|
||||
rotationPitch = rotation.y
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun updatePlayerMovement() {
|
||||
cameraGuy?.let {
|
||||
val forward = Keyboard.isKeyDown(Keyboard.KEY_UP) to Keyboard.isKeyDown(Keyboard.KEY_DOWN)
|
||||
val strafe = Keyboard.isKeyDown(Keyboard.KEY_LEFT) to Keyboard.isKeyDown(Keyboard.KEY_RIGHT)
|
||||
val movementInput = calcMovementInput(forward, strafe, false to false)
|
||||
mc.player?.let { player ->
|
||||
cameraGuy?.let {
|
||||
val forward = Keyboard.isKeyDown(Keyboard.KEY_UP) to Keyboard.isKeyDown(Keyboard.KEY_DOWN)
|
||||
val strafe = Keyboard.isKeyDown(Keyboard.KEY_LEFT) to Keyboard.isKeyDown(Keyboard.KEY_RIGHT)
|
||||
val movementInput = calcMovementInput(forward, strafe, false to false)
|
||||
|
||||
val yawDiff = mc.player.rotationYaw - it.rotationYaw
|
||||
val yawRad = MovementUtils.calcMoveYaw(yawDiff, movementInput.first, movementInput.second).toFloat()
|
||||
val inputTotal = min(abs(movementInput.first) + abs(movementInput.second), 1f)
|
||||
val yawDiff = player.rotationYaw - it.rotationYaw
|
||||
val yawRad = MovementUtils.calcMoveYaw(yawDiff, movementInput.first, movementInput.second).toFloat()
|
||||
val inputTotal = min(abs(movementInput.first) + abs(movementInput.second), 1f)
|
||||
|
||||
mc.player.movementInput.moveForward = cos(yawRad) * inputTotal
|
||||
mc.player.movementInput.moveStrafe = sin(yawRad) * inputTotal
|
||||
player.movementInput?.apply {
|
||||
moveForward = cos(yawRad) * inputTotal
|
||||
moveStrafe = sin(yawRad) * inputTotal
|
||||
|
||||
mc.player.movementInput.forwardKeyDown = mc.player.movementInput.moveForward > 0f
|
||||
mc.player.movementInput.backKeyDown = mc.player.movementInput.moveForward < 0f
|
||||
mc.player.movementInput.leftKeyDown = mc.player.movementInput.moveStrafe < 0f
|
||||
mc.player.movementInput.rightKeyDown = mc.player.movementInput.moveStrafe > 0f
|
||||
forwardKeyDown = moveForward > 0f
|
||||
backKeyDown = moveForward < 0f
|
||||
leftKeyDown = moveStrafe < 0f
|
||||
rightKeyDown = moveStrafe > 0f
|
||||
|
||||
mc.player.movementInput.jump = Keyboard.isKeyDown(Keyboard.KEY_RCONTROL)
|
||||
jump = Keyboard.isKeyDown(Keyboard.KEY_RCONTROL)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -45,7 +45,6 @@
|
|||
"optifine.MixinConfig",
|
||||
"player.MixinEntityPlayer",
|
||||
"player.MixinEntityPlayerSP",
|
||||
"player.MixinMovementInputFromOptions",
|
||||
"player.MixinPlayerControllerMP",
|
||||
"render.MixinDebugRendererChunkBorder",
|
||||
"render.MixinEntityRenderer",
|
||||
|
|
Loading…
Reference in New Issue