Вступление
Никогда не будет руководства, которое даст вам идеальные результаты. Каждый сервер имеет свои собственные потребности и ограничения на то, чем вы можете или готовы пожертвовать. Работа с опциями для точной настройки под нужды вашего сервера — вот что это такое. Цель данного руководства — помочь вам понять, какие опции влияют на производительность и что именно они меняют. Если вы считаете, что нашли неточную информацию в этом руководстве, вы можете открыть проблему или создать запрос на исправление.Приступим:
Примечание для пользователей, которые работают на Ванилой, Fabric или Spigot (или на всем, что ниже Paper) — зайдите в свой server.properties и измените sync-chunk-writes на false. Эта опция принудительно отключена в Paper и его форках, но в серверных реализациях до этого вам нужно отключить ее вручную. Это позволяет серверу сохранять чанки вне основного потока, снижая нагрузку на основной цикл тиков.Руководство для версии 1.18.+. Некоторые вещи могут быть применимы к версиям 1.15 — 1.17.
Подготовка
Ядро сервера
Ваш выбор серверного программного обеспечения может иметь огромное значение для производительности и возможностей API. В настоящее время существует множество жизнеспособных популярных ядер для сервера, но есть и несколько, от которых лучше держаться подальше по разным причинам.Какое ядро выбрать для сервера Майнкрафт:
- Paper — Самое популярное серверное программное обеспечение, направленное на повышение производительности и устранение несоответствий в геймплее и механике.
- Pufferfish — форк Paper, направленный на дальнейшее улучшение производительности сервера.
- Purpur — форк Pufferfish, сфокусированный на возможностях и свободе кастомизации.
Вам следует держаться подальше от:
- Любое платное ядро, который утверждает, что он асинхронный — 99,99% вероятность того, что это мошенничество.
- Bukkit/CraftBukkit/Spigot — Крайне устаревшие в плане производительности по сравнению с другим серверным ПО, к которому у вас есть доступ.
- Любой плагин/программное обеспечение, которое включает/выключает/перезагружает плагины во время выполнения.
- Многие форки, расположенные ниже по течению от Pufferfish или Purpur, будут сталкиваться с нестабильностью и другими проблемами.
- Если вы ищете большего прироста производительности, оптимизируйте свой сервер или инвестируйте в личный приватный форк.
Предварительная генерация карт на сервере Майнкрафт
Предварительная генерация карт — один из самых важных шагов в улучшении малобюджетного сервера. Больше всего это помогает серверам, размещенным на общем CPU/одноядерном узле, поскольку они не могут в полной мере использовать асинхронную загрузку чанков. Вы можете использовать такой плагин, как Chunky, для предварительной генерации мира. Обязательно установите границу мира, чтобы ваши игроки не генерировали новые чанки! Обратите внимание, что предварительная генерация иногда может занять несколько часов в зависимости от радиуса, который вы установите в плагине предварительной генерации.Имейте в виду, что при использовании Paper и выше загрузка чанков не влияет на ваш tps, но скорость загрузки чанков может значительно замедлиться, если процессор вашего сервера перегружен.
Обязательно установите ванильную границу мира (/worldborder set [радиус]), так как она ограничивает некоторые функции, например, диапазон поиска карт сокровищ, что может вызвать скачки лагов.
Важно помнить, что земной мир, незер и энд имеют отдельные границы мира, которые должны быть установлены для каждого мира. Измерение nether (нижний мир) в 8 раз меньше, чем overworld (если не изменено с помощью datapack), поэтому если вы неправильно установите размер, ваши игроки могут оказаться за границей мира!
Конфигурации
server.properties
network-compression-threshold: Хорошее значение: 256Это позволяет установить предельный размер пакета перед тем, как сервер попытается его сжать. Установка большего значения может сэкономить некоторые ресурсы процессора за счет пропускной способности, а установка значения -1 отключает эту функцию. Установка большего значения также может навредить клиентам с медленным сетевым соединением. Если ваш сервер находится в сети с прокси-сервером или на той же машине (с пингом менее 2 мс), отключение этого параметра (-1) будет полезно, так как скорость внутренней сети обычно может справиться с дополнительным несжатым трафиком.
purpur.yml
use-alternate-keepalive: Хорошее начальное значение: trueВы можете включить систему альтернативного keepalive в Purpur, чтобы игроки с плохим соединением не получали тайм-ауты так часто.
Включение этой функции посылает пакет keepalive раз в секунду игроку, и выбивает таймаут только если ни один из них не был отвечен в течение 30 секунд. Ответ на любой из них в любом порядке будет поддерживать соединение с игроком. Таким образом, он не будет кикать ваших игроков из-за того, что 1 пакет был потерян где-то на линииИмеет известную несовместимость с TCPShield.
~ https://purpurmc.org/docs/Configuration/#use-alternate-keepalive
Чанки
server.properties
simulation-distance:
Хорошее начальное значение: 4Расстояние симуляции — это расстояние в чанках вокруг игрока, на котором будет тикать сервер. По сути, это расстояние от игрока, на котором будут происходить события. Это включает в себя плавку в печах, рост культур и саженцев и т. д. Это параметр, который вы хотите специально установить низким, где-то около 3 или 4, из-за существования view-distance. Это позволяет загружать больше фрагментов, не ставя на них галочки. Это эффективно позволяет игрокам видеть дальше без такого же влияния на производительность.
view-distance:
Хорошее начальное значение: 7Это расстояние в чанках, которое будет отправлено игрокам, аналогично no-tick-view-distance из Paper. В версии 1.18 клиент теперь учитывает расстояние просмотра на стороне сервера, что приводит к появлению уродливого тумана при низком значении этого параметра.
Общее расстояние просмотра будет равно наибольшему значению между simulation-distance и view-distance. Например, если расстояние моделирования установлено на 4, а расстояние просмотра — на 12, общее расстояние, отправляемое клиенту, будет равно 12 чанкам.
spigot.yml
view-distance
Хорошее начальное значение: defaultЭто значение перезаписывает одно из значений server.properties, если оно не установлено по умолчанию. Вы должны оставить его по умолчанию, чтобы иметь и симуляцию, и расстояние просмотра в одном месте для более легкого управления.
paper.yml
delay-chunk-unloads-by
Хорошее начальное значение: 10Этот параметр позволяет вам настроить, как долго чанки будут оставаться загруженными после ухода игрока. Это помогает не загружать и выгружать одни и те же чанки, когда игрок перемещается туда-сюда. Слишком высокие значения могут привести к тому, что одновременно будет загружаться слишком много кусков. Для областей, в которые часто телепортируются и загружаются, рассмотрите возможность постоянной загрузки области. Это будет легче для вашего сервера, чем постоянно загружать и выгружать чанки.
max-auto-save-chunks-per-tick
Хорошее начальное значение: 8Позволяет замедлить инкрементное сохранение мира, распределяя задачу по времени еще больше для лучшей средней производительности. Вы можете установить значение выше 8, если на сервере более 20-30 игроков. Если инкрементное сохранение не успевает завершиться, то bukkit автоматически сохранит оставшиеся чанки за один раз и начнет процесс заново.
prevent-moving-into-unloaded-chunks
Хорошее начальное значение: trueКогда включено, предотвращает перемещение игроков в незагруженные чанки, вызывая синхронизацию, которая перегружает основной поток, вызывая лаг. Вероятность того, что игрок наткнется на незагруженный чанк, тем выше, чем меньше расстояние просмотра.
entity-per-chunk-save-limit
Хорошие начальные значения: YAML:
experience_orb: 16
arrow: 16
dragon_fireball: 3
egg: 8
ender_pearl: 8
eye_of_ender: 8
fireball: 8
small_fireball: 8
firework_rocket: 8
potion: 8
llama_spit: 3
shulker_bullet: 8
snowball: 8
spectral_arrow: 16
experience_bottle: 3
trident: 16
wither_skull: 4
area_effect_cloud: 8
pufferfish.yml
max-loads-per-projectile
Хорошее начальное значение: 8Определяет максимальное количество чанков, которые сможет загрузить один объект за время своей жизни. Уменьшение уменьшит нагрузку на чанки, вызванную объектами сущностей, но может вызвать проблемы с трезубцами, эндерперлами и т. д.
Мобы
bukkit.yml
spawn-limits
Хорошее значение: YAML:
monsters: 20
animals: 5
water-animals: 2
water-ambient: 2
water-underground-creature: 3
axolotls: 3
ambient: 1
ticks-per
Хорошее значение: YAML:
monster-spawns: 10
animal-spawns: 400
water-spawns: 400
water-ambient-spawns: 400
water-underground-creature-spawns: 400
axolotl-spawns: 400
ambient-spawns: 400
Что касается монстров: Небольшое увеличение времени между спавнами не должно повлиять на частоту спавнов даже на фермах мобов. В большинстве случаев все значения этого параметра должны быть больше 1. Установка этого значения также позволит вашему серверу лучше справляться с зонами, где спавн мобов отключен.
spigot.yml
mob-spawn-range
Хорошее начальное значение: 2Позволяет вам уменьшить диапазон (в кусках), в котором мобы будут спауниться вокруг игрока. В зависимости от игрового режима вашего сервера и количества игроков вы можете уменьшить это значение вместе со spawn-limits в bukkit.yml. Если установить это значение ниже, вам будет казаться, что вокруг вас больше мобов. Это значение должно быть меньше или равно расстоянию обзора, и никогда не должно быть больше расстояния жесткого деспауна / 16.
entity-activation-range
Хорошее значение: YAML:
animals: 16
monsters: 24
raiders: 48
misc: 8
water: 8
villagers: 16
flying-monsters: 48
entity-tracking-range
Хорошее значение: YAML:
players: 48
animals: 48
monsters: 48
misc: 32
other: 64
tick-inactive-villagers
Хорошее значение: falseЭто позволяет вам контролировать, должны ли деревенские жители быть отмечены за пределами диапазона активации. В этом случае деревенские жители будут действовать как обычно и игнорировать диапазон активации. Отключение этого параметра повысит производительность, но может запутать игроков в некоторых ситуациях. Это может вызвать проблемы с железными фермами и пополнением торговых запасов.
nerf-spawner-mobs
Хорошее начальное значение: trueВы можете сделать так, чтобы мобы, порожденные спавнером монстров, не имели ИИ. Нерфированные мобы ничего не будут делать. Вы можете заставить их прыгать в воду, изменив spawner-nerfed-mobs-should-jump на true в paper.yml.
paper.yml
despawn-ranges
Хорошие значения: YAML:
monster:
soft: 30
hard: 56
creature:
soft: 30
hard: 56
ambient:
soft: 30
hard: 56
axolotls:
soft: 30
hard: 56
underground_water_creature:
soft: 30
hard: 56
water_creature:
soft: 30
hard: 56
water_ambient:
soft: 30
hard: 56
misc:
soft: 30
hard: 56
per-player-mob-spawns
Начальное значение: trueЭта опция определяет, должны ли спавны мобов учитывать, сколько мобов уже находится рядом с игроком. Вы сможете обойти множество проблем, связанных с непоследовательным спауном мобов из-за того, что игроки создают фермы, которые занимают весь mobcap. Это обеспечит более схожий с одиночной игрой опыт спавна, позволяя вам устанавливать более низкие spawn-limits. Включение этой функции незначительно влияет на производительность, однако это влияние затмевается улучшением spawn-limits.
max-entity-collisions
Хорошее начальное значение: 2Перезаписывает одноименную опцию в spigot.yml. Она позволяет вам решить, сколько столкновений может обработать одна сущность за один раз. Значение 0 приведет к невозможности толкать другие сущности, включая игроков. Значения 2 должно быть достаточно в большинстве случаев. Стоит отметить, что геймерулу maxEntityCramming станет бесполезным, если его значение превысит значение этого параметра.
update-pathfinding-on-block-update
Хорошее начальное значение: falseОтключение этой опции приведет к тому, что поиск пути будет выполняться реже, что увеличит производительность. В некоторых случаях это приведет к тому, что мобы будут выглядеть более лаговыми; они будут просто пассивно обновлять свой путь каждые 5 тиков (0,25 сек).
fix-climbing-bypassing-cramming-rule
Хорошее начальное значение: trueВключение этого параметра исправит то, что сущности не будут затронуты краммингом при лазании. Это предотвратит образование абсурдного количества мобов в небольших пространствах, даже если они карабкаются (пауки).
armor-stands-tick
Хорошее начальное значение: falseВ большинстве случаев можно смело устанавливать значение false. Если вы используете подставки для брони или какие-либо плагины, изменяющие их поведение, и у вас возникли проблемы, включите его снова. Это предотвратит столкновение подставок с водой или влияние гравитации.
armor-stands-do-collision-entity-lookups
Хорошее начальное значение: falseЗдесь вы можете отключить столкновения подставок. Это поможет, если у вас много подставок и вам не нужно, чтобы они сталкивались с чем-либо.
tick-rates
Хорошие значения:
YAML:
sensor:
villager:
secondarypoisensor: 80
nearestbedsensor: 80
villagerbabiessensor: 40
playersensor: 40
nearestlivingentitysensor: 40
behavior:
villager:
validatenearbypoi: 60
acquirepoi: 120
Не рекомендуется изменять эти значения по умолчанию, пока включен DAB Pufferfish (параметр в файле pufferfish.yml)!
pufferfish.yml
dab
Хорошее начальное значение: trueDAB (динамическая активация мозга) уменьшает количество галочек, тем больше, чем дальше объект находится от игроков. DAB работает по градиенту, а не по жесткому пределу, как EAR. Вместо того, чтобы полностью тикать близкие сущности и едва тикать дальние, DAB уменьшает количество тиков сущности, основываясь на результатах вычислений, на которые влияет activation-dist-mod (параметр в файле pufferfish.yml).
max-tick-freq
Хорошее начальное значение: 20Определяет, насколько медленно будут тикать самые дальние от игроков сущности. Увеличение этого значения может улучшить работу сущностей, находящихся далеко от игроков, но может разрушить фермы или сильно ухудшить поведение мобов. Если включение DAB разрушает фермы мобов, попробуйте уменьшить это значение.
activation-dist-mod
Хорошее начальное значение: 7Управляет градиентом, в котором мобы получают галочку. Уменьшение этого параметра активирует DAB ближе к игрокам, улучшая прирост производительности DAB, но влияет на взаимодействие существ с окружением и может нарушить фермы мобов. Если включение DAB нарушает фермы мобов, попробуйте увеличить это значение.
purpur.yml
aggressive-towards-villager-when-lagging
Хорошее начальное значение: falseВключение этого параметра заставит зомби перестать нападать на жителей деревень, если сервер находится ниже порога tps, установленного в параметре lagging-threshold в purpur.yml.
entities-can-use-portals
Начальное значение: falseЭта опция может отключить использование порталов всеми сущностями, кроме игрока. Это не позволит сущностям загружать куски, меняя миры, что обрабатывается в главном потоке. Побочным эффектом является то, что сущности не могут проходить через порталы.
villager.brain-ticks
Хорошее начальное значение: 2Этот параметр позволяет установить, как часто (в тиках) будут тикать мозги сельских жителей (работа и пои). Если значение больше 3, то подтверждено, что жители будут непоследовательными и глючными.
villager.lobotomize
Хорошее начальное значение: trueЖители лишаются своего ИИ и пополняют запасы предложений только время от времени. Включение этого параметра приведет к лоботомии жителей, которые не могут найти путь к месту назначения. Освобождение их разблокирует их.
Эту функцию следует включать только в том случае, если жители вызывают лаг! В противном случае проверка поиска пути может снизить производительность.
Другие настройки оптимизации сервера Майнкрафт
spigot.yml
merge-radius
Хорошие параметры: YAML:
item: 3.5
exp: 4.0
hopper-transfer
Хорошее начальное значение: 8Время в тиках, которое воронки будут ждать, чтобы переместить предмет. Увеличение этого параметра поможет повысить производительность, если на вашем сервере много хопперов, но при слишком высоком значении нарушит часы на основе воронок и, возможно, системы сортировки предметов.
hopper-check
Хорошее начальное значение: 8Время в тиках между проверкой бункеров на наличие предмета над ними или в инвентаре над ними. Увеличение этого значения повысит производительность, если на вашем сервере много бункеров, но нарушит часы на основе бункеров и системы сортировки предметов, полагающиеся на потоки воды.
paper.yml
alt-item-despawn-rate
Хорошие параметры: YAML:
enabled: true
items:
COBBLESTONE: 300
NETHERRACK: 300
SAND: 300
RED_SAND: 300
GRAVEL: 300
DIRT: 300
GRASS: 300
PUMPKIN: 300
MELON_SLICE: 300
KELP: 300
BAMBOO: 300
SUGAR_CANE: 300
TWISTING_VINES: 300
WEEPING_VINES: 300
OAK_LEAVES: 300
SPRUCE_LEAVES: 300
BIRCH_LEAVES: 300
JUNGLE_LEAVES: 300
ACACIA_LEAVES: 300
DARK_OAK_LEAVES: 300
CACTUS: 300
DIORITE: 300
GRANITE: 300
ANDESITE: 300
SCAFFOLDING: 600
use-faster-eigencraft-redstone
Хорошее начальное значение: trueПри включении этой опции система редстоуна заменяется более быстрой и альтернативной версией, которая уменьшает избыточные обновления блоков, снижая объем работы, которую приходится выполнять вашему серверу. Включение этой функции может значительно повысить производительность, не внося при этом несоответствий в игровой процесс. Включение этой функции даже исправит некоторые несоответствия красного камня из craftbukkit.
disable-move-event
Хорошее начальное значение: falseInventoryMoveItemEvent не срабатывает, если нет плагина, активно слушающего это событие. Это означает, что вы должны установить значение true, только если у вас есть такой плагин (ы) и вас не беспокоит, что они не могут действовать на это событие. Не устанавливайте значение true, если вы хотите использовать плагины, которые слушают это событие, например, плагины защиты!
ignore-occluding-blocks
Хорошее начальное значение: trueОпределяет, будут ли бункеры игнорировать контейнеры внутри полных блоков, например, бункер-минекарта внутри блока с песком или гравием. Если эта опция включена, это приведет к поломке некоторых устройств, зависящих от такого поведения.
mob-spawner-tick-rate
Хорошее начальное значение: 2Эта опция позволяет настроить частоту тиканья спавнеров. Более высокие значения означают меньшее отставание, если у вас много спавнеров, хотя если установить слишком высокое значение (относительно задержки спавнеров), скорость спавна мобов снизится.
optimize-explosions
Хорошее начальное значение: trueУстановка этого значения в true заменяет ванильный алгоритм взрыва на более быстрый, ценой небольшой неточности при расчете урона от взрыва. Обычно это незаметно.
enable-treasure-maps
Хорошее начальное значение: falseГенерирование карт сокровищ очень дорого и может привести к зависанию сервера, если структура, которую он пытается найти, находится за пределами вашего предварительно сгенерированного мира. Безопасно включать эту функцию только в том случае, если вы предварительно сгенерировали свой мир и установили границы ванильного мира.
treasure-maps-return-already-discovered
Хорошее начальное значение: trueЗначение по умолчанию этой опции заставляет вновь сгенерированные карты искать неисследованные структуры, которые обычно находятся за пределами вашей предварительно сгенерированной местности. Установка значения true заставляет карты вести к ранее обнаруженным структурам. Если вы не установите это значение в true, вы можете столкнуться с зависанием или падением сервера при генерации новых карт сокровищ.
grass-spread-tick-rate
Хорошее начальное значение: 4Время в тиках между попытками сервера распространить траву или мицелий. Благодаря этому большие участки грязи будут превращаться в траву или мицелий немного дольше. Если вы хотите уменьшить это значение без заметного уменьшения скорости распространения, установите его около 4.
container-update-tick-rate
Хорошее начальное значение: 1Время в тиках между обновлениями контейнеров. Увеличение этого параметра может помочь, если обновление контейнеров вызывает у вас проблемы (такое случается редко), но облегчает игрокам десинхронизацию при взаимодействии с инвентарем (призрачные предметы).
non-player-arrow-despawn-rate
Хорошее начальное значение: 20Время в тиках, по истечении которого стрелы, выпущенные мобами, должны исчезать после попадания во что-то. Игроки все равно не могут их подбирать, поэтому можно установить значение 20 (1 секунда).
creative-arrow-despawn-rate
Хорошее начальное значение: 20Время в тиках, по истечении которого стрелы, выпущенные игроками в творческом режиме, должны исчезать после попадания во что-то. Игроки все равно не могут их подбирать, поэтому можно установить значение 20 (1 секунда).
purpur.yml
disable-treasure-searching
Хорошее начальное значение: trueПредотвращает выполнение дельфинами поиска структур, аналогичных картам сокровищ.
teleport-if-outside-border
Хорошее начальное значение: trueПозволяет телепортировать игрока к мировому респауну, если он оказался за границей мира. Полезно, поскольку ванильную границу мира можно обойти, а урон, наносимый ею игроку, можно смягчить.
Помощники в оптимизации сервера Майнкрафт
paper.yml
anti-xray
Хорошее начальное значение: trueВключите эту опцию, чтобы скрыть руды от рентгеновских лучей. Для детальной настройки этой функции ознакомьтесь с рекомендуемыми настройками Stonar96. Включение этой функции действительно снизит производительность, однако она гораздо эффективнее, чем любой плагин анти-ксрей. В большинстве случаев влияние на производительность будет незначительным.
remove-corrupt-tile-entities
Хорошее начальное значение: trueИзмените значение на true, если ваша консоль засыпана ошибками, связанными с сущностями тайлов. Это приведет к удалению всех тайловых сущностей, вызывающих ошибку, вместо того, чтобы игнорировать ее. Если вы часто получаете предупреждения о тайловых сущностях, выясните, почему они ломаются. Это не является решением основной проблемы.
nether-ceiling-void-damage-height
Хорошее начальное значение: 127Если этот параметр больше 0, игроки, находящиеся выше заданного уровня y, будут получать повреждения, как если бы они находились в пустоте. Это не позволит игрокам использовать крышу нетча. Ванильная пустота имеет высоту 128 блоков, поэтому лучше установить значение 127. Если вы каким-либо образом изменяете высоту незера, вам следует установить значение [your_nether_height] — 1.
Флаги запуска Java для оптимизации сервера Майнкрафт
Ванильный Minecraft и серверное программное обеспечение Minecraft в версии 1.18 требуют Java 17 или выше. Oracle изменила лицензирование, и больше нет веских причин получать java от них. Рекомендуемые поставщики — Amazon Corretto и Adoptium. Альтернативные реализации JVM, такие как OpenJ9 или GraalVM, могут работать, однако они не поддерживаются бумагой и, как известно, вызывают проблемы, поэтому в настоящее время они не рекомендуются.Ваш сборщик мусора может быть настроен для уменьшения скачков задержки, вызванных большими задачами сборщика мусора. Вы можете найти флаги запуска, оптимизированные для серверов Minecraft, здесь SOG. Имейте в виду, что эта рекомендация не будет работать на альтернативных реализациях jvm.
Плагины «слишком хороши, чтобы быть правдой»
Плагины, удаляющие наземные предметы (дроп)
Абсолютно не нужны, поскольку их можно заменить merge radius и alt-item-despawn-rate, и, честно говоря, они менее настраиваемы, чем основные конфигурации сервера. Они используют больше ресурсов для сканирования и удаления предметов, чем для того, чтобы не удалять предметы вообще.Плагины для стакования мобов
Очень трудно оправдать его использование. Стакование естественно заспавнившихся существ вызывает больше лагов, чем отсутствие их вообще, из-за того, что сервер постоянно пытается спавнить больше мобов. Единственный «приемлемый» вариант использования — это спавнеры на серверах с большим количеством спавнеров.Плагины, включающие/выключающие другие плагины
Все, что включает или отключает плагины во время выполнения, крайне опасно. Загрузка такого плагина может вызвать фатальные ошибки с данными отслеживания, а отключение плагина может привести к ошибкам из-за удаления зависимости. Команда /reload страдает от точно таких же проблем, и вы можете прочитать о них подробнее в статье блога me4502Что такое лаги? — измерение производительности на сервере Майнкрафт
mspt
Paper предлагает команду /mspt, которая сообщит вам, сколько времени потребовалось серверу для расчета последних тиков. Если первое и второе значение, которое вы видите, меньше 50, то поздравляем! Ваш сервер не отстает! Если третье значение больше 50, это означает, что по крайней мере один тик занял больше времени. Это совершенно нормально и случается время от времени, так что не паникуйте.timings
Отличный способ узнать, что может происходить, когда ваш сервер отстает, — это тайминги. Тайминги — это инструмент, позволяющий увидеть, какие задачи занимают больше всего времени. Это самый базовый инструмент поиска и устранения неполадок, и если вы обратитесь за помощью по поводу задержек, вас, скорее всего, попросят предоставить тайминги.Чтобы получить тайминги вашего сервера, достаточно выполнить команду /timings paste и перейти по ссылке, которую вам предоставят. Вы можете поделиться этой ссылкой с другими людьми, чтобы они могли помочь вам. Также легко ошибиться, если вы не знаете, что делаете. Существует подробный видеоурок от Aikar о том, как их читать: