From ed4ab87bc044beee7975e433515c1a1a38c963e9 Mon Sep 17 00:00:00 2001 From: Izuna Date: Mon, 24 Feb 2025 17:17:24 +0100 Subject: [PATCH] feat(Sequence): cancellation task --- .../kotlin/net/ccbluex/liquidbounce/event/Sequence.kt | 9 +++++++++ .../module/modules/combat/ModuleSuperKnockback.kt | 9 +++++++++ 2 files changed, 18 insertions(+) diff --git a/src/main/kotlin/net/ccbluex/liquidbounce/event/Sequence.kt b/src/main/kotlin/net/ccbluex/liquidbounce/event/Sequence.kt index 41ea954e6c2..6ab814c5f20 100644 --- a/src/main/kotlin/net/ccbluex/liquidbounce/event/Sequence.kt +++ b/src/main/kotlin/net/ccbluex/liquidbounce/event/Sequence.kt @@ -80,12 +80,14 @@ open class Sequence(val owner: EventListener, val handler: SuspendableHandler) { open fun cancel() { coroutine.cancel() + cancellationTask?.run() SequenceManager.sequences -= this@Sequence } private var continuation: Continuation? = null private var elapsedTicks = 0 private var totalTicks = IntSupplier { 0 } + private var cancellationTask: Runnable? = null init { // Note: It is important that this is in the constructor and NOT in the variable declaration, because @@ -117,6 +119,13 @@ open class Sequence(val owner: EventListener, val handler: SuspendableHandler) { } } + /** + * Adds a task to be executed when the sequence is cancelled. + */ + fun onCancellation(task: Runnable) { + cancellationTask = task + } + /** * Waits until the [case] is true, then continues. Checks every tick. */ diff --git a/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/combat/ModuleSuperKnockback.kt b/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/combat/ModuleSuperKnockback.kt index 4cb50f70df4..000531ff49f 100644 --- a/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/combat/ModuleSuperKnockback.kt +++ b/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/combat/ModuleSuperKnockback.kt @@ -104,6 +104,10 @@ object ModuleSuperKnockback : ClientModule("SuperKnockback", Category.COMBAT, al return@sequenceHandler } + onCancellation { + cancelSprint = false + } + cancelSprint = true waitUntil { !player.isSprinting && !player.lastSprinting } waitTicks(reSprintTicks.random()) @@ -145,6 +149,11 @@ object ModuleSuperKnockback : ClientModule("SuperKnockback", Category.COMBAT, al return@sequenceHandler } + onCancellation { + cancelMovement = false + inSequence = false + } + inSequence = true waitTicks(ticksUntilMovementBlock.random()) cancelMovement = true