Stateful dont have to inherit nullable tag types

This commit is contained in:
DBotThePony 2024-10-05 10:36:15 +07:00
parent 5bc104b04d
commit 37cd1600ab
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) }