Skip to content

Commit f799fc7

Browse files
committed
Drop collection for BuildTask
1 parent f872b86 commit f799fc7

File tree

4 files changed

+53
-142
lines changed

4 files changed

+53
-142
lines changed

.idea/codeStyles/Project.xml

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

common/src/main/kotlin/com/lambda/interaction/construction/context/PlaceContext.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ data class PlaceContext(
9595

9696
override fun SafeContext.buildRenderer() {
9797
withState(expectedState, expectedPos, baseColor, DirectionMask.ALL.exclude(result.side.opposite))
98-
withState(result.blockPos.blockState(world), result.blockPos, sideColor, result.side.opposite)
98+
withState(result.blockPos.blockState(world), result.blockPos, sideColor, result.side)
9999
}
100100

101101
override fun shouldRotate(config: BuildConfig) = config.rotateForPlace

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

Lines changed: 0 additions & 140 deletions
This file was deleted.

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

Lines changed: 50 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,14 @@
1717

1818
package com.lambda.task.tasks
1919

20+
import baritone.api.pathing.goals.GoalBlock
2021
import com.lambda.Lambda.LOG
2122
import com.lambda.config.groups.BuildConfig
2223
import com.lambda.config.groups.InteractionConfig
2324
import com.lambda.config.groups.InventoryConfig
2425
import com.lambda.interaction.request.rotation.RotationConfig
2526
import com.lambda.context.SafeContext
27+
import com.lambda.event.events.EntityEvent
2628
import com.lambda.event.events.MovementEvent
2729
import com.lambda.event.events.TickEvent
2830
import com.lambda.event.events.WorldEvent
@@ -41,6 +43,7 @@ import com.lambda.interaction.construction.simulation.BuildGoal
4143
import com.lambda.interaction.construction.simulation.BuildSimulator.simulate
4244
import com.lambda.interaction.construction.simulation.Simulation.Companion.simulation
4345
import com.lambda.interaction.construction.verify.TargetState
46+
import com.lambda.interaction.material.transfer.TransactionExecutor.Companion.transfer
4447
import com.lambda.module.modules.client.TaskFlowModule
4548
import com.lambda.task.Task
4649
import com.lambda.util.BaritoneUtils
@@ -50,6 +53,10 @@ import com.lambda.util.Communication.info
5053
import com.lambda.util.Formatting.string
5154
import com.lambda.util.collections.LimitedDecayQueue
5255
import com.lambda.util.extension.Structure
56+
import com.lambda.util.extension.inventorySlots
57+
import com.lambda.util.item.ItemUtils.block
58+
import com.lambda.util.player.SlotUtils.hotbarAndStorage
59+
import net.minecraft.entity.ItemEntity
5360
import net.minecraft.util.math.BlockPos
5461

5562
class BuildTask @Ta5kBuilder constructor(
@@ -71,7 +78,8 @@ class BuildTask @Ta5kBuilder constructor(
7178

7279
private var placements = 0
7380
private var breaks = 0
74-
private var goodPositions = setOf<BlockPos>()
81+
private val dropsToCollect = mutableSetOf<ItemEntity>()
82+
// private var goodPositions = setOf<BlockPos>()
7583

7684
override fun SafeContext.onStart() {
7785
(blueprint as? PropagatingBlueprint)?.next()
@@ -80,6 +88,7 @@ class BuildTask @Ta5kBuilder constructor(
8088
init {
8189
listen<TickEvent.Pre> {
8290
currentInteraction?.let { context ->
91+
// TaskFlowModule.drawables = listOf(context)
8392
if (context.shouldRotate(build) && !context.rotation.done) return@let
8493
context.interact(interact.swingHand)
8594
}
@@ -88,6 +97,30 @@ class BuildTask @Ta5kBuilder constructor(
8897
pendingInteractions.add(context)
8998
}
9099
instantBreaks.clear()
100+
101+
dropsToCollect.firstOrNull()?.let { itemDrop ->
102+
if (!world.entities.contains(itemDrop)) {
103+
dropsToCollect.remove(itemDrop)
104+
BaritoneUtils.cancel()
105+
return@listen
106+
}
107+
108+
val noInventorySpace = player.hotbarAndStorage.none { it.isEmpty }
109+
if (noInventorySpace) {
110+
val stackToThrow = player.currentScreenHandler.inventorySlots.firstOrNull {
111+
it.stack.item.block in TaskFlowModule.inventory.disposables
112+
} ?: run {
113+
failure("No item in inventory to throw but inventory is full and cant pick up item drop")
114+
return@listen
115+
}
116+
transfer {
117+
throwStack(stackToThrow.id)
118+
}.execute(this@BuildTask)
119+
return@listen
120+
}
121+
122+
BaritoneUtils.setGoalAndPath(GoalBlock(itemDrop.blockPos))
123+
}
91124
}
92125

93126
listen<TickEvent.Post> {
@@ -100,13 +133,16 @@ class BuildTask @Ta5kBuilder constructor(
100133
}
101134

102135
onRotate {
136+
if (collectDrops && dropsToCollect.isNotEmpty()) return@onRotate
137+
103138
// val sim = blueprint.simulation(interact, rotation, inventory)
104139
// BlockPos.iterateOutwards(player.blockPos, 5, 5, 5).forEach { pos ->
105140
// sim.simulate(pos.toFastVec())
106141
// }
107142

108143
// ToDo: Simulate for each pair player positions that work
109144
val results = blueprint.simulate(player.eyePos, interact, rotation, inventory, build)
145+
110146
TaskFlowModule.drawables = results.filterIsInstance<Drawable>()
111147
.plus(pendingInteractions.toList())
112148
// .plus(sim.goodPositions())
@@ -196,6 +232,19 @@ class BuildTask @Ta5kBuilder constructor(
196232
}
197233
}
198234
}
235+
236+
// ToDo: Dependent on the tracked data order. When set stack is called after position it wont work
237+
listen<EntityEvent.EntityUpdate> {
238+
if (!collectDrops) return@listen
239+
if (it.entity !is ItemEntity) return@listen
240+
pendingInteractions.find { context ->
241+
val inRange = context.expectedPos.toCenterPos().isInRange(it.entity.pos, 0.5)
242+
val correctMaterial = context.checkedState.block == it.entity.stack.item.block
243+
inRange && correctMaterial
244+
}?.let { context ->
245+
dropsToCollect.add(it.entity)
246+
}
247+
}
199248
}
200249

201250
companion object {

0 commit comments

Comments
 (0)