Skip to content

Commit 458e4a3

Browse files
committed
pending interactions fixes / improvements
1 parent 1770ca4 commit 458e4a3

File tree

8 files changed

+103
-75
lines changed

8 files changed

+103
-75
lines changed

common/src/main/kotlin/com/lambda/config/groups/BreakSettings.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,14 +32,14 @@ class BreakSettings(
3232
override val doubleBreak by c.setting("Double Break", false, "Allows breaking two blocks at once") { vis() }
3333
override val breakDelay by c.setting("Break Delay", 5, 0..5, 1, "The delay between breaking blocks", " ticks") { vis() }
3434
override val swing by c.setting("Swing Mode", SwingMode.Constant, "The times at which to swing the players hand") { vis() }
35-
override val swingType by c.setting("Break Swing Type", BuildConfig.SwingType.Vanilla, "The style of swing") { vis() }
35+
override val swingType by c.setting("Break Swing Type", BuildConfig.SwingType.Vanilla, "The style of swing") { vis() && swing != SwingMode.None }
3636
override val sounds by c.setting("Break Sounds", true, "Plays the breaking sounds") { vis() }
3737
override val particles by c.setting("Particles", true, "Renders the breaking particles") { vis() }
3838
override val breakingTexture by c.setting("Breaking Overlay", true, "Overlays the breaking texture at its different stages") { vis() }
3939
override val rotateForBreak by c.setting("Rotate For Break", true, "Rotate towards block while breaking") { vis() }
4040
override val ignoredBlocks by c.setting("Ignored Blocks", allSigns, "Blocks that wont be broken") { vis() }
4141
override val breakConfirmation by c.setting("Break Confirmation", BreakConfirmationMode.BreakThenAwait, "The style of confirmation used when breaking") { vis() }
42-
override val maxPendingBreaks by c.setting("Max Pending Breaks", 2, 0..5, 1, "The maximum amount of pending breaks") { vis() }
42+
override val maxPendingBreaks by c.setting("Max Pending Breaks", 5, 1..30, 1, "The maximum amount of pending breaks") { vis() }
4343
override val breaksPerTick by c.setting("Instant Breaks Per Tick", 5, 1..30, 1, "Maximum instant block breaks per tick") { vis() }
4444
override val breakWeakBlocks by c.setting("Break Weak Blocks", false, "Break blocks that dont have structural integrity (e.g: grass)") { vis() }
4545
override val forceSilkTouch by c.setting("Force Silk Touch", false, "Force silk touch when breaking blocks") { vis() }

common/src/main/kotlin/com/lambda/config/groups/PlaceSettings.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,9 @@ class PlaceSettings(
2929
override val rotateForPlace by c.setting("Rotate For Place", true, "Rotate towards block while placing") { vis() }
3030
override val airPlace by c.setting("Air Place", AirPlaceMode.None, "Allows for placing blocks without adjacent faces") { vis() }
3131
override val placeConfirmationMode by c.setting("Place Confirmation", PlaceConfirmationMode.PlaceThenAwait, "Wait for block placement confirmation") { vis() }
32-
override val maxPendingPlacements by c.setting("Max Pending Placements", 2, 0..5, 1, "The maximum amount of pending placements") { vis() }
32+
override val maxPendingPlacements by c.setting("Max Pending Placements", 5, 0..30, 1, "The maximum amount of pending placements") { vis() }
3333
override val placementsPerTick by c.setting("Instant Places Per Tick", 1, 1..30, 1, "Maximum instant block places per tick") { vis() }
3434
override val swing by c.setting("Swing", true, "Swings the players hand when placing") { vis() }
35-
override val swingType by c.setting("Place Swing Type", BuildConfig.SwingType.Vanilla, "The style of swing") { vis() }
35+
override val swingType by c.setting("Place Swing Type", BuildConfig.SwingType.Vanilla, "The style of swing") { vis() && swing }
3636
override val sounds by c.setting("Place Sounds", true, "Plays the placing sounds") { vis() }
3737
}

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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,10 @@ abstract class BreakConfig(
5757
Constant,
5858
StartAndEnd,
5959
Start,
60-
End
60+
End,
61+
None;
62+
63+
fun isEnabled() = this != None
6164
}
6265

6366
enum class BreakConfirmationMode {

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

Lines changed: 38 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import com.lambda.event.events.UpdateManagerEvent
2727
import com.lambda.event.events.WorldEvent
2828
import com.lambda.event.listener.SafeListener.Companion.listen
2929
import com.lambda.interaction.construction.context.BreakContext
30+
import com.lambda.interaction.construction.context.BuildContext
3031
import com.lambda.interaction.construction.verify.TargetState
3132
import com.lambda.interaction.request.PositionBlocking
3233
import com.lambda.interaction.request.Priority
@@ -77,6 +78,7 @@ object BreakManager : RequestHandler<BreakRequest>(), PositionBlocking {
7778
) {
7879
info("${it::class.simpleName} at ${it.context.expectedPos.toShortString()} timed out")
7980
mc.world?.setBlockState(it.context.expectedPos, it.context.checkedState)
81+
it.pendingInteractionsList.remove(it.context)
8082
}
8183

8284
override val blockedPositions
@@ -121,7 +123,7 @@ object BreakManager : RequestHandler<BreakRequest>(), PositionBlocking {
121123
handleRequestContext(
122124
ctx,
123125
buildConfig, rotationConfig, hotbarConfig,
124-
onBreak, onItemDrop
126+
pendingInteractionsList, onBreak, onItemDrop
125127
)
126128
} ?: return@request
127129
if (!breakInfo.requestHotbarSwap()) return@forEach
@@ -156,6 +158,7 @@ object BreakManager : RequestHandler<BreakRequest>(), PositionBlocking {
156158
currentRequest?.let request@ { request ->
157159
val breakConfig = request.buildConfig.breakSettings
158160
val takeCount = breakConfig.maxPendingBreaks - (breakingInfos.count { it != null } + pendingBreaks.size)
161+
if (takeCount <= 0) return@request
159162
val validContexts = request.contexts
160163
.filter { ctx -> canAccept(ctx) }
161164
.sortedBy { it.instantBreak }
@@ -174,7 +177,7 @@ object BreakManager : RequestHandler<BreakRequest>(), PositionBlocking {
174177
handleRequestContext(
175178
ctx,
176179
buildConfig, rotationConfig, hotbarConfig,
177-
onBreak, onItemDrop
180+
pendingInteractionsList, onBreak, onItemDrop
178181
)
179182
}
180183
if (breakInfo == null) return@request
@@ -199,7 +202,7 @@ object BreakManager : RequestHandler<BreakRequest>(), PositionBlocking {
199202

200203
// return if the block's not broken
201204
if (!matchesTargetState(event.pos, pending.context.targetState, event.newState)) {
202-
pendingBreaks.remove(pending)
205+
removePendingBreak(pending)
203206
return@listen
204207
}
205208

@@ -208,7 +211,7 @@ object BreakManager : RequestHandler<BreakRequest>(), PositionBlocking {
208211
}
209212
pending.internalOnBreak()
210213
if (pending.callbacksCompleted) {
211-
pendingBreaks.remove(pending)
214+
removePendingBreak(pending)
212215
}
213216
return@listen
214217
}
@@ -225,10 +228,10 @@ object BreakManager : RequestHandler<BreakRequest>(), PositionBlocking {
225228
}
226229
destroyBlock(info)
227230
info.internalOnBreak()
228-
info.nullify()
229231
if (!info.callbacksCompleted) {
230-
pendingBreaks.add(info)
232+
addPendingBreak(info)
231233
}
234+
info.nullify()
232235
}
233236
}
234237

@@ -240,7 +243,7 @@ object BreakManager : RequestHandler<BreakRequest>(), PositionBlocking {
240243
?.let { pending ->
241244
pending.internalOnItemDrop(it.entity)
242245
if (pending.callbacksCompleted) {
243-
pendingBreaks.remove(pending)
246+
removePendingBreak(pending)
244247
}
245248
return@listen
246249
}
@@ -279,12 +282,13 @@ object BreakManager : RequestHandler<BreakRequest>(), PositionBlocking {
279282
buildConfig: BuildConfig,
280283
rotationConfig: RotationConfig,
281284
hotbarConfig: HotbarConfig,
285+
pendingInteractionsList: MutableCollection<BuildContext>,
282286
onBreak: () -> Unit,
283287
onItemDrop: ((ItemEntity) -> Unit)?
284288
): BreakInfo? {
285289
val breakInfo = BreakInfo(requestCtx, BreakType.Primary,
286290
buildConfig.breakSettings, rotationConfig, hotbarConfig,
287-
onBreak, onItemDrop
291+
pendingInteractionsList, onBreak, onItemDrop
288292
)
289293
primaryBreakingInfo?.let { primaryInfo ->
290294
if (!primaryInfo.breakConfig.doubleBreak
@@ -312,7 +316,7 @@ object BreakManager : RequestHandler<BreakRequest>(), PositionBlocking {
312316
}
313317

314318
private fun setPendingInteractionsLimits(buildConfig: BuildConfig) {
315-
pendingBreaks.setMaxSize(buildConfig.maxPendingInteractions)
319+
pendingBreaks.setMaxSize(buildConfig.breakSettings.maxPendingBreaks)
316320
pendingBreaks.setDecayTime(buildConfig.interactionTimeout * 50L)
317321
}
318322

@@ -339,7 +343,10 @@ object BreakManager : RequestHandler<BreakRequest>(), PositionBlocking {
339343
info.nullify()
340344
return false
341345
}
342-
if (info.breakConfig.swing != BreakConfig.SwingMode.End) swingHand(info.breakConfig.swingType, Hand.MAIN_HAND)
346+
val swing = info.breakConfig.swing
347+
if (swing.isEnabled() && swing != BreakConfig.SwingMode.End) {
348+
swingHand(info.breakConfig.swingType, Hand.MAIN_HAND)
349+
}
343350
return true
344351
}
345352

@@ -385,15 +392,17 @@ object BreakManager : RequestHandler<BreakRequest>(), PositionBlocking {
385392
setBreakingTextureStage(info)
386393
}
387394

395+
val swing = info.breakConfig.swing
396+
388397
if (progress >= info.getBreakThreshold()) {
389398
interaction.sendSequencedPacket(world) { sequence ->
390399
onBlockBreak(info)
391400
PlayerActionC2SPacket(PlayerActionC2SPacket.Action.STOP_DESTROY_BLOCK, ctx.expectedPos, hitResult.side, sequence)
392401
}
393-
if (info.breakConfig.swing != BreakConfig.SwingMode.Start) swingHand(info.breakConfig.swingType, Hand.MAIN_HAND)
402+
if (swing.isEnabled() && swing != BreakConfig.SwingMode.Start) swingHand(info.breakConfig.swingType, Hand.MAIN_HAND)
394403
setBreakCooldown(info.breakConfig.breakDelay)
395404
} else {
396-
if (info.breakConfig.swing == BreakConfig.SwingMode.Constant) swingHand(info.breakConfig.swingType, Hand.MAIN_HAND)
405+
if (swing == BreakConfig.SwingMode.Constant) swingHand(info.breakConfig.swingType, Hand.MAIN_HAND)
397406
}
398407

399408
return true
@@ -461,19 +470,32 @@ object BreakManager : RequestHandler<BreakRequest>(), PositionBlocking {
461470
when (info.breakConfig.breakConfirmation) {
462471
BreakConfirmationMode.None -> {
463472
destroyBlock(info)
464-
info.onBreak()
473+
info.internalOnBreak()
474+
if (!info.callbacksCompleted) {
475+
addPendingBreak(info)
476+
}
465477
}
466478
BreakConfirmationMode.BreakThenAwait -> {
467479
destroyBlock(info)
468-
pendingBreaks.add(info)
480+
addPendingBreak(info)
469481
}
470482
BreakConfirmationMode.AwaitThenBreak -> {
471-
pendingBreaks.add(info)
483+
addPendingBreak(info)
472484
}
473485
}
474486
info.nullify()
475487
}
476488

489+
private fun addPendingBreak(info: BreakInfo) {
490+
pendingBreaks.add(info)
491+
info.pendingInteractionsList.add(info.context)
492+
}
493+
494+
private fun removePendingBreak(info: BreakInfo) {
495+
pendingBreaks.remove(info)
496+
info.pendingInteractionsList.remove(info.context)
497+
}
498+
477499
private fun SafeContext.destroyBlock(info: BreakInfo): Boolean {
478500
val ctx = info.context
479501

@@ -517,6 +539,7 @@ object BreakManager : RequestHandler<BreakRequest>(), PositionBlocking {
517539
val breakConfig: BreakConfig,
518540
val rotationConfig: RotationConfig,
519541
val hotbarConfig: HotbarConfig,
542+
val pendingInteractionsList: MutableCollection<BuildContext>,
520543
val onBreak: () -> Unit,
521544
val onItemDrop: ((ItemEntity) -> Unit)?
522545
) {

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ package com.lambda.interaction.request.breaking
1919

2020
import com.lambda.config.groups.BuildConfig
2121
import com.lambda.interaction.construction.context.BreakContext
22+
import com.lambda.interaction.construction.context.BuildContext
2223
import com.lambda.interaction.request.Priority
2324
import com.lambda.interaction.request.Request
2425
import com.lambda.interaction.request.hotbar.HotbarConfig
@@ -33,6 +34,7 @@ data class BreakRequest(
3334
val rotationConfig: RotationConfig,
3435
val hotbarConfig: HotbarConfig,
3536
val prio: Priority = 0,
37+
val pendingInteractionsList: MutableCollection<BuildContext>,
3638
val onBreak: () -> Unit,
3739
val onItemDrop: ((ItemEntity) -> Unit)?,
3840
) : Request(prio) {

common/src/main/kotlin/com/lambda/interaction/request/placing/PlaceManager.kt

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ object PlaceManager : RequestHandler<PlaceRequest>(), PositionBlocking {
6767
) {
6868
info("${it::class.simpleName} at ${it.placeContext.expectedPos.toShortString()} timed out")
6969
mc.world?.setBlockState(it.placeContext.expectedPos, it.placeContext.checkedState)
70+
it.pendingInteractionsList.remove(it.placeContext)
7071
}
7172

7273
override val blockedPositions
@@ -131,7 +132,7 @@ object PlaceManager : RequestHandler<PlaceRequest>(), PositionBlocking {
131132
request.rotationConfig.request(request.placeContext.rotation)
132133
else null
133134

134-
pendingPlacements.setMaxSize(request.buildConfig.maxPendingInteractions)
135+
pendingPlacements.setMaxSize(request.buildConfig.placeSettings.maxPendingPlacements)
135136
pendingPlacements.setDecayTime(request.buildConfig.interactionTimeout * 50L)
136137
}
137138
}
@@ -149,7 +150,7 @@ object PlaceManager : RequestHandler<PlaceRequest>(), PositionBlocking {
149150
pendingPlacements
150151
.firstOrNull { it.placeContext.expectedPos == event.pos }
151152
?.let { request ->
152-
pendingPlacements.remove(request)
153+
removePendingPlace(request)
153154

154155
// return if the block wasn't placed
155156
if (!matchesTargetState(event.pos, request.placeContext.targetState, event.newState))
@@ -256,10 +257,9 @@ object PlaceManager : RequestHandler<PlaceRequest>(), PositionBlocking {
256257

257258
val stackInHand = player.getStackInHand(hand)
258259
val stackCountPre = stackInHand.count
259-
if (request.buildConfig.placeSettings.placeConfirmationMode == PlaceConfig.PlaceConfirmationMode.None)
260-
request.onPlace()
261-
else
262-
pendingPlacements.add(request)
260+
if (placeConfig.placeConfirmationMode != PlaceConfig.PlaceConfirmationMode.None) {
261+
addPendingPlace(request)
262+
}
263263

264264
if (request.buildConfig.placeSettings.airPlace == PlaceConfig.AirPlaceMode.Grim) {
265265
airPlaceOffhandSwap()
@@ -297,6 +297,10 @@ object PlaceManager : RequestHandler<PlaceRequest>(), PositionBlocking {
297297
if (placeConfig.sounds) placeSound(item, hitState, blockPos)
298298
if (!player.abilities.creativeMode) itemStack.decrement(1)
299299

300+
if (placeConfig.placeConfirmationMode == PlaceConfig.PlaceConfirmationMode.None) {
301+
request.onPlace()
302+
}
303+
300304
return ActionResult.success(world.isClient)
301305
}
302306

@@ -327,6 +331,16 @@ object PlaceManager : RequestHandler<PlaceRequest>(), PositionBlocking {
327331
)
328332
}
329333

334+
private fun addPendingPlace(request: PlaceRequest) {
335+
pendingPlacements.add(request)
336+
request.pendingInteractionsList.add(request.placeContext)
337+
}
338+
339+
private fun removePendingPlace(request: PlaceRequest) {
340+
pendingPlacements.remove(request)
341+
request.pendingInteractionsList.remove(request.placeContext)
342+
}
343+
330344
override fun preEvent() = UpdateManagerEvent.Place.Pre().post()
331345
override fun postEvent() = UpdateManagerEvent.Place.Post().post()
332346
}

common/src/main/kotlin/com/lambda/interaction/request/placing/PlaceRequest.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ package com.lambda.interaction.request.placing
1919

2020
import com.lambda.config.groups.BuildConfig
2121
import com.lambda.config.groups.InteractionConfig
22+
import com.lambda.interaction.construction.context.BuildContext
2223
import com.lambda.interaction.construction.context.PlaceContext
2324
import com.lambda.interaction.request.Priority
2425
import com.lambda.interaction.request.Request
@@ -33,6 +34,7 @@ data class PlaceRequest(
3334
val rotationConfig: RotationConfig,
3435
val hotbarConfig: HotbarConfig,
3536
val interactionConfig: InteractionConfig,
37+
val pendingInteractionsList: MutableCollection<BuildContext>,
3638
val prio: Priority = 0,
3739
val onPlace: () -> Unit
3840
) : Request(prio) {

0 commit comments

Comments
 (0)