Skip to content

Commit f3b4776

Browse files
committed
break request dsl builder
1 parent a491145 commit f3b4776

File tree

4 files changed

+87
-27
lines changed

4 files changed

+87
-27
lines changed

common/src/main/kotlin/com/lambda/interaction/request/breaking/BreakRequest.kt

Lines changed: 68 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -29,20 +29,81 @@ import com.lambda.util.BlockUtils.blockState
2929
import net.minecraft.entity.ItemEntity
3030
import net.minecraft.util.math.BlockPos
3131

32+
@DslMarker
33+
annotation class BreakRequestBuilder
34+
3235
data class BreakRequest(
3336
val contexts: Collection<BreakContext>,
3437
val build: BuildConfig,
3538
val rotation: RotationConfig,
3639
val hotbar: HotbarConfig,
3740
val pendingInteractions: MutableCollection<BuildContext>,
38-
val onStart: ((BlockPos) -> Unit)? = null,
39-
val onStop: ((BlockPos) -> Unit)? = null,
40-
val onCancel: ((BlockPos) -> Unit)? = null,
41-
val onItemDrop: ((ItemEntity) -> Unit)? = null,
42-
val onReBreakStart: ((BlockPos) -> Unit)? = null,
43-
val onReBreak: ((BlockPos) -> Unit)? = null,
4441
private val prio: Priority = 0
4542
) : Request(prio, build.breaking) {
43+
var onStart: ((BlockPos) -> Unit)? = null
44+
var onStop: ((BlockPos) -> Unit)? = null
45+
var onCancel: ((BlockPos) -> Unit)? = null
46+
var onItemDrop: ((ItemEntity) -> Unit)? = null
47+
var onReBreakStart: ((BlockPos) -> Unit)? = null
48+
var onReBreak: ((BlockPos) -> Unit)? = null
49+
4650
override val done: Boolean
4751
get() = runSafe { contexts.all { it.targetState.matches(blockState(it.expectedPos), it.expectedPos, world) } } == true
48-
}
52+
53+
@BreakRequestBuilder
54+
class RequestBuilder(
55+
contexts: Collection<BreakContext>,
56+
build: BuildConfig,
57+
rotation: RotationConfig,
58+
hotbar: HotbarConfig,
59+
pendingInteractions: MutableCollection<BuildContext>,
60+
prio: Priority = 0
61+
) {
62+
val request = BreakRequest(contexts, build, rotation, hotbar, pendingInteractions, prio)
63+
64+
@BreakRequestBuilder
65+
fun onStart(callback: (BlockPos) -> Unit) {
66+
request.onStart = callback
67+
}
68+
69+
@BreakRequestBuilder
70+
fun onStop(callback: (BlockPos) -> Unit) {
71+
request.onStop = callback
72+
}
73+
74+
@BreakRequestBuilder
75+
fun onCancel(callback: (BlockPos) -> Unit) {
76+
request.onCancel = callback
77+
}
78+
79+
@BreakRequestBuilder
80+
fun onItemDrop(callback: (ItemEntity) -> Unit) {
81+
request.onItemDrop = callback
82+
}
83+
84+
@BreakRequestBuilder
85+
fun onReBreakStart(callback: (BlockPos) -> Unit) {
86+
request.onReBreakStart = callback
87+
}
88+
89+
@BreakRequestBuilder
90+
fun onReBreak(callback: (BlockPos) -> Unit) {
91+
request.onReBreak = callback
92+
}
93+
94+
@BreakRequestBuilder
95+
fun build(): BreakRequest = request
96+
}
97+
98+
companion object {
99+
fun breakRequest(
100+
contexts: Collection<BreakContext>,
101+
build: BuildConfig,
102+
rotation: RotationConfig,
103+
hotbar: HotbarConfig,
104+
pendingInteractions: MutableCollection<BuildContext>,
105+
prio: Priority = 0,
106+
builder: RequestBuilder.() -> Unit
107+
) = RequestBuilder(contexts, build, rotation, hotbar, pendingInteractions, prio).apply(builder).build()
108+
}
109+
}

common/src/main/kotlin/com/lambda/interaction/request/breaking/BrokenBlockHandler.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,8 +56,8 @@ object BrokenBlockHandler {
5656
val loaded = world.isChunkLoaded(ChunkSectionPos.getSectionCoord(pos.x), ChunkSectionPos.getSectionCoord(pos.z))
5757
if (!loaded) return@let
5858

59-
if (!info.broken) info("${info::class.simpleName} at ${info.context.expectedPos.toShortString()} timed out")
60-
else info("${info::class.simpleName}'s item drop at ${info.context.expectedPos.toShortString()} timed out")
59+
if (!info.broken) warn("${info::class.simpleName} at ${info.context.expectedPos.toShortString()} timed out")
60+
else warn("${info::class.simpleName}'s item drop at ${info.context.expectedPos.toShortString()} timed out")
6161

6262
val awaitThenBreak = info.breakConfig.breakConfirmation != BreakConfirmationMode.AwaitThenBreak
6363
if (!info.broken && awaitThenBreak) {

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

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ import com.lambda.interaction.construction.context.BuildContext
3535
import com.lambda.interaction.construction.result.BreakResult
3636
import com.lambda.interaction.construction.simulation.BuildSimulator.simulate
3737
import com.lambda.interaction.construction.verify.TargetState
38-
import com.lambda.interaction.request.breaking.BreakRequest
38+
import com.lambda.interaction.request.breaking.BreakRequest.Companion.breakRequest
3939
import com.lambda.module.Module
4040
import com.lambda.module.tag.ModuleTag
4141
import com.lambda.util.BlockUtils.blockState
@@ -78,7 +78,7 @@ object PacketMine : Module(
7878
private val endColor by setting("End Color", Color(255, 0, 0, 60), "The color of the end (farthest from breaking) of the queue") { queue && renderQueue && dynamicColor }
7979

8080

81-
private val pendingInteractionsList = ConcurrentLinkedQueue<BuildContext>()
81+
private val pendingInteractions = ConcurrentLinkedQueue<BuildContext>()
8282

8383
private var breaks = 0
8484
private var itemDrops = 0
@@ -174,15 +174,14 @@ object PacketMine : Module(
174174
if (!reBreaking) {
175175
queuePositions.retainAllPositions(breakContexts)
176176
}
177-
val request = BreakRequest(
178-
breakContexts, build, rotation, hotbar, pendingInteractions = pendingInteractionsList,
179-
onStart = { queuePositions.removePos(it); addBreak(it) },
180-
onStop = { removeBreak(it); breaks++ },
181-
onCancel = { removeBreak(it, true) },
182-
onReBreakStart = { reBreakPos = it },
183-
onReBreak = { reBreakPos = it },
184-
onItemDrop = { _ -> itemDrops++ }
185-
)
177+
val request = breakRequest(breakContexts, build, rotation, hotbar, pendingInteractions) {
178+
onStart { queuePositions.removePos(it); addBreak(it) }
179+
onStop { removeBreak(it); breaks++ }
180+
onCancel { removeBreak(it, true) }
181+
onReBreakStart { reBreakPos = it }
182+
onReBreak { reBreakPos = it }
183+
onItemDrop { _ -> itemDrops++ }
184+
}
186185
breakConfig.request(request, true)
187186
}
188187

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

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ import com.lambda.interaction.construction.simulation.BuildSimulator.simulate
4343
import com.lambda.interaction.construction.simulation.Simulation.Companion.simulation
4444
import com.lambda.interaction.construction.verify.TargetState
4545
import com.lambda.interaction.material.transfer.TransactionExecutor.Companion.transfer
46-
import com.lambda.interaction.request.breaking.BreakRequest
46+
import com.lambda.interaction.request.breaking.BreakRequest.Companion.breakRequest
4747
import com.lambda.interaction.request.hotbar.HotbarConfig
4848
import com.lambda.interaction.request.placing.PlaceRequest
4949
import com.lambda.interaction.request.rotation.RotationConfig
@@ -154,12 +154,12 @@ class BuildTask @Ta5kBuilder constructor(
154154
requestContexts.addAll(breakResults.map { it.context })
155155
}
156156

157-
val request = BreakRequest(
158-
requestContexts, build, rotation, hotbar,
159-
pendingInteractions = pendingInteractions,
160-
onStop = { breaks++ },
161-
onItemDrop = onItemDrop
162-
)
157+
val request = breakRequest(requestContexts, build, rotation, hotbar, pendingInteractions) {
158+
onStop { breaks++ }
159+
onItemDrop?.let { onItemDrop ->
160+
onItemDrop { onItemDrop(it) }
161+
}
162+
}
163163
build.breaking.request(request)
164164
return@listen
165165
}

0 commit comments

Comments
 (0)