BetterView
Плагин для Paper и мод для Fabric, позволяющие увеличить обычную дальность прорисовки сервера без ущерба для производительности.
- Загрузчики
- FabricPaperPurpurBukkit
- Скачиваний на Modrinth
- 7,6 тыс.
- Подписчиков на Modrinth
- 48
- версий
- 12
- Обновлён
- 27 сентября 202627 сент.
- Опубликован
- в 2025
Коротко о моде
Ставится только на сервер; игрокам ставить не нужно
BetterView

Описание
BetterView — это высокопроизводительный плагин для Paper и мод для Fabric для серверов Minecraft. Он увеличивает обычную дальность прорисовки, не жертвуя производительностью сервера, за счёт асинхронной обработки игроков, прямого чтения чанков с диска и кэширования данных чанков.
Возможности
- Асинхронный быстрый тик игроков в сетевых потоках
- Чтение чанков напрямую с диска без их загрузки
- Оптимизированное отслеживание состояния чанков и их перебор
- Настраиваемое кэширование данных чанков для быстрого доступа
- Настраиваемые ограничения на отправку и генерацию чанков
- Настройки для каждого измерения отдельно
- Поддержка встроенных и выделенных серверов Fabric
- Лёгкая поддержка анти-иксрея для расширенных чанков
Пример: скорость загрузки при дальности прорисовки в 127 чанков
Скриншот ниже сделан на координатах 0 2250 0 в измерении Края при дальности прорисовки в 127 чанков (с отключённым туманом). На AMD Ryzen 7 5800X все видимые чанки были переданы клиенту примерно за 12 секунд после подключения к серверу с холодным кэшем и примерно за 9 секунд с тёплым кэшем.

Поддерживаемое ПО
| Версия Minecraft | Paper | Fabric |
|---|---|---|
| 26.3.x | ✅ | ✅ |
| 26.2.x | ✅ | ✅ |
| 26.1.x | ✅ | ✅ |
| 1.21.11 | ✅ | ✅ |
| 1.21.10 | ✅ | ✅ |
| 1.21.9 | ✅ | ✅ |
| 1.21.8 | ✅ | ✅ |
| 1.21.7 | ✅ | ✅ |
| 1.21.6 | ✅ | ✅ |
| 1.21.5 | ✅ | ✅ |
| 1.21.4 | ✅ | ✅ |
| 1.21.3 | ✅ | ✅ |
| 1.21.1 | ✅ | ✅ |
На Fabric этот мод зависит от Moonrise и adventure-platform-mod для работы.
Использование
На серверах Paper поместите jar-файл в папку plugins и перезапустите сервер. На серверах/клиентах Fabric поместите jar-файл в папку mods и перезапустите сервер или клиент. По умолчанию BetterView настроит дальность прорисовки в 32 чанка для каждого измерения.
Конфигурация
При первом запуске плагин автоматически создаст файл конфигурации. Если используется Paper, он будет создан по пути plugins/BetterView/config.yml, если Fabric — как betterview.yml в папке вашего мира (например, world для выделенных серверов). Там вы можете настроить следующие параметры:
config-version: Не трогайте этоintegrated-server-render-distance: Актуально только для одиночных миров, позволяет заменить дальность прорисовки встроенного сервера, иначе BetterView не будет иметь эффекта (по умолчанию:-1, отключено)global:enabled: Включать или отключать весь плагин/мод (по умолчанию:true)chunk-generation-limit: Сколько новых чанков может быть сгенерировано глобально за один тик (по умолчанию:3)chunk-send-limit: Максимальное количество чанков, отправляемых игроку за тик (по умолчанию:3)
dimensions:`
(например,minecraft:overworld`):enabled: Включать или отключать плагин/мод для этого измерения (по умолчанию:true)chunk-generation-limit: Сколько новых чанков может быть сгенерировано для этого уровня за один тик (по умолчанию:2)chunk-queue-size: Сколько чанков может быть поставлено в очередь на одного игрока одновременно (по умолчанию:16)view-distance: Максимальная расширенная дальность прорисовки для этого измерения (по умолчанию:32)cache-duration: Длительность кэширования, то есть как долго расширенные чанки должны храниться в памяти (по умолчанию:PT5M, 5 минут)- Обязательно подбирайте длительность кэширования в зависимости от того, для чего используется ваш сервер; например, для статичных лобби-серверов можно использовать более долгое кэширование, чем для динамичных SMP-серверов. Если длительность кэширования слишком высокая, чанки будут отображать устаревшее содержимое после, например, повторного входа.
anti-xray:- Учтите, что этот плагин реализует облегчённую версию анти-иксрея, которая не проверяет, открыт ли блок к воздуху или нет. Это значит, что любой режим движка, кроме
HIDE, скорее всего будет выглядеть не очень хорошо. enabled: Включать или отключать анти-иксрей в этом мире (по умолчанию:false)engine-mode: Режимы движка анти-иксрея:HIDE,OBFUSCATEилиOBFUSCATE_LAYER(по умолчанию:HIDE)hidden-blocks: Список блоков для скрытия/обфускации (по умолчанию: все руды и все базовые блоки измерений)
- Учтите, что этот плагин реализует облегчённую версию анти-иксрея, которая не проверяет, открыт ли блок к воздуху или нет. Это значит, что любой режим движка, кроме
chunk-batches:- Пакеты чанков используются, чтобы клиент/интернет игроков не перегружался слишком большим количеством чанков, отправляемых сразу. Если включено, BetterView отправляет пакет чанков и ждёт, пока игрок подтвердит, что получил весь пакет чанков. Только после этого будет отправлен следующий пакет чанков.
Побочным эффектом будет то, что игроки с хорошим соединением, но высоким пингом будут получать чанки гораздо медленнее, чем могли бы. \
- Пакеты чанков используются, чтобы клиент/интернет игроков не перегружался слишком большим количеством чанков, отправляемых сразу. Если включено, BetterView отправляет пакет чанков и ждёт, пока игрок подтвердит, что получил весь пакет чанков. Только после этого будет отправлен следующий пакет чанков.
Примечание: пакеты чанков могут отправляться в течение нескольких тиков. - enabled: Включены или отключены пакеты чанков в этом измерении (по умолчанию: true) - chunks-per-batch: Количество чанков в одном пакете (по умолчанию: 12) - prepare-chunks-while-waiting: Должен ли BetterView продолжать подготовку чанков, пока ждёт подтверждения предыдущего пакета (по умолчанию: true) - batch-timeout: Время без отправки чанка, после которого пакет истекает (по умолчанию: PT5S) - batch-wait-timeout: Таймаут, после которого BetterView автоматически помечает пакет как завершённый, даже без ответа игрока (по умолчанию: PT30S)
Не стесняйтесь экспериментировать с генерацией чанков и лимитами отправки чанков для оптимальной работы на вашей конфигурации сервера.
Использование API
Maven Repository: https://repo.minceraft.dev/releases/
Maven Artifact: dev.booky.betterview:betterview-api:2.2.1
Javadoc: https://repo.minceraft.dev/javadoc/releases/dev/booky/betterview/betterview-api/2.2.1
Пример для Paper
// get the BetterView API instance using Bukkit's ServicesManager
// this is the only difference between using the API on paper and fabric
BvManager bvManager = Bukkit.getServicesManager().load(BvManager.class);
if (bvManager == null) {
throw new IllegalStateException("Failed to load BetterView API");
}
// invalidate chunk cache at 0 0 in the overworld
BvLevel overworld = bvManager.getLevel(Key.key(Key.MINECRAFT_NAMESPACE, "overworld"));
overworld.invalidateChunkCache(0, 0);
// refresh the chunk for all players in the overworld
for (BvPlayer player : overworld.getPlayers()) {
// (switch to proper thread for thread-safety)
player.getExecutor().execute(() -> {
if (!player.isActive() || player.getLevel() != overworld) {
// player isn't active or isn't in overworld - maybe they have switched
// dimensions in the short time it took for this code to run?
return;
}
// ensure BetterView actually "owns" the chunk at 0 0
if (player.getChunkLifecycle(0, 0).isOwned()) {
// finally, queue the chunk to be refreshed!
player.refreshChunk(0, 0);
}
});
}Пример для Fabric
// get the BetterView API instance using fabric's object share
// this is the only difference between using the API on paper and fabric
BvManager bvManager = (BvManager) FabricLoader.getInstance().getObjectShare().get("betterview:api");
if (bvManager == null) {
throw new IllegalStateException("Failed to load BetterView API");
}
// invalidate chunk cache at 0 0 in the overworld
BvLevel overworld = bvManager.getLevel(Key.key(Key.MINECRAFT_NAMESPACE, "overworld"));
overworld.invalidateChunkCache(0, 0);
// refresh the chunk for all players in the overworld
for (BvPlayer player : overworld.getPlayers()) {
// (switch to proper thread for thread-safety)
player.getExecutor().execute(() -> {
if (!player.isActive() || player.getLevel() != overworld) {
// player isn't active or isn't in overworld - maybe they have switched
// dimensions in the short time it took for this code to run?
return;
}
// ensure BetterView actually "owns" the chunk at 0 0
if (player.getChunkLifecycle(0, 0).isOwned()) {
// finally, queue the chunk to be refreshed!
player.refreshChunk(0, 0);
}
});
}
</details>
Обратите внимание, что API всё ещё находится в разработке. Обязательно публикуйте предложения, улучшения и любые другие идеи
в нашем [Discord](https://discord.gg/zC8xjtSPKC) или в трекере задач.
## Сборка
1. Клонируйте проект (`git clone https://github.com/MinceraftMC/BetterView.git`)
2. Перейдите в клонированную директорию (`cd BetterView`)
3. Соберите jar-файлы (`./gradlew build` на Linux/MacOS, просто `gradlew build` на Windows)
Jar-файлы можно найти в директории `build` → `libs`.
### Участие в разработке
Если вы хотите внести свой вклад в BetterView, не стесняйтесь форкнуть репозиторий и создать pull request. Обязательно
следуйте стилю кода и соглашениям, принятым в проекте. Если у вас есть вопросы или нужна помощь, спрашивайте в
нашем [Discord](https://discord.gg/zC8xjtSPKC).
Вы можете протестировать свои изменения, запустив `./gradlew :paper:runServer` или
`./gradlew :fabric:prodServer`/`./gradlew :fabric:prodClient` соответственно. Это запустит локальный сервер с
автоматически установленным скомпилированным плагином или модом, готовый для отладки в вашей IDE.Частые вопросы
Как установить BetterView?
Установите Fabric под свою версию Minecraft, скачайте BetterView под ту же версию и загрузчик, положите файл в папку mods и запустите игру с профилем загрузчика.
Для каких версий Minecraft есть BetterView?
У BetterView есть сборки для Minecraft 1.21.1–26.3.
Нужен ли BetterView на сервере?
Ставится только на сервер; игрокам ставить не нужно