Skip to content

Commit

Permalink
refactor: better naming and aliases (#5636)
Browse files Browse the repository at this point in the history
Value, which includes Configurable, now support aliases, allowing them to be renamed.

Click Scheduler is now called Clicker
Point Tracker is now called Aim Point
  • Loading branch information
1zun4 authored Feb 15, 2025
1 parent d3a417a commit 008d9ab
Show file tree
Hide file tree
Showing 26 changed files with 128 additions and 120 deletions.
12 changes: 9 additions & 3 deletions src/main/kotlin/net/ccbluex/liquidbounce/config/ConfigSystem.kt
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ object ConfigSystem {
*/
fun root(name: String, tree: MutableList<out Configurable> = mutableListOf()): Configurable {
@Suppress("UNCHECKED_CAST")
return root(Configurable(name, tree as MutableList<Value<*>>))
return root(Configurable(name, value = tree as MutableList<Value<*>>))
}

fun dynamic(
Expand Down Expand Up @@ -190,7 +190,8 @@ object ConfigSystem {
val jsonObject = jsonElement.asJsonObject

// Check if the name is the same as the configurable name
check(jsonObject.getAsJsonPrimitive("name").asString == configurable.name) {
val name = jsonObject.getAsJsonPrimitive("name").asString
check(name == configurable.name || configurable.aliases.contains(name)) {
"Configurable name does not match the name in the json object"
}

Expand Down Expand Up @@ -218,7 +219,10 @@ object ConfigSystem {
// On an ordinary configurable, we simply deserialize the values that are present
else -> {
for (value in configurable.inner) {
val currentElement = values[value.name] ?: continue
val currentElement = values[value.name]
// Alias support
?: values.entries.firstOrNull { entry -> entry.key in value.aliases }?.value
?: continue

deserializeValue(value, currentElement)
}
Expand Down Expand Up @@ -247,6 +251,8 @@ object ConfigSystem {
for (choice in value.choices) {
runCatching {
val choiceElement = choices[choice.name]
// Alias support
?: choice.aliases.firstNotNullOfOrNull { alias -> choices[alias] }
?: error("Choice ${choice.name} not found")

deserializeConfigurable(choice, choiceElement)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,10 @@ import org.lwjgl.glfw.GLFW
@Suppress("TooManyFunctions")
open class Configurable(
name: String,
/**
* Used for backwards compatibility when renaming.
*/
aliases: Array<out String> = emptyArray(),
value: MutableList<Value<*>> = mutableListOf(),
valueType: ValueType = ValueType.CONFIGURABLE,

Expand All @@ -47,6 +51,7 @@ open class Configurable(
independentDescription: Boolean = false
) : Value<MutableList<Value<*>>>(
name,
aliases,
defaultValue = value,
valueType,
independentDescription = independentDescription
Expand Down Expand Up @@ -174,14 +179,18 @@ open class Configurable(

fun <T : Any> value(
name: String,
default: T,
defaultValue: T,
valueType: ValueType = ValueType.INVALID,
listType: ListValueType = ListValueType.None
) = Value(name, default, valueType, listType).apply { this@Configurable.inner.add(this) }
) = Value(name, defaultValue = defaultValue, valueType = valueType, listType = listType).apply {
this@Configurable.inner.add(this)
}

fun <T : Any> rangedValue(name: String, default: T, range: ClosedRange<*>, suffix: String,
valueType: ValueType) =
RangedValue(name, default, range, suffix, valueType).apply { this@Configurable.inner.add(this) }
fun <T : Any> rangedValue(name: String, defaultValue: T, range: ClosedRange<*>, suffix: String,
valueType: ValueType) =
RangedValue(name, defaultValue = defaultValue, range = range, suffix = suffix, valueType = valueType).apply {
this@Configurable.inner.add(this)
}

// Fixed data types

Expand All @@ -205,7 +214,9 @@ open class Configurable(
InputBind(InputUtil.Type.KEYSYM, default, InputBind.BindAction.TOGGLE)
)

fun bind(name: String, default: InputBind) = BindValue(name, default).apply { this@Configurable.inner.add(this) }
fun bind(name: String, default: InputBind) = BindValue(name, defaultValue = default).apply {
this@Configurable.inner.add(this)
}

fun key(name: String, default: Int) = key(name, InputUtil.Type.KEYSYM.createFromCode(default))

Expand Down Expand Up @@ -243,7 +254,7 @@ open class Configurable(

fun <T> enumChoice(name: String, default: T, choices: Array<T>): ChooseListValue<T>
where T : Enum<T>, T : NamedChoice =
ChooseListValue(name, default, choices).apply { this@Configurable.inner.add(this) }
ChooseListValue(name, defaultValue = default, choices = choices).apply { this@Configurable.inner.add(this) }

protected fun <T : Choice> choices(
eventListener: EventListener,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,4 +28,4 @@ open class DynamicConfigurable(
value: MutableList<Value<*>> = mutableListOf(),
val factory: (String, JsonObject) -> Value<*>,
valueType: ValueType = ValueType.CONFIGURABLE
) : Configurable(name, value, valueType)
) : Configurable(name, value = value, valueType = valueType)
22 changes: 12 additions & 10 deletions src/main/kotlin/net/ccbluex/liquidbounce/config/types/Value.kt
Original file line number Diff line number Diff line change
Expand Up @@ -35,12 +35,8 @@ import net.ccbluex.liquidbounce.utils.client.toLowerCamelCase
import net.ccbluex.liquidbounce.utils.input.HumanInputDeserializer
import net.ccbluex.liquidbounce.utils.input.InputBind
import net.ccbluex.liquidbounce.utils.input.inputByName
import net.ccbluex.liquidbounce.utils.inventory.findBlocksEndingWith
import net.ccbluex.liquidbounce.utils.kotlin.mapArray
import net.minecraft.client.util.InputUtil
import net.minecraft.registry.Registries
import net.minecraft.util.Identifier
import java.awt.Color
import java.util.*
import java.util.function.Supplier
import kotlin.reflect.KProperty
Expand All @@ -55,6 +51,7 @@ typealias ValueChangedListener<T> = (T) -> Unit
@Suppress("TooManyFunctions")
open class Value<T : Any>(
@SerializedName("name") open val name: String,
@Exclude val aliases: Array<out String> = emptyArray(),
@Exclude private var defaultValue: T,
@Exclude val valueType: ValueType,
@Exclude @ProtocolExclude val listType: ListValueType = ListValueType.None,
Expand Down Expand Up @@ -316,11 +313,12 @@ open class Value<T : Any>(
*/
class RangedValue<T : Any>(
name: String,
value: T,
aliases: Array<String> = emptyArray(),
defaultValue: T,
@Exclude val range: ClosedRange<*>,
@Exclude val suffix: String,
type: ValueType
) : Value<T>(name, value, valueType = type) {
valueType: ValueType
) : Value<T>(name, aliases, defaultValue, valueType) {

override fun setByString(string: String) {
if (this.inner is ClosedRange<*>) {
Expand Down Expand Up @@ -356,16 +354,20 @@ class RangedValue<T : Any>(

class BindValue(
name: String,
aliases: Array<String> = emptyArray(),
defaultValue: InputBind,
) : Value<InputBind>(name, defaultValue, ValueType.BIND) {
) : Value<InputBind>(name, aliases, defaultValue, ValueType.BIND) {
override fun setByString(string: String) {
get().bind(string)
}
}

class ChooseListValue<T : NamedChoice>(
name: String, value: T, @Exclude val choices: Array<T>
) : Value<T>(name, value, ValueType.CHOOSE) {
name: String,
aliases: Array<String> = emptyArray(),
defaultValue: T,
@Exclude val choices: Array<T>
) : Value<T>(name, aliases, defaultValue, ValueType.CHOOSE) {

override fun deserializeFrom(gson: Gson, element: JsonElement) {
val name = element.asString
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,8 +54,8 @@ open class ClientModule(
@Exclude val disableActivation: Boolean = notActivatable, // disable activation
hide: Boolean = false, // default hide
@Exclude val disableOnQuit: Boolean = false, // disables module when player leaves the world,
@Exclude val aliases: Array<out String> = emptyArray() // additional names under which the module is known
) : EventListener, Configurable(name), MinecraftShortcuts {
aliases: Array<out String> = emptyArray() // additional names under which the module is known
) : EventListener, Configurable(name, aliases), MinecraftShortcuts {

/**
* Option to enable or disable the module, this DOES NOT mean the module is running. This
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ 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.criticals.ModuleCriticals
import net.ccbluex.liquidbounce.utils.clicking.ClickScheduler
import net.ccbluex.liquidbounce.utils.clicking.Clicker
import net.ccbluex.liquidbounce.utils.combat.shouldBeAttacked
import net.minecraft.client.option.KeyBinding
import net.minecraft.item.AxeItem
Expand All @@ -44,7 +44,7 @@ object ModuleAutoClicker : ClientModule("AutoClicker", Category.COMBAT, aliases

object Left : ToggleableConfigurable(this, "Attack", true) {

val clickScheduler = tree(ClickScheduler(this, true))
val clicker = tree(Clicker(this, true))
internal val requiresNoInput by boolean("RequiresNoInput", false)
private val objectiveType by enumChoice("Objective", ObjectiveType.ANY)
private val onItemUse by enumChoice("OnItemUse", Use.WAIT)
Expand Down Expand Up @@ -122,7 +122,7 @@ object ModuleAutoClicker : ClientModule("AutoClicker", Category.COMBAT, aliases
}

object Right : ToggleableConfigurable(this, "Use", false) {
val clickScheduler = tree(ClickScheduler(this, false))
val clicker = tree(Clicker(this, false))
internal val delayStart by boolean("DelayStart", false)
internal val onlyBlock by boolean("OnlyBlock", false)
internal val requiresNoInput by boolean("RequiresNoInput", false)
Expand Down Expand Up @@ -170,7 +170,7 @@ object ModuleAutoClicker : ClientModule("AutoClicker", Category.COMBAT, aliases
}
}

clickScheduler.clicks {
clicker.clicks {
KeyBinding.onKeyPressed(mc.options.attackKey.boundKey)
true
}
Expand All @@ -194,7 +194,7 @@ object ModuleAutoClicker : ClientModule("AutoClicker", Category.COMBAT, aliases
return@run
}

clickScheduler.clicks {
clicker.clicks {
KeyBinding.onKeyPressed(mc.options.useKey.boundKey)
true
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ 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.projectiles.SituationalProjectileAngleCalculator
import net.ccbluex.liquidbounce.utils.clicking.ClickScheduler
import net.ccbluex.liquidbounce.utils.clicking.Clicker
import net.ccbluex.liquidbounce.utils.client.SilentHotbar
import net.ccbluex.liquidbounce.utils.client.interactItem
import net.ccbluex.liquidbounce.utils.combat.CombatManager
Expand Down Expand Up @@ -67,7 +67,7 @@ object ModuleAutoShoot : ClientModule("AutoShoot", Category.COMBAT) {
private val throwableType by enumChoice("ThrowableType", ThrowableType.EGG_AND_SNOWBALL)
private val gravityType by enumChoice("GravityType", GravityType.AUTO).apply { tagBy(this) }

private val clickScheduler = tree(ClickScheduler(this, showCooldown = false))
private val clicker = tree(Clicker(this, showCooldown = false))

/**
* The target tracker to find the best enemy to attack.
Expand Down Expand Up @@ -187,7 +187,7 @@ object ModuleAutoShoot : ClientModule("AutoShoot", Category.COMBAT) {
}

// Check if we are still aiming at the target
clickScheduler.clicks {
clicker.clicks {
if (player.isUsingItem || (considerInventory && InventoryManager.isInventoryOpen)) {
return@clicks false
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ import net.ccbluex.liquidbounce.features.module.Category
import net.ccbluex.liquidbounce.features.module.ClientModule
import net.ccbluex.liquidbounce.features.module.modules.combat.ModuleAutoWeapon
import net.ccbluex.liquidbounce.features.module.modules.combat.criticals.ModuleCriticals
import net.ccbluex.liquidbounce.features.module.modules.combat.killaura.ModuleKillAura.KillAuraClickScheduler.considerMissCooldown
import net.ccbluex.liquidbounce.features.module.modules.combat.killaura.ModuleKillAura.KillAuraClicker.considerMissCooldown
import net.ccbluex.liquidbounce.features.module.modules.combat.killaura.ModuleKillAura.RaycastMode.*
import net.ccbluex.liquidbounce.features.module.modules.combat.killaura.ModuleKillAura.RotationTimingMode.ON_TICK
import net.ccbluex.liquidbounce.features.module.modules.combat.killaura.ModuleKillAura.RotationTimingMode.SNAP
Expand All @@ -49,7 +49,7 @@ import net.ccbluex.liquidbounce.features.module.modules.render.ModuleDebug
import net.ccbluex.liquidbounce.render.engine.Color4b
import net.ccbluex.liquidbounce.render.renderEnvironmentForWorld
import net.ccbluex.liquidbounce.utils.aiming.*
import net.ccbluex.liquidbounce.utils.clicking.ClickScheduler
import net.ccbluex.liquidbounce.utils.clicking.Clicker
import net.ccbluex.liquidbounce.utils.combat.CombatManager
import net.ccbluex.liquidbounce.utils.combat.TargetTracker
import net.ccbluex.liquidbounce.utils.combat.attack
Expand Down Expand Up @@ -78,7 +78,7 @@ import net.minecraft.network.packet.c2s.play.PlayerMoveC2SPacket.Full
*/
object ModuleKillAura : ClientModule("KillAura", Category.COMBAT) {

object KillAuraClickScheduler : ClickScheduler<ModuleKillAura>(ModuleKillAura, true) {
object KillAuraClicker : Clicker<ModuleKillAura>(ModuleKillAura, true) {

/**
* When missing a hit, Minecraft has a cooldown before you can attack again.
Expand All @@ -92,7 +92,7 @@ object ModuleKillAura : ClientModule("KillAura", Category.COMBAT) {
}

// Attack speed
val clickScheduler = tree(KillAuraClickScheduler)
val clickScheduler = tree(KillAuraClicker)

// Range
internal val range by float("Range", 4.2f, 1f..8f)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,12 +22,12 @@ import net.ccbluex.liquidbounce.config.types.NoneChoice
import net.ccbluex.liquidbounce.config.types.ToggleableConfigurable
import net.ccbluex.liquidbounce.event.Sequence
import net.ccbluex.liquidbounce.features.module.modules.combat.killaura.ModuleKillAura
import net.ccbluex.liquidbounce.features.module.modules.combat.killaura.ModuleKillAura.KillAuraClickScheduler.considerMissCooldown
import net.ccbluex.liquidbounce.features.module.modules.combat.killaura.ModuleKillAura.KillAuraClicker.considerMissCooldown
import net.ccbluex.liquidbounce.features.module.modules.combat.killaura.ModuleKillAura.prepareAttackEnvironment
import net.ccbluex.liquidbounce.features.module.modules.combat.killaura.features.KillAuraNotifyWhenFail.Box
import net.ccbluex.liquidbounce.features.module.modules.combat.killaura.features.KillAuraNotifyWhenFail.Sound
import net.ccbluex.liquidbounce.utils.aiming.RotationManager
import net.ccbluex.liquidbounce.utils.clicking.ClickScheduler
import net.ccbluex.liquidbounce.utils.clicking.Clicker
import net.ccbluex.liquidbounce.utils.combat.findEnemy
import net.ccbluex.liquidbounce.utils.entity.boxedDistanceTo
import net.ccbluex.liquidbounce.utils.inventory.InventoryManager
Expand All @@ -42,7 +42,7 @@ internal object KillAuraFailSwing : ToggleableConfigurable(ModuleKillAura, "Fail
* Additional range for fail swing to work
*/
private val additionalRange by float("AdditionalRange", 2f, 0f..10f)
val clickScheduler = tree(ClickScheduler(this, false))
val clicker = tree(Clicker(this, false))
val mode = choices(this, "NotifyWhenFail", activeIndex = 1) {
arrayOf(NoneChoice(it), Box, Sound)
}.apply {
Expand Down Expand Up @@ -77,9 +77,9 @@ internal object KillAuraFailSwing : ToggleableConfigurable(ModuleKillAura, "Fail
// Make it seem like we are blocking
KillAuraAutoBlock.makeSeemBlock()

if (clickScheduler.isGoingToClick) {
if (clicker.isGoingToClick) {
prepareAttackEnvironment {
clickScheduler.clicks {
clicker.clicks {
if (considerMissCooldown && mc.attackCooldown > 0) {
return@clicks false
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ import net.ccbluex.liquidbounce.features.module.modules.combat.tpaura.modes.ASta
import net.ccbluex.liquidbounce.features.module.modules.combat.tpaura.modes.ImmediateMode
import net.ccbluex.liquidbounce.render.engine.Color4b
import net.ccbluex.liquidbounce.utils.aiming.RotationManager
import net.ccbluex.liquidbounce.utils.clicking.ClickScheduler
import net.ccbluex.liquidbounce.utils.clicking.Clicker
import net.ccbluex.liquidbounce.utils.client.Chronometer
import net.ccbluex.liquidbounce.utils.combat.TargetPriority
import net.ccbluex.liquidbounce.utils.combat.TargetSelector
Expand All @@ -43,7 +43,7 @@ object ModuleTpAura : ClientModule("TpAura", Category.COMBAT, disableOnQuit = tr

private val attackRange by float("AttackRange", 4.2f, 3f..5f)

val clickScheduler = tree(ClickScheduler(this, true))
val clicker = tree(Clicker(this, true))
val mode = choices("Mode", AStarMode, arrayOf(AStarMode, ImmediateMode))
val targetSelector = tree(TargetSelector(TargetPriority.HURT_TIME))

Expand All @@ -54,7 +54,7 @@ object ModuleTpAura : ClientModule("TpAura", Category.COMBAT, disableOnQuit = tr
private val attackRepeatable = tickHandler {
val position = desyncPlayerPosition ?: player.pos

clickScheduler.clicks {
clicker.clicks {
val enemy = targetSelector.targets().firstOrNull {
it.squaredBoxedDistanceTo(position) <= attackRange * attackRange
} ?: return@clicks false
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import net.ccbluex.liquidbounce.event.events.PacketEvent
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.modules.combat.tpaura.ModuleTpAura.clickScheduler
import net.ccbluex.liquidbounce.features.module.modules.combat.tpaura.ModuleTpAura.clicker
import net.ccbluex.liquidbounce.features.module.modules.combat.tpaura.ModuleTpAura.desyncPlayerPosition
import net.ccbluex.liquidbounce.features.module.modules.combat.tpaura.ModuleTpAura.stuckChronometer
import net.ccbluex.liquidbounce.features.module.modules.combat.tpaura.ModuleTpAura.targetSelector
Expand Down Expand Up @@ -53,7 +53,7 @@ object AStarMode : TpAuraChoice("AStar") {
private val tickHandler = tickHandler {
val (_, path) = pathCache ?: return@tickHandler

if (!clickScheduler.isGoingToClick) {
if (!clicker.isGoingToClick) {
return@tickHandler
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import net.ccbluex.liquidbounce.event.events.PacketEvent
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.modules.combat.tpaura.ModuleTpAura.clickScheduler
import net.ccbluex.liquidbounce.features.module.modules.combat.tpaura.ModuleTpAura.clicker
import net.ccbluex.liquidbounce.features.module.modules.combat.tpaura.ModuleTpAura.desyncPlayerPosition
import net.ccbluex.liquidbounce.features.module.modules.combat.tpaura.ModuleTpAura.stuckChronometer
import net.ccbluex.liquidbounce.features.module.modules.combat.tpaura.ModuleTpAura.targetSelector
Expand All @@ -27,7 +27,7 @@ import kotlin.math.floor
object ImmediateMode : TpAuraChoice("Immediate") {

val repeatable = tickHandler {
if (!clickScheduler.isGoingToClick) {
if (!clicker.isGoingToClick) {
return@tickHandler
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -73,8 +73,8 @@ object ModuleHud : ClientModule("HUD", Category.RENDER, state = true, hide = tru
!MinecraftClient.IS_SYSTEM_MAC

init {
tree(Configurable("In-built", components as MutableList<Value<*>>))
tree(Configurable("Custom", customComponents as MutableList<Value<*>>))
tree(Configurable("In-built", value = components as MutableList<Value<*>>))
tree(Configurable("Custom", value = customComponents as MutableList<Value<*>>))
}

@Suppress("unused")
Expand Down
Loading

0 comments on commit 008d9ab

Please sign in to comment.