@@ -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 {
0 commit comments