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)
+ }
+
+}