This commit is contained in:
DBotThePony 2024-05-31 16:37:57 +07:00
commit 9366267a63
Signed by: DBot
GPG Key ID: DCC23B5715498507

View File

@ -15,7 +15,10 @@ class UUIDIntModifiersMap(private val observer: (Int) -> Unit, private val backi
var value: Int = 0 var value: Int = 0
private set private set
private var ignoreRecompute = false
fun recompute() { fun recompute() {
if (ignoreRecompute) return
var value = 0 var value = 0
for (mapValue in backingMap.values) { for (mapValue in backingMap.values) {
@ -35,9 +38,15 @@ class UUIDIntModifiersMap(private val observer: (Int) -> Unit, private val backi
return false return false
} }
ignoreRecompute = true
try {
this.value += value - (old ?: 0) this.value += value - (old ?: 0)
observer.invoke(this.value) observer.invoke(this.value)
return true return true
} finally {
ignoreRecompute = false
}
} }
operator fun get(key: UUID): Int? { operator fun get(key: UUID): Int? {
@ -53,17 +62,29 @@ class UUIDIntModifiersMap(private val observer: (Int) -> Unit, private val backi
return false return false
} }
ignoreRecompute = true
try {
val old = backingMap.remove(key) ?: return true val old = backingMap.remove(key) ?: return true
value -= old value -= old
return true return true
} finally {
ignoreRecompute = false
}
} }
fun clear() { fun clear() {
ignoreRecompute = true
try {
backingMap.clear() backingMap.clear()
val old = this.value } finally {
ignoreRecompute = false
if (this.value != 0) {
this.value = 0 this.value = 0
if (old != this.value) { observer.invoke(0)
observer.invoke(this.value) }
} }
} }
@ -83,7 +104,9 @@ class UUIDIntModifiersMap(private val observer: (Int) -> Unit, private val backi
nbt ?: return nbt ?: return
val old = this.value val old = this.value
this.value = 0 this.value = 0
ignoreRecompute = true
try {
for (value in nbt) { for (value in nbt) {
value as CompoundTag value as CompoundTag
@ -97,5 +120,8 @@ class UUIDIntModifiersMap(private val observer: (Int) -> Unit, private val backi
if (old != this.value) { if (old != this.value) {
observer.invoke(this.value) observer.invoke(this.value)
} }
} finally {
ignoreRecompute = false
}
} }
} }