# Zote Core — Inner Core Loader [:us: English](README.md) __Zote Core__ — серверное ядро, основанное на Inner Core для Minecraft: Bedrock Edition 1.16.201, созданное для уникального геймплея с модами, часто ассоциируемое с созданием собственных модовых серверов. Основой серверного ядра послужил [Nukkit-MOT](https://github.com/ZoteTeam/Nukkit-MOT), его можно легко обновить, заменив соответствующую библиотеку. ![Zote Core](/.github/logo.png) ## Установка Поддерживается любая платформа, поддерживающая Java 17. Загрузите последний релиз серверного ядра, либо соберите репозиторий с помощью Gradle. Запустите собранное ядро, открыв консоль в папке с ним: ```sh java -jar ZoteCore-SNAPSHOT.jar -XX:MaxRAMPercentage=95.0 ``` ## Behavior packs 1.16 Распакуйте пак в `behavior_packs/<имя-пака>/` рядом с сервером: `manifest.json` должен находиться непосредственно в этой папке. Также загружаются паки из `behavior_packs` выбранного модпака, из модов и runtime-паки Inner Core. Исходные каталоги читаются без копирования и удаления; повторные пути и UUID загружаются один раз, с приоритетом зарегистрированных паков модов/модпака перед серверной папкой. После изменения пака перезапустите сервер. Поддержка серверной части частичная: - Манифесты версий 1 и 2, вложенные папки, необязательный `contents.json`, UTF-8/BOM и комментарии JSON. Ошибка отдельного файла записывается в лог и не прерывает загрузку остальных. - Предметы форматов от `1.10` до `1.16.201`, включая `1.16.100`: собственный namespace, имя, размер стака, максимальная прочность, категория творческого инвентаря и базовая еда с питательностью и насыщением. Переопределение ванильных предметов не поддерживается. Визуальные компоненты обрабатывает клиент. - Рецепты `minecraft:recipe_shaped` и `minecraft:recipe_shapeless` для верстака, shapeless-рецепты камнереза, `minecraft:recipe_furnace` для обычной и плавильной печи, костра и костра душ. Поддерживаются строковые и объектные ссылки на предметы, `data`, `count`, wildcard `data: -1`/`32767` во входных предметах и дополнительные результаты shaped-рецептов. Предметы всех паков регистрируются до рецептов. - Сущности форматов от `1.8` до `1.16.201`: независимое состояние каждого моба, `component_groups`, события `add/remove`, `sequence`, взвешенный `randomize`, вложенные фильтры, таймеры и `environment_sensor`. Группы, переменные Molang, здоровье, экипировка и состояние контроллеров сохраняются в NBT. Поддерживаются вызов по строковому идентификатору и числовому ID яйца, яйца в творческом инвентаре, `runtime_identifier` и стабильные сетевые определения. - AI с приоритетами: выбор цели, ответ на урон, ближняя/дальняя атака, прогулки, плавание/полёт, избегание, паника, следование, приманивание, размножение и поворот головы. Ограниченный A* обходит препятствия в загруженных чанках; поиск пути не генерирует новые чанки. Это серверная реализация целей, а не точная копия алгоритмов Bedrock. - Жизненный цикл: дробные коллизии и масштаб, дыхание, горение, рост, приручение, лечение, взаимодействия, посадка пассажиров, экипировка, снаряды, взрывы, превращения, создание других сущностей, деспавн, полосы боссов, loot tables и опыт. Естественный спавн учитывает поверхность/воду, свет, высоту, сложность, биом, плотность, вес и размер стада; он выполняется раз в 100 тиков только в загруженных чанках. - Molang выполняется открытой библиотекой [Mocha 3.0.1](https://github.com/unnamed/mocha) под MIT, без собственного парсера языка. Подключены серверные `query.*`/`q.*`, постоянные `variable.*`/`v.*`, временные переменные и `math.*`. Выражения кешируются; вложенность ограничена 64 уровнями, циклы — 4096 итерациями на вычисление. Лицензия включена в JAR как `META-INF/LICENSE-mocha.txt`. - Серверные `animation_controllers` и `animations`: состояния, переходы Molang, `on_entry/on_exit`, переменные с remap curves, временные шкалы и события/команды на них. Кости, материалы и визуальные эффекты анимаций остаются на клиенте. Полная совместимость со всем движком Bedrock 1.16 пока не гарантируется. Не реализованы специализированные цели и механики (торговля/экономика жителей, рейды, полноценные генетика и инвентари ездовых мобов, специальные атаки боссов и другие отсутствующие компоненты/queries), функции `.mcfunction`, кастомные блоки, эффекты еды и рецепты только для коптильни. Параметры отдельных AI-компонентов и точное распределение естественного спавна могут отличаться от Bedrock. Биомные теги сопоставляются с семействами биомов Nukkit; собственные биомы не добавляются. Для регистрации пользовательских сущностей автоматически включается runtime-флаг experiment mode Nukkit. Неизвестный контент получает диагностику в логе. Текстуры, модели, анимации и клиентские определения предметов/сущностей должны быть установлены на клиентах вместе с соответствующими паками; этот загрузчик реализует серверную логику и не заменяет клиентские ресурсы. Синтаксис переплавки описан в [документации Bedrock](https://learn.microsoft.com/en-us/minecraft/creator/reference/content/recipereference/examples/recipedefinitions/minecraftrecipe_furnace?view=minecraft-bedrock-stable). ## Конфигурация Настройки производятся посредством двух основных файлов: *server.properties* и *zotecore.yml*. Они будут созданы автоматически сразу же после запуска ядра, документация по первому доступна в репозитории Nukkit-MOT. Некоторые настройки Nukkit заблокированы загрузчиком, среди которых *multiversion-min/max-protocol* (422), *xbox-auth* (авторизация с помощью него не доступна) и *save-player-data-by-uuid* (false). Чтобы сокеты клиентов отваливались, не крашая сервер, отключите Watchdog. В текущей реализации альтернативные варианты исправления недоступны, необходимая настройка `thread-watchdog=on`. ### zotecore.yml Стандартные настройки ядра, которые можно использовать как основу: ```yml zotecore.yml # Изменение информации пака, который клиент должен иметь для входа на сервер. # Устаревшие или не реализованные методы, однако, добавлены не будут. pack: Inner Core pack-version: 2.4.0b122 or higher pack-version-code: ">163" # Устанавливает список модов и конфигураций для загрузки, вы можете # указать название, имя папки модпака из /modpacks или путь. modpack: innercore # Использование ванильного интерфейса верстака, вместо кастомного. # Внимание: в настоящее время не рекомендуется использовать, # так как некоторые рецепты отображаются с проблемами. use-legacy-workbench-override: off # Отключение исправления инвентаря для подключенных клиентов, # устаревшие версии не работают должным образом с ним, # не позволяя перемещать предметы по инвентарю. use-legacy-inventory: on # Переключение режима отладки для неподдерживаемых методов (например, клиентских). # Может быть одним из: none, debug (по умолчанию), warning, raise. unsupported-method-handling: debug # Могут ли моды использовать небезопасные функции (например, вызов eval) или нет. # Внимание: это может создать риск безопасности, однако, например, его запрет # влияет на requireGlobal и часто может нарушить работу модов. allow-unsafe-scripting: on # Режим разработчика позволяет получать дополнительную информацию # о работе ядра, а также профайлинг методов. developer-mode: off # Время в секундах между запусками автосохранения данных модов (любое от 20), # а также мира, если он включен в другой опции. auto-save-period: 60 # Нужно ли помимо данных модов сохранять еще и миры. auto-save-world: on # Включен ли сокетный сервер или нет. Сокеты требуют дополнительный порт, # подключение через серверные сокеты более нестабильное. socket-server-enabled: off # Порт серверного сокета, обычно должен быть между 10000 и 24999. # Но учтите, что по умолчанию клиент использует порт 2304. socket-port: 2304 # Отправляет текстовую форму игрокам когда происходят ошибки тика, # содержит только стактрейс скрипта (без потенциально опасных свойств). display-ticking-errors-to-players: true # Если серверный тик прерывается слишком часто, сервер будет остановлен; # в противном случае тик будет пытаться продолжать перезапуски. stop-on-critical-ticking-error: true # Максималльное количесво пакетов которые может хранить сервер для отправки игроку # Если количесвто пакетов привышает это, то игрок кикается с сервера max-packet-sending: 200 # Дополнительные потоки Updatable threading_additional_thread_count: 0 # uuid игрока, отправляемый клиентом override-player-uuid: on # Дополнительная информация в лог # debug-logger: on # info-logger: on # Включить детальную отладку сети # network-debug: off # Разрешить использование заблокированных/неподдерживаемых настроек Nukkit # allow-unsupported-options: off ``` ## Консольные команды + custom_items — выводит список кастомных предметов + custom_blocks — выводит список кастомных блоков + mods — выводит список модификаций на сервере + inner_core_network — выводит список подключенных к протоколу игроков на сервере + state [runtimeId] — выводит стейты блока по рантайм идентификатору + profilecallback [enabled] [showParameters] — отладка и профайлинг калбеков + dimensions_list — выводит список измерений + tps — отображает нагрузку на tick inner core + gen_chunks [dimension] [x1] [z1] [x2] [z2] — загружает или генерирует чанки в указанной области + get_all_players_id — выводит имена и рантайм идентификаторы всех игроков онлайн > Все команды предназначены для операторов и не могут быть вызваны игроками. ## Лицензия ![Licensing](/.github/license.jpg) ## Техническая информация | Ключ | Значение | |-------------------------|--------------------| | Версия протокола | 422 (1.16.200) | | Версия Rhino | 1.7.14 (`5a917b5`) | | Instant Referrer | `a264591` |