@@ -16,10 +16,17 @@ import com.lambda.task.tasks.GoalTask.Companion.moveToBlock
1616import com.lambda.task.tasks.GoalTask.Companion.moveToBlockUntil
1717import com.lambda.task.tasks.GoalTask.Companion.moveToGoal
1818import com.lambda.task.tasks.GoalTask.Companion.moveToGoalUntil
19+ import com.lambda.util.BaritoneUtils
1920import com.lambda.util.BlockUtils.blockState
21+ import com.lambda.util.BlockUtils.item
22+ import com.lambda.util.item.ItemUtils.defaultDisposables
23+ import com.lambda.util.player.SlotUtils.clickSlot
24+ import com.lambda.util.player.SlotUtils.hotbarAndStorage
25+ import com.lambda.util.primitives.extension.inventorySlots
2026import com.lambda.util.world.raycast.RayCastUtils.blockResult
2127import net.minecraft.block.BlockState
2228import net.minecraft.entity.ItemEntity
29+ import net.minecraft.screen.slot.SlotActionType
2330import net.minecraft.util.math.BlockPos
2431import net.minecraft.util.math.Direction
2532
@@ -37,6 +44,7 @@ class BreakBlock @Ta5kBuilder constructor(
3744 val SafeContext .state: BlockState get() = blockPos.blockState(world)
3845 override var cooldown = Int .MAX_VALUE
3946 get() = maxOf(TaskFlow .build.breakCoolDown, TaskFlow .taskCooldown)
47+ private var drop: ItemEntity ? = null
4048
4149 override fun SafeContext.onStart () {
4250 parent?.let {
@@ -67,6 +75,23 @@ class BreakBlock @Ta5kBuilder constructor(
6775 }
6876
6977 listener<TickEvent .Pre > {
78+ drop?.let { itemDrop ->
79+ if (! world.entities.contains(itemDrop)) {
80+ success(itemDrop)
81+ return @listener
82+ }
83+
84+ if (player.hotbarAndStorage.none { it.isEmpty }) {
85+ player.currentScreenHandler.inventorySlots.firstOrNull {
86+ it.stack.item in defaultDisposables
87+ }?.let {
88+ clickSlot(it.index, 1 , SlotActionType .THROW )
89+ }
90+ }
91+
92+ BaritoneUtils .setGoalAndPath(GoalBlock (itemDrop.blockPos))
93+ }
94+
7095 if (finish()) {
7196 success(null )
7297 return @listener
@@ -80,17 +105,12 @@ class BreakBlock @Ta5kBuilder constructor(
80105
81106 listener<WorldEvent .EntitySpawn > {
82107 if (collectDrop
108+ && drop == null
83109 && it.entity is ItemEntity
84110 && it.entity.pos.isInRange(blockPos.toCenterPos(), 1.0 )
85111// && it.entity.stack.item == beginState?.block?.item // ToDo: The item entities are all air??
86112 ) {
87- moveToGoalUntil(
88- { GoalBlock (it.entity.blockPos) },
89- { ! world.entities.contains(it.entity) }
90- ).onSuccess { _, _ ->
91- success(it.entity)
92- }.start(this @BreakBlock)
93- // success(it.entity)
113+ drop = it.entity
94114 }
95115 }
96116 }
0 commit comments