Skip to content

Commit b3a55da

Browse files
committed
Stacktraceing and shulker container
1 parent ba1ded8 commit b3a55da

File tree

11 files changed

+94
-76
lines changed

11 files changed

+94
-76
lines changed

common/src/main/kotlin/com/lambda/interaction/construction/result/BuildResult.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
package com.lambda.interaction.construction.result
22

3+
import baritone.process.BuilderProcess.GoalAdjacent
34
import com.lambda.interaction.construction.context.BuildContext
45
import com.lambda.interaction.material.ContainerManager.transfer
56
import com.lambda.interaction.material.StackSelection.Companion.select
67
import com.lambda.interaction.material.container.MainHandContainer
78
import com.lambda.task.Task
89
import com.lambda.task.Task.Companion.emptyTask
910
import com.lambda.task.tasks.GoalTask.Companion.moveNearBlock
11+
import com.lambda.task.tasks.GoalTask.Companion.moveToGoal
1012
import com.lambda.task.tasks.GoalTask.Companion.moveUntilLoaded
1113
import net.minecraft.block.BlockState
1214
import net.minecraft.item.Item
@@ -105,12 +107,13 @@ abstract class BuildResult : ComparableResult<Rank> {
105107
*/
106108
data class NotVisible(
107109
override val blockPos: BlockPos,
110+
val hitPos: BlockPos,
108111
val side: Direction,
109112
val distance: Double
110113
) : Resolvable, BuildResult() {
111114
override val rank = Rank.NOT_VISIBLE
112115

113-
override val resolve = emptyTask()
116+
override val resolve = moveToGoal(GoalAdjacent(hitPos, blockPos, true))
114117

115118
override fun compareTo(other: ComparableResult<Rank>): Int {
116119
return when (other) {

common/src/main/kotlin/com/lambda/interaction/material/ContainerManager.kt

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ import java.util.TreeSet
2323
// ToDo: Make this a Configurable to save container caches. Should use a cached region based storage system.
2424
object ContainerManager : Loadable {
2525
// ToDo: Maybe use reflection to get all containers?
26-
val container = TreeSet<MaterialContainer>().apply {
26+
private val container = TreeSet<MaterialContainer>().apply {
2727
add(CreativeContainer)
2828
add(EnderChestContainer)
2929
add(HotbarContainer)
@@ -70,23 +70,27 @@ object ContainerManager : Loadable {
7070
}
7171
}
7272

73+
fun container() = container.flatMap {
74+
setOf(it) + it.shulkerContainer
75+
}
76+
7377
fun StackSelection.transfer(destination: MaterialContainer) =
7478
findContainerWithSelection(this)?.transfer(this, destination)
7579

7680
fun findContainer(
7781
block: (MaterialContainer) -> Boolean
78-
): MaterialContainer? = container.find(block)
82+
): MaterialContainer? = container().find(block)
7983

8084
fun findContainerWithSelection(
8185
selection: StackSelection
8286
): MaterialContainer? =
83-
container.find { it.available(selection) >= selection.count }
87+
container().find { it.available(selection) >= selection.count }
8488

8589
fun findContainerWithSelection(
8690
selectionBuilder: StackSelection.() -> Unit
8791
): MaterialContainer? {
8892
val selection = StackSelection().apply(selectionBuilder)
89-
return container.find { it.available(selection) >= selection.count }
93+
return container().find { it.available(selection) >= selection.count }
9094
}
9195

9296
fun findContainerWithStacks(

common/src/main/kotlin/com/lambda/interaction/material/MaterialContainer.kt

Lines changed: 17 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import com.lambda.interaction.material.StackSelection.Companion.select
44
import com.lambda.interaction.material.container.ShulkerBoxContainer
55
import com.lambda.interaction.material.transfer.TransferResult
66
import com.lambda.task.Task
7-
import com.lambda.task.Task.Companion.emptyTask
87
import com.lambda.util.item.ItemStackUtils.count
98
import com.lambda.util.item.ItemStackUtils.empty
109
import com.lambda.util.item.ItemStackUtils.shulkerBoxContents
@@ -18,6 +17,17 @@ abstract class MaterialContainer(
1817
) : Comparable<MaterialContainer> {
1918
abstract var stacks: List<ItemStack>
2019

20+
val shulkerContainer get() =
21+
stacks.filter {
22+
it.item in ItemUtils.shulkerBoxes
23+
}.map { stack ->
24+
ShulkerBoxContainer(
25+
stack.shulkerBoxContents,
26+
containedIn = this@MaterialContainer,
27+
shulkerStack = stack,
28+
)
29+
}.toSet()
30+
2131
fun update(stacks: List<ItemStack>) {
2232
this.stacks = stacks
2333
}
@@ -53,17 +63,17 @@ abstract class MaterialContainer(
5363
}
5464
} ?: deposit(selection)
5565

56-
open fun filter(selection: StackSelection) =
57-
selection.filterStacks(stacks)
66+
open fun StackSelection.matchingStacks() =
67+
filterStacks(stacks)
5868

59-
open fun filter(selection: (ItemStack) -> Boolean) =
60-
filter(selection.select())
69+
open fun matchingStacks(selection: (ItemStack) -> Boolean) =
70+
selection.select().matchingStacks()
6171

6272
open fun available(selection: StackSelection) =
63-
filter(selection).count
73+
selection.matchingStacks().count
6474

6575
open fun spaceLeft(selection: StackSelection) =
66-
filter(selection).spaceLeft + stacks.empty * selection.stackSize
76+
selection.matchingStacks().spaceLeft + stacks.empty * selection.stackSize
6777

6878
fun transfer(selection: StackSelection, destination: MaterialContainer): TransferResult {
6979
val amount = available(selection)
@@ -87,17 +97,6 @@ abstract class MaterialContainer(
8797
)
8898
}
8999

90-
fun List<ItemStack>.doShulkerCheck() =
91-
filter {
92-
it.item in ItemUtils.shulkerBoxes
93-
}.map { stack ->
94-
ShulkerBoxContainer(
95-
stack.shulkerBoxContents,
96-
containedIn = this@MaterialContainer,
97-
shulkerStack = stack,
98-
)
99-
}.toSet()
100-
101100
enum class Rank {
102101
CREATIVE,
103102
MAIN_HAND,

common/src/main/kotlin/com/lambda/interaction/material/container/MainHandContainer.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ object MainHandContainer : MaterialContainer(Rank.MAIN_HAND) {
2020
override fun withdraw(selection: StackSelection) = emptyTask("WithdrawFromMainHand")
2121

2222
override fun deposit(selection: StackSelection) = buildTask("DepositToMainHand") {
23-
InventoryContainer.filter(selection).firstOrNull()?.let { stack ->
23+
selection.matchingStacks().firstOrNull()?.let { stack ->
2424
if (ItemStack.areEqual(stack, player.mainHandStack)) {
2525
return@buildTask
2626
}

common/src/main/kotlin/com/lambda/interaction/visibilty/VisibilityChecker.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,8 @@ object VisibilityChecker {
3232

3333
fun SafeContext.lookAtBlock(
3434
blockPos: BlockPos,
35-
rotationConfig: IRotationConfig = TaskFlow.rotationSettings,
36-
interactionConfig: InteractionConfig = TaskFlow.interactionSettings,
35+
rotationConfig: IRotationConfig = TaskFlow.rotation,
36+
interactionConfig: InteractionConfig = TaskFlow.interact,
3737
sides: Set<Direction> = emptySet()
3838
): RotationContext? {
3939
val state = blockPos.blockState(world)
@@ -46,8 +46,8 @@ object VisibilityChecker {
4646

4747
fun SafeContext.findRotation(
4848
boxes: List<Box>,
49-
rotationConfig: IRotationConfig = TaskFlow.rotationSettings,
50-
interact: InteractionConfig = TaskFlow.interactionSettings,
49+
rotationConfig: IRotationConfig = TaskFlow.rotation,
50+
interact: InteractionConfig = TaskFlow.interact,
5151
sides: Set<Direction> = emptySet(),
5252
verify: HitResult.() -> Boolean,
5353
): RotationContext? {

common/src/main/kotlin/com/lambda/module/modules/client/TaskFlow.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,13 @@ object TaskFlow : Module(
1818
}
1919

2020
private val page by setting("Page", Page.BUILD)
21-
val buildSettings = BuildSettings(this) {
21+
val build = BuildSettings(this) {
2222
page == Page.BUILD
2323
}
24-
val rotationSettings = RotationSettings(this) {
24+
val rotation = RotationSettings(this) {
2525
page == Page.ROTATION
2626
}
27-
val interactionSettings = InteractionSettings(this) {
27+
val interact = InteractionSettings(this) {
2828
page == Page.INTERACTION
2929
}
3030
// val disposables by setting("Disposables", ItemUtils.defaultDisposables)

common/src/main/kotlin/com/lambda/task/Task.kt

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -217,7 +217,10 @@ abstract class Task<Result>(
217217
}
218218

219219
@Ta5kBuilder
220-
fun failure(e: Throwable) {
220+
fun failure(
221+
e: Throwable,
222+
stacktrace: MutableList<Task<*>> = mutableListOf()
223+
) {
221224
if (attempted < tries) {
222225
attempted++
223226
warn("Failed task with error: ${e.message}, retrying ($attempted/$tries) ...")
@@ -230,10 +233,21 @@ abstract class Task<Result>(
230233
}
231234

232235
state = State.FAILED
233-
logError("Task failed after $attempted attempts with error: ${e.message}")
234236
stopListening()
235237
runSafe { onException(this@Task, e) }
236-
parent?.failure(e)
238+
stacktrace.add(this)
239+
parent?.failure(e, stacktrace) ?: run {
240+
val message = buildString {
241+
stacktrace.firstOrNull()?.let { first ->
242+
append("${first.identifier} failed: ${e.message}\n")
243+
stacktrace.drop(1).forEach {
244+
append(" -> ${it.identifier}\n")
245+
}
246+
}
247+
}
248+
LOG.error(message, e)
249+
logError(message)
250+
}
237251
}
238252

239253
/**

common/src/main/kotlin/com/lambda/task/tasks/BreakBlock.kt

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,13 @@ import net.minecraft.util.math.Direction
2020

2121
class BreakBlock @Ta5kBuilder constructor(
2222
private val ctx: BreakContext,
23-
private val rotationConfig: IRotationConfig = TaskFlow.rotationSettings,
24-
private val interactionConfig: InteractionConfig = TaskFlow.interactionSettings,
23+
private val rotationConfig: IRotationConfig = TaskFlow.rotation,
24+
private val interactionConfig: InteractionConfig = TaskFlow.interact,
2525
private val sides: Set<Direction> = emptySet(),
26-
private val collectDrop: Boolean = TaskFlow.buildSettings.collectDrops,
27-
private val rotate: Boolean = TaskFlow.buildSettings.rotateForBreak,
28-
private val swingHand: Boolean = TaskFlow.buildSettings.swingHand,
29-
private val particles: Boolean = TaskFlow.buildSettings.particlesOnBreak,
26+
private val collectDrop: Boolean = TaskFlow.build.collectDrops,
27+
private val rotate: Boolean = TaskFlow.build.rotateForBreak,
28+
private val swingHand: Boolean = TaskFlow.build.swingHand,
29+
private val particles: Boolean = TaskFlow.build.particlesOnBreak,
3030
) : Task<ItemEntity?>() {
3131
val blockPos: BlockPos get() = ctx.result.blockPos
3232
private var beginState: BlockState? = null
@@ -85,8 +85,8 @@ class BreakBlock @Ta5kBuilder constructor(
8585
@Ta5kBuilder
8686
fun breakBlock(
8787
ctx: BreakContext,
88-
rotationConfig: IRotationConfig = TaskFlow.rotationSettings,
89-
interactionConfig: InteractionConfig = TaskFlow.interactionSettings,
88+
rotationConfig: IRotationConfig = TaskFlow.rotation,
89+
interactionConfig: InteractionConfig = TaskFlow.interact,
9090
sides: Set<Direction> = emptySet(),
9191
collectDrop: Boolean = false,
9292
rotate: Boolean = false,

0 commit comments

Comments
 (0)