diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/core/collect/UUIDIntModifiersMap.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/core/collect/UUIDIntModifiersMap.kt index a2f86c992..dce7b03da 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/core/collect/UUIDIntModifiersMap.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/core/collect/UUIDIntModifiersMap.kt @@ -4,6 +4,7 @@ import net.minecraft.core.HolderLookup import net.minecraft.nbt.CompoundTag import net.minecraft.nbt.ListTag import net.neoforged.neoforge.common.util.INBTSerializable +import org.apache.logging.log4j.LogManager import ru.dbotthepony.mc.otm.core.nbt.contains import java.util.UUID @@ -33,15 +34,14 @@ class UUIDIntModifiersMap(private val observer: (Int) -> Unit, private val backi } operator fun set(key: UUID, value: Int): Boolean { - val old = backingMap.put(key, value) - - if (old == value) { - return false - } - ignoreRecompute = true try { + val old = backingMap.put(key, value) + + if (old == value) + return false + this.value += value - (old ?: 0) observer.invoke(this.value) return true @@ -113,7 +113,13 @@ class UUIDIntModifiersMap(private val observer: (Int) -> Unit, private val backi if (value.contains("key", "value")) { val int = value.getInt("value") - backingMap.put(value.getUUID("key"), int) + val previous = backingMap.put(value.getUUID("key"), int) + + if (previous != null) { + LOGGER.warn("Duplicate modifier in UUID Int Modifier Map with UUID ${value.getUUID("key")}") + this.value -= previous + } + this.value += int } } @@ -125,4 +131,8 @@ class UUIDIntModifiersMap(private val observer: (Int) -> Unit, private val backi ignoreRecompute = false } } + + companion object { + private val LOGGER = LogManager.getLogger() + } }