diff --git a/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/player/autoqueue/ModuleAutoQueue.kt b/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/player/autoqueue/ModuleAutoQueue.kt index 9bc9de1cb0e..5580df176ae 100644 --- a/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/player/autoqueue/ModuleAutoQueue.kt +++ b/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/player/autoqueue/ModuleAutoQueue.kt @@ -20,16 +20,14 @@ package net.ccbluex.liquidbounce.features.module.modules.player.autoqueue import net.ccbluex.liquidbounce.features.module.Category import net.ccbluex.liquidbounce.features.module.ClientModule -import net.ccbluex.liquidbounce.features.module.modules.player.autoqueue.modes.AutoQueueGommeDuels -import net.ccbluex.liquidbounce.features.module.modules.player.autoqueue.modes.AutoQueueHypixelSW -import net.ccbluex.liquidbounce.features.module.modules.player.autoqueue.modes.AutoQueueMessage -import net.ccbluex.liquidbounce.features.module.modules.player.autoqueue.modes.AutoQueuePaper +import net.ccbluex.liquidbounce.features.module.modules.player.autoqueue.presets.AutoQueueCustom +import net.ccbluex.liquidbounce.features.module.modules.player.autoqueue.presets.AutoQueueGommeDuels +import net.ccbluex.liquidbounce.features.module.modules.player.autoqueue.presets.AutoQueueHypixelSW object ModuleAutoQueue : ClientModule("AutoQueue", Category.PLAYER, aliases = arrayOf("AutoPlay")) { - val modes = choices("Mode", AutoQueuePaper, arrayOf( - AutoQueueMessage, - AutoQueuePaper, + val presets = choices("Presets", AutoQueueHypixelSW, arrayOf( AutoQueueHypixelSW, AutoQueueGommeDuels, + AutoQueueCustom )).apply(::tagBy) } diff --git a/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/player/autoqueue/actions/AutoQueueAction.kt b/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/player/autoqueue/actions/AutoQueueAction.kt new file mode 100644 index 00000000000..08b5a783cad --- /dev/null +++ b/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/player/autoqueue/actions/AutoQueueAction.kt @@ -0,0 +1,32 @@ +/* + * This file is part of LiquidBounce (https://github.com/CCBlueX/LiquidBounce) + * + * Copyright (c) 2015 - 2025 CCBlueX + * + * LiquidBounce is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * LiquidBounce is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with LiquidBounce. If not, see . + * + * + */ +package net.ccbluex.liquidbounce.features.module.modules.player.autoqueue.actions + +import net.ccbluex.liquidbounce.config.types.Choice +import net.ccbluex.liquidbounce.config.types.ChoiceConfigurable +import net.ccbluex.liquidbounce.event.Sequence +import net.ccbluex.liquidbounce.features.module.modules.player.autoqueue.presets.AutoQueueCustom.triggers + +abstract class AutoQueueAction(name: String) : Choice(name) { + override val parent: ChoiceConfigurable<*> + get() = triggers + abstract suspend fun execute(sequence: Sequence) +} diff --git a/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/player/autoqueue/actions/AutoQueueActionChat.kt b/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/player/autoqueue/actions/AutoQueueActionChat.kt new file mode 100644 index 00000000000..9bb77641b9a --- /dev/null +++ b/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/player/autoqueue/actions/AutoQueueActionChat.kt @@ -0,0 +1,36 @@ +/* + * This file is part of LiquidBounce (https://github.com/CCBlueX/LiquidBounce) + * + * Copyright (c) 2015 - 2025 CCBlueX + * + * LiquidBounce is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * LiquidBounce is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with LiquidBounce. If not, see . + * + * + */ +package net.ccbluex.liquidbounce.features.module.modules.player.autoqueue.actions + +import net.ccbluex.liquidbounce.event.Sequence + +object AutoQueueActionChat : AutoQueueAction("Chat") { + + private val message by text("Message", "/play solo_normal") + + override suspend fun execute(sequence: Sequence) { + if (message.startsWith("/")) { + network.sendCommand(message.substring(1)) + } else { + network.sendChatMessage(message) + } + } +} diff --git a/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/player/autoqueue/modes/AutoQueuePaper.kt b/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/player/autoqueue/actions/AutoQueueActionUseItem.kt similarity index 63% rename from src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/player/autoqueue/modes/AutoQueuePaper.kt rename to src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/player/autoqueue/actions/AutoQueueActionUseItem.kt index 119a44f0bb2..bdbc6362024 100644 --- a/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/player/autoqueue/modes/AutoQueuePaper.kt +++ b/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/player/autoqueue/actions/AutoQueueActionUseItem.kt @@ -18,36 +18,31 @@ * * */ +package net.ccbluex.liquidbounce.features.module.modules.player.autoqueue.actions -package net.ccbluex.liquidbounce.features.module.modules.player.autoqueue.modes - -import net.ccbluex.liquidbounce.config.types.Choice -import net.ccbluex.liquidbounce.config.types.ChoiceConfigurable -import net.ccbluex.liquidbounce.event.tickHandler +import net.ccbluex.liquidbounce.event.Sequence import net.ccbluex.liquidbounce.features.module.modules.player.autoqueue.ModuleAutoQueue -import net.ccbluex.liquidbounce.features.module.modules.player.autoqueue.ModuleAutoQueue.modes +import net.ccbluex.liquidbounce.features.module.modules.player.autoqueue.actions.AutoQueueActionUseItem.itemName import net.ccbluex.liquidbounce.utils.client.SilentHotbar +import net.ccbluex.liquidbounce.utils.client.convertToString import net.ccbluex.liquidbounce.utils.inventory.Slots -import net.minecraft.item.ItemStack -import net.minecraft.item.Items import net.minecraft.util.Hand -/** - * Can be used for different server that use paper to join a game - */ -object AutoQueuePaper : Choice("Paper") { +object AutoQueueActionUseItem : AutoQueueAction("UseItem") { - override val parent: ChoiceConfigurable - get() = modes + /** + * The [itemName] of the item to click in order to queue. + */ + private val itemName by text("Name", "Paper") - val repeatable = tickHandler { - val paper = Slots.Hotbar.findSlotIndex(Items.PAPER) ?: return@tickHandler + override suspend fun execute(sequence: Sequence) { + val item = Slots.Hotbar.findSlotIndex { itemStack -> + itemStack.name.convertToString().contains(itemName) + } ?: return - SilentHotbar.selectSlotSilently(ModuleAutoQueue, paper) - waitTicks(1) + SilentHotbar.selectSlotSilently(ModuleAutoQueue, item) + sequence.waitTicks(1) interaction.interactItem(player, Hand.MAIN_HAND) - - waitTicks(20) } } diff --git a/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/player/autoqueue/presets/AutoQueueCustom.kt b/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/player/autoqueue/presets/AutoQueueCustom.kt new file mode 100644 index 00000000000..b60c96947b0 --- /dev/null +++ b/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/player/autoqueue/presets/AutoQueueCustom.kt @@ -0,0 +1,106 @@ +/* + * This file is part of LiquidBounce (https://github.com/CCBlueX/LiquidBounce) + * + * Copyright (c) 2015 - 2025 CCBlueX + * + * LiquidBounce is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * LiquidBounce is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with LiquidBounce. If not, see . + * + * + */ +package net.ccbluex.liquidbounce.features.module.modules.player.autoqueue.presets + +import net.ccbluex.liquidbounce.config.types.Choice +import net.ccbluex.liquidbounce.config.types.ChoiceConfigurable +import net.ccbluex.liquidbounce.config.types.ToggleableConfigurable +import net.ccbluex.liquidbounce.event.events.WorldChangeEvent +import net.ccbluex.liquidbounce.event.handler +import net.ccbluex.liquidbounce.event.tickHandler +import net.ccbluex.liquidbounce.features.module.modules.combat.killaura.ModuleKillAura +import net.ccbluex.liquidbounce.features.module.modules.movement.speed.ModuleSpeed +import net.ccbluex.liquidbounce.features.module.modules.player.autoqueue.ModuleAutoQueue +import net.ccbluex.liquidbounce.features.module.modules.player.autoqueue.actions.AutoQueueAction +import net.ccbluex.liquidbounce.features.module.modules.player.autoqueue.actions.AutoQueueActionChat +import net.ccbluex.liquidbounce.features.module.modules.player.autoqueue.actions.AutoQueueActionUseItem +import net.ccbluex.liquidbounce.features.module.modules.player.autoqueue.trigger.* + +object AutoQueueCustom : Choice("Custom") { + + override val parent: ChoiceConfigurable<*> + get() = ModuleAutoQueue.presets + + internal val triggers = choices("Trigger", 0) { + arrayOf( + AutoQueueTriggerMessage, + AutoQueueTriggerItem, + AutoQueueTriggerTabHeader, + AutoQueueTriggerTabFooter + ) + } + + internal val actions = choices("Action", 0) { + arrayOf( + AutoQueueActionChat, + AutoQueueActionUseItem + ) + } + + object Control : ToggleableConfigurable(this, "Control", true) { + + val killAura by boolean("KillAura", true) + val speed by boolean("Speed", false) + + fun changeGameState(isInGame: Boolean) { + if (!enabled) { + return + } + + if (killAura) ModuleKillAura.enabled = isInGame + if (speed) ModuleSpeed.enabled = isInGame + } + + } + + init { + tree(Control) + } + + private val waitUntilWorldChange by boolean("WaitUntilWorldChange", true) + private var worldChangeOccurred = false + + @Suppress("unused") + private val tickHandler = tickHandler { + val trigger = triggers.activeChoice + + if (trigger.isTriggered) { + Control.changeGameState(false) + + actions.activeChoice.execute(this) + onCancellation { Control.changeGameState(true) } + + if (waitUntilWorldChange) { + waitUntil { worldChangeOccurred } + worldChangeOccurred = false + } + + waitTicks(20) + Control.changeGameState(true) + } + } + + @Suppress("unused") + private val worldChange = handler { event -> + worldChangeOccurred = true + } + +} diff --git a/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/player/autoqueue/modes/AutoQueueGommeDuels.kt b/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/player/autoqueue/presets/AutoQueueGommeDuels.kt similarity index 98% rename from src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/player/autoqueue/modes/AutoQueueGommeDuels.kt rename to src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/player/autoqueue/presets/AutoQueueGommeDuels.kt index b696c9db107..1d84be10543 100644 --- a/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/player/autoqueue/modes/AutoQueueGommeDuels.kt +++ b/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/player/autoqueue/presets/AutoQueueGommeDuels.kt @@ -18,7 +18,7 @@ * * */ -package net.ccbluex.liquidbounce.features.module.modules.player.autoqueue.modes +package net.ccbluex.liquidbounce.features.module.modules.player.autoqueue.presets import net.ccbluex.liquidbounce.config.types.Choice import net.ccbluex.liquidbounce.config.types.ChoiceConfigurable @@ -28,7 +28,7 @@ import net.ccbluex.liquidbounce.event.events.NotificationEvent import net.ccbluex.liquidbounce.event.sequenceHandler import net.ccbluex.liquidbounce.event.tickHandler import net.ccbluex.liquidbounce.features.module.modules.combat.killaura.ModuleKillAura -import net.ccbluex.liquidbounce.features.module.modules.player.autoqueue.ModuleAutoQueue.modes +import net.ccbluex.liquidbounce.features.module.modules.player.autoqueue.ModuleAutoQueue.presets import net.ccbluex.liquidbounce.utils.client.* import net.ccbluex.liquidbounce.utils.entity.boxedDistanceTo import net.ccbluex.liquidbounce.utils.inventory.Slots @@ -48,7 +48,7 @@ object AutoQueueGommeDuels : Choice("GommeDuels") { private var controlKillAura by boolean("ControlKillAura", true) override val parent: ChoiceConfigurable<*> - get() = modes + get() = presets override fun enable() { chat(regular("Please set your server language to German (DE) to use AutoPlay")) diff --git a/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/player/autoqueue/modes/AutoQueueHypixelSW.kt b/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/player/autoqueue/presets/AutoQueueHypixelSW.kt similarity index 96% rename from src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/player/autoqueue/modes/AutoQueueHypixelSW.kt rename to src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/player/autoqueue/presets/AutoQueueHypixelSW.kt index 9cd3023aa67..4c56b1a89e2 100644 --- a/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/player/autoqueue/modes/AutoQueueHypixelSW.kt +++ b/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/player/autoqueue/presets/AutoQueueHypixelSW.kt @@ -19,20 +19,20 @@ * */ -package net.ccbluex.liquidbounce.features.module.modules.player.autoqueue.modes +package net.ccbluex.liquidbounce.features.module.modules.player.autoqueue.presets import net.ccbluex.liquidbounce.config.types.Choice import net.ccbluex.liquidbounce.config.types.ChoiceConfigurable import net.ccbluex.liquidbounce.config.types.NamedChoice import net.ccbluex.liquidbounce.event.tickHandler -import net.ccbluex.liquidbounce.features.module.modules.player.autoqueue.ModuleAutoQueue.modes +import net.ccbluex.liquidbounce.features.module.modules.player.autoqueue.ModuleAutoQueue.presets import net.ccbluex.liquidbounce.utils.inventory.Slots import net.minecraft.item.Items object AutoQueueHypixelSW : Choice("HypixelSW") { override val parent: ChoiceConfigurable - get() = modes + get() = presets private val gameMode by enumChoice("GameMode", SkyWarsGameMode.NORMAL, SkyWarsGameMode.values()) diff --git a/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/player/autoqueue/trigger/AutoQueueTrigger.kt b/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/player/autoqueue/trigger/AutoQueueTrigger.kt new file mode 100644 index 00000000000..103c7c5731c --- /dev/null +++ b/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/player/autoqueue/trigger/AutoQueueTrigger.kt @@ -0,0 +1,32 @@ +/* + * This file is part of LiquidBounce (https://github.com/CCBlueX/LiquidBounce) + * + * Copyright (c) 2015 - 2025 CCBlueX + * + * LiquidBounce is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * LiquidBounce is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with LiquidBounce. If not, see . + * + * + */ + +package net.ccbluex.liquidbounce.features.module.modules.player.autoqueue.trigger + +import net.ccbluex.liquidbounce.config.types.Choice +import net.ccbluex.liquidbounce.config.types.ChoiceConfigurable +import net.ccbluex.liquidbounce.features.module.modules.player.autoqueue.presets.AutoQueueCustom.triggers + +abstract class AutoQueueTrigger(name: String) : Choice(name) { + override val parent: ChoiceConfigurable<*> + get() = triggers + abstract val isTriggered: Boolean +} diff --git a/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/player/autoqueue/trigger/AutoQueueTriggerItem.kt b/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/player/autoqueue/trigger/AutoQueueTriggerItem.kt new file mode 100644 index 00000000000..68ac81d8ce0 --- /dev/null +++ b/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/player/autoqueue/trigger/AutoQueueTriggerItem.kt @@ -0,0 +1,46 @@ +/* + * This file is part of LiquidBounce (https://github.com/CCBlueX/LiquidBounce) + * + * Copyright (c) 2015 - 2025 CCBlueX + * + * LiquidBounce is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * LiquidBounce is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with LiquidBounce. If not, see . + * + * + */ + +package net.ccbluex.liquidbounce.features.module.modules.player.autoqueue.trigger + +import net.ccbluex.liquidbounce.utils.client.convertToString +import net.ccbluex.liquidbounce.utils.inventory.Slots + +/** + * Can be used for different server that use paper to join a game + */ +object AutoQueueTriggerItem : AutoQueueTrigger("Item") { + + /** + * The [itemName] of the item when to trigger the queue, + * which can be a different item than we use in the [AutoQueueTriggerItem] action. + * + * The name also can be a custom name of the item and does not have to be matching, + * and only contains the text. + */ + private val itemName by text("Name", "Paper") + + override val isTriggered: Boolean + get() = Slots.Hotbar.findSlot { itemStack -> + itemStack.name.convertToString().contains(itemName) + } != null + +} diff --git a/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/player/autoqueue/modes/AutoQueueMessage.kt b/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/player/autoqueue/trigger/AutoQueueTriggerMessage.kt similarity index 70% rename from src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/player/autoqueue/modes/AutoQueueMessage.kt rename to src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/player/autoqueue/trigger/AutoQueueTriggerMessage.kt index f235f71b1f9..c992a3c19b3 100644 --- a/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/player/autoqueue/modes/AutoQueueMessage.kt +++ b/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/player/autoqueue/trigger/AutoQueueTriggerMessage.kt @@ -19,24 +19,20 @@ * */ -package net.ccbluex.liquidbounce.features.module.modules.player.autoqueue.modes +package net.ccbluex.liquidbounce.features.module.modules.player.autoqueue.trigger -import net.ccbluex.liquidbounce.config.types.Choice -import net.ccbluex.liquidbounce.config.types.ChoiceConfigurable import net.ccbluex.liquidbounce.event.events.ChatReceiveEvent import net.ccbluex.liquidbounce.event.handler -import net.ccbluex.liquidbounce.features.module.modules.player.autoqueue.ModuleAutoQueue.modes /** * Can be used for different server that use paper to join a game */ -object AutoQueueMessage : Choice("Message") { +object AutoQueueTriggerMessage : AutoQueueTrigger("Message") { - private val text by text("Text", "Новая игра") - private val command by text("Command", "/next") + override var isTriggered: Boolean = false + get() = field.apply { field = false } - override val parent: ChoiceConfigurable - get() = modes + private val text by text("Text", "Новая игра") @Suppress("unused") private val chatReceive = handler { event -> @@ -47,11 +43,7 @@ object AutoQueueMessage : Choice("Message") { } if (event.message.contains(text)) { - if (command.startsWith("/")) { - network.sendCommand(command.substring(1)) - } else { - network.sendChatMessage(command) - } + isTriggered = true } } diff --git a/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/player/autoqueue/trigger/AutoQueueTriggerTabFooter.kt b/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/player/autoqueue/trigger/AutoQueueTriggerTabFooter.kt new file mode 100644 index 00000000000..3e92b52bc0d --- /dev/null +++ b/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/player/autoqueue/trigger/AutoQueueTriggerTabFooter.kt @@ -0,0 +1,39 @@ +/* + * This file is part of LiquidBounce (https://github.com/CCBlueX/LiquidBounce) + * + * Copyright (c) 2015 - 2025 CCBlueX + * + * LiquidBounce is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * LiquidBounce is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with LiquidBounce. If not, see . + * + * + */ + +package net.ccbluex.liquidbounce.features.module.modules.player.autoqueue.trigger + +import net.ccbluex.liquidbounce.utils.client.convertToString + +/** + * Can be used for different server that use paper to join a game + */ +object AutoQueueTriggerTabFooter : AutoQueueTrigger("TabFooter") { + + private val text by text("Text", "Duels") + + override val isTriggered: Boolean + get() { + val playerListHeader = mc.inGameHud?.playerListHud?.footer ?: return false + return playerListHeader.convertToString().contains(text) + } + +} diff --git a/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/player/autoqueue/trigger/AutoQueueTriggerTabHeader.kt b/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/player/autoqueue/trigger/AutoQueueTriggerTabHeader.kt new file mode 100644 index 00000000000..510b9e34d85 --- /dev/null +++ b/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/player/autoqueue/trigger/AutoQueueTriggerTabHeader.kt @@ -0,0 +1,39 @@ +/* + * This file is part of LiquidBounce (https://github.com/CCBlueX/LiquidBounce) + * + * Copyright (c) 2015 - 2025 CCBlueX + * + * LiquidBounce is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * LiquidBounce is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with LiquidBounce. If not, see . + * + * + */ + +package net.ccbluex.liquidbounce.features.module.modules.player.autoqueue.trigger + +import net.ccbluex.liquidbounce.utils.client.convertToString + +/** + * Can be used for different server that use paper to join a game + */ +object AutoQueueTriggerTabHeader : AutoQueueTrigger("TabHeader") { + + private val text by text("Text", "Duels") + + override val isTriggered: Boolean + get() { + val playerListHeader = mc.inGameHud?.playerListHud?.header ?: return false + return playerListHeader.convertToString().contains(text) + } + +}