Skip to content

Commit 352d6b7

Browse files
committed
better held item checks
1 parent e534b84 commit 352d6b7

File tree

3 files changed

+18
-22
lines changed

3 files changed

+18
-22
lines changed

src/main/kotlin/com/lambda/interaction/request/breaking/BreakInfo.kt

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,6 @@ data class BreakInfo(
4848
var shouldSwap by OneSetPerTick(value = false, throwOnLimitBreach = true)
4949
var swapStack: ItemStack by OneSetPerTick(ItemStack.EMPTY, true)
5050
var minSwapTicks by OneSetPerTick(0, true)
51-
var serverBreakTicks = 0
5251

5352
// BreakInfo Specific
5453
var updatedThisTick by OneSetPerTick(false, resetAfterTick = true).apply { set(true) }
@@ -115,8 +114,7 @@ data class BreakInfo(
115114
}
116115

117116
fun shouldSwap(player: ClientPlayerEntity, world: BlockView): Boolean {
118-
val item = player.inventory.getStack(context.hotbarIndex)
119-
val breakDelta = context.cachedState.calcItemBlockBreakingDelta(player, world, context.blockPos, item)
117+
val breakDelta = context.cachedState.calcItemBlockBreakingDelta(player, world, context.blockPos, swapStack)
120118
val breakProgress = breakDelta * (breakingTicks + 1)
121119
return if (couldReBreak == RebreakManager.RebreakPotential.Instant)
122120
breakConfig.swapMode.isEnabled()
@@ -140,7 +138,7 @@ data class BreakInfo(
140138
private fun getBreakTextureProgress(player: PlayerEntity, world: ClientWorld): Int {
141139
val swapMode = breakConfig.swapMode
142140
val item =
143-
if (swapMode.isEnabled() && swapMode != BreakConfig.SwapMode.Start) player.inventory.getStack(context.hotbarIndex) else player.mainHandStack
141+
if (swapMode.isEnabled() && swapMode != BreakConfig.SwapMode.Start) swapStack else player.mainHandStack
144142
val breakDelta = context.cachedState.calcItemBlockBreakingDelta(player, world, context.blockPos, item)
145143
val progress = (breakDelta * breakingTicks) / (getBreakThreshold() + (breakDelta * breakConfig.fudgeFactor))
146144
return if (progress > 0.0f) (progress * 10.0f).toInt().coerceAtMost(9) else -1

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

Lines changed: 15 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -139,10 +139,11 @@ object BreakManager : RequestHandler<BreakRequest>(
139139
private val rotated get() = rotationRequest?.done != false
140140

141141
var swappedThisTick = false
142+
var heldTicks = 0
142143
var swappedStack: ItemStack = ItemStack.EMPTY
143144
set(value) {
144145
if (value != field)
145-
breakInfos.forEach { it?.serverBreakTicks = 0 }
146+
heldTicks = 0
146147
swappedThisTick = true
147148
field = value
148149
}
@@ -174,6 +175,7 @@ object BreakManager : RequestHandler<BreakRequest>(
174175
if (!swappedThisTick) {
175176
swappedStack = player.mainHandStack
176177
} else swappedThisTick = false
178+
heldTicks++
177179
if (breakCooldown > 0) {
178180
breakCooldown--
179181
}
@@ -229,9 +231,7 @@ object BreakManager : RequestHandler<BreakRequest>(
229231
listen<RenderEvent.StaticESP> { event ->
230232
val activeStack = breakInfos
231233
.filterNotNull()
232-
.firstOrNull()?.let { info ->
233-
player.inventory.getStack(info.context.hotbarIndex)
234-
} ?: return@listen
234+
.firstOrNull()?.swapStack ?: return@listen
235235

236236
breakInfos
237237
.filterNotNull()
@@ -413,20 +413,18 @@ object BreakManager : RequestHandler<BreakRequest>(
413413
rotation.submit(false)
414414
}
415415

416-
if (activeInfos.isEmpty()) {
417-
swappedStack = player.mainHandStack
418-
return true
419-
}
416+
if (activeInfos.isEmpty()) return true
417+
418+
infos.forEach { it.updatePreProcessing(player, world) }
419+
420+
if (swappedThisTick) return true
420421

421-
infos.forEach {
422-
it.updatePreProcessing(player, world)
423-
}
424422
infos.firstOrNull()?.let { info ->
425423
infos.firstOrNull { it.shouldSwap && it.shouldProgress }?.let { last ->
426-
if (!info.context.requestSwap(info.request, max(info.minSwapTicks, last.minSwapTicks)))
424+
val minSwapTicks = max(info.minSwapTicks, last.minSwapTicks)
425+
if (!info.context.requestSwap(info.request, minSwapTicks))
427426
return false
428-
swappedStack = info.swapStack
429-
if (info.minSwapTicks > 0) info.serverBreakTicks++
427+
if (minSwapTicks > 0) swappedStack = info.swapStack
430428
}
431429
}
432430
}
@@ -602,11 +600,11 @@ object BreakManager : RequestHandler<BreakRequest>(
602600
if (updatedPreProcessingThisTick) return
603601
updatedPreProcessingThisTick = true
604602

603+
swapStack = player.inventory.getStack(context.hotbarIndex)
605604
couldReBreak = RebreakManager.couldRebreak(this, player, world)
606605
shouldSwap = shouldSwap(player, world)
607606

608607
val cachedState = context.cachedState
609-
swapStack = player.inventory.getStack(context.hotbarIndex)
610608

611609
val breakTicks = (breakingTicks + 1 - breakConfig.fudgeFactor).coerceAtLeast(1)
612610
val breakAmount = cachedState.calcBreakDelta(
@@ -770,7 +768,7 @@ object BreakManager : RequestHandler<BreakRequest>(
770768
}
771769

772770
val swing = config.swing
773-
if (overBreakThreshold && (info.serverBreakTicks >= info.breakConfig.fudgeFactor || info.minSwapTicks < 1)) {
771+
if (overBreakThreshold && heldTicks + 1 >= info.breakConfig.fudgeFactor) {
774772
if (info.type == Primary) {
775773
onBlockBreak(info)
776774
info.stopBreakPacket(world, interaction)
@@ -844,7 +842,7 @@ object BreakManager : RequestHandler<BreakRequest>(
844842

845843
val breakDelta = blockState.calcBreakDelta(player, world, ctx.blockPos, info.breakConfig)
846844
info.vanillaInstantBreakable = breakDelta >= 1
847-
if (notEmpty && (breakDelta >= info.getBreakThreshold() && (info.serverBreakTicks >= info.breakConfig.fudgeFactor || info.minSwapTicks < 1))) {
845+
if (notEmpty && breakDelta >= info.getBreakThreshold() && heldTicks + 1 >= info.breakConfig.fudgeFactor) {
848846
onBlockBreak(info)
849847
if (!info.vanillaInstantBreakable) breakCooldown = info.breakConfig.breakDelay
850848
} else {

src/main/kotlin/com/lambda/interaction/request/breaking/RebreakManager.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ object RebreakManager {
6767
fun couldRebreak(info: BreakInfo, player: ClientPlayerEntity, world: BlockView) =
6868
rebreak?.let { reBreak ->
6969
val stack = if (info.breakConfig.swapMode.isEnabled())
70-
player.inventory.getStack(info.context.hotbarIndex)
70+
info.swapStack
7171
else player.mainHandStack
7272
val breakDelta = info.context.cachedState.calcItemBlockBreakingDelta(player, world, info.context.blockPos, stack)
7373
val possible = reBreak.breakConfig.rebreak &&

0 commit comments

Comments
 (0)