diff --git a/src/main/kotlin/net/ccbluex/liquidbounce/config/ConfigSystem.kt b/src/main/kotlin/net/ccbluex/liquidbounce/config/ConfigSystem.kt index 49aa52c5c47..d11427867fa 100644 --- a/src/main/kotlin/net/ccbluex/liquidbounce/config/ConfigSystem.kt +++ b/src/main/kotlin/net/ccbluex/liquidbounce/config/ConfigSystem.kt @@ -85,7 +85,7 @@ object ConfigSystem { */ fun root(name: String, tree: MutableList = mutableListOf()): Configurable { @Suppress("UNCHECKED_CAST") - return root(Configurable(name, tree as MutableList>)) + return root(Configurable(name, value = tree as MutableList>)) } fun dynamic( @@ -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" } @@ -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) } @@ -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) diff --git a/src/main/kotlin/net/ccbluex/liquidbounce/config/types/Configurable.kt b/src/main/kotlin/net/ccbluex/liquidbounce/config/types/Configurable.kt index cd304309013..ab70d18bffb 100644 --- a/src/main/kotlin/net/ccbluex/liquidbounce/config/types/Configurable.kt +++ b/src/main/kotlin/net/ccbluex/liquidbounce/config/types/Configurable.kt @@ -33,6 +33,10 @@ import org.lwjgl.glfw.GLFW @Suppress("TooManyFunctions") open class Configurable( name: String, + /** + * Used for backwards compatibility when renaming. + */ + aliases: Array = emptyArray(), value: MutableList> = mutableListOf(), valueType: ValueType = ValueType.CONFIGURABLE, @@ -47,6 +51,7 @@ open class Configurable( independentDescription: Boolean = false ) : Value>>( name, + aliases, defaultValue = value, valueType, independentDescription = independentDescription @@ -174,14 +179,18 @@ open class Configurable( fun 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 rangedValue(name: String, default: T, range: ClosedRange<*>, suffix: String, - valueType: ValueType) = - RangedValue(name, default, range, suffix, valueType).apply { this@Configurable.inner.add(this) } + fun 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 @@ -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)) @@ -243,7 +254,7 @@ open class Configurable( fun enumChoice(name: String, default: T, choices: Array): ChooseListValue where T : Enum, 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 choices( eventListener: EventListener, diff --git a/src/main/kotlin/net/ccbluex/liquidbounce/config/types/DynamicConfigurable.kt b/src/main/kotlin/net/ccbluex/liquidbounce/config/types/DynamicConfigurable.kt index 76fa86bfbc4..57b1c934cc6 100644 --- a/src/main/kotlin/net/ccbluex/liquidbounce/config/types/DynamicConfigurable.kt +++ b/src/main/kotlin/net/ccbluex/liquidbounce/config/types/DynamicConfigurable.kt @@ -28,4 +28,4 @@ open class DynamicConfigurable( value: MutableList> = mutableListOf(), val factory: (String, JsonObject) -> Value<*>, valueType: ValueType = ValueType.CONFIGURABLE -) : Configurable(name, value, valueType) +) : Configurable(name, value = value, valueType = valueType) diff --git a/src/main/kotlin/net/ccbluex/liquidbounce/config/types/Value.kt b/src/main/kotlin/net/ccbluex/liquidbounce/config/types/Value.kt index ebeee403c0a..2307fc65d5c 100644 --- a/src/main/kotlin/net/ccbluex/liquidbounce/config/types/Value.kt +++ b/src/main/kotlin/net/ccbluex/liquidbounce/config/types/Value.kt @@ -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 @@ -55,6 +51,7 @@ typealias ValueChangedListener = (T) -> Unit @Suppress("TooManyFunctions") open class Value( @SerializedName("name") open val name: String, + @Exclude val aliases: Array = emptyArray(), @Exclude private var defaultValue: T, @Exclude val valueType: ValueType, @Exclude @ProtocolExclude val listType: ListValueType = ListValueType.None, @@ -316,11 +313,12 @@ open class Value( */ class RangedValue( name: String, - value: T, + aliases: Array = emptyArray(), + defaultValue: T, @Exclude val range: ClosedRange<*>, @Exclude val suffix: String, - type: ValueType -) : Value(name, value, valueType = type) { + valueType: ValueType +) : Value(name, aliases, defaultValue, valueType) { override fun setByString(string: String) { if (this.inner is ClosedRange<*>) { @@ -356,16 +354,20 @@ class RangedValue( class BindValue( name: String, + aliases: Array = emptyArray(), defaultValue: InputBind, -) : Value(name, defaultValue, ValueType.BIND) { +) : Value(name, aliases, defaultValue, ValueType.BIND) { override fun setByString(string: String) { get().bind(string) } } class ChooseListValue( - name: String, value: T, @Exclude val choices: Array -) : Value(name, value, ValueType.CHOOSE) { + name: String, + aliases: Array = emptyArray(), + defaultValue: T, + @Exclude val choices: Array +) : Value(name, aliases, defaultValue, ValueType.CHOOSE) { override fun deserializeFrom(gson: Gson, element: JsonElement) { val name = element.asString diff --git a/src/main/kotlin/net/ccbluex/liquidbounce/features/module/ClientModule.kt b/src/main/kotlin/net/ccbluex/liquidbounce/features/module/ClientModule.kt index 011a8f41a69..d576e954e20 100644 --- a/src/main/kotlin/net/ccbluex/liquidbounce/features/module/ClientModule.kt +++ b/src/main/kotlin/net/ccbluex/liquidbounce/features/module/ClientModule.kt @@ -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 = emptyArray() // additional names under which the module is known -) : EventListener, Configurable(name), MinecraftShortcuts { + aliases: Array = 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 diff --git a/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/combat/ModuleAutoClicker.kt b/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/combat/ModuleAutoClicker.kt index 4cb1b6b9834..a74ec0305b1 100644 --- a/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/combat/ModuleAutoClicker.kt +++ b/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/combat/ModuleAutoClicker.kt @@ -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 @@ -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) @@ -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) @@ -170,7 +170,7 @@ object ModuleAutoClicker : ClientModule("AutoClicker", Category.COMBAT, aliases } } - clickScheduler.clicks { + clicker.clicks { KeyBinding.onKeyPressed(mc.options.attackKey.boundKey) true } @@ -194,7 +194,7 @@ object ModuleAutoClicker : ClientModule("AutoClicker", Category.COMBAT, aliases return@run } - clickScheduler.clicks { + clicker.clicks { KeyBinding.onKeyPressed(mc.options.useKey.boundKey) true } diff --git a/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/combat/ModuleAutoShoot.kt b/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/combat/ModuleAutoShoot.kt index a74a0d501d2..4bc4d907d3f 100644 --- a/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/combat/ModuleAutoShoot.kt +++ b/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/combat/ModuleAutoShoot.kt @@ -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 @@ -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. @@ -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 } diff --git a/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/combat/killaura/ModuleKillAura.kt b/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/combat/killaura/ModuleKillAura.kt index 97c6d6b13cc..22f20ac95ba 100644 --- a/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/combat/killaura/ModuleKillAura.kt +++ b/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/combat/killaura/ModuleKillAura.kt @@ -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 @@ -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 @@ -78,7 +78,7 @@ import net.minecraft.network.packet.c2s.play.PlayerMoveC2SPacket.Full */ object ModuleKillAura : ClientModule("KillAura", Category.COMBAT) { - object KillAuraClickScheduler : ClickScheduler(ModuleKillAura, true) { + object KillAuraClicker : Clicker(ModuleKillAura, true) { /** * When missing a hit, Minecraft has a cooldown before you can attack again. @@ -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) diff --git a/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/combat/killaura/features/KillAuraFailSwing.kt b/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/combat/killaura/features/KillAuraFailSwing.kt index 319c40f5847..28369b534a8 100644 --- a/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/combat/killaura/features/KillAuraFailSwing.kt +++ b/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/combat/killaura/features/KillAuraFailSwing.kt @@ -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 @@ -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 { @@ -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 } diff --git a/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/combat/tpaura/ModuleTpAura.kt b/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/combat/tpaura/ModuleTpAura.kt index 6a11d76ab07..ac4beb261b3 100644 --- a/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/combat/tpaura/ModuleTpAura.kt +++ b/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/combat/tpaura/ModuleTpAura.kt @@ -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 @@ -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)) @@ -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 diff --git a/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/combat/tpaura/modes/AStarMode.kt b/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/combat/tpaura/modes/AStarMode.kt index bd888e87e77..dc1a8b5eec3 100644 --- a/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/combat/tpaura/modes/AStarMode.kt +++ b/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/combat/tpaura/modes/AStarMode.kt @@ -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 @@ -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 } diff --git a/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/combat/tpaura/modes/ImmediateMode.kt b/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/combat/tpaura/modes/ImmediateMode.kt index a21639c04ba..0b70a110aba 100644 --- a/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/combat/tpaura/modes/ImmediateMode.kt +++ b/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/combat/tpaura/modes/ImmediateMode.kt @@ -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 @@ -27,7 +27,7 @@ import kotlin.math.floor object ImmediateMode : TpAuraChoice("Immediate") { val repeatable = tickHandler { - if (!clickScheduler.isGoingToClick) { + if (!clicker.isGoingToClick) { return@tickHandler } diff --git a/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/render/ModuleHud.kt b/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/render/ModuleHud.kt index 6308728e75e..f101ccb96d5 100644 --- a/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/render/ModuleHud.kt +++ b/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/render/ModuleHud.kt @@ -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>)) - tree(Configurable("Custom", customComponents as MutableList>)) + tree(Configurable("In-built", value = components as MutableList>)) + tree(Configurable("Custom", value = customComponents as MutableList>)) } @Suppress("unused") 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 25e1b944ca6..103b67492b9 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 @@ -27,7 +27,7 @@ import net.ccbluex.liquidbounce.utils.aiming.RotationManager import net.ccbluex.liquidbounce.utils.aiming.RotationsConfigurable import net.ccbluex.liquidbounce.utils.aiming.facingEnemy import net.ccbluex.liquidbounce.utils.aiming.raytraceBox -import net.ccbluex.liquidbounce.utils.clicking.ClickScheduler +import net.ccbluex.liquidbounce.utils.clicking.Clicker import net.ccbluex.liquidbounce.utils.combat.attack import net.ccbluex.liquidbounce.utils.entity.box import net.ccbluex.liquidbounce.utils.entity.prevPos @@ -48,7 +48,7 @@ import net.minecraft.util.math.MathHelper */ object ModuleProjectilePuncher : ClientModule("ProjectilePuncher", Category.WORLD, aliases = arrayOf("AntiFireball")) { - private val clickScheduler = tree(ClickScheduler(ModuleProjectilePuncher, false)) + private val clicker = tree(Clicker(ModuleProjectilePuncher, false)) private val swing by boolean("Swing", true) private val range by float("Range", 3f, 3f..6f) @@ -85,7 +85,7 @@ object ModuleProjectilePuncher : ClientModule("ProjectilePuncher", Category.WORL return@tickHandler } - clickScheduler.clicks { + clicker.clicks { target.attack(swing) true } 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 c8530ec883d..2e32b7f04bc 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 @@ -54,7 +54,7 @@ import net.ccbluex.liquidbounce.utils.block.doPlacement import net.ccbluex.liquidbounce.utils.block.getCenterDistanceSquared import net.ccbluex.liquidbounce.utils.block.getState import net.ccbluex.liquidbounce.utils.block.targetfinding.BlockPlacementTarget -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.Timer import net.ccbluex.liquidbounce.utils.entity.moving @@ -196,7 +196,7 @@ object ModuleScaffold : ClientModule("Scaffold", Category.WORLD) { object SimulatePlacementAttempts : ToggleableConfigurable(this, "SimulatePlacementAttempts", false) { - internal val clickScheduler = tree(ClickScheduler(ModuleScaffold, false, maxCps = 100)) + internal val clicker = tree(Clicker(ModuleScaffold, false, maxCps = 100)) val failedAttemptsOnly by boolean("FailedAttemptsOnly", true) } @@ -474,9 +474,9 @@ object ModuleScaffold : ClientModule("Scaffold", Category.WORLD) { arrayOf(Hand.MAIN_HAND, Hand.OFF_HAND).firstOrNull { isValidBlock(player.getStackInHand(it)) } if (simulatePlacementAttempts(currentCrosshairTarget, suitableHand) && player.moving - && SimulatePlacementAttempts.clickScheduler.isGoingToClick + && SimulatePlacementAttempts.clicker.isGoingToClick ) { - SimulatePlacementAttempts.clickScheduler.clicks { + SimulatePlacementAttempts.clicker.clicks { doPlacement(currentCrosshairTarget!!, suitableHand!!, swingMode = swingMode) true } diff --git a/src/main/kotlin/net/ccbluex/liquidbounce/script/bindings/features/ScriptSetting.kt b/src/main/kotlin/net/ccbluex/liquidbounce/script/bindings/features/ScriptSetting.kt index eb807369426..eef7e3b6ba9 100644 --- a/src/main/kotlin/net/ccbluex/liquidbounce/script/bindings/features/ScriptSetting.kt +++ b/src/main/kotlin/net/ccbluex/liquidbounce/script/bindings/features/ScriptSetting.kt @@ -18,11 +18,10 @@ */ package net.ccbluex.liquidbounce.script.bindings.features -import net.ccbluex.liquidbounce.config.* import net.ccbluex.liquidbounce.config.types.* import net.ccbluex.liquidbounce.utils.input.inputByName import net.minecraft.client.util.InputUtil -import org.graalvm.polyglot.Value as PolyglotValue; +import org.graalvm.polyglot.Value as PolyglotValue /** * Object used by the script API to provide an idiomatic way of creating module values. @@ -143,7 +142,7 @@ object ScriptSetting { }'" ) - return ChooseListValue(name, default, choices) + return ChooseListValue(name, defaultValue = default, choices = choices) } @@ -152,12 +151,12 @@ object ScriptSetting { default: T, valueType: ValueType = ValueType.INVALID, listType: ListValueType = ListValueType.None - ) = Value(name, default, valueType, listType) + ) = Value(name, defaultValue = default, valueType = valueType, listType = listType) private fun rangedValue( name: String, default: T, range: ClosedRange<*>, suffix: String, valueType: ValueType ) = - RangedValue(name, default, range, suffix, valueType) + RangedValue(name, defaultValue = default, range = range, suffix = suffix, valueType = valueType) } diff --git a/src/main/kotlin/net/ccbluex/liquidbounce/utils/aiming/PointTracker.kt b/src/main/kotlin/net/ccbluex/liquidbounce/utils/aiming/PointTracker.kt index 75b6c7aabfb..75d84d62ebf 100644 --- a/src/main/kotlin/net/ccbluex/liquidbounce/utils/aiming/PointTracker.kt +++ b/src/main/kotlin/net/ccbluex/liquidbounce/utils/aiming/PointTracker.kt @@ -22,7 +22,7 @@ import net.ccbluex.liquidbounce.config.types.Configurable import net.ccbluex.liquidbounce.config.types.NamedChoice import net.ccbluex.liquidbounce.config.types.ToggleableConfigurable import net.ccbluex.liquidbounce.event.EventListener -import net.ccbluex.liquidbounce.utils.clicking.ClickScheduler.Companion.RNG +import net.ccbluex.liquidbounce.utils.clicking.Clicker.Companion.RNG import net.ccbluex.liquidbounce.utils.client.player import net.ccbluex.liquidbounce.utils.entity.box import net.ccbluex.liquidbounce.utils.entity.prevPos @@ -44,7 +44,7 @@ class PointTracker( lowestPointDefault: PreferredBoxPart = PreferredBoxPart.BODY, timeEnemyOffsetDefault: Float = 0.4f, timeEnemyOffsetScale: ClosedFloatingPointRange = -1f..1f -) : Configurable("PointTracker"), EventListener { +) : Configurable("AimPoint", aliases = arrayOf("PointTracker")), EventListener { companion object { @@ -60,6 +60,28 @@ class PointTracker( } + /** + * Define the highest and lowest point of the box we want to aim at. + */ + private val highestPoint: PreferredBoxPart by enumChoice("HighestPoint", highestPointDefault) + .onChange { new -> + if (lowestPoint.isHigherThan(new)) { + lowestPoint + } else { + new + } + } + private val lowestPoint: PreferredBoxPart by enumChoice("LowestPoint", lowestPointDefault) + .onChange { new -> + if (new.isHigherThan(highestPoint)) { + highestPoint + } else { + new + } + } + + private val preferredBoxPoint by enumChoice("BoxPoint", PreferredBoxPoint.STRAIGHT) + /** * The time offset defines a prediction or rather a delay of the point tracker. * We can either try to predict the next location of the player and use this as our newest point, or @@ -173,33 +195,6 @@ class PointTracker( private val shrinkBox by float("ShrinkBox", 0.05f, 0.0f..0.3f) private val dynamicShrinkBox by boolean("DynamicShrinkBox", true) - /** - * The shrink box value will shrink the cut-off box by the given amount. - */ - private val intersectsBox by boolean("Intersects", true) - - /** - * Define the highest and lowest point of the box we want to aim at. - */ - private val highestPoint: PreferredBoxPart by enumChoice("HighestPoint", highestPointDefault) - .onChange { new -> - if (lowestPoint.isHigherThan(new)) { - lowestPoint - } else { - new - } - } - private val lowestPoint: PreferredBoxPart by enumChoice("LowestPoint", lowestPointDefault) - .onChange { new -> - if (new.isHigherThan(highestPoint)) { - highestPoint - } else { - new - } - } - - private val preferredBoxPoint by enumChoice("BoxPoint", PreferredBoxPoint.STRAIGHT) - enum class PreferredBoxPart(override val choiceName: String, val cutOff: (Box) -> Double) : NamedChoice { HEAD("Head", { box -> box.maxY }), BODY("Body", { box -> box.center.y }), @@ -263,13 +258,8 @@ class PointTracker( fun gatherPoint(entity: LivingEntity, situation: AimSituation): Point { val playerPosition = player.pos val playerEyes = player.eyePos - val currentRotation = RotationManager.currentRotation ?: player.rotation val positionDifference = playerPosition.y - entity.pos.y - if (intersectsBox && player.box.intersects(entity.box)) { - return Point(playerEyes, playerEyes + currentRotation.directionVector, entity.box, entity.box) - } - // Predicted target position of the enemy val targetVelocity = entity.pos.subtract(entity.prevPos) var box = entity.box.offset(targetVelocity.multiply(timeEnemyOffset.toDouble())) diff --git a/src/main/kotlin/net/ccbluex/liquidbounce/utils/clicking/ClickScheduler.kt b/src/main/kotlin/net/ccbluex/liquidbounce/utils/clicking/Clicker.kt similarity index 90% rename from src/main/kotlin/net/ccbluex/liquidbounce/utils/clicking/ClickScheduler.kt rename to src/main/kotlin/net/ccbluex/liquidbounce/utils/clicking/Clicker.kt index 1dace6bbe38..1145ed72bb7 100644 --- a/src/main/kotlin/net/ccbluex/liquidbounce/utils/clicking/ClickScheduler.kt +++ b/src/main/kotlin/net/ccbluex/liquidbounce/utils/clicking/Clicker.kt @@ -42,8 +42,8 @@ import java.util.* * We are simulating this behaviour by calculating how many times we could have been clicked in the meantime of a tick. * This allows us to predict future actions and behave accordingly. */ -open class ClickScheduler(val parent: T, showCooldown: Boolean, maxCps: Int = 60, name: String = "ClickScheduler") - : Configurable(name), EventListener where T : EventListener { +open class Clicker(val parent: T, showCooldown: Boolean, maxCps: Int = 60, name: String = "Clicker") + : Configurable(name, aliases = arrayOf("ClickScheduler")), EventListener where T : EventListener { companion object { internal val RNG = Random() @@ -100,9 +100,9 @@ open class ClickScheduler(val parent: T, showCooldown: Boolean, maxCps: Int = } ModuleDebug.apply { - debugParameter(this@ClickScheduler, "Current Clicks", clicks) - debugParameter(this@ClickScheduler, "Peek Clicks", clickArray.get(1)) - debugParameter(this@ClickScheduler, "Last Click Passed", lastClickPassed) + debugParameter(this@Clicker, "Current Clicks", clicks) + debugParameter(this@Clicker, "Peek Clicks", clickArray.get(1)) + debugParameter(this@Clicker, "Last Click Passed", lastClickPassed) } if (clicks > 0) { @@ -125,9 +125,9 @@ open class ClickScheduler(val parent: T, showCooldown: Boolean, maxCps: Int = clickArray.push(cycleArray) } - ModuleDebug.debugParameter(this@ClickScheduler, "Click Technique", pattern.choiceName) + ModuleDebug.debugParameter(this@Clicker, "Click Technique", pattern.choiceName) ModuleDebug.debugParameter( - this@ClickScheduler, + this@Clicker, "Click Array", clickArray.array.withIndex().joinToString { (i, v) -> if (i == clickArray.head) "*$v" else v.toString() diff --git a/src/main/kotlin/net/ccbluex/liquidbounce/utils/clicking/pattern/ClickPattern.kt b/src/main/kotlin/net/ccbluex/liquidbounce/utils/clicking/pattern/ClickPattern.kt index c3fbabe4f58..423b615acfb 100644 --- a/src/main/kotlin/net/ccbluex/liquidbounce/utils/clicking/pattern/ClickPattern.kt +++ b/src/main/kotlin/net/ccbluex/liquidbounce/utils/clicking/pattern/ClickPattern.kt @@ -18,8 +18,8 @@ */ package net.ccbluex.liquidbounce.utils.clicking.pattern -import net.ccbluex.liquidbounce.utils.clicking.ClickScheduler +import net.ccbluex.liquidbounce.utils.clicking.Clicker interface ClickPattern { - fun fill(clickArray: IntArray, cps: IntRange, scheduler: ClickScheduler<*>) + fun fill(clickArray: IntArray, cps: IntRange, clicker: Clicker<*>) } diff --git a/src/main/kotlin/net/ccbluex/liquidbounce/utils/clicking/pattern/patterns/ButterflyPattern.kt b/src/main/kotlin/net/ccbluex/liquidbounce/utils/clicking/pattern/patterns/ButterflyPattern.kt index f76732297a7..d2c309f663c 100644 --- a/src/main/kotlin/net/ccbluex/liquidbounce/utils/clicking/pattern/patterns/ButterflyPattern.kt +++ b/src/main/kotlin/net/ccbluex/liquidbounce/utils/clicking/pattern/patterns/ButterflyPattern.kt @@ -18,7 +18,7 @@ */ package net.ccbluex.liquidbounce.utils.clicking.pattern.patterns -import net.ccbluex.liquidbounce.utils.clicking.ClickScheduler +import net.ccbluex.liquidbounce.utils.clicking.Clicker import net.ccbluex.liquidbounce.utils.clicking.pattern.ClickPattern import kotlin.random.nextInt @@ -31,7 +31,7 @@ class ButterflyPattern : ClickPattern { override fun fill( clickArray: IntArray, cps: IntRange, - scheduler: ClickScheduler<*> + clicker: Clicker<*> ) { val clicks = cps.random() diff --git a/src/main/kotlin/net/ccbluex/liquidbounce/utils/clicking/pattern/patterns/DoubleClickPattern.kt b/src/main/kotlin/net/ccbluex/liquidbounce/utils/clicking/pattern/patterns/DoubleClickPattern.kt index f25f2b76eae..f7cedbe8787 100644 --- a/src/main/kotlin/net/ccbluex/liquidbounce/utils/clicking/pattern/patterns/DoubleClickPattern.kt +++ b/src/main/kotlin/net/ccbluex/liquidbounce/utils/clicking/pattern/patterns/DoubleClickPattern.kt @@ -18,7 +18,7 @@ */ package net.ccbluex.liquidbounce.utils.clicking.pattern.patterns -import net.ccbluex.liquidbounce.utils.clicking.ClickScheduler +import net.ccbluex.liquidbounce.utils.clicking.Clicker import net.ccbluex.liquidbounce.utils.clicking.pattern.ClickPattern /** @@ -34,7 +34,7 @@ class DoubleClickPattern : ClickPattern { override fun fill( clickArray: IntArray, cps: IntRange, - scheduler: ClickScheduler<*> + clicker: Clicker<*> ) { val clicks = cps.random() diff --git a/src/main/kotlin/net/ccbluex/liquidbounce/utils/clicking/pattern/patterns/DragPattern.kt b/src/main/kotlin/net/ccbluex/liquidbounce/utils/clicking/pattern/patterns/DragPattern.kt index a5b0a2d2951..8e74a4d8ab4 100644 --- a/src/main/kotlin/net/ccbluex/liquidbounce/utils/clicking/pattern/patterns/DragPattern.kt +++ b/src/main/kotlin/net/ccbluex/liquidbounce/utils/clicking/pattern/patterns/DragPattern.kt @@ -18,7 +18,7 @@ */ package net.ccbluex.liquidbounce.utils.clicking.pattern.patterns -import net.ccbluex.liquidbounce.utils.clicking.ClickScheduler +import net.ccbluex.liquidbounce.utils.clicking.Clicker import net.ccbluex.liquidbounce.utils.clicking.pattern.ClickPattern import kotlin.random.Random import kotlin.random.nextInt @@ -39,7 +39,7 @@ class DragPattern : ClickPattern { override fun fill( clickArray: IntArray, cps: IntRange, - scheduler: ClickScheduler<*> + clicker: Clicker<*> ) { val clicks = cps.random() diff --git a/src/main/kotlin/net/ccbluex/liquidbounce/utils/clicking/pattern/patterns/EfficientPattern.kt b/src/main/kotlin/net/ccbluex/liquidbounce/utils/clicking/pattern/patterns/EfficientPattern.kt index 31fb7682776..64ff774a7a6 100644 --- a/src/main/kotlin/net/ccbluex/liquidbounce/utils/clicking/pattern/patterns/EfficientPattern.kt +++ b/src/main/kotlin/net/ccbluex/liquidbounce/utils/clicking/pattern/patterns/EfficientPattern.kt @@ -18,7 +18,7 @@ */ package net.ccbluex.liquidbounce.utils.clicking.pattern.patterns -import net.ccbluex.liquidbounce.utils.clicking.ClickScheduler +import net.ccbluex.liquidbounce.utils.clicking.Clicker import net.ccbluex.liquidbounce.utils.clicking.pattern.ClickPattern /** @@ -29,14 +29,14 @@ class EfficientPattern : ClickPattern { override fun fill( clickArray: IntArray, cps: IntRange, - scheduler: ClickScheduler<*> + clicker: Clicker<*> ) { var clicks = cps.random() // Efficient will introduce wide gaps when the CPS is lower than half of the cycle length, // so we will use StabilizedPattern instead. if (clicks < 10) { - return StabilizedPattern().fill(clickArray, cps, scheduler) + return StabilizedPattern().fill(clickArray, cps, clicker) } for (i in 0 until clicks) { diff --git a/src/main/kotlin/net/ccbluex/liquidbounce/utils/clicking/pattern/patterns/NormalDistributionPattern.kt b/src/main/kotlin/net/ccbluex/liquidbounce/utils/clicking/pattern/patterns/NormalDistributionPattern.kt index ca69b58e391..182d4676062 100644 --- a/src/main/kotlin/net/ccbluex/liquidbounce/utils/clicking/pattern/patterns/NormalDistributionPattern.kt +++ b/src/main/kotlin/net/ccbluex/liquidbounce/utils/clicking/pattern/patterns/NormalDistributionPattern.kt @@ -18,8 +18,8 @@ */ package net.ccbluex.liquidbounce.utils.clicking.pattern.patterns -import net.ccbluex.liquidbounce.utils.clicking.ClickScheduler -import net.ccbluex.liquidbounce.utils.clicking.ClickScheduler.Companion.RNG +import net.ccbluex.liquidbounce.utils.clicking.Clicker +import net.ccbluex.liquidbounce.utils.clicking.Clicker.Companion.RNG import net.ccbluex.liquidbounce.utils.clicking.pattern.ClickPattern /** @@ -30,7 +30,7 @@ class NormalDistributionPattern : ClickPattern { override fun fill( clickArray: IntArray, cps: IntRange, - scheduler: ClickScheduler<*> + clicker: Clicker<*> ) { data class Band(val top: Double, val mean: Double, val std: Double) diff --git a/src/main/kotlin/net/ccbluex/liquidbounce/utils/clicking/pattern/patterns/SpammingPattern.kt b/src/main/kotlin/net/ccbluex/liquidbounce/utils/clicking/pattern/patterns/SpammingPattern.kt index 1469eb95aef..1dcad1e9d9b 100644 --- a/src/main/kotlin/net/ccbluex/liquidbounce/utils/clicking/pattern/patterns/SpammingPattern.kt +++ b/src/main/kotlin/net/ccbluex/liquidbounce/utils/clicking/pattern/patterns/SpammingPattern.kt @@ -18,7 +18,7 @@ */ package net.ccbluex.liquidbounce.utils.clicking.pattern.patterns -import net.ccbluex.liquidbounce.utils.clicking.ClickScheduler +import net.ccbluex.liquidbounce.utils.clicking.Clicker import net.ccbluex.liquidbounce.utils.clicking.pattern.ClickPattern /** @@ -35,7 +35,7 @@ class SpammingPattern : ClickPattern { override fun fill( clickArray: IntArray, cps: IntRange, - scheduler: ClickScheduler<*> + clicker: Clicker<*> ) { val clicks = cps.random() diff --git a/src/main/kotlin/net/ccbluex/liquidbounce/utils/clicking/pattern/patterns/StabilizedPattern.kt b/src/main/kotlin/net/ccbluex/liquidbounce/utils/clicking/pattern/patterns/StabilizedPattern.kt index 622e3fb852e..981aa5d468e 100644 --- a/src/main/kotlin/net/ccbluex/liquidbounce/utils/clicking/pattern/patterns/StabilizedPattern.kt +++ b/src/main/kotlin/net/ccbluex/liquidbounce/utils/clicking/pattern/patterns/StabilizedPattern.kt @@ -18,7 +18,7 @@ */ package net.ccbluex.liquidbounce.utils.clicking.pattern.patterns -import net.ccbluex.liquidbounce.utils.clicking.ClickScheduler +import net.ccbluex.liquidbounce.utils.clicking.Clicker import net.ccbluex.liquidbounce.utils.clicking.pattern.ClickPattern /** @@ -29,7 +29,7 @@ class StabilizedPattern : ClickPattern { override fun fill( clickArray: IntArray, cps: IntRange, - scheduler: ClickScheduler<*> + clicker: Clicker<*> ) { val clicks = cps.random()