This commit is contained in:
DBotThePony 2024-05-31 16:37:46 +07:00
commit 57c1644ccc
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
private set
private var ignoreRecompute = false
fun recompute() {
if (ignoreRecompute) return
var value = 0
for (mapValue in backingMap.values) {
@ -35,9 +38,15 @@ class UUIDIntModifiersMap(private val observer: (Int) -> Unit, private val backi
return false
}
this.value += value - (old ?: 0)
observer.invoke(this.value)
return true
ignoreRecompute = true
try {
this.value += value - (old ?: 0)
observer.invoke(this.value)
return true
} finally {
ignoreRecompute = false
}
}
operator fun get(key: UUID): Int? {
@ -53,17 +62,29 @@ class UUIDIntModifiersMap(private val observer: (Int) -> Unit, private val backi
return false
}
val old = backingMap.remove(key) ?: return true
value -= old
return true
ignoreRecompute = true
try {
val old = backingMap.remove(key) ?: return true
value -= old
return true
} finally {
ignoreRecompute = false
}
}
fun clear() {
backingMap.clear()
val old = this.value
this.value = 0
if (old != this.value) {
observer.invoke(this.value)
ignoreRecompute = true
try {
backingMap.clear()
} finally {
ignoreRecompute = false
if (this.value != 0) {
this.value = 0
observer.invoke(0)
}
}
}
@ -83,19 +104,24 @@ class UUIDIntModifiersMap(private val observer: (Int) -> Unit, private val backi
nbt ?: return
val old = this.value
this.value = 0
ignoreRecompute = true
for (value in nbt) {
value as CompoundTag
try {
for (value in nbt) {
value as CompoundTag
if (value.contains("key", "value")) {
val int = value.getInt("value")
backingMap.put(value.getUUID("key"), int)
this.value += int
if (value.contains("key", "value")) {
val int = value.getInt("value")
backingMap.put(value.getUUID("key"), int)
this.value += int
}
}
}
if (old != this.value) {
observer.invoke(this.value)
if (old != this.value) {
observer.invoke(this.value)
}
} finally {
ignoreRecompute = false
}
}
}