@@ -29,20 +29,81 @@ import com.lambda.util.BlockUtils.blockState
2929import net.minecraft.entity.ItemEntity
3030import net.minecraft.util.math.BlockPos
3131
32+ @DslMarker
33+ annotation class BreakRequestBuilder
34+
3235data 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+ }
0 commit comments