the class I use for saving data:
import net.minecraft.entity.player.PlayerInventory
import net.minecraft.nbt.NbtCompound
import net.minecraft.nbt.NbtElement
import net.minecraft.nbt.NbtList
import net.minecraft.registry.RegistryWrapper.WrapperLookup
import net.minecraft.server.MinecraftServer
import net.minecraft.world.PersistentState
import net.minecraft.world.World
class SaveData : PersistentState() {
var inventory : PlayerInventory = PlayerInventory(null)
override fun writeNbt(nbt: NbtCompound?, registries: WrapperLookup?): NbtCompound {
nbt!!.put("duel.inventory", inventory.writeNbt(NbtList()))
return nbt
}
companion object {
fun createFromNbt(tag: NbtCompound, registryLookup: WrapperLookup?): SaveData {
val state = SaveData()
val nbtList: NbtList = tag.getList("duel.inventory", NbtElement.COMPOUND_TYPE.toInt())
state.inventory.readNbt(nbtList)
return state
}
private val type = Type(
{ SaveData() },
{ tag: NbtCompound, registryLookup: WrapperLookup? ->
createFromNbt(
tag,
registryLookup
)
},
null
)
fun getServerState(server: MinecraftServer): SaveData {
val persistentStateManager = server.getWorld(World.OVERWORLD)!!.persistentStateManager
val state = persistentStateManager.getOrCreate(type,"duel")
state.markDirty()
return state
}
}
}