ChunkAPI avatar

ChunkAPI [1.7.10]

Цели

Целью является предоставление способа добавления пользовательских данных к чанкам без необходимости модификации каких-либо ванильных классов. API также предоставит простой способ реализации пользовательской сериализации/десериализации данных как для сетевого взаимодействия, так и для формата NBT. Опциональной целью является предоставление способа регистрации DFU (Data Fixer Units) для пользовательских данных, но это не является приоритетом.

Нецели

Не является целью предоставление какой-либо системы колбэков/хуков для чего-либо, кроме сохранения/загрузки и сетевого кода. Любое дополнительное поведение должно быть реализовано в моде, использующем ChunkAPI.

API не предоставляет хранилище. Пользователь должен реализовать свою собственную систему хранения. Хорошим примером является использование mixin для добавления поля в класс чанка и использование этого поля для хранения данных.

Мотивация

Изменение данных пакетов чанков требовало несовместимых модификаций сетевых пакетов, класса чанка и загрузчика чанков Anvil, что является значительной работой для простой функции. Данный мод предоставляет способ добавления пользовательских данных к чанкам без необходимости самостоятельного изменения каких-либо ванильных классов.

API и спецификация

API предоставляет способ добавления пользовательских данных к чанкам и способ регистрации пользовательских сериализаторов для этих данных.

ChunkDataManager

Сам класс ChunkDataManager является основным классом, используемым для управления регистрациями, но не реализует функциональность самостоятельно. Для этого необходимо использовать интерфейсы PacketDataManager, ChunkNBTDataManager и SectionNBTDataManager, включенные в класс ChunkDataManager.

ChunkDataManager.PacketData

Данный интерфейс используется для синхронизации данных с сервера на клиент. Если ваши данные требуются только на сервере, вы можете не реализовывать этот интерфейс.

ChunkDataManager.ChunkNBTData

Данный интерфейс используется для сохранения/загрузки данных из NBT чанка. Это требуется, если вы хотите сохранять постоянные данные между перезагрузками мира. Примечание: если вы храните данные на уровне блоков в чанке, вам следует использовать SectionNBTData, так как он разработан с учетом внутреннего формата чанка.

ChunkDataManager.SectionNBTData

Данный интерфейс в основном идентичен ChunkNBTData, но предназначен для хранения данных на уровне блоков в чанке. Вместо вызова один раз на чанк, он вызывается один раз на секцию чанка (16x16x16 блоков, класс ExtendedBlockStorage).

ChunkDataRegistry

Это место, где вы фактически регистрируете свой менеджер. Все регистрации должны выполняться внутри фазы init. Вы также можете отключить определенные ID менеджеров, вызвав disableDataManager, но это не рекомендуется и должно использоваться только при полном понимании последствий. Все отключения должны выполняться внутри фазы postInit.

Спецификация пакетов

ChunkAPI модифицирует ванильные пакеты S21PacketChunkData и S26PacketMapChunkBulk, переопределяя их стандартные форматы.

Все размеры в таблицах ниже указаны в байтах.

Новый формат S21PacketChunkData:

Размер (байты)Тип данныхНазвание
4intПозиция X
4intПозиция Z
1boolForce Update
2shortМаска ExtendedBlockStorage
4intДлина несжатых данных
4int(n) Длина сжатых данных
nbyte[n]Сжатые данные

Новый формат S26PacketMapChunkBulk:

Размер (байты)Тип данныхНазвание
2short(n) Количество чанков в пакете
n * 4int[n]Длины несжатых данных чанков
4int(m) Длина сжатых данных
1boolСодержит данные skylight
mbyte[m]Сжатые данные
n * 10(int, int, short)[n]Заголовки чанков (x, z, маска ebs)

В обоих случаях сжатые данные заполняются через метод ChunkDataRegistryImpl.writeToBuffer. Структура этих данных следующая:

Размер (байты)Тип данныхНазвание
4int(n) Количество менеджеров
n * varyingMGRDataДанные менеджера

Данные менеджера (MGRData):

Размер (байты)Тип данныхНазвание
4int(n) Длина имени менеджера
nUTF-8 строкаИмя менеджера
4int(m) Длина данных менеджера
mbyte[m]Данные менеджера

Зависимости

FalsePatternLib

UniMixins

Требуемые зависимости

UniMixins avatarUniMixinsmakamys
FalsePatternLib avatarFalsePatternLibFalsePattern

Скачать ChunkAPI

 
Тип Скачать Версия Загрузчик Обновлено Размер
Release0.6.31.7.10Forge6 июня 2025443,8 КБ
Release0.6.21.7.10Forge6 мая 202572,9 КБ
Release0.6.11.7.10Forge16 января 202572,3 КБ
Release0.6.01.7.10Forge9 декабря 202472,3 КБ
Release0.5.21.7.10Forge8 ноября 202461 КБ
ReleaseChunkAPI 0.5.11.7.10Forge29 мая 202461,5 КБ
ReleaseChunkAPI 0.5.01.7.10Forge28 декабря 202349,4 КБ
ReleaseChunkAPI 0.4.0 Hotfix 11.7.10Forge16 ноября 202346,7 КБ
ReleaseChunkAPI 0.3.21.7.10Forge16 июля 202338,5 КБ
ReleaseChunkAPI 0.3.11.7.10Forge24 июня 202337,1 КБ
Пожалуйста авторизуйтесь, чтобы оставить свой комментарий.