Skip to content

Commit c5d36c7

Browse files
committed
double break logic
1 parent e71715c commit c5d36c7

File tree

2 files changed

+44
-27
lines changed

2 files changed

+44
-27
lines changed

common/src/main/kotlin/com/lambda/module/modules/player/PacketMineTaskRewrite.kt

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -117,10 +117,13 @@ object PacketMineTaskRewrite : Module(
117117
val blockState = pos.blockState(world)
118118
val bestTool = findBestAvailableTool(blockState)
119119

120-
if (doubleBreak && secondaryBreakTask == null) {
121-
secondaryBreakTask = primaryBreakTask
122-
} else {
123-
primaryBreakTask?.cancelBreak()
120+
primaryBreakTask?.let { currentPrimary ->
121+
if (doubleBreak && secondaryBreakTask == null) {
122+
currentPrimary.transformToSecondaryBreak()
123+
secondaryBreakTask = currentPrimary
124+
} else {
125+
primaryBreakTask?.cancelBreak()
126+
}
124127
}
125128

126129
primaryBreakTask = PacketBreakInfo(
@@ -159,7 +162,7 @@ object PacketMineTaskRewrite : Module(
159162
val side: Direction,
160163
bestTool: Item?,
161164
instantBreak: Boolean,
162-
breakType: BreakType
165+
var breakType: BreakType
163166
) {
164167
private val breakContext: BreakContext
165168
private val packetBreakTask: PacketBreakBlock
@@ -177,11 +180,12 @@ object PacketMineTaskRewrite : Module(
177180
instantBreak
178181
)
179182
packetBreakTask = PacketBreakBlock(
180-
breakContext,
181-
bestTool,
182-
breakThreshold,
183-
breakConfirmation,
184-
swingHand
183+
ctx = breakContext,
184+
tool = bestTool,
185+
breakThreshold = breakThreshold,
186+
internalBreakConfirmation = breakConfirmation,
187+
swingHand = swingHand,
188+
obeyInteractionDelays = interactionDelay
185189
).finally {
186190
breakTasks[breakType.index] = null
187191
} as PacketBreakBlock
@@ -192,9 +196,12 @@ object PacketMineTaskRewrite : Module(
192196
return this
193197
}
194198

195-
fun cancelBreak() {
196-
packetBreakTask.cancel()
199+
fun transformToSecondaryBreak() {
200+
packetBreakTask.transformToSecondaryBreak()
201+
breakType = BreakType.Secondary
197202
}
203+
204+
fun cancelBreak() = packetBreakTask.cancel()
198205
}
199206

200207
private enum class BreakType(val index: Int) {

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

Lines changed: 25 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ import net.minecraft.util.math.Direction
5555
class PacketBreakBlock @Ta5kBuilder constructor(
5656
private val ctx: BreakContext,
5757
private var tool: Item?,
58-
private val breakThreshold: Float = TaskFlowModule.build.breakThreshold,
58+
private var breakThreshold: Float = TaskFlowModule.build.breakThreshold,
5959
private val internalBreakConfirmation: Boolean = false,
6060
private val swingHand: SwingHandStyle = SwingHandStyle.StartAndEnd,
6161
private val breakingTexture: Boolean = true,
@@ -217,6 +217,12 @@ class PacketBreakBlock @Ta5kBuilder constructor(
217217
}
218218
}
219219

220+
override fun SafeContext.onCancel() {
221+
connection.sendPacket(PlayerActionC2SPacket(Action.ABORT_DESTROY_BLOCK, blockPos, side))
222+
setBreakingTextureStage(-1)
223+
player.resetLastAttackedTicks()
224+
}
225+
220226
private fun SafeContext.done() =
221227
!collectDrop && blockState.isAir
222228

@@ -329,7 +335,7 @@ class PacketBreakBlock @Ta5kBuilder constructor(
329335

330336
if (notAir && blockState.calcItemBlockBreakingDelta(player, world, blockPos, getToolItemStack()) >= breakThreshold) {
331337
onBlockBreak()
332-
startBreakPacket(blockPos, side, sequence)
338+
startBreakPacket(sequence)
333339
return true
334340
} else {
335341
startedBreaking = true
@@ -341,10 +347,10 @@ class PacketBreakBlock @Ta5kBuilder constructor(
341347
if (breakingTexture) {
342348
setBreakingTextureStage()
343349
}
344-
abortBreakPacket(blockPos, side, sequence)
345-
stopBreakPacket(blockPos, side, sequence + 1)
346-
startBreakPacket(blockPos, side, sequence + 2)
347-
stopBreakPacket(blockPos, side, sequence + 3)
350+
abortBreakPacket(sequence)
351+
stopBreakPacket(sequence + 1)
352+
startBreakPacket(sequence + 2)
353+
stopBreakPacket(sequence + 3)
348354
(0..3).forEach { i ->
349355
pendingUpdateManager.incrementSequence()
350356
}
@@ -395,25 +401,29 @@ class PacketBreakBlock @Ta5kBuilder constructor(
395401
private fun SafeContext.getToolItemStack(): ItemStack =
396402
tool?.select()?.itemStack ?: player.mainHandStack
397403

398-
private fun SafeContext.startBreakPacket(pos: BlockPos, direction: Direction, sequence: Int) =
399-
breakPacket(pos, direction, Action.START_DESTROY_BLOCK, sequence)
404+
private fun SafeContext.startBreakPacket(sequence: Int) =
405+
breakPacket(Action.START_DESTROY_BLOCK, sequence)
400406

401-
private fun SafeContext.stopBreakPacket(pos: BlockPos, direction: Direction, sequence: Int) =
402-
breakPacket(pos, direction, Action.STOP_DESTROY_BLOCK, sequence)
407+
private fun SafeContext.stopBreakPacket(sequence: Int) =
408+
breakPacket(Action.STOP_DESTROY_BLOCK, sequence)
403409

404-
private fun SafeContext.abortBreakPacket(pos: BlockPos, direction: Direction, sequence: Int) =
405-
breakPacket(pos, direction, Action.ABORT_DESTROY_BLOCK, sequence)
410+
private fun SafeContext.abortBreakPacket(sequence: Int) =
411+
breakPacket(Action.ABORT_DESTROY_BLOCK, sequence)
406412

407-
private fun SafeContext.breakPacket(pos: BlockPos, direction: Direction, action: Action, sequence: Int) =
413+
private fun SafeContext.breakPacket(action: Action, sequence: Int) =
408414
connection.sendPacket(
409415
PlayerActionC2SPacket(
410416
action,
411-
pos,
412-
direction,
417+
blockPos,
418+
side,
413419
sequence
414420
)
415421
)
416422

423+
fun transformToSecondaryBreak() {
424+
breakThreshold = 1.0f
425+
}
426+
417427
enum class SwingHandStyle {
418428
Constant,
419429
StartAndEnd,

0 commit comments

Comments
 (0)