▶️ ЗАБЕРИ СВОИ 8 ПОДАРКОВ 🎁 ПРИ СОЗДАНИИ СВОЕГО МАЙНКРАФТ СЕРВЕРА
Плагины/ViewDistanceTweaks
ViewDistanceTweaks

ViewDistanceTweaks

Плагин ViewDistanceTweaks для Майнкрафт автоматически подстраивает дистанцию просмотра и симуляции под нагрузку сервера. Больше расстояния, когда есть запас, меньше - до того, как игроки заметят лаги.

Оцените первым
2.7K
9

ViewDistanceTweaks

Твой сервер. Твоя производительность.

Автоматически выставляет дистанцию просмотра и симуляции для каждого мира, исходя из того, что сервер реально может вытянуть в данный момент.

Ставишь дистанцию в server.properties - и она применяется к самому худшему моменту, который только может случиться. Десять игроков онлайн в 3 ночи - ты раздаёшь чанки, которые никому не нужны. Шестьдесят человек на ивенте - и та же цифра роняет TPS в пол.

Этот плагин двигает число за тебя. Он следит за MSPT и тем, сколько чанков реально грузят игроки, отдаёт дистанцию, когда есть запас, и убирает её до того, как кто-то заметит лаги. У каждого мира свой минимум и максимум, так что Незер может сидеть на 6, пока основной мир бегает на 16.

Ничего подключать не надо. Кинул джарник, перезапустил - дефолты уже делают что-то разумное.

Требования

Paper 1.21.x / 26.xобязательно, papermc.io
Foliaподдерживается, дистанции работают через регионализированный планировщик
PlaceholderAPIопционально, только для плейсхолдеров, Modrinth
EssentialsXопционально, только для чтения AFK-статуса, если включено AFK-ограничение, Modrinth

Как это работает

MSPT замеряется каждый тик. Каждые ticks-per-check (по умолчанию 30 секунд) каждый мир проверяется один раз, и решение - увеличить, уменьшить или оставить как есть.

Три режима. proactive работает от бюджета чанков: ты говоришь, сколько тикающих и нетикающих чанков сервер должен тянуть в сумме, а плагин решает, какая дистанция влезает. reactive игнорирует количество чанков и смотрит только на MSPT относительно двух порогов. mixed запускает оба и берёт более пессимистичный результат - это правильный ответ на большинстве серверов.

Он не повторяет ошибок. Линейная регрессия по последним 30 минутам пар "количество чанков - MSPT" предсказывает, сколько будет стоить следующий шаг вверх. Если прогноз оказывается выше порога уменьшения - увеличение просто не происходит. Именно это ломает цикл "поднял - лаганул - сбросил - поднял снова".

Средние значения врут, поэтому смотрят на разброс. Сервер может держать комфортные 30 мс в среднем, пока отдельные тики прыгают от 8 до 55 - и играть на нём никто не хочет. Стандартное отклонение по последним 100 тикам Paper ловит это. Если оно выше variance-threshold, а среднее достаточно высокое, чтобы число имело смысл - сервер считается перегруженным, даже если среднее выглядело нормально.

Уменьшать можно быстрее, чем увеличивать. max-increase-step и max-decrease-step - это отдельные значения. Частая пара: 1 и 4: поднимаемся по одному шагу, падаем сразу на все. Сверху revert-increase-if-overloaded перепроверяет сразу после увеличения и откатывает его обратно, если стало хуже - вместо того чтобы ползти вниз следующие десять циклов.

Сначала симуляция, потом просмотр. С включённым prioritize-simulation-distance дистанция просмотра не трогается, пока дистанция симуляции не достигнет минимума мира. Симуляция - это то, что жрёт TPS. Просмотр - то, что видят игроки. Трать дешёвое в первую очередь.

Системы безопасности

MSPT - не единственное, на что стоит реагировать, поэтому несколько подсистем следят за другими сигналами. Всё, кроме защиты памяти, выключено по умолчанию.

Защита памятиСвободная куча ниже min-free-percent блокирует любое увеличение независимо от MSPT. Сервер может простаивать на 20 мс и всё равно быть в одном кольце чанков от того, чтобы провести весь тик в GC - а к моменту, когда MSPT это покажет, будет уже поздно. Включено по умолчанию на 15%.
Защита генерации чанковСчитает чанки, которые реально генерируются, а не просто читаются с диска. Если скорость генерации превышает порог - останавливает увеличение и может принудительно снизить дистанцию просмотра, пока генерация не успокоится. Это тот случай, когда кто-то летит на элитрах по свежему миру.
AFK-ограничениеИгроку у спавна не нужно 16 чанков. Их личная дистанция падает до AFK-значений, а освободившееся идёт обратно в общий бюджет. Использует AFK-статус EssentialsX, если он установлен (так /afk срабатывает сразу), иначе таймер бездействия Paper.
Масштабирование плотностиДвадцать игроков на одной ферме грузят почти одни и те же чанки. Формула proactive предполагает двадцать отдельных колец и голодает мир ни за что. Когда достаточно игроков сидят близко друг к другу - мир получает бонусную дистанцию пропорционально тому, сколько его населения находится в этом кластере.
Взвешивание сложностиОкеанский чанк - бесплатно, чанк с сортировщиком на 500 воронок может сам по себе съесть тик, а (2d+1)² считает оба как один. Эта система семплирует ограниченное количество чанков вокруг игроков каждый цикл и выводит средний множитель - так редстоун-тяжёлый мир получает меньший бюджет, чем мир полный воды.
Экстренная помощьПоследнее средство. Мир уже на минимуме симуляции и просмотра, MSPT всё ещё за порогом, отнимать больше нечего из дистанций. Тогда сбрасываются грозы и дневной цикл. Всё возвращается обратно, когда MSPT восстанавливается, по /vdt disable и при выключении - оригинальная погода и геймрулы запоминаются на входе.
Стартовая льготаДержит низкую фиксированную дистанцию первые несколько минут после запуска, пока обычный цикл не вступит в силу. Не даёт холодному серверу получить максимальную дистанцию, пока он ещё разгоняется.

Индивидуальные дистанции игроков

Два семейства разрешений устанавливают дистанцию для одного игрока без изменения мира:

viewdistancetweaks.fixed.<n>      дистанция просмотра для этого игрока
viewdistancetweaks.simfixed.<n>   дистанция симуляции для этого игрока

Значения от 2 до 32 - если у игрока несколько разрешений, побеждает самое высокое. Снятие разрешения возвращает их к мировой дистанции без перезахода. Обе функции нужно включить в конфиге отдельно - у них разные префиксы разрешений, чтобы один узел не устанавливал оба значения сразу.

Дистанция просмотра клиентская и не стоит серверу ничего лишнего. Дистанция симуляции реально жрёт ресурсы - так что оставь её для администрации, а не продавай как донатную плюшку.

/vdt status --fixed показывает, у кого что сейчас стоит и пришло ли значение из разрешения или от AFK-ограничения.

Пресеты и профили

Две разные вещи с раздражающе похожими названиями.

/vdt preset <small-server|large-network|performance-first> записывает настройки в твой config.yml. Это отправная точка для тех, кто не хочет крутить сорок значений руками - не финальный ответ.

/vdt profile <name> накладывает временное поверх того, что настроено (определяется в profiles: конфига). Ничего не пишется на диск - normal возвращает всё обратно. Нужен для того чтобы переключиться на ивентные настройки на два часа без правки конфига посреди события. max-view-distance-cap и max-simulation-distance-cap - это жёсткие потолки после всех остальных правил: лимит 8 действительно означает 8, и never-reduce-below-players не сможет его обойти.

Настройка

Всё живёт в одном комментированном config.yml. Дефолты разумные - кинул джарник и он уже делает правильные вещи. Значения, которые стоит знать:

ПараметрЧто делаетПо умолчанию
modeproactive (бюджет чанков), reactive (только MSPT) или mixed (оба, пессимист побеждает)mixed
ticks-per-checkКак часто оценивается каждый мир600 (30 с)
decrease-mspt-thresholdВыше этого MSPT дистанция снижается40.0
increase-mspt-thresholdНиже этого MSPT дистанция может расти25.0
max-increase-step / max-decrease-stepШагов за цикл в каждом направлении: 1 / 4 поднимается медленно и вылетает быстро1 / 1
prioritize-simulation-distanceСначала резать симуляцию, просмотр только на минимуме мираfalse
global-ticking-chunk-count-targetБюджет чанков для режима proactive5780
revert-increase-if-overloadedОткатить увеличение сразу же если стало хужеtrue

У каждого мира свой минимум и максимум - всё что не указано наследует default:

worlds:
  default:
    simulation-distance:
      min-simulation-distance: 4
      max-simulation-distance: 12
    view-distance:
      min-view-distance: 6
      max-view-distance: 16
  world_the_end:
    chunk-weight: 0.5        # почти пустые чанки, считаются за меньшее
  world:
    priority-world: true     # получает на 50% больше бюджета

У каждой системы безопасности выше есть свой блок - memory-safeguard, chunk-generation-safeguard, afk-throttling, density-scaling, complexity-weighting, emergency-relief, startup-grace - а в profiles: хранятся наложения для /vdt profile.

Полный комментированный config.yml записывается в папку данных плагина при первом запуске - каждая опция объяснена прямо там.

Команды

КомандаЧто делает
/vdt status [--weight] [--fixed]Текущее состояние по мирам: дистанции, количество чанков, MSPT, разброс плюс строка для каждой включённой подсистемы. --weight добавляет вес чанков и множитель сложности, --fixed показывает индивидуальные переопределения игроков
/vdt simulate [world]Сухой прогон: показывает что решит следующая проверка и причину без изменения чего-либо
/vdt historyПоследние 20 применённых изменений с причиной каждого. Отвечает на вопрос "почему сейчас дистанция 6" постфактум
/vdt mspt [debug]MSPT, TPS и стандартное отклонение. debug добавляет сырые семплы тиков Paper
/vdt viewdistance <n> [world] [--duration <min>]Ручное переопределение: без --duration держится до следующей перезагрузки
/vdt simulationdistance <n> [world] [--duration <min>]То же самое для дистанции симуляции
/vdt profile [name]Переключить временный профиль или показать какой активен
/vdt preset <name>Записать один из встроенных пресетов в config.yml
/vdt enable / /vdt disableГлавный выключатель без правки конфига
/vdt reloadПеречитать config.yml и messages.yml сбросить ручные переопределения
/vdt updateСпросить Modrinth нет ли новой версии

Разрешения

Всё ниже по умолчанию выдаётся только операторам кроме двух числовых семейств которые никогда не выдаются по умолчанию.

УзелДаёт доступ к
viewdistancetweaks.command.vdt/vdt вообще и /vdt mspt
viewdistancetweaks.vdt.command.status/vdt status и /vdt history
viewdistancetweaks.vdt.command.simulate/vdt simulate
viewdistancetweaks.vdt.command.viewdistance/vdt viewdistance
viewdistancetweaks.vdt.command.simulationdistance/vdt simulationdistance
viewdistancetweaks.vdt.command.preset/vdt preset и /vdt profile
viewdistancetweaks.vdt.command.reload/vdt reload, enable, disable, update
viewdistancetweaks.notifyПолучать сообщение в чат при изменении дистанции
viewdistancetweaks.fixed.<n>Фиксированная дистанция просмотра для этого игрока
viewdistancetweaks.simfixed.<n>Фиксированная дистанция симуляции для этого игрока

Плейсхолдеры

Нужен PlaceholderAPI. Все имеют префикс %viewdistancetweaks_.

По всему серверу

ПлейсхолдерЗначение
mspt%Текущий средний MSPT
tps%Текущий TPS
mspt_stddev%Стандартное отклонение тик-к-тику в мс
mspt_color%&a / &e / &c относительно двух порогов MSPT
tps_color%&a / &e / &c относительно 19 и 15 TPS
mspt_stddev_color%&a / &e / &c относительно variance-threshold'а'а'а'а'а'а'а'а'а'а'а'а'а'а'а'а'а'а'а'а'а'а'а'а'а'а'а'а'а'а'а'а'а'а'а'а'а'а'а'а'а'а'а'а'а'а'а'а'а'а'а'а'а'а'а'а'а'а'а'а'а'а'а'а'а'а'а'а'а'а'а'а'а'а'а'а'а'а'а'а'а'а'а'а'а'а'а'а'

Часто задаваемые вопросы

Совместимость

Minecraft: Java Edition

26.2.x26.1.x1.21.x

Поддерживаемые окружения

Сервер

Зависимости

Ссылки

Детали

Лицензия:
Опубликован:2 месяца назад
Обновлён:2 дня назад
Главная