
Vertigo
Мод Vertigo оптимизирует синхронизацию чанков по вертикали, решая проблему лагов и высокого потребления памяти на высоких мирах в Майнкрафт. Идеально подходит для серверов с модами вроде Big Globe.
Vertigo - мод для Майнкрафт, который решает проблему синхронизации чанков на высоких мирах. По умолчанию игра синхронизирует целые чанки с игроками, что создает проблемы при использовании модов или датапаков, увеличивающих высоту мира. Например, Big Globe делает высоту обычного мира 2048 блоков.
В чем проблема?
Тут две основные засады:
- В мультиплеере серверу приходится передавать клиенту гораздо больше данных, что увеличивает требования к пропускной способности.
- Клиенту нужно отслеживать больше блоков, что повышает потребление памяти.
В Minecraft 1.21 добавили задержку синхронизации чанков под интернет-соединение игрока, и это помогло. Но:
- Многие моды все еще на Minecraft 1.20.1.
- Проблема не решена полностью - игрок реже вылетает по таймауту, но синхронизация в целом медленнее.
Я не нашел мода, который решал бы все эти проблемы, поэтому сделал свой.
Как работает Vertigo
Vertigo синхронизирует только те секции чанков, которые находятся рядом с игроком по вертикали. Простыми словами - он врет клиенту о том, где какие блоки находятся. Если секция чанка слишком высоко или низко относительно игрока, сервер говорит клиенту, что эта секция пуста (полностью состоит из воздуха).
Совместимость с другими модами
Поскольку клиент не знает о всех блоках в чанке, другие моды могут пытаться синхронизировать данные в секциях, о которых клиент не знает - результат может быть непредсказуемым. Чтобы уменьшить эти проблемы, Vertigo делает следующее:
- Переопределяет
PlayerLookup.tracking(ServerWorld, BlockPos)в Fabric API так, чтобы не включать игроков за пределами вертикального диапазона. Если ваш мод использует этот метод для отправки пакетов обновлений игрокам, скорее всего все будет работать нормально.PlayerLookup.tracking(BlockEntity)делегирует кtracking(ServerWorld, BlockPos), так что этот метод тоже должен работать.- Все остальные методы отслеживания не изменены.
- Включает API для:
- Проверки, знает ли конкретный игрок о конкретной секции чанка.
- Получения списка игроков, которые знают о конкретной секции чанка.
Но я ожидаю, что у некоторых модов все равно будут проблемы. Если вы обычный пользователь - не ждите, что этот мод будет работать из коробки со всеми другими модами. Некоторым модам потребуются изменения для совместимости с Vertigo. Если вы разработчик модов и считаете, что проблема на моей стороне - создавайте issue.
Важно знать
Помогает ли Vertigo на ванильных/невысоких мирах? Не особо, если только у вас очень маленькая дистанция прорисовки.
Помогает ли Vertigo в одиночной игре? Может снизить потребление памяти в одиночке, но только на высоких мирах или при малой дистанции прорисовки. На лаги или задержки в одиночной игре это не повлияет - там узким местом является не сеть, даже на высоких мирах.
Нужно ли устанавливать Vertigo и на клиент, и на сервер? Да.
Сломается ли что-то, если установить только на одну сторону? Надеюсь, что нет. Vertigo должен откатываться к стандартному протоколу синхронизации чанков, если установлен только на одной стороне.
Влияет ли Vertigo на серверные механики? Например, спавн мобов или тиканье блоков? Нет.
Что считается "рядом с игроком по вертикали"? Вертикальная дистанция синхронизации равна горизонтальной дистанции синхронизации, которая равна вашей дистанции прорисовки (или дистанции прорисовки сервера - выбирается меньшая).
Если вы используете моды вроде Big Globe или другие датапаки/моды для Майнкрафт, увеличивающие высоту мира - скачайте Vertigo и забудьте о лагах при синхронизации чанков.
