Skip to content

Commit 742873d

Browse files
committed
should fix OneSetPerTick persistence after break info nullify
1 parent 951167b commit 742873d

File tree

2 files changed

+19
-11
lines changed

2 files changed

+19
-11
lines changed

src/main/kotlin/com/lambda/interaction/request/breaking/BreakInfo.kt

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -48,23 +48,25 @@ data class BreakInfo(
4848

4949
// Pre Processing
5050
var shouldProgress = false
51-
var rebreakPotential by OneSetPerTick(value = RebreakHandler.RebreakPotential.None, throwOnLimitBreach = true)
52-
var swapInfo by OneSetPerTick(value = SwapInfo.EMPTY, throwOnLimitBreach = true)
53-
var swapStack: ItemStack by OneSetPerTick(ItemStack.EMPTY, true)
51+
var rebreakPotential by OneSetPerTick(value = RebreakHandler.RebreakPotential.None, throwOnLimitBreach = true).linkLifetime()
52+
var swapInfo by OneSetPerTick(value = SwapInfo.EMPTY, throwOnLimitBreach = true).linkLifetime()
53+
var swapStack: ItemStack by OneSetPerTick(ItemStack.EMPTY, true).linkLifetime()
5454

5555
// BreakInfo Specific
56-
var updatedThisTick by OneSetPerTick(false, resetAfterTick = true).apply { set(true) }
57-
var updatedPreProcessingThisTick by OneSetPerTick(value = false, throwOnLimitBreach = true, resetAfterTick = true)
58-
var progressedThisTick by OneSetPerTick(value = false, throwOnLimitBreach = true, resetAfterTick = true)
56+
var updatedThisTick by OneSetPerTick(false, resetAfterTick = true).apply { set(true) }.linkLifetime()
57+
var updatedPreProcessingThisTick by OneSetPerTick(value = false, throwOnLimitBreach = true, resetAfterTick = true).linkLifetime()
58+
var progressedThisTick by OneSetPerTick(value = false, throwOnLimitBreach = true, resetAfterTick = true).linkLifetime()
5959

6060
// Processing
6161
var breaking = false
6262
var abandoned = false
63-
var breakingTicks by OneSetPerTick(0, true)
64-
var soundsCooldown by OneSetPerTick(0f, true)
63+
var breakingTicks by OneSetPerTick(0, true).linkLifetime()
64+
var soundsCooldown by OneSetPerTick(0f, true).linkLifetime()
6565
var vanillaInstantBreakable = false
6666
val rebreakable get() = !vanillaInstantBreakable && type == Primary
6767

68+
val oneSetPerTickSet = mutableSetOf<OneSetPerTick<*>>()
69+
6870
enum class BreakType(
6971
override val displayName: String,
7072
override val description: String
@@ -173,4 +175,7 @@ data class BreakInfo(
173175
}
174176

175177
override fun toString() = "$type, ${context.cachedState}, ${context.blockPos}"
178+
179+
private fun <T : Any> OneSetPerTick<T>.linkLifetime() =
180+
apply { oneSetPerTickSet.add(this) }
176181
}

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

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@ import com.lambda.util.BlockUtils.calcItemBlockBreakingDelta
7777
import com.lambda.util.BlockUtils.isEmpty
7878
import com.lambda.util.BlockUtils.isNotBroken
7979
import com.lambda.util.BlockUtils.isNotEmpty
80+
import com.lambda.util.OneSetPerTick
8081
import com.lambda.util.extension.partialTicks
8182
import com.lambda.util.item.ItemUtils.block
8283
import com.lambda.util.math.lerp
@@ -313,8 +314,8 @@ object BreakManager : RequestHandler<BreakRequest>(
313314
if (request.fresh) populateFrom(request)
314315
}
315316

316-
var noNew = false
317-
var noProgression = false
317+
var noNew: Boolean
318+
var noProgression: Boolean
318319

319320
while (true) {
320321
noNew = breakRequest?.let { request ->
@@ -639,11 +640,13 @@ object BreakManager : RequestHandler<BreakRequest>(
639640
/**
640641
* Nullifies the break. If the block is not broken, the [BreakInfo.internalOnCancel] callback gets triggered
641642
*/
642-
private fun BreakInfo.nullify() =
643+
private fun BreakInfo.nullify() {
643644
when (type) {
644645
Primary, Rebreak -> primaryBreak = null
645646
else -> secondaryBreak = null
646647
}
648+
oneSetPerTickSet.forEach(OneSetPerTick<*>::destroy)
649+
}
647650

648651
/**
649652
* A modified version of the vanilla updateBlockBreakingProgress method.

0 commit comments

Comments
 (0)