Skip to content

Commit d71fcdd

Browse files
committed
refactors n stuff
1 parent e98523b commit d71fcdd

File tree

3 files changed

+59
-43
lines changed

3 files changed

+59
-43
lines changed

common/src/main/kotlin/com/lambda/interaction/request/breaking/BreakManager.kt

Lines changed: 46 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -40,12 +40,14 @@ import com.lambda.util.BlockUtils.fluidState
4040
import com.lambda.util.Communication.info
4141
import com.lambda.util.Communication.warn
4242
import com.lambda.util.collections.LimitedDecayQueue
43+
import com.lambda.util.item.ItemUtils.block
4344
import com.lambda.util.player.swingHandClient
4445
import net.minecraft.block.BlockState
4546
import net.minecraft.block.OperatorBlock
4647
import net.minecraft.client.sound.PositionedSoundInstance
4748
import net.minecraft.client.sound.SoundInstance
4849
import net.minecraft.client.world.ClientWorld
50+
import net.minecraft.entity.ItemEntity
4951
import net.minecraft.entity.player.PlayerEntity
5052
import net.minecraft.item.ItemStack
5153
import net.minecraft.network.packet.c2s.play.HandSwingC2SPacket
@@ -89,13 +91,12 @@ object BreakManager : RequestHandler<BreakRequest>() {
8991
.sortedBy { it.instantBreak }
9092
.forEach { requestCtx ->
9193
if (!canAccept(requestCtx)) return@forEach
92-
val breakType = handleRequestContext(
93-
requestCtx,
94-
request.onBreak,
95-
request.buildConfig,
96-
request.rotationConfig,
97-
request.hotbarConfig
98-
)
94+
val breakType = with(request) {
95+
handleRequestContext(requestCtx,
96+
buildConfig, rotationConfig, hotbarConfig,
97+
onBreak, onItemDrop
98+
)
99+
}
99100
if (breakType == BreakType.Null) return@request
100101
if (requestCtx.instantBreak && instaBreaks < request.buildConfig.breakSettings.breaksPerTick) {
101102
breakingInfos.getOrNull(breakType.index)?.let { info ->
@@ -154,6 +155,24 @@ object BreakManager : RequestHandler<BreakRequest>() {
154155
info.onBreak()
155156
}
156157
}
158+
159+
//ToDo: drop callback stuff
160+
// // ToDo: Dependent on the tracked data order. When set stack is called after position it wont work
161+
// listen<EntityEvent.EntityUpdate> {
162+
// if (it.entity !is ItemEntity) return@listen
163+
// pendingInteractions
164+
// .firstOrNull { info -> matchesBlockItem(info, it.entity) }
165+
// ?.onItemDrop?.invoke(it.entity)
166+
// ?: breakingInfos
167+
// .filterNotNull()
168+
// .firstOrNull { info -> matchesBlockItem(info, it.entity) }?.onItemDrop?.invoke(it.entity)
169+
// }
170+
}
171+
172+
private fun matchesBlockItem(info: BreakInfo, entity: ItemEntity): Boolean {
173+
val inRange = info.context.expectedPos.toCenterPos().isInRange(entity.pos, 0.5)
174+
val correctMaterial = info.context.checkedState.block == entity.stack.item.block
175+
return inRange && correctMaterial
157176
}
158177

159178
private fun SafeContext.matchesTargetState(pos: BlockPos, targetState: TargetState, newState: BlockState) =
@@ -165,52 +184,41 @@ object BreakManager : RequestHandler<BreakRequest>() {
165184

166185
private fun handleRequestContext(
167186
requestCtx: BreakContext,
168-
onBreak: () -> Unit,
169187
buildConfig: BuildConfig,
170188
rotationConfig: RotationConfig,
171-
hotbarConfig: HotbarConfig
189+
hotbarConfig: HotbarConfig,
190+
onBreak: () -> Unit,
191+
onItemDrop: (ItemEntity) -> Unit
172192
): BreakType {
193+
val breakInfo = BreakInfo(requestCtx, BreakType.Primary,
194+
buildConfig.breakSettings, rotationConfig, hotbarConfig,
195+
onBreak, onItemDrop
196+
)
173197
primaryBreakingInfo?.let { primaryInfo ->
174198
if (!primaryInfo.breakConfig.doubleBreak) return BreakType.Null
175199
if (primaryInfo.startedWithSecondary) return BreakType.Null
176200
if (!primaryInfo.breaking) {
177-
secondaryBreakingInfo = BreakInfo(
178-
requestCtx,
179-
BreakType.Secondary,
180-
onBreak,
181-
buildConfig.breakSettings,
182-
rotationConfig,
183-
hotbarConfig
184-
)
201+
secondaryBreakingInfo = breakInfo.apply { type = BreakType.Secondary }
185202
return BreakType.Secondary
186203
} else {
187204
primaryInfo.type = BreakType.Secondary
188205
secondaryBreakingInfo = primaryInfo
189-
primaryBreakingInfo = BreakInfo(
190-
requestCtx,
191-
BreakType.Primary,
192-
onBreak,
193-
buildConfig.breakSettings,
194-
rotationConfig,
195-
hotbarConfig
196-
)
206+
primaryBreakingInfo = breakInfo
207+
setPendingInteractionsLimits(buildConfig)
197208
return BreakType.Primary
198209
}
199210
} ?: run {
200-
primaryBreakingInfo = BreakInfo(
201-
requestCtx,
202-
BreakType.Primary,
203-
onBreak,
204-
buildConfig.breakSettings,
205-
rotationConfig,
206-
hotbarConfig
207-
)
208-
pendingInteractions.setMaxSize(buildConfig.maxPendingInteractions)
209-
pendingInteractions.setDecayTime(buildConfig.interactionTimeout * 50L)
211+
primaryBreakingInfo = breakInfo
212+
setPendingInteractionsLimits(buildConfig)
210213
return BreakType.Primary
211214
}
212215
}
213216

217+
private fun setPendingInteractionsLimits(buildConfig: BuildConfig) {
218+
pendingInteractions.setMaxSize(buildConfig.maxPendingInteractions)
219+
pendingInteractions.setDecayTime(buildConfig.interactionTimeout * 50L)
220+
}
221+
214222
private fun SafeContext.canAccept(ctx: BreakContext) =
215223
pendingInteractions.none { it.context.expectedPos == ctx.expectedPos }
216224
&& breakingInfos.none { info -> info?.context?.expectedPos == ctx.expectedPos }
@@ -417,10 +425,11 @@ object BreakManager : RequestHandler<BreakRequest>() {
417425
data class BreakInfo(
418426
val context: BreakContext,
419427
var type: BreakType,
420-
val onBreak: () -> Unit,
421428
val breakConfig: BreakConfig,
422429
val rotationConfig: RotationConfig,
423-
val hotbarConfig: HotbarConfig
430+
val hotbarConfig: HotbarConfig,
431+
val onBreak: () -> Unit,
432+
val onItemDrop: (ItemEntity) -> Unit
424433
) {
425434
var breaking = false
426435
var breakingTicks = 0

common/src/main/kotlin/com/lambda/interaction/request/breaking/BreakRequest.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,14 +25,16 @@ import com.lambda.interaction.request.hotbar.HotbarConfig
2525
import com.lambda.interaction.request.rotation.RotationConfig
2626
import com.lambda.threading.runSafe
2727
import com.lambda.util.BlockUtils.blockState
28+
import net.minecraft.entity.ItemEntity
2829

2930
data class BreakRequest(
3031
val contexts: List<BreakContext>,
3132
val buildConfig: BuildConfig,
3233
val rotationConfig: RotationConfig,
3334
val hotbarConfig: HotbarConfig,
3435
val prio: Priority = 0,
35-
val onBreak: () -> Unit
36+
val onBreak: () -> Unit,
37+
val onItemDrop: (ItemEntity) -> Unit,
3638
) : Request(prio) {
3739
override val done: Boolean
3840
get() = runSafe {

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

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -46,15 +46,13 @@ import com.lambda.module.modules.client.TaskFlowModule
4646
import com.lambda.task.Task
4747
import com.lambda.util.BaritoneUtils
4848
import com.lambda.util.Communication.info
49-
import com.lambda.util.Communication.warn
5049
import com.lambda.util.Formatting.string
5150
import com.lambda.util.collections.LimitedDecayQueue
5251
import com.lambda.util.extension.Structure
5352
import com.lambda.util.extension.inventorySlots
5453
import com.lambda.util.item.ItemUtils.block
5554
import com.lambda.util.player.SlotUtils.hotbarAndStorage
5655
import net.minecraft.entity.ItemEntity
57-
import net.minecraft.util.Hand
5856
import net.minecraft.util.math.BlockPos
5957

6058
class BuildTask @Ta5kBuilder constructor(
@@ -72,7 +70,6 @@ class BuildTask @Ta5kBuilder constructor(
7270
private val pendingInteractions = LimitedDecayQueue<BuildContext>(
7371
build.maxPendingInteractions, build.interactionTimeout * 50L
7472
) { info("${it::class.simpleName} at ${it.expectedPos.toShortString()} timed out") }
75-
private var currentInteraction: BuildContext? = null
7673

7774
private var placements = 0
7875
private var breaks = 0
@@ -110,7 +107,12 @@ class BuildTask @Ta5kBuilder constructor(
110107
.take(build.breakSettings.breaksPerTick)
111108

112109
instantResults.firstOrNull()?.let {
113-
build.breakSettings.request(BreakRequest(instantResults.map { it.context }, build, rotation, hotbar) { breaks++ })
110+
build.breakSettings.request(
111+
BreakRequest(
112+
instantResults.map { it.context }, build, rotation, hotbar,
113+
onBreak = { breaks++ }
114+
) { item -> if (collectDrops) dropsToCollect.add(item) }
115+
)
114116
return@listen
115117
}
116118
}
@@ -149,7 +151,10 @@ class BuildTask @Ta5kBuilder constructor(
149151
if (pendingInteractions.size >= build.maxPendingInteractions) return@listen
150152
val breakContexts = resultsNotBlocked.filterIsInstance<BreakResult.Break>().map { it.context }
151153
if (breakContexts.isNotEmpty()) {
152-
val request = BreakRequest(breakContexts, build, rotation, hotbar) { breaks++ }
154+
val request = BreakRequest(
155+
breakContexts, build, rotation, hotbar,
156+
onBreak = { breaks++ },
157+
) { item -> if (collectDrops) dropsToCollect.add(item) }
153158
build.breakSettings.request(request)
154159
return@listen
155160
}

0 commit comments

Comments
 (0)