RE:NODE

Minecraft10 мин чтения

Сервер Cobblemon: установка и производительность

Как запустить сервер Cobblemon на Fabric или NeoForge: зависимости, важные настройки main.json, спавн и деспавн покемонов, данные игроков и RAM.

0 прочтений

Сервер Cobblemon - это модовый сервер Minecraft с модом Cobblemon на Fabric или NeoForge, где у каждого игрока в клиенте стоит та же версия мода. Текущие релизы рассчитаны на Minecraft 1.21.1; на Fabric вам понадобятся Fabric API и Fabric Language Kotlin, а на NeoForge - Kotlin for Forge, потому что мод написан на Kotlin. Небольшой группе комфортно на 4 ГБ, модпаку, построенному вокруг Cobblemon, нужно 6-8 ГБ, а настройки, от которых зависит производительность, лежат в config/cobblemon/main.json: сколько покемонов спавнится на чанк, как часто запускается спавн, на каком расстоянии от игроков и когда они исчезают. Команды и PC игроков по умолчанию сохраняются внутри папки мира, поэтому делать backup просто, а переносить игроков между серверами - не очень.

Общие темы модовых серверов - версии Java, отчёты о крашах, клиентские и серверные моды - разобраны в статье Модовый сервер без крашей. Это руководство о том, что специфично для Cobblemon.

Версии, загрузчики и зависимости#

Поддерживаемые загрузчики Cobblemon за время его жизни менялись, поэтому прежде чем что-то устанавливать, загляните на страницу версии.

CobblemonMinecraftЗагрузчикиДополнительные зависимости
1.6 и новее1.21.1Fabric, NeoForgeFabric API + Fabric Language Kotlin или Kotlin for Forge
1.5 и старше1.20.1Fabric, ForgeТа же схема, старые версии

Правила, которые избавят вас от тикета в поддержку:

  • Сервер и клиенты работают на одной версии Cobblemon и на одном загрузчике. Клиент на Fabric не может зайти на сервер NeoForge.
  • Языковой мод Kotlin обязателен на обеих сторонах. Отсутствующая зависимость Kotlin - самая частая причина неудачного первого запуска; лог её называет.
  • Аддоны рассчитаны на конкретные версии Cobblemon. После обновления Cobblemon проверьте каждый аддон, прежде чем обновлять сервер.

Большинство групп начинают не с голого Cobblemon, а с модпака. Официальный модпак Cobblemon и несколько сборок сообщества добавляют моды для удобства и производительности и подбирают версии за вас. Как превратить сборку в сервер, описано в статье Серверы модпаков с CurseForge и Modrinth.

Установка сервера#

Fabric - более лёгкий вариант, и его использует большинство сборок Cobblemon; NeoForge поддерживается в той же мере. Голая установка на Fabric:

  1. Скачайте серверный лаунчер Fabric для 1.21.1 и подходящую версию загрузчика или запустите установщик Fabric в серверном режиме.
  2. Положите Cobblemon, Fabric API и Fabric Language Kotlin в mods/.
  3. Запустите один раз, чтобы сгенерировать файлы, примите EULA, запустите снова.
  4. Остановите сервер, отредактируйте config/cobblemon/main.json, запустите снова.
bash
$ java -Xms4G -Xmx4G -jar fabric-server-launch.jar nogui

Для 1.21.1 нужна Java 21. Lithium, FerriteCore и другие серверные моды, которые стоит добавить, разобраны в статье Моды на производительность для сервера Fabric - серверу Cobblemon они помогают так же, как любому другому. Для NeoForge см. статью Настройка сервера NeoForge.

При первом запуске Cobblemon настраивает свой боевой движок, который выполняет боевую логику Pokemon Showdown внутри сервера. Если первый бой зависает или выдаёт ошибку, посмотрите в логе этот шаг; autoUpdateShowdown в main.json определяет, обновляется ли движок при запуске.

main.json: важные настройки#

Серверные настройки Cobblemon лежат в config/cobblemon/main.json. Файл длинный, и большая его часть - игровой баланс. Значения ниже - значения по умолчанию в текущих релизах; некоторые ключи переименовывались между версиями, поэтому читайте файл, который сгенерировал ваш сервер, а не копируйте этот.

config/cobblemon/main.json (excerpt)
{  "maxPokemonLevel": 100,  "shinyRate": 8192.0,  "experienceMultiplier": 2.0,  "enableSpawning": true,  "pokemonPerChunk": 1.0,  "ticksBetweenSpawnAttempts": 20.0,  "maximumSpawnsPerPass": 8,  "minimumSpawningZoneDistanceFromPlayer": 16.0,  "maximumSpawningZoneDistanceFromPlayer": 64.0,  "despawnerNearDistance": 32.0,  "despawnerFarDistance": 96.0,  "despawnerMinAgeTicks": 600,  "despawnerMaxAgeTicks": 3600,  "storageFormat": "nbt",  "pokemonSaveIntervalSeconds": 30,  "playerDamagePokemon": true}
КлючПо умолчаниюЧто делает
shinyRate8192Один из стольких диких покемонов - шайни. Меньше значение - больше шайни
maxPokemonLevel100Предел уровня
experienceMultiplier2Множитель опыта за бои
pokemonPerChunk1Предел плотности диких покемонов вокруг игроков
ticksBetweenSpawnAttempts20Как часто запускается спавн, в тиках
maximumSpawnsPerPass8Максимум спавнов за одну попытку
despawnerNearDistance / FarDistance32 / 96Расстояния, от которых зависит исчезновение диких покемонов
despawnerMinAgeTicks / MaxAgeTicks600 / 3600Каким старым должен быть дикий покемон, чтобы он мог или должен был исчезнуть
worldSpawningBlocklistпустоМиры, где спавн Cobblemon выключен
storageFormatnbtКак хранятся команды и PC: NBT, JSON или MongoDB
playerDamagePokemontrueМогут ли игроки бить покемонов

О shinyRate игроки спрашивают первым делом. Если снизить его до 4096, шанс шайни удвоится; выходные-ивенты с пониженным значением - популярная фишка серверов. Изменение требует перезапуска.

Спавн, исчезновение и производительность#

Каждый дикий покемон - сущность с ИИ, состоянием анимации и коллизиями, и Cobblemon спавнит их вокруг каждого игрока. Это главная статья расходов сервера Cobblemon, и она растёт с числом игроков, разбросанных по карте, а не с размером мира.

Рычаги в порядке силы эффекта:

  • `pokemonPerChunk`. Предел плотности. Снижение с 1.0 до 0.7 сокращает число диких покемонов вокруг каждого игрока примерно на треть. Встречи становятся чуть реже; при множестве игроков сервер становится заметно легче.
  • `ticksBetweenSpawnAttempts`. Повышение с 20 (раз в секунду) до 40 вдвое сокращает частоту работы спавнера. Спавн по-прежнему заполняется до предела, только медленнее.
  • Возраст исчезновения. Снижение despawnerMaxAgeTicks с 3600 (три минуты) быстрее убирает старых диких покемонов. Слишком низкое значение - и игроки теряют покемона, к которому как раз шли.
  • Ванильный спавн. Многие серверы Cobblemon уменьшают ванильный спавн животных и монстров, раз мир и так заполняют покемоны. На сервере Fabric это делается правилами игры или настройкой мода производительности, а не bukkit.yml из Paper.
  • Дистанция симуляции. Дикие покемоны существуют и тикают только в области вокруг игроков. simulation-distance=6 или 8 в server.properties - разумный выбор для загруженного сервера. Подробнее - в статье server.properties: подробный разбор.

Покемоны, которых игроки держат вне команды, тоже чего-то стоят. Пастбища держат пасущихся покемонов бродящими сущностями; текущие релизы ограничивают их через defaultPasturedPokemonLimit (16 на пастбище) и pastureMaxPerChunk. База с десятью пастбищами - это 160 сущностей с ИИ всякий раз, когда её чанки загружены. Если базы начинают лагать, установите ожидаемое число пастбищ на игрока.

Измеряйте, как на любом сервере: spark доступен для Fabric и NeoForge, и профиль лагающего сервера Cobblemon обычно показывает наверху тик сущностей-покемонов и спавн. Представления разобраны в статье Как читать отчёт spark. Если затраты приходятся на генерацию чанков, а не на сущности, сделайте прегенерацию - статья Граница мира и прегенерация описывает Chunky, у которого есть сборки для Fabric и NeoForge.

ИгрокиКонфигурацияRAM
1-4Cobblemon + моды на производительность4 ГБ
4-10Модпак Cobblemon (50-150 модов)6 ГБ
10-20Модпак, зрелый мир, много пастбищ8 ГБ+ и больше CPU

Спавн, датапаки и настройка покедекса#

Правила спавна Cobblemon - это данные, а не код. Пулы спавна - какие покемоны появляются в каких биомах, на каких уровнях, с каким весом и при каких условиях - это JSON-файлы в данных Cobblemon, и датапак может переопределить их или дополнить. Так серверы делают так, чтобы редкий покемон появлялся только в одном биоме, убирают вид из дикой природы на время ивента или добавляют спавн для контента из аддонов.

Опция exportSpawnConfig в main.json экспортирует текущие данные спавна в папку конфигов, чтобы вы могли прочитать значения по умолчанию, прежде чем их переопределять. Актуальный формат файлов спавна смотрите в вики Cobblemon; он менялся между версиями, и старые датапаки нужно обновлять вместе с модом. Куда кладутся датапаки и как они загружаются, описано в статье Датапаки для серверов.

Управлять спавном по мирам проще: worldSpawningBlocklist отключает спавн Cobblemon в перечисленных мирах, что полезно для лобби, строительного мира или шахтёрского измерения.

Данные игроков, хранение и backup#

По умолчанию (storageFormat: "nbt") Cobblemon сохраняет команду и PC каждого игрока файлами внутри папки мира, отдельно от ванильных данных игрока. pokemonSaveIntervalSeconds определяет, как часто записываются изменения.

Последствия:

  • Backup мира - это backup покемонов всех игроков. Одной копии достаточно.
  • Восстановление мира откатывает покемонов всех игроков. Восстановив вчерашний backup, чтобы исправить одну разгрифленную базу, вы заодно отмените все поимки с того момента. Для отката одного игрока восстановите из backup только его файлы Cobblemon.
  • Перенос игроков между серверами означает перенос их данных Cobblemon. Сеть из нескольких серверов Cobblemon с общими командами может использовать хранилище MongoDB (storageFormat: "mongodb" с mongoDBConnectionString и mongoDBDatabaseName), чтобы все серверы читали одно хранилище.

Сервер на тему покемонов получает больше обращений о потерянных покемонах, чем любой другой сервер - о потерянных предметах. Определитесь с политикой до запуска - что вы восстанавливаете, из какого backup и как часто - и делайте backup достаточно часто, чтобы её выполнять. Почему важно восстановление, которое вы проверили, объясняет статья Backup, которые действительно восстанавливаются.

Команды администратора и права#

В Cobblemon есть команды администратора для выдачи и спавна покемонов, и они нужны для ивентов, раздач и разбора обращений в поддержку.

code
/pokegive <player> <pokemon properties>/pokespawn <pokemon properties>

Строка свойств описывает покемона - вид, уровень, шайни и другие атрибуты, - например pikachu level=20 shiny=yes. Точные названия свойств описаны в вики Cobblemon, и с каждым релизом их становится больше.

Cobblemon предоставляет узлы прав для своих команд, так что на Fabric мод прав (у LuckPerms есть сборка для Fabric) может выдать персоналу ровно те команды, которые нужны. Названия узлов для своей версии смотрите в вики. Не раздавайте статус оператора организаторам ивентов, чтобы они могли выполнять /pokegive; выдайте узел права. Группы и узлы разобраны в статье LuckPerms.

Плагины не работают на сервере Fabric или NeoForge. Гибридные серверы Bukkit с модами существуют, и некоторые сообщества Cobblemon ими пользуются, но с большими модами они ломаются неочевидным образом и создают нагрузку на поддержку. Если вам нужны функции в духе плагинов - приваты, экономика, дома, - используйте их аналоги в виде модов.

Публичный сервер Cobblemon#

Несколько моментов, специфичных для сообществ любителей покемонов:

  • Обмен и мошенничество. Экран обмена Cobblemon показывает обе стороны; большинство «скамов» - это сделки вне игры, которые пошли не так. Напишите об этом правило.
  • Клонирование и дюп. Любой баг с дюпом в моде становится дюпом покемонов. Держите мод обновлённым и следите за баг-трекером.
  • Экономика шайни. Шайни становятся валютой. Изменения шанса шайни на ивентах влияют на эту экономику; объявляйте о них.
  • Деньги и бренд. Cobblemon - фанатский проект; Pokemon - чужая интеллектуальная собственность. Продажа покемонов, шайни или привилегий на тему покемонов за реальные деньги грозит неприятностями от правообладателя, а не только по правилам Minecraft. Прежде чем открывать магазин, прочитайте статью Что можно продавать на сервере Minecraft.

Решение проблем#

Сервер не запускается, а в логе упоминается Kotlin. Языкового мода нет или у него не та версия. Fabric нужен Fabric Language Kotlin; NeoForge - Kotlin for Forge. Подберите версию, указанную на странице релиза Cobblemon.

Игроков кикает с несовпадением модов. Их версия Cobblemon, загрузчик или список аддонов отличаются от серверных. Сравните точные номера версий; обычно виноваты лаунчеры, автоматически обновляющие клиент. Закрепите версию сборки и объявляйте обновления до того, как их применить.

Бои зависают или не начинаются. Проверьте в логе ошибки при настройке боевого движка во время запуска и вокруг момента начала боя. После обновления частые подозреваемые - аддоны, меняющие бои; уберите их и проверьте.

Покемоны не спавнятся. Проверьте, что enableSpawning равен true, что мира нет в worldSpawningBlocklist и что датапак не заменил пулы спавна чем-то пустым или некорректным. Сломанный датапак спавна обычно пишет в лог ошибку разбора при запуске.

Слишком много покемонов вокруг баз. Обычно это пастбища, а не дикий спавн. Посчитайте их ванильным селектором, например /execute if entity @e[type=cobblemon:pokemon], стоя на базе, и сравните с таким же подсчётом в дикой местности.

Игрок говорит, что его покемоны пропали. Прежде чем что-то восстанавливать, проверьте в логе последнюю сессию игрока - большинство систем логирования записывают обмены, выпуски и смерти - и не останавливался ли сервер некорректно после его последней поимки. Если да, потеря - это интервал сохранения, и на будущее решение - корректные остановки. Если нет, восстановите из backup только данные этого игрока, а не весь мир.

Память растёт день за днём. Большие модовые серверы действительно накапливают; плановый перезапуск раз в день в тихий час держит её ровной. Время и предупреждения разобраны в статье Расписания перезапусков, которые помогают.

На RE:NODE линейка Minecraft поставляется с Paper, так что сервер Cobblemon - ваша собственная установка: вы загружаете Fabric или NeoForge, моды и конфиги через файловый менеджер или SFTP и задаёте переменные запуска. Установщика модпаков в один клик нет. Слоты для backup на каждом тарифе хранятся вне машины, их можно заблокировать, чтобы ротация их не удалила, и восстанавливаются они одной кнопкой - а учитывая, как игроки привязываются к своим покемонам, именно этой функцией вы и будете пользоваться.

FAQ#

Можно ли зайти на сервер Cobblemon с ванильным клиентом?

Нет. Cobblemon добавляет сущности, предметы и экраны, поэтому каждому игроку нужны та же версия Cobblemon и тот же загрузчик, что и на сервере, плюс зависимость Kotlin. Модпак держит всех на одной сборке.

Как изменить шанс шайни на сервере Cobblemon?

Отредактируйте shinyRate в config/cobblemon/main.json и перезапустите сервер. Это значение вида «один из N», так что 4096 удваивает шанс по сравнению со значением по умолчанию 8192.

Почему мой сервер Cobblemon лагает всего с несколькими игроками?

Обычно из-за дикого спавна вокруг нескольких игроков, находящихся далеко друг от друга, или из-за пастбищ, полных покемонов, на базах. Снизьте pokemonPerChunk, повысьте ticksBetweenSpawnAttempts и снимите профиль spark, чтобы убедиться, что затраты идут на тик сущностей.

Где сохраняются покемоны игроков?

По умолчанию внутри папки мира, в формате NBT, отдельно от ванильных данных игрока. Backup мира включает их. Для сетей, где команды общие для нескольких серверов, есть хранилище MongoDB.

Можно ли использовать плагины Paper с Cobblemon?

Не на обычном сервере Fabric или NeoForge. Гибридные серверы, загружающие и то и другое, существуют, но с большими модами ненадёжны. Для приватов, домов и экономики используйте аналоги-моды.


Комментарии

Полностью анонимно: без аккаунта, без почты, без cookie. Мы храним имя, которое вы ввели, текст и время - больше ничего. Количество ссылок ограничено, разметка не отображается.

0/2000