Skip to content

Commit 34925e5

Browse files
committed
improved swap checks
1 parent ec7b21e commit 34925e5

File tree

3 files changed

+34
-32
lines changed

3 files changed

+34
-32
lines changed

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

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -661,23 +661,27 @@ object BreakManager : RequestHandler<BreakRequest>(
661661
*
662662
* @see net.minecraft.client.network.ClientPlayerInteractionManager.updateBlockBreakingProgress
663663
*/
664-
private fun SafeContext.updateBreakProgress(info: BreakInfo): Boolean {
664+
private fun SafeContext.updateBreakProgress(info: BreakInfo) {
665665
val config = info.breakConfig
666666
val ctx = info.context
667667

668668
info.progressedThisTick = true
669669

670+
val swapMode = info.breakConfig.swapMode
671+
670672
if (!info.breaking) {
671-
return if (startBreaking(info)) true
672-
else {
673+
if (swapMode.isEnabled() &&
674+
(swapMode != BreakConfig.SwapMode.End ||
675+
info.context.instantBreak ||
676+
info.rebreakPotential.isPossible()) &&
677+
!swapped) return
678+
if (!startBreaking(info)) {
673679
info.nullify()
674680
info.request.onCancel?.invoke(ctx.blockPos)
675-
false
676681
}
682+
return
677683
}
678684

679-
if (config.swapMode == BreakConfig.SwapMode.Constant && !swapped) return true
680-
681685
val hitResult = ctx.result
682686

683687
if (gamemode.isCreative && world.worldBorder.contains(ctx.blockPos)) {
@@ -686,17 +690,19 @@ object BreakManager : RequestHandler<BreakRequest>(
686690
onBlockBreak(info)
687691
info.startBreakPacket(world, interaction)
688692
if (config.swing.isEnabled()) swingHand(config.swingType, Hand.MAIN_HAND)
689-
return true
693+
return
690694
}
691695

692696
val blockState = blockState(ctx.blockPos)
693697
if (blockState.isEmpty) {
694698
info.nullify()
695699
info.request.onCancel?.invoke(ctx.blockPos)
696700
logger.warning("Block state was unexpectedly empty", info)
697-
return false
701+
return
698702
}
699703

704+
if (swapMode.isEnabled() && swapMode == BreakConfig.SwapMode.Constant && !swapped) return
705+
700706
info.breakingTicks++
701707
val breakDelta = blockState.calcBreakDelta(player, world, ctx.blockPos, config)
702708
val progress = breakDelta * (info.breakingTicks - config.fudgeFactor)
@@ -728,7 +734,9 @@ object BreakManager : RequestHandler<BreakRequest>(
728734
}
729735

730736
val swing = config.swing
731-
if (progress >= info.getBreakThreshold() && swapped) {
737+
if (progress >= info.getBreakThreshold()) {
738+
if (swapMode.isEnabled() && swapMode != BreakConfig.SwapMode.Start && !swapped) return
739+
732740
logger.success("Breaking", info)
733741
if (info.type == Primary) {
734742
onBlockBreak(info)
@@ -742,7 +750,7 @@ object BreakManager : RequestHandler<BreakRequest>(
742750
if (swing == BreakConfig.SwingMode.Constant) swingHand(config.swingType, Hand.MAIN_HAND)
743751
}
744752

745-
return true
753+
return
746754
}
747755

748756
/**
@@ -808,12 +816,10 @@ object BreakManager : RequestHandler<BreakRequest>(
808816

809817
val progress = blockState.calcBreakDelta(player, world, ctx.blockPos, info.breakConfig)
810818

811-
if (!swapped) return true
812-
813-
val instantBreakable = progress >= info.getBreakThreshold() && swapped
819+
val instantBreakable = progress >= info.getBreakThreshold()
814820
if (instantBreakable) {
815821
logger.success("Instant breaking", info)
816-
info.vanillaInstantBreakable = progress >= 1 && swapped
822+
info.vanillaInstantBreakable = progress >= 1
817823
onBlockBreak(info)
818824
if (!info.vanillaInstantBreakable) breakCooldown = info.breakConfig.breakDelay
819825
} else {

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

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -70,8 +70,7 @@ object RebreakHandler {
7070
else player.mainHandStack
7171
val breakDelta = info.context.cachedState.calcBreakDelta(player, world, info.context.blockPos, info.breakConfig, stack)
7272
val possible = reBreak.breakConfig.rebreak &&
73-
info.context.blockPos == reBreak.context.blockPos &&
74-
!reBreak.updatedThisTick
73+
info.context.blockPos == reBreak.context.blockPos
7574
val instant = (reBreak.breakingTicks - info.breakConfig.fudgeFactor) * breakDelta >= info.breakConfig.breakThreshold
7675
when {
7776
possible && instant -> RebreakPotential.Instant
@@ -89,7 +88,7 @@ object RebreakHandler {
8988
val context = reBreak.context
9089
val breakDelta = context.cachedState.calcBreakDelta(player, world, context.blockPos, reBreak.breakConfig)
9190
val breakTicks = reBreak.breakingTicks - reBreak.breakConfig.fudgeFactor
92-
return@runSafe if (breakTicks * breakDelta >= reBreak.getBreakThreshold() && BreakManager.swapped) {
91+
return@runSafe if (breakTicks * breakDelta >= reBreak.getBreakThreshold()) {
9392
if (reBreak.breakConfig.breakConfirmation != BreakConfig.BreakConfirmationMode.AwaitThenBreak) {
9493
destroyBlock(reBreak)
9594
}

src/main/kotlin/com/lambda/module/modules/player/PacketMine.kt

Lines changed: 12 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -195,24 +195,22 @@ object PacketMine : Module(
195195
breakRequest(
196196
breakContexts, pendingInteractions, rotation, hotbar, interact, inventory, build,
197197
) {
198-
onStart { queuePositions.removePos(it)
199-
if (breakPositions.none { pos -> pos == it }) {
200-
addBreak(it)
201-
}
202-
}
203-
onUpdate {
204-
queuePositions.removePos(it)
205-
if (breakPositions.none { pos -> pos == it }) {
206-
addBreak(it)
207-
}
208-
}
198+
onStart { onProgress(it) }
199+
onUpdate { onProgress(it) }
209200
onStop { removeBreak(it); breaks++ }
210201
onCancel { removeBreak(it, true) }
211202
onReBreakStart { reBreakPos = it }
212-
onReBreak { reBreakPos = it }
203+
onReBreak { removeBreak(it); reBreakPos = it }
213204
}.submit()
214205
}
215206

207+
private fun onProgress(blockPos: BlockPos) {
208+
queuePositions.removePos(blockPos)
209+
if (breakPositions.none { pos -> pos == blockPos }) {
210+
addBreak(blockPos)
211+
}
212+
}
213+
216214
private fun SafeContext.breakContexts(positions: Collection<BlockPos?>) =
217215
positions
218216
.asSequence()
@@ -247,9 +245,8 @@ object PacketMine : Module(
247245
private fun ArrayList<MutableCollection<BlockPos>>.removePos(element: BlockPos): Boolean {
248246
var anyRemoved = false
249247
removeIf {
250-
val removed = it.remove(element)
251-
anyRemoved = anyRemoved or removed
252-
return@removeIf removed && it.isEmpty()
248+
anyRemoved = anyRemoved or it.remove(element)
249+
return@removeIf it.isEmpty()
253250
}
254251
return anyRemoved
255252
}

0 commit comments

Comments
 (0)