Skip to content

Commit 678e983

Browse files
authored
Improvement: Task chaining and recovery tasks
1 parent b336acf commit 678e983

23 files changed

Lines changed: 450 additions & 251 deletions

src/main/kotlin/com/lambda/interaction/construction/simulation/result/results/BreakResult.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ import com.lambda.interaction.handlers.ContainerHandler.transferByTask
3636
import com.lambda.interaction.material.StackSelection.Companion.selectStack
3737
import com.lambda.interaction.material.container.containers.HotbarContainer
3838
import com.lambda.task.Task
39+
import com.lambda.task.wrappers.softFail
3940
import net.minecraft.block.BlockState
4041
import net.minecraft.item.Item
4142
import net.minecraft.util.math.BlockPos

src/main/kotlin/com/lambda/interaction/construction/simulation/result/results/GenericResult.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ import com.lambda.interaction.handlers.ContainerHandler.transferByTask
3131
import com.lambda.interaction.material.StackSelection
3232
import com.lambda.interaction.material.container.containers.HotbarContainer
3333
import com.lambda.task.Task
34+
import com.lambda.task.wrappers.softFail
3435
import net.minecraft.client.data.TextureMap.side
3536
import net.minecraft.item.ItemStack
3637
import net.minecraft.util.math.BlockPos

src/main/kotlin/com/lambda/interaction/material/container/ExternalContainer.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,9 @@ package com.lambda.interaction.material.container
1919

2020
import com.lambda.context.AutomatedSafeContext
2121
import com.lambda.task.Task
22-
import com.lambda.task.TaskGenerator
22+
import com.lambda.task.wrappers.TaskSupplier
2323

2424
interface ExternalContainer {
2525
context(_: AutomatedSafeContext)
26-
fun accessThen(exitAfter: Boolean = true, taskGenerator: TaskGenerator<Unit>): Task<*>?
26+
fun accessThen(exitAfter: Boolean = true, taskSupplier: TaskSupplier<Unit, Unit>): Task<*>?
2727
}

src/main/kotlin/com/lambda/interaction/material/container/containers/ChestContainer.kt

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,9 @@ import com.lambda.interaction.handlers.ContainerHandler
2323
import com.lambda.interaction.material.container.ExternalContainer
2424
import com.lambda.interaction.material.container.MaterialContainer
2525
import com.lambda.task.Task
26-
import com.lambda.task.TaskGenerator
26+
import com.lambda.task.wrappers.TaskSupplier
2727
import com.lambda.task.tasks.OpenContainerTask
28+
import com.lambda.task.wrappers.thenAction
2829
import com.lambda.util.extension.containerSlots
2930
import com.lambda.util.text.buildText
3031
import com.lambda.util.text.highlighted
@@ -58,9 +59,9 @@ data class ChestContainer(
5859
}
5960

6061
context(automatedSafeContext: AutomatedSafeContext)
61-
override fun accessThen(exitAfter: Boolean, taskGenerator: TaskGenerator<Unit>): Task<*> =
62-
OpenContainerTask(blockPos, automatedSafeContext).then {
63-
taskGenerator.invoke(automatedSafeContext, Unit).finally {
62+
override fun accessThen(exitAfter: Boolean, taskSupplier: TaskSupplier<Unit, Unit>): Task<*> =
63+
OpenContainerTask(blockPos, automatedSafeContext).thenAction {
64+
taskSupplier.invoke(automatedSafeContext, Unit).thenAction {
6465
if (exitAfter) automatedSafeContext.player.closeHandledScreen()
6566
}
6667
}

src/main/kotlin/com/lambda/interaction/material/container/containers/EnderChestContainer.kt

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,12 @@ import com.lambda.interaction.handlers.ContainerHandler.findSlotsWithMaterial
2424
import com.lambda.interaction.material.StackSelection.Companion.select
2525
import com.lambda.interaction.material.container.ExternalContainer
2626
import com.lambda.interaction.material.container.MaterialContainer
27-
import com.lambda.task.TaskGenerator
27+
import com.lambda.task.wrappers.TaskSupplier
2828
import com.lambda.task.tasks.BuildTask.Companion.breakAndCollectBlock
2929
import com.lambda.task.tasks.OpenContainerTask
3030
import com.lambda.task.tasks.PlaceContainerTask
31+
import com.lambda.task.wrappers.thenAction
32+
import com.lambda.task.wrappers.thenOrNull
3133
import com.lambda.util.extension.containerSlots
3234
import com.lambda.util.text.buildText
3335
import com.lambda.util.text.literal
@@ -47,14 +49,14 @@ object EnderChestContainer : MaterialContainer(Rank.EnderChest), ExternalContain
4749
override val description = buildText { literal("Ender Chest") }
4850

4951
context(automatedSafeContext: AutomatedSafeContext)
50-
override fun accessThen(exitAfter: Boolean, taskGenerator: TaskGenerator<Unit>) =
52+
override fun accessThen(exitAfter: Boolean, taskSupplier: TaskSupplier<Unit, Unit>) =
5153
Items.ENDER_CHEST
5254
.select()
5355
.findSlotsWithMaterial()
5456
.firstOrNull()?.let { slot ->
55-
PlaceContainerTask(slot, automatedSafeContext).then { pos ->
56-
OpenContainerTask(pos, automatedSafeContext).then {
57-
taskGenerator.invoke(automatedSafeContext, Unit).thenOrNull {
57+
PlaceContainerTask(slot, automatedSafeContext).thenAction { pos ->
58+
OpenContainerTask(pos, automatedSafeContext).thenAction {
59+
taskSupplier.invoke(automatedSafeContext, Unit).thenOrNull {
5860
if (exitAfter) automatedSafeContext.breakAndCollectBlock(pos, lifeMaintenance = false)
5961
else null
6062
}

src/main/kotlin/com/lambda/interaction/material/container/containers/ShulkerBoxContainer.kt

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,12 @@ import com.lambda.context.SafeContext
2222
import com.lambda.interaction.handlers.ContainerHandler
2323
import com.lambda.interaction.material.container.ExternalContainer
2424
import com.lambda.interaction.material.container.MaterialContainer
25-
import com.lambda.task.TaskGenerator
25+
import com.lambda.task.wrappers.TaskSupplier
2626
import com.lambda.task.tasks.BuildTask.Companion.breakAndCollectBlock
2727
import com.lambda.task.tasks.OpenContainerTask
2828
import com.lambda.task.tasks.PlaceContainerTask
29+
import com.lambda.task.wrappers.thenAction
30+
import com.lambda.task.wrappers.thenOrNull
2931
import com.lambda.threading.runSafe
3032
import com.lambda.util.extension.containerSlots
3133
import com.lambda.util.text.buildText
@@ -63,11 +65,11 @@ data class ShulkerBoxContainer(
6365
private var placePos = BlockPos.ORIGIN
6466

6567
context(automatedSafeContext: AutomatedSafeContext)
66-
override fun accessThen(exitAfter: Boolean, taskGenerator: TaskGenerator<Unit>) =
67-
PlaceContainerTask(shulkerSlot, automatedSafeContext).then { pos ->
68+
override fun accessThen(exitAfter: Boolean, taskSupplier: TaskSupplier<Unit, Unit>) =
69+
PlaceContainerTask(shulkerSlot, automatedSafeContext).thenAction { pos ->
6870
placePos = pos
69-
OpenContainerTask(pos, automatedSafeContext).then {
70-
taskGenerator.invoke(automatedSafeContext, Unit).thenOrNull {
71+
OpenContainerTask(pos, automatedSafeContext).thenAction {
72+
taskSupplier.invoke(automatedSafeContext, Unit).thenOrNull {
7173
if (exitAfter) automatedSafeContext.breakAndCollectBlock(placePos)
7274
else null
7375
}

src/main/kotlin/com/lambda/module/modules/client/Client.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,6 @@ object Client : Module(
4545
@Tab(GENERAL_TAB) @Group(RENDERING_GROUP) val chunkRebuildsPerTick by setting("Chunk Rebuilds", 64, 1..256, 1, unit = " chunks/tick")
4646
@Tab(GENERAL_TAB) val highlightColor by setting("Text Highlight Color", Color(214, 55, 87), "Base text highlight color")
4747

48-
@Tab(DEBUG_TAB) val showAllEntries by setting("Show All Entries", false, "Show all entries in the task tree")
4948
@Tab(DEBUG_TAB) val ignoreItemDropWarnings by setting("Ignore Drop Warnings", false, "Hides the item drop warnings from the break manager")
5049
@Tab(DEBUG_TAB) val verboseDebug by setting("Verbose Debug", false, "Prints more, and more detailed, debug logs")
5150

src/main/kotlin/com/lambda/module/modules/player/AutoEat.kt

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,9 @@ import com.lambda.event.listener.SafeListener.Companion.listen
2626
import com.lambda.module.Module
2727
import com.lambda.module.tag.ModuleTag
2828
import com.lambda.task.RootTask.run
29-
import com.lambda.task.tasks.EatTask
29+
import com.lambda.task.Task
3030
import com.lambda.task.tasks.EatTask.Companion.eat
31+
import com.lambda.task.wrappers.thenAction
3132
import com.lambda.threading.runSafeAutomated
3233

3334
@Suppress("unused")
@@ -36,7 +37,7 @@ object AutoEat : Module(
3637
description = "Eats food when you are hungry",
3738
tag = ModuleTag.PLAYER,
3839
) {
39-
private var eatTask: EatTask? = null
40+
private var eatTask: Task<*>? = null
4041

4142
init {
4243
setDefaultAutomationConfig()
@@ -48,10 +49,7 @@ object AutoEat : Module(
4849
val reason = runSafeAutomated { reasonEating() }
4950
if (eatTask != null || !reason.shouldEat()) return@listen
5051

51-
val task = eat()
52-
task.finally { eatTask = null }
53-
task.run()
54-
eatTask = task
52+
eatTask = eat().thenAction { eatTask = null }.run()
5553
}
5654

5755
onDisable {

src/main/kotlin/com/lambda/module/modules/player/InventoryTweaks.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ import com.lambda.task.Task
3030
import com.lambda.task.tasks.BuildTask.Companion.breakAndCollectBlock
3131
import com.lambda.task.tasks.OpenContainerTask
3232
import com.lambda.task.tasks.PlaceContainerTask
33+
import com.lambda.task.wrappers.then
34+
import com.lambda.task.wrappers.thenAction
3335
import com.lambda.util.item.ItemUtils.shulkerBoxes
3436
import net.minecraft.item.Items
3537
import net.minecraft.screen.ScreenHandler
@@ -62,7 +64,7 @@ object InventoryTweaks : Module(
6264
lastOpenScreen = null
6365
placeAndOpen = PlaceContainerTask(slot, this@InventoryTweaks).then { placePos ->
6466
placedPos = placePos
65-
OpenContainerTask(placePos, this@InventoryTweaks).finally { screenHandler ->
67+
OpenContainerTask(placePos, this@InventoryTweaks).thenAction { screenHandler ->
6668
lastOpenScreen = screenHandler
6769
}
6870
}.run()

src/main/kotlin/com/lambda/module/modules/world/AutoPortal.kt

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ import com.lambda.module.tag.ModuleTag
4848
import com.lambda.task.RootTask.run
4949
import com.lambda.task.Task
5050
import com.lambda.task.tasks.BuildTask.Companion.build
51+
import com.lambda.task.wrappers.thenOrNull
5152
import com.lambda.threading.runSafe
5253
import com.lambda.util.BlockUtils.blockState
5354
import com.lambda.util.BlockUtils.isEmpty
@@ -103,9 +104,7 @@ object AutoPortal : Module(
103104
if (light) LightTask(currAnchorPos.up(), walkIn)
104105
else null
105106
}
106-
.finally {
107-
buildTask = null
108-
}
107+
.onCompletion { buildTask = null }
109108
.run()
110109
}
111110
private val corners by setting("Corners", false)

0 commit comments

Comments
 (0)