Skip to content

Commit

Permalink
simulates tick for rotation
Browse files Browse the repository at this point in the history
  • Loading branch information
1zun4 committed Nov 26, 2023
1 parent cb8241d commit 78ae141
Show file tree
Hide file tree
Showing 7 changed files with 36 additions and 18 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,8 @@ val ALL_EVENT_CLASSES: Array<KClass<out Event>> = arrayOf(
ClientChatErrorEvent::class,
StateUpdateEvent::class,
WorldChangeEvent::class,
AltManagerUpdateEvent::class
AltManagerUpdateEvent::class,
SimulatedTickEvent::class
)

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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()
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -47,7 +47,7 @@ object ModuleAimbot : Module("Aimbot", Category.COMBAT) {
targetRotation = null
}

val tickHandler = handler<PlayerMovementTickEvent> { event ->
val tickHandler = handler<SimulatedTickEvent> { event ->
targetRotation = findNextTargetRotation()
targetRotation?.let { RotationManager.aimAt(it, true, rotationsConfigurable) }
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -367,7 +367,7 @@ object ModuleKillAura : Module("KillAura", Category.COMBAT) {
}
}

val rotationUpdateHandler = handler<PlayerMovementTickEvent> {
val rotationUpdateHandler = handler<SimulatedTickEvent> {
// Make sure killaura-logic is not running while inventory is open
val isInInventoryScreen =
InventoryTracker.isInventoryOpenServerSide || mc.currentScreen is GenericContainerScreen
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -62,7 +62,7 @@ object ModuleProjectilePuncher : Module("ProjectilePuncher", Category.WORLD) {
targetTracker.cleanup()
}

val tickHandler = handler<PlayerMovementTickEvent> {
val tickHandler = handler<SimulatedTickEvent> {
if (player.isSpectator) {
return@handler
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -169,7 +169,7 @@ object ModuleScaffold : Module("Scaffold", Category.WORLD) {
SilentHotbar.resetSlot(this)
}

private val rotationUpdateHandler = handler<PlayerMovementTickEvent> {
private val rotationUpdateHandler = handler<SimulatedTickEvent> {
val blockInHotbar = findBestValidHotbarSlotForTarget()

val bestStick =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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<PlayerMovementTickEvent>(priority = -100) {
if (aimPlan == null) {
return@handler
}
val tickHandler = handler<MovementInputEvent>(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)
}

/**
Expand Down

0 comments on commit 78ae141

Please sign in to comment.