Remove savedcountingmap as it is not used

This commit is contained in:
DBotThePony 2025-01-21 15:33:19 +07:00
parent fc675811be
commit f922df53be
Signed by: DBot
GPG Key ID: DCC23B5715498507

View File

@ -1,143 +0,0 @@
package ru.dbotthepony.mc.otm.saveddata
import it.unimi.dsi.fastutil.ints.Int2ObjectAVLTreeMap
import it.unimi.dsi.fastutil.ints.Int2ObjectFunction
import net.minecraft.core.HolderLookup
import net.minecraft.nbt.CompoundTag
import net.minecraft.nbt.IntTag
import net.minecraft.nbt.ListTag
import net.minecraft.nbt.Tag
import net.minecraft.world.level.saveddata.SavedData
import org.apache.logging.log4j.LogManager
import ru.dbotthepony.mc.otm.core.collect.ProxiedMap
import ru.dbotthepony.mc.otm.core.nbt.set
import ru.dbotthepony.mc.otm.core.util.WriteOnce
class SavedMapDelegate<V>(val parent: SavedCountingMap<SavedMapDelegate<V>>?, val index: Int, value: V) {
constructor(value: V) : this(null, -1, value)
var value: V = value
set(value) {
if (field != value) {
field = value
parent?.isDirty = true
}
}
companion object {
fun <V> makeMap(
serializer: (value: V) -> Tag,
deserializer: (nbt: Tag) -> V,
defaultValue: V
): SavedCountingMap<SavedMapDelegate<V>> {
return SavedCountingMap(
serializer = { _, value, _ -> serializer.invoke(value.value) },
deserializer = { map, nbt, index -> SavedMapDelegate(map, index, deserializer.invoke(nbt)) },
factory = { map, index -> SavedMapDelegate(map, index, defaultValue) }
)
}
}
}
private class ProxiedCountingMap<T> : ProxiedMap<Int, T>(Int2ObjectAVLTreeMap()) {
var parent: SavedCountingMap<T> by WriteOnce()
override fun onClear() {
parent.isDirty = true
}
override fun onValueAdded(key: Int, value: T) {
parent.isDirty = true
}
override fun onValueRemoved(key: Int, value: T) {
parent.isDirty = true
}
}
class SavedCountingMap<T> private constructor(
val serializer: (map: SavedCountingMap<T>, value: T, index: Int) -> Tag,
val deserializer: (map: SavedCountingMap<T>, nbt: Tag, index: Int) -> T,
val factory: (map: SavedCountingMap<T>, index: Int) -> T,
private val map: ProxiedCountingMap<T>
) : SavedData(), MutableMap<Int, T> by map {
constructor(
serializer: (map: SavedCountingMap<T>, value: T, index: Int) -> Tag,
deserializer: (map: SavedCountingMap<T>, nbt: Tag, index: Int) -> T,
factory: (map: SavedCountingMap<T>, index: Int) -> T,
) : this(serializer, deserializer, factory, ProxiedCountingMap())
init {
map.parent = this
}
var nextIndex = 0
private set
fun computeIfAbsent(index: Int): T {
return map.computeIfAbsent(index, Int2ObjectFunction {
isDirty = true
return@Int2ObjectFunction factory.invoke(this, it)
})
}
fun factorize(): T {
return computeIfAbsent(nextIndex++)
}
override fun save(output: CompoundTag, registry: HolderLookup.Provider): CompoundTag {
output["map"] = ListTag().also {
for ((key, value) in this.map) {
val compound = CompoundTag()
try {
compound["value"] = this.serializer.invoke(this, value, key)
it.add(compound)
} catch(err: Exception) {
LOGGER.error("Unable to serialize $value at $key", err)
continue
}
compound["key"] = key
}
}
output["next_index"] = nextIndex
return output
}
fun load(input: CompoundTag): SavedCountingMap<T> {
this.map.clear()
val map = input["map"] as? ListTag ?: ListTag()
var maximal = -1
for (value in map) {
if (value !is CompoundTag) {
continue
}
val key = (value["key"] as IntTag?)?.asInt ?: continue
val nbt = value["value"] ?: continue
try {
val deserialized = this.deserializer.invoke(this, nbt, key)
this.map.put(key, deserialized)
} catch(err: Exception) {
LOGGER.error("Unable to deserialize value in $this at $key", err)
}
maximal = maximal.coerceAtLeast(key)
}
nextIndex = (input["next_index"] as IntTag?)?.asInt ?: (maximal + 1)
isDirty = false
return this
}
companion object {
private val LOGGER = LogManager.getLogger()
}
}