From 78ae141ea6524b87c4f3c79d2faa610ba2cc09fc Mon Sep 17 00:00:00 2001 From: 1zuna Date: Sun, 26 Nov 2023 01:44:06 +0100 Subject: [PATCH] simulates tick for rotation --- .../liquidbounce/event/EventManager.kt | 3 ++- .../liquidbounce/event/events/ClientEvents.kt | 9 +++++++ .../module/modules/combat/ModuleAimbot.kt | 4 +-- .../module/modules/combat/ModuleKillAura.kt | 4 +-- .../modules/world/ModuleProjectilePuncher.kt | 4 +-- .../modules/world/scaffold/ModuleScaffold.kt | 4 +-- .../utils/aiming/RotationsUtil.kt | 26 ++++++++++++------- 7 files changed, 36 insertions(+), 18 deletions(-) diff --git a/src/main/kotlin/net/ccbluex/liquidbounce/event/EventManager.kt b/src/main/kotlin/net/ccbluex/liquidbounce/event/EventManager.kt index c12a0d1dc33..28c49de2c3f 100644 --- a/src/main/kotlin/net/ccbluex/liquidbounce/event/EventManager.kt +++ b/src/main/kotlin/net/ccbluex/liquidbounce/event/EventManager.kt @@ -88,7 +88,8 @@ val ALL_EVENT_CLASSES: Array> = arrayOf( ClientChatErrorEvent::class, StateUpdateEvent::class, WorldChangeEvent::class, - AltManagerUpdateEvent::class + AltManagerUpdateEvent::class, + SimulatedTickEvent::class ) /** diff --git a/src/main/kotlin/net/ccbluex/liquidbounce/event/events/ClientEvents.kt b/src/main/kotlin/net/ccbluex/liquidbounce/event/events/ClientEvents.kt index e5048c6aedb..d1beb9d5e50 100644 --- a/src/main/kotlin/net/ccbluex/liquidbounce/event/events/ClientEvents.kt +++ b/src/main/kotlin/net/ccbluex/liquidbounce/event/events/ClientEvents.kt @@ -57,3 +57,12 @@ class ClientChatErrorEvent(val error: String) : Event() @Nameable("altManagerUpdate") class AltManagerUpdateEvent(val success: Boolean, val message: String) : Event() + +/** + * The simulated tick event is called by the [MovementInputEvent] with a simulated movement context. + * This context includes a simulated player position one tick into the future. + * Position changes will not apply within the simulated tick. Only use this for prediction purposes as + * updating the rotation or target. + */ +@Nameable("simulatedTick") +class SimulatedTickEvent : Event() diff --git a/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/combat/ModuleAimbot.kt b/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/combat/ModuleAimbot.kt index dddf2d02fd3..7459b683453 100644 --- a/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/combat/ModuleAimbot.kt +++ b/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/combat/ModuleAimbot.kt @@ -18,7 +18,7 @@ */ package net.ccbluex.liquidbounce.features.module.modules.combat -import net.ccbluex.liquidbounce.event.events.PlayerMovementTickEvent +import net.ccbluex.liquidbounce.event.events.SimulatedTickEvent import net.ccbluex.liquidbounce.event.handler import net.ccbluex.liquidbounce.features.module.Category import net.ccbluex.liquidbounce.features.module.Module @@ -47,7 +47,7 @@ object ModuleAimbot : Module("Aimbot", Category.COMBAT) { targetRotation = null } - val tickHandler = handler { event -> + val tickHandler = handler { event -> targetRotation = findNextTargetRotation() targetRotation?.let { RotationManager.aimAt(it, true, rotationsConfigurable) } } diff --git a/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/combat/ModuleKillAura.kt b/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/combat/ModuleKillAura.kt index e980cd644e7..fe9b0ec4f62 100644 --- a/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/combat/ModuleKillAura.kt +++ b/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/combat/ModuleKillAura.kt @@ -24,7 +24,7 @@ import net.ccbluex.liquidbounce.config.NamedChoice import net.ccbluex.liquidbounce.config.ToggleableConfigurable import net.ccbluex.liquidbounce.event.DummyEvent import net.ccbluex.liquidbounce.event.Sequence -import net.ccbluex.liquidbounce.event.events.PlayerMovementTickEvent +import net.ccbluex.liquidbounce.event.events.SimulatedTickEvent import net.ccbluex.liquidbounce.event.events.WorldRenderEvent import net.ccbluex.liquidbounce.event.handler import net.ccbluex.liquidbounce.event.repeatable @@ -367,7 +367,7 @@ object ModuleKillAura : Module("KillAura", Category.COMBAT) { } } - val rotationUpdateHandler = handler { + val rotationUpdateHandler = handler { // Make sure killaura-logic is not running while inventory is open val isInInventoryScreen = InventoryTracker.isInventoryOpenServerSide || mc.currentScreen is GenericContainerScreen diff --git a/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/world/ModuleProjectilePuncher.kt b/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/world/ModuleProjectilePuncher.kt index e23fb69cf4b..937b43bb155 100644 --- a/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/world/ModuleProjectilePuncher.kt +++ b/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/world/ModuleProjectilePuncher.kt @@ -19,7 +19,7 @@ package net.ccbluex.liquidbounce.features.module.modules.world -import net.ccbluex.liquidbounce.event.events.PlayerMovementTickEvent +import net.ccbluex.liquidbounce.event.events.SimulatedTickEvent import net.ccbluex.liquidbounce.event.handler import net.ccbluex.liquidbounce.event.repeatable import net.ccbluex.liquidbounce.features.module.Category @@ -62,7 +62,7 @@ object ModuleProjectilePuncher : Module("ProjectilePuncher", Category.WORLD) { targetTracker.cleanup() } - val tickHandler = handler { + val tickHandler = handler { if (player.isSpectator) { return@handler } diff --git a/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/world/scaffold/ModuleScaffold.kt b/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/world/scaffold/ModuleScaffold.kt index 2e84f038f8c..91468b77895 100644 --- a/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/world/scaffold/ModuleScaffold.kt +++ b/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/world/scaffold/ModuleScaffold.kt @@ -19,7 +19,7 @@ package net.ccbluex.liquidbounce.features.module.modules.world.scaffold import net.ccbluex.liquidbounce.config.ToggleableConfigurable -import net.ccbluex.liquidbounce.event.events.PlayerMovementTickEvent +import net.ccbluex.liquidbounce.event.events.SimulatedTickEvent import net.ccbluex.liquidbounce.event.handler import net.ccbluex.liquidbounce.event.repeatable import net.ccbluex.liquidbounce.features.module.Category @@ -169,7 +169,7 @@ object ModuleScaffold : Module("Scaffold", Category.WORLD) { SilentHotbar.resetSlot(this) } - private val rotationUpdateHandler = handler { + private val rotationUpdateHandler = handler { val blockInHotbar = findBestValidHotbarSlotForTarget() val bestStick = diff --git a/src/main/kotlin/net/ccbluex/liquidbounce/utils/aiming/RotationsUtil.kt b/src/main/kotlin/net/ccbluex/liquidbounce/utils/aiming/RotationsUtil.kt index 3b379c92b8e..3e564a04436 100644 --- a/src/main/kotlin/net/ccbluex/liquidbounce/utils/aiming/RotationsUtil.kt +++ b/src/main/kotlin/net/ccbluex/liquidbounce/utils/aiming/RotationsUtil.kt @@ -20,16 +20,15 @@ package net.ccbluex.liquidbounce.utils.aiming import net.ccbluex.liquidbounce.config.Configurable +import net.ccbluex.liquidbounce.event.EventManager import net.ccbluex.liquidbounce.event.Listenable -import net.ccbluex.liquidbounce.event.events.PlayerMovementTickEvent +import net.ccbluex.liquidbounce.event.events.MovementInputEvent import net.ccbluex.liquidbounce.event.events.PlayerVelocityStrafe +import net.ccbluex.liquidbounce.event.events.SimulatedTickEvent import net.ccbluex.liquidbounce.event.handler import net.ccbluex.liquidbounce.utils.client.mc import net.ccbluex.liquidbounce.utils.combat.CombatManager -import net.ccbluex.liquidbounce.utils.entity.box -import net.ccbluex.liquidbounce.utils.entity.eyes -import net.ccbluex.liquidbounce.utils.entity.lastRotation -import net.ccbluex.liquidbounce.utils.entity.rotation +import net.ccbluex.liquidbounce.utils.entity.* import net.ccbluex.liquidbounce.utils.item.InventoryTracker import net.ccbluex.liquidbounce.utils.math.plus import net.ccbluex.liquidbounce.utils.math.times @@ -203,12 +202,21 @@ object RotationManager : Listenable { * Updates at movement tick, so we can update the rotation before the movement runs and the client sends the packet * to the server. */ - val tickHandler = handler(priority = -100) { - if (aimPlan == null) { - return@handler - } + val tickHandler = handler(priority = -100) { event -> + val player = mc.player ?: return@handler + + val simulatedPlayer = SimulatedPlayer.fromClientPlayer( + SimulatedPlayer.SimulatedPlayerInput(event.directionalInput, player.input.jumping, player.isSprinting) + ) + simulatedPlayer.tick() + val oldPos = player.pos + player.setPosition(simulatedPlayer.pos) + + EventManager.callEvent(SimulatedTickEvent()) update() + + player.setPosition(oldPos) } /**