Сериализация в NBT
Подготовка класса
Подготовка класса
Создайте класс, который в последствии можно будет сереализовать в NBT
:
Пример
@Serializable
class User(
val name: String,
val age: Int,
val address: String,
val friends: List<String>
)
Сериализировать простой класс
Сериализовать простой класс
Теперь мы можно запросто преобразовать данный класс в NBT
:
Пример
import ru.hollowhorizon.hc.client.utils.nbt.NBTFormat
import ru.hollowhorizon.hc.client.utils.nbt.serialize
// Сериализуемый класс с параметрами
val user = User("Виталик", 21, "Млечный Путь, Земля", arrayOf("Халва", "Алгоритм", "Бармакс"))
// Сериализация класса в NBT формат и запись его в переменную
val nbt = NBTFormat.serialize(user) // В результате вы получите объект класса net.minecraft.nbt.Tag
/*
* Выглядеть оно будет примерно так:
* {
* address: "Млечный Путь, Земля",
* age: 21,
* friends: [
* "Халва",
* "Алгоритм",
* "Бармакс"
* ]
* }
* }
*/
Десериализировать простой класс
Десериализовать простой класс
Предположим есть некий NBT-tag
с данными. Можно преобразовать его обратно в класс:
import ru.hollowhorizon.hc.client.utils.nbt.NBTFormat
import ru.hollowhorizon.hc.client.utils.nbt.deserialize
val tag: Tag //Это наша переменная с NBT, получить её вы можете откуда хотите
val user = NBTFormat.deserialize(tag) // В результате вы получите объект класса User
Сериализация с наследованием
Сериализация с наследованием
Иногда может потребоваться сериализовать класс или интерфейс, у которого могут быть потомки.
В этом случае вам нужно добавить для каждого потомка аннотацию Polymorphic(Parent::class)
,
где Parent
- ваш исходный класс от которого происходит наследование. Не забудьте
импортировать: import ru.hollowhorizon.hc.api.utils.Polymorphic
.
В качестве примера можете посмотреть как реализованы виджеты в HollowCore
.