Skip to content

Commit

Permalink
Global target tracking via CombatManager; Remove TargetTracker
Browse files Browse the repository at this point in the history
  • Loading branch information
Zirada committed Feb 7, 2025
1 parent 478bc0a commit ba0010e
Show file tree
Hide file tree
Showing 25 changed files with 235 additions and 365 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -25,9 +25,13 @@ import net.ccbluex.liquidbounce.features.module.Category
import net.ccbluex.liquidbounce.features.module.ClientModule
import net.ccbluex.liquidbounce.utils.combat.combatTargetsConfigurable
import net.ccbluex.liquidbounce.utils.combat.visualTargetsConfigurable
import net.ccbluex.liquidbounce.utils.render.WorldTargetRenderer

object ModuleTargets : ClientModule("Targets", Category.CLIENT, notActivatable = true, hide = true,
aliases = arrayOf("Enemies")) {

val targetRenderer = tree(WorldTargetRenderer(this))

init {
tree(combatTargetsConfigurable)
tree(visualTargetsConfigurable)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,23 +19,18 @@
package net.ccbluex.liquidbounce.features.module.modules.combat

import net.ccbluex.liquidbounce.config.types.ToggleableConfigurable
import net.ccbluex.liquidbounce.event.events.MouseRotationEvent
import net.ccbluex.liquidbounce.event.events.RotationUpdateEvent
import net.ccbluex.liquidbounce.event.events.WorldRenderEvent
import net.ccbluex.liquidbounce.event.events.*
import net.ccbluex.liquidbounce.event.handler
import net.ccbluex.liquidbounce.features.module.Category
import net.ccbluex.liquidbounce.features.module.ClientModule
import net.ccbluex.liquidbounce.render.renderEnvironmentForWorld
import net.ccbluex.liquidbounce.utils.aiming.*
import net.ccbluex.liquidbounce.utils.aiming.anglesmooth.LinearAngleSmoothMode
import net.ccbluex.liquidbounce.utils.aiming.anglesmooth.SigmoidAngleSmoothMode
import net.ccbluex.liquidbounce.utils.client.Chronometer
import net.ccbluex.liquidbounce.utils.client.Timer
import net.ccbluex.liquidbounce.utils.combat.PriorityEnum
import net.ccbluex.liquidbounce.utils.combat.TargetTracker
import net.ccbluex.liquidbounce.utils.combat.*
import net.ccbluex.liquidbounce.utils.entity.rotation
import net.ccbluex.liquidbounce.utils.inventory.InventoryManager
import net.ccbluex.liquidbounce.utils.render.WorldTargetRenderer
import net.minecraft.client.gui.screen.ingame.HandledScreen
import net.minecraft.entity.Entity
import net.minecraft.util.math.MathHelper
Expand All @@ -55,11 +50,10 @@ object ModuleAimbot : ClientModule("Aimbot", Category.COMBAT, aliases = arrayOf(
tree(OnClick)
}

private val targetTracker = tree(TargetTracker(
private val targetSelector = tree(TargetSelector(
PriorityEnum.DIRECTION,
float("Range", 4.2f, 1f..8f)
))
private val targetRenderer = tree(WorldTargetRenderer(this))
private val pointTracker = tree(PointTracker())
private val clickTimer = Chronometer()

Expand All @@ -79,7 +73,6 @@ object ModuleAimbot : ClientModule("Aimbot", Category.COMBAT, aliases = arrayOf(
private var playerRotation: Rotation? = null

private val tickHandler = handler<RotationUpdateEvent> { _ ->
targetTracker.validate()
playerRotation = player.rotation

if (mc.options.attackKey.isPressed) {
Expand All @@ -103,22 +96,12 @@ object ModuleAimbot : ClientModule("Aimbot", Category.COMBAT, aliases = arrayOf(
}

// Update Auto Weapon
ModuleAutoWeapon.prepare(targetTracker.target)
}

override fun disable() {
targetTracker.reset()
super.disable()
ModuleAutoWeapon.prepare(CombatManager.target)
}

val renderHandler = handler<WorldRenderEvent> { event ->
val matrixStack = event.matrixStack
val partialTicks = event.partialTicks
val target = targetTracker.target ?: return@handler

renderEnvironmentForWorld(matrixStack) {
targetRenderer.render(this, target, partialTicks)
}
CombatManager.target ?: return@handler

if (!ignoreOpenScreen && mc.currentScreen != null) {
return@handler
Expand Down Expand Up @@ -158,33 +141,27 @@ object ModuleAimbot : ClientModule("Aimbot", Category.COMBAT, aliases = arrayOf(
}
}

private fun findNextTargetRotation(): Pair<Entity, VecRotation>? {
for (target in targetTracker.enemies()) {
val pointOnHitbox = pointTracker.gatherPoint(target,
PointTracker.AimSituation.FOR_NOW)

private fun findNextTargetRotation(): Pair<Entity, VecRotation>? =
CombatManager.updateTarget(targetSelector) { target ->
val pointOnHitbox = pointTracker.gatherPoint(target, PointTracker.AimSituation.FOR_NOW)
val rotationPreference = LeastDifferencePreference(player.rotation, pointOnHitbox.toPoint)

val spot = raytraceBox(
pointOnHitbox.fromPoint,
pointOnHitbox.cutOffBox,
range = targetTracker.maxRange.toDouble(),
range = targetSelector.maxRange.toDouble(),
wallsRange = 0.0,
rotationPreference = rotationPreference
) ?: raytraceBox(
pointOnHitbox.fromPoint, pointOnHitbox.box, range = targetTracker.maxRange.toDouble(),
pointOnHitbox.fromPoint, pointOnHitbox.box, range = targetSelector.maxRange.toDouble(),
wallsRange = 0.0,
rotationPreference = rotationPreference
) ?: continue
) ?: return@updateTarget null

if (targetTracker.target != target) {
if (target != CombatManager.target) {
slowStart.onTrigger()
}
targetTracker.select(target, false)
return target to spot
target to spot
}

return null
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -23,30 +23,21 @@ package net.ccbluex.liquidbounce.features.module.modules.combat

import net.ccbluex.liquidbounce.config.types.NamedChoice
import net.ccbluex.liquidbounce.event.events.RotationUpdateEvent
import net.ccbluex.liquidbounce.event.events.WorldRenderEvent
import net.ccbluex.liquidbounce.event.handler
import net.ccbluex.liquidbounce.event.tickHandler
import net.ccbluex.liquidbounce.features.module.Category
import net.ccbluex.liquidbounce.features.module.ClientModule
import net.ccbluex.liquidbounce.features.module.modules.combat.killaura.ModuleKillAura
import net.ccbluex.liquidbounce.render.renderEnvironmentForWorld
import net.ccbluex.liquidbounce.utils.aiming.PointTracker
import net.ccbluex.liquidbounce.utils.aiming.Rotation
import net.ccbluex.liquidbounce.utils.aiming.RotationManager
import net.ccbluex.liquidbounce.utils.aiming.RotationsConfigurable
import net.ccbluex.liquidbounce.utils.aiming.*
import net.ccbluex.liquidbounce.utils.aiming.projectiles.SituationalProjectileAngleCalculator
import net.ccbluex.liquidbounce.utils.clicking.ClickScheduler
import net.ccbluex.liquidbounce.utils.client.SilentHotbar
import net.ccbluex.liquidbounce.utils.client.interactItem
import net.ccbluex.liquidbounce.utils.combat.CombatManager
import net.ccbluex.liquidbounce.utils.combat.PriorityEnum
import net.ccbluex.liquidbounce.utils.combat.TargetTracker
import net.ccbluex.liquidbounce.utils.entity.boxedDistanceTo
import net.ccbluex.liquidbounce.utils.combat.*
import net.ccbluex.liquidbounce.utils.inventory.InventoryManager
import net.ccbluex.liquidbounce.utils.inventory.Slots
import net.ccbluex.liquidbounce.utils.item.isNothing
import net.ccbluex.liquidbounce.utils.kotlin.Priority
import net.ccbluex.liquidbounce.utils.render.WorldTargetRenderer
import net.ccbluex.liquidbounce.utils.render.trajectory.TrajectoryInfo
import net.minecraft.entity.LivingEntity
import net.minecraft.item.Item
Expand All @@ -65,7 +56,6 @@ import net.minecraft.util.Hand
*/
object ModuleAutoShoot : ClientModule("AutoShoot", Category.COMBAT) {

private val range by floatRange("Range", 3.0f..6f, 1f..50f)
private val throwableType by enumChoice("ThrowableType", ThrowableType.EGG_AND_SNOWBALL)
private val gravityType by enumChoice("GravityType", GravityType.AUTO).apply { tagBy(this) }

Expand All @@ -74,7 +64,7 @@ object ModuleAutoShoot : ClientModule("AutoShoot", Category.COMBAT) {
/**
* The target tracker to find the best enemy to attack.
*/
internal val targetTracker = tree(TargetTracker(PriorityEnum.DISTANCE))
private val targetSelector = tree(TargetSelector(PriorityEnum.DISTANCE, floatRange("Range", 3.0f..6f, 1f..50f)))
private val pointTracker = tree(
PointTracker(
lowestPointDefault = PointTracker.PreferredBoxPart.HEAD,
Expand All @@ -92,11 +82,6 @@ object ModuleAutoShoot : ClientModule("AutoShoot", Category.COMBAT) {
private val rotationConfigurable = tree(RotationsConfigurable(this))
private val aimOffThreshold by float("AimOffThreshold", 2f, 0.5f..10f)

/**
* The target renderer to render the target, which we are currently aiming at.
*/
private val targetRenderer = tree(WorldTargetRenderer(this))

private val selectSlotAutomatically by boolean("SelectSlotAutomatically", true)
private val tickUntilSlotReset by int("TicksUntillSlotReset", 1, 0..20)
private val considerInventory by boolean("ConsiderInventory", true)
Expand All @@ -111,10 +96,8 @@ object ModuleAutoShoot : ClientModule("AutoShoot", Category.COMBAT) {
*/
@Suppress("unused")
val simulatedTickHandler = handler<RotationUpdateEvent> {
targetTracker.reset()

// Find the recommended target
val target = targetTracker.enemies().firstOrNull {
val target = CombatManager.target ?: targetSelector.enemies().firstOrNull {
// Check if we can see the enemy
player.canSee(it)
} ?: return@handler
Expand All @@ -127,10 +110,6 @@ object ModuleAutoShoot : ClientModule("AutoShoot", Category.COMBAT) {
return@handler
}

if (target.boxedDistanceTo(player) !in range) {
return@handler
}

// Check if we have a throwable, if not we can't shoot.
val (hand, slot) = getThrowable() ?: return@handler

Expand All @@ -144,30 +123,20 @@ object ModuleAutoShoot : ClientModule("AutoShoot", Category.COMBAT) {

val rotation = generateRotation(target, GravityType.fromHand(hand))

CombatManager.selectTarget(target)
// Set the rotation with the usage priority of 2.
RotationManager.aimAt(
rotationConfigurable.toAimPlan(rotation ?: return@handler, considerInventory = considerInventory),
Priority.IMPORTANT_FOR_USAGE_2, this
)
targetTracker.select(target)
}

/**
* Handles the auto shoot logic.
*/
@Suppress("unused")
val handleAutoShoot = tickHandler {
val target = targetTracker.target ?: return@tickHandler

// Cannot happen but we want to smart-cast
@Suppress("USELESS_IS_CHECK")
if (target !is LivingEntity) {
return@tickHandler
}

if (target.boxedDistanceTo(player) !in range) {
return@tickHandler
}
val target = CombatManager.target ?: return@tickHandler

if (notDuringCombat && CombatManager.isInCombat) {
return@tickHandler
Expand Down Expand Up @@ -216,15 +185,6 @@ object ModuleAutoShoot : ClientModule("AutoShoot", Category.COMBAT) {
}
}

val renderHandler = handler<WorldRenderEvent> { event ->
val matrixStack = event.matrixStack
val target = targetTracker.target ?: return@handler

renderEnvironmentForWorld(matrixStack) {
targetRenderer.render(this, target, event.partialTicks)
}
}

private fun generateRotation(target: LivingEntity, gravityType: GravityType): Rotation? {
val pointOnHitbox = pointTracker.gatherPoint(target, PointTracker.AimSituation.FOR_NEXT_TICK)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,29 +19,20 @@
package net.ccbluex.liquidbounce.features.module.modules.combat

import net.ccbluex.liquidbounce.config.types.NamedChoice
import net.ccbluex.liquidbounce.event.events.NotificationEvent
import net.ccbluex.liquidbounce.event.events.QueuePacketEvent
import net.ccbluex.liquidbounce.event.events.TransferOrigin
import net.ccbluex.liquidbounce.event.events.*
import net.ccbluex.liquidbounce.event.handler
import net.ccbluex.liquidbounce.event.tickHandler
import net.ccbluex.liquidbounce.features.module.Category
import net.ccbluex.liquidbounce.features.module.ClientModule
import net.ccbluex.liquidbounce.features.module.modules.movement.autododge.ModuleAutoDodge
import net.ccbluex.liquidbounce.utils.client.Chronometer
import net.ccbluex.liquidbounce.utils.client.PacketQueueManager
import net.ccbluex.liquidbounce.utils.client.*
import net.ccbluex.liquidbounce.utils.client.PacketQueueManager.positions
import net.ccbluex.liquidbounce.utils.client.notification
import net.ccbluex.liquidbounce.utils.combat.findEnemy
import net.ccbluex.liquidbounce.utils.combat.getEntitiesBoxInRange
import net.ccbluex.liquidbounce.utils.combat.shouldBeAttacked
import net.ccbluex.liquidbounce.utils.combat.*
import net.ccbluex.liquidbounce.utils.entity.box
import net.ccbluex.liquidbounce.utils.item.isConsumable
import net.minecraft.network.packet.c2s.common.ResourcePackStatusC2SPacket
import net.minecraft.network.packet.c2s.play.*
import net.minecraft.network.packet.s2c.play.EntityVelocityUpdateS2CPacket
import net.minecraft.network.packet.s2c.play.ExplosionS2CPacket
import net.minecraft.network.packet.s2c.play.HealthUpdateS2CPacket
import net.minecraft.network.packet.s2c.play.PlayerPositionLookS2CPacket
import net.minecraft.network.packet.s2c.play.*
import kotlin.jvm.optionals.getOrNull

/**
Expand Down Expand Up @@ -181,7 +172,7 @@ object ModuleFakeLag : ClientModule("FakeLag", Category.COMBAT) {
}

// Support auto shoot with fake lag
if (running && ModuleAutoShoot.constantLag && ModuleAutoShoot.targetTracker.target == null) {
if (running && ModuleAutoShoot.constantLag && CombatManager.target == null) {
event.action = PacketQueueManager.Action.QUEUE
return@handler
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ import net.ccbluex.liquidbounce.features.module.ClientModule
import net.ccbluex.liquidbounce.features.module.modules.combat.killaura.ModuleKillAura
import net.ccbluex.liquidbounce.utils.client.Timer
import net.ccbluex.liquidbounce.utils.client.Timer.timerSpeed
import net.ccbluex.liquidbounce.utils.combat.CombatManager
import net.ccbluex.liquidbounce.utils.combat.findEnemy
import net.ccbluex.liquidbounce.utils.kotlin.Priority
import net.minecraft.network.packet.s2c.play.PlayerPositionLookS2CPacket
Expand Down Expand Up @@ -64,7 +65,7 @@ object ModuleTimerRange : ClientModule("TimerRange", Category.COMBAT) {

val repeatable = tickHandler {
if (onlyOnGround && !player.isOnGround) return@tickHandler
if (requiresKillAura && (!ModuleKillAura.running || ModuleKillAura.targetTracker.target == null)) {
if (requiresKillAura && (!ModuleKillAura.running || CombatManager.target == null)) {
return@tickHandler
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,7 @@ package net.ccbluex.liquidbounce.features.module.modules.combat.aimbot

import net.ccbluex.liquidbounce.features.module.Category
import net.ccbluex.liquidbounce.features.module.ClientModule
import net.ccbluex.liquidbounce.features.module.modules.combat.aimbot.autobow.AutoBowAimbotFeature
import net.ccbluex.liquidbounce.features.module.modules.combat.aimbot.autobow.AutoBowAutoShootFeature
import net.ccbluex.liquidbounce.features.module.modules.combat.aimbot.autobow.AutoBowFastChargeFeature
import net.ccbluex.liquidbounce.features.module.modules.combat.aimbot.autobow.*
import net.ccbluex.liquidbounce.utils.client.Chronometer
import net.minecraft.item.BowItem
import java.util.*
Expand All @@ -48,10 +46,6 @@ object ModuleAutoBow : ClientModule("AutoBow", Category.COMBAT, aliases = arrayO
}
}

override fun disable() {
AutoBowAimbotFeature.targetTracker.reset()
}

init {
tree(AutoBowAutoShootFeature)
tree(AutoBowAimbotFeature)
Expand Down
Loading

0 comments on commit ba0010e

Please sign in to comment.