This commit is contained in:
DBotThePony 2024-10-05 19:40:34 +07:00
parent 37cd1600ab
commit 35769e5b57
Signed by: DBot
GPG Key ID: DCC23B5715498507

View File

@ -41,38 +41,38 @@ class Savetables : INBTSerializable<CompoundTag?> {
fun validate()
}
inline fun <V : INBTSerializable<T>, reified T : Tag> stateful(getter: Supplier<V>, name: String): Stateful<V, T> {
inline fun <V : INBTSerializable<T>, reified T : Tag?> stateful(getter: Supplier<V>, name: String): Stateful<V, T> {
return stateful(getter, name, T::class.java)
}
inline fun <V : INBTSerializable<T>, reified T : Tag> stateful(getter: V, name: String): Stateful<V, T> {
inline fun <V : INBTSerializable<T>, reified T : Tag?> stateful(getter: V, name: String): Stateful<V, T> {
return stateful(getter, name, T::class.java)
}
inline fun <V : INBTSerializable<T>, reified T : Tag> stateful(getter: KProperty0<V>, name: String = getter.name): Stateful<V, T> {
inline fun <V : INBTSerializable<T>, reified T : Tag?> stateful(getter: KProperty0<V>, name: String = getter.name): Stateful<V, T> {
return stateful(getter, name, T::class.java)
}
inline fun <V : INBTSerializable<T>, reified T : Tag> stateful(values: Collection<V>, name: String): ImmutableList<Stateful<V, T>> {
inline fun <V : INBTSerializable<T>, reified T : Tag?> stateful(values: Collection<V>, name: String): ImmutableList<Stateful<V, T>> {
val iterator = values.iterator()
return immutableList(values.size) {
stateful(iterator.next(), "${name}_$it", T::class.java)
}
}
fun <V : INBTSerializable<T>, T : Tag> stateful(getter: Supplier<V>, name: String, type: Class<T>): Stateful<V, T> {
fun <V : INBTSerializable<T>, T : Tag?> stateful(getter: Supplier<V>, name: String, type: Class<T>): Stateful<V, T> {
return Stateful(getter, name, type)
.withSerializer { it, l -> it.serializeNBT(l) }
.withDeserializer { v, t, l -> v.deserializeNBT(l, t) }
}
fun <V : INBTSerializable<T>, T : Tag> stateful(getter: V, name: String, type: Class<T>): Stateful<V, T> {
fun <V : INBTSerializable<T>, T : Tag?> stateful(getter: V, name: String, type: Class<T>): Stateful<V, T> {
return Stateful({ getter }, name, type)
.withSerializer { it, l -> it.serializeNBT(l) }
.withDeserializer { v, t, l -> v.deserializeNBT(l, t) }
}
fun <V : INBTSerializable<T>, T : Tag> stateful(getter: KProperty0<V>, name: String = getter.name, type: Class<T>): Stateful<V, T> {
fun <V : INBTSerializable<T>, T : Tag?> stateful(getter: KProperty0<V>, name: String = getter.name, type: Class<T>): Stateful<V, T> {
return Stateful(getter, name, type)
.withSerializer { it, l -> it.serializeNBT(l) }
.withDeserializer { v, t, l -> v.deserializeNBT(l, t) }
@ -302,7 +302,7 @@ class Savetables : INBTSerializable<CompoundTag?> {
}
}
inner class Stateful<V : Any?, T : Tag>(private val prop: Supplier<V>, override val name: String, override val type: Class<T>) : Entry<V, T> {
inner class Stateful<V : Any?, T : Tag?>(private val prop: Supplier<V>, override val name: String, override val type: Class<T>) : Entry<V, T> {
constructor(field: KProperty0<V>, name: String = field.name, type: Class<T>) : this(field::get, name, type)
init {
@ -312,7 +312,7 @@ class Savetables : INBTSerializable<CompoundTag?> {
}
private var serializer: ((V, HolderLookup.Provider) -> T?)? = null
private var deserializer: ((V, T, HolderLookup.Provider) -> Unit)? = null
private var deserializer: ((V, T & Any, HolderLookup.Provider) -> Unit)? = null
private var resetter: ((V) -> Unit)? = null
fun withSerializer(serializer: (V, HolderLookup.Provider) -> T?): Stateful<V, T> {
@ -320,7 +320,7 @@ class Savetables : INBTSerializable<CompoundTag?> {
return this
}
fun withDeserializer(deserializer: (V, T, HolderLookup.Provider) -> Unit): Stateful<V, T> {
fun withDeserializer(deserializer: (V, T & Any, HolderLookup.Provider) -> Unit): Stateful<V, T> {
this.deserializer = deserializer
return this
}