This commit is contained in:
DBotThePony 2023-02-18 00:31:49 +07:00
parent 0c06d6edb8
commit aab9e09e30
Signed by: DBot
GPG Key ID: DCC23B5715498507
2 changed files with 13 additions and 5 deletions

View File

@ -418,7 +418,7 @@ abstract class MatteryBlockEntity(p_155228_: BlockEntityType<*>, p_155229_: Bloc
protected val savetables = Savetables() protected val savetables = Savetables()
protected inline fun <reified T : Tag, V : INBTSerializable<T?>> savetable(property: KProperty0<V>, name: String = property.name) { protected inline fun <reified T : Tag, V : INBTSerializable<T?>> savetable(property: KProperty0<V>, name: String = property.name) {
savetables.Stateful(property, name, T::class.java) savetables.stateful(property, name, T::class.java)
} }
override fun saveAdditional(nbt: CompoundTag) { override fun saveAdditional(nbt: CompoundTag) {

View File

@ -28,14 +28,22 @@ class Savetables : INBTSerializable<CompoundTag> {
fun validate() 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) 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> {
return stateful(getter, name, T::class.java)
}
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.serializeNBT() } .withSerializer { it.serializeNBT() }
.withDeserializer { v, t -> v.deserializeNBT(t) } .withDeserializer { v, t -> v.deserializeNBT(t) }
} }
inline fun <V : INBTSerializable<T>, reified T : Tag> stateful(getter: KProperty0<V>, name: String = getter.name): 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, T::class.java) return Stateful(getter, name, type)
.withSerializer { it.serializeNBT() } .withSerializer { it.serializeNBT() }
.withDeserializer { v, t -> v.deserializeNBT(t) } .withDeserializer { v, t -> v.deserializeNBT(t) }
} }