Skip to content

Commit e07c829

Browse files
committed
added break radius for breaking a larger area at once with a single click
1 parent 2683c5b commit e07c829

File tree

1 file changed

+21
-9
lines changed
  • common/src/main/kotlin/com/lambda/module/modules/player

1 file changed

+21
-9
lines changed

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

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ import com.lambda.interaction.request.breaking.BreakRequest
3535
import com.lambda.module.Module
3636
import com.lambda.module.tag.ModuleTag
3737
import com.lambda.util.BlockUtils.blockState
38+
import com.lambda.util.math.distSq
3839
import com.lambda.util.world.raycast.InteractionMask
3940
import net.minecraft.util.math.BlockPos
4041
import java.util.*
@@ -55,6 +56,8 @@ object PacketMine : Module(
5556
private val hotbar = HotbarSettings(this) { page == Page.Hotbar }
5657

5758
private val reBreakMode by setting("ReBreak Mode", ReBreakMode.Manual, "The method used to re-break blocks after they've been broken once") { breakConfig.reBreak }
59+
private val breakRadius by setting("Break Radius", 0, 0..5, 1, "Selects and breaks all blocks within the break radius of the selected block")
60+
private val flatten by setting("Flatten", false, "Wont allow breaking extra blocks under your players position") { breakRadius > 0 }
5861
private val queue by setting("Queue", false, "Queues blocks to break so you can select multiple at once")
5962
.onValueChange { _, to -> if (!to) queuePositions.clear() }
6063
private val queueOrder by setting("Queue Order", QueueOrder.Standard, "Which end of the queue to break blocks from") { queue }
@@ -91,12 +94,26 @@ object PacketMine : Module(
9194
listen<PlayerEvent.Attack.Block> { it.cancel() }
9295
listen<PlayerEvent.Breaking.Update> { event ->
9396
event.cancel()
94-
if ((breakPositions + queuePositions).any { it == event.pos }) return@listen
97+
val pos = event.pos
98+
val positions = if (breakRadius > 0) {
99+
arrayListOf<BlockPos>().apply {
100+
BlockPos.iterateOutwards(pos, breakRadius, breakRadius, breakRadius).forEach { blockPos ->
101+
if (blockPos distSq pos <= breakRadius * breakRadius && (!flatten || blockPos.y >= player.blockPos.y)) {
102+
add(blockPos.toImmutable())
103+
}
104+
}
105+
}
106+
} else {
107+
listOf(pos)
108+
}
109+
if ((breakPositions + queuePositions).any { pending -> positions.any { it == pending } }) return@listen
95110
val activeBreaking = if (queue) {
96-
queuePositions.addLast(event.pos)
97-
breakPositions + queueSorted
111+
queuePositions.addAll(positions)
112+
breakPositions.toList() + queueSorted
98113
} else {
99-
arrayOf<BlockPos?>(event.pos) + if (breakConfig.doubleBreak) {
114+
queuePositions.clear()
115+
queuePositions.addAll(positions)
116+
queuePositions + if (breakConfig.doubleBreak) {
100117
breakPositions[1] ?: breakPositions[0]
101118
} else null
102119
}
@@ -121,11 +138,6 @@ object PacketMine : Module(
121138
if (requestPositions.isEmpty()) return
122139
val breakContexts = breakContexts(requestPositions)
123140
if (!reBreaking) {
124-
breakPositions.forEachIndexed { index, breakPos ->
125-
if (breakContexts.none { it.expectedPos == breakPos }) {
126-
breakPositions[index] = null
127-
}
128-
}
129141
queuePositions.removeIf { queuePos ->
130142
breakContexts.none { it.expectedPos == queuePos }
131143
}

0 commit comments

Comments
 (0)