ChunkAPI
Управляйте пользовательскими данными внутри чанков без лишних хлопот.
- Загрузчики
- Forge
- Скачиваний на Modrinth
- 18,7 тыс.
- Подписчиков на Modrinth
- 7
- версии
- 23
- Обновлён
- 27 июля 202627 июл.
- Опубликован
- в 2023
Коротко о моде
Нужен и в игре, и на сервере
Мод для добавления пользовательских данных в чанки без возни с написанием собственных пакетов, обработкой событий, хуками загрузки и прочим.
Лицензировано под LGPLv3
Изначально разработан FalsePattern
Логотип мода от Houstonruss
Цели
Цель — предоставить способ добавления пользовательских данных в чанки без необходимости изменять какие-либо ванильные классы. API также предоставит простой способ реализации пользовательской сериализации/десериализации данных, как для сетевого протокола, так и для формата NBT. Необязательная цель — предоставить способ регистрации DFU для пользовательских данных, но это не приоритет.
Не-цели
Не является целью предоставление какой-либо системы обратных вызовов/хуков для чего-либо, кроме сохранения/загрузки и сетевого кода; любое дополнительное поведение должно быть реализовано в моде с использованием ChunkAPI.
Хранилище не предоставляется API; пользователь должен реализовать собственную систему хранения. Хороший пример — использование миксина для добавления поля в класс чанка и использование этого поля для хранения данных.
Мотивация
Изменение данных пакетов чанков включало несовместимое изменение сетевых пакетов, класса чанка и загрузчика чанков anvil, что является большой работой для простой функции. Этот мод предоставляет способ добавления пользовательских данных в чанки без необходимости самостоятельно изменять какие-либо из ванильных классов.
API и спецификация
API предоставляет способ добавления пользовательских данных в чанки и способ регистрации пользовательских сериализаторов для данных.
ChunkDataManager
Сам ChunkDataManager — это основной класс, используемый для управления регистрациями, но он не реализует функциональность сам по себе. Для этого вам нужно использовать интерфейсы PacketDataManager, ChunkNBTDataManager и SectionNBTDataManager, включённые в класс ChunkDataManager.
ChunkDataManager.PacketData
Этот интерфейс используется для синхронизации данных с сервера на клиент. Если ваши данные требуются только на сервере, вы можете свободно пропустить реализацию этого интерфейса.
ChunkDataManager.ChunkNBTData
Этот интерфейс используется для сохранения/загрузки данных из NBT чанка. Это необходимо, если вы хотите сохранять постоянные данные между перезагрузками мира. Учтите: если вы храните данные на блок в чанке, вам следует использовать SectionNBTData, так как он разработан с учётом внутреннего формата чанка.
ChunkDataManager.SectionNBTData
Этот интерфейс в основном идентичен ChunkNBTData, но предназначен для хранения данных на блок в чанке. Вместо вызова один раз на чанк он вызывается один раз на секцию чанка (16x16x16 блоков, класс ExtendedBlockStage).
ChunkDataRegistry
Здесь вы фактически регистрируете свой менеджер. Все регистрации нужно выполнять внутри фазы init. Вы также можете отключить определённые ID менеджеров, вызвав disableDataManager, но это не рекомендуется и должно использоваться только если вы знаете, что делаете. Все отключения нужно выполнять внутри фазы postInit.
Спецификация пакетов
ChunkAPI изменяет ванильные пакеты S21PacketChunkData и S26PacketMapChunkBulk и перезаписывает их стандартные форматы.
Все размеры в таблицах ниже указаны в байтах.
Новый формат S21PacketChunkData:
| Размер (байт) | Тип данных | Название |
|---|---|---|
| 4 | int | Позиция по X |
| 4 | int | Позиция по Z |
| 1 | bool | Принудительное обновление |
| 2 | short | Маска ExtendedBlockStorage |
| 4 | int | Длина несжатых данных |
| 4 | int | (n) Длина сжатых данных |
| n | byte[n] | Сжатые данные |
S26PacketMapChunkBulk новый формат:
| Размер (байт) | Тип данных | Название |
|---|---|---|
| 2 | short | (n) Количество чанков в пакете |
| n * 4 | int[n] | Длины несжатых данных чанков |
| 4 | int | (m) Длина сжатых данных |
| 1 | 1 | Содержит данные о небесном свете |
| m | byte[m] | Сжатые данные |
| n * 10 | (int, int, short)[n] | Заголовки чанков (x, z, маска ebs) |
В обоих случаях сжатые данные заполняются через метод ChunkDataRegistryImpl.writeToBuffer. Структура этих данных следующая:
| Размер (байт) | Тип данных | Название |
|---|---|---|
| 4 | int | (n) Количество менеджеров |
| n * varying | MGRData | Данные менеджера |
Данные менеджера:
| Размер (байт) | Тип данных | Название |
|---|---|---|
| 4 | int | (n) Длина имени менеджера |
| n | UTF-8 str | Имя менеджера |
| 4 | int | (m) Длина данных менеджера |
| m | byte[m] | Данные менеджера |
Зависимости
Частые вопросы
Как установить ChunkAPI?
Установите Forge под свою версию Minecraft, скачайте ChunkAPI под ту же версию и загрузчик, положите файл в папку mods и запустите игру с профилем загрузчика.
Для каких версий Minecraft есть ChunkAPI?
У ChunkAPI есть сборки для Minecraft 1.7.10.
Нужен ли ChunkAPI на сервере?
Нужен и в игре, и на сервере