I See Your Chunks
Отрисовывает далёких игроков, стоящих на настоящем ландшафте далеко за пределами дальности прорисовки. Сервер передаёт резидентные чанки вокруг видимых игроков, которые клиент отправляет в дальний рендерер Voxy.
- Загрузчики
- Fabric
- Скачиваний на Modrinth
- 1,7 тыс.
- Подписчиков на Modrinth
- 9
- версий
- 8
- Обновлён
- 5 октября 20265 окт.
- Опубликован
- в 2026
Коротко о моде
Работает и в игре, и на сервере — ставьте, где нужен
I See Your Chunks
I See Your Chunks отрисовывает далёких игроков, стоящих на настоящем ландшафте, далеко за пределами вашей дальности прорисовки. Вместо модели игрока, парящей в пустоте на краю мира, сервер передаёт чанки, в которых стоит этот игрок, а ваш клиент отрисовывает их как настоящую геометрию — с реальным перекрытием, живыми обновлениями блоков и корректной глубиной относительно вашего LOD-ландшафта.
⚠️ Клиентам нужен Voxy. Именно Voxy отрисовывает переданный ландшафт. Без него клиент всё равно покажет далёких игроков и мобов, но они будут парить без земли под ногами. Выделенным серверам Voxy не нужен (это клиентский мод). См. Как это работает.
✨ Возможности
Основной функционал
- 🌍 Настоящий ландшафт, а не призраки: далёкие игроки отрисовываются на реальных чанках, которые они занимают, а не парят в пустоте
- 🚫 Ноль затрат на генерацию: передаются только чанки, уже загруженные на сервере — ничего нового не генерируется, не загружается и не тикает
- 🔄 Живые обновления блоков: когда блок меняется в переданном чанке, сервер заново отправляет весь этот чанк, а клиент его переобрабатывает, так что далёкий ландшафт обновляется на месте: факелы, лава и постройки появляются вживую. На 1.20.1, где серверы также отправляют каждый чанк в пределах своей дальности прорисовки, изменения в этом кольце за пределами вашей дальности прорисовки попадают в Voxy в тот же тик, в котором приходят
- ♾️ Далеко за пределами сферы прорисовки: ландшафт отрисовывается далеко за пределами собственной сферы прорисовки Voxy, поскольку в качестве дополнительных корней отрисовки внедряются только переданные колонки — пустой диск между ними ничего не стоит. Дальняя плоскость проекции Voxy выдвинута с её захардкоженных 48 000, и далёкие игроки удерживаются на той же дистанции, так что видимый игрок и земля под ним всегда отсекаются вместе. Эта дистанция отслеживает ползунок дальности видимости в реальном времени — вплоть до 1 024 000 блоков на максимуме ползунка — так что поднятие ползунка немедленно расширяет и ландшафт, и игроков, без переподключения. Потолок в 1 024 000 — это намеренный запас «более чем достаточно», а не технический предел (обратная Z-глубина означает, что можно было бы зайти дальше без реальных затрат)
- 💡 Настоящее освещение: далёкий ландшафт освещается по фактическому блочному и небесному свету из пакета чанка, так что факелы и лава светятся, а тени падают правильно, вместо плоского приближения
- 🎯 Корректное перекрытие: поскольку ландшафт действительно присутствует на клиенте, игрок за холмом реально скрыт — никаких догадок о частичном перекрытии
- 📡 Опциональное рукопожатие: клиенты заявляют о себе сами; сервер не отправляет ничего тем, кто не попросил
Продвинутые возможности
- 👁️ Мобы на общей земле: мобы, находящиеся на ландшафте, переданном вокруг видимого игрока, тоже показываются, стоя на той же настоящей земле — никогда не парят в изоляции
- 🐴 Ездовые животные едут вместе: то, на чём едет видимый игрок, всегда показывается вместе с ним — лодка, лошадь, ездовое животное ездового животного — даже при нулевом ландшафте, так что никто не сидит в воздухе
- 🎚️ Настраиваемый охват ландшафта: ползунок выбирает, сколько чанков окружает каждого видимого игрока, расширяясь от ближайших к дальним — от его собственного чанка до радиуса, ограниченного дальностью прорисовки сервера
- 🛡️ Учитывает невидимость: наблюдатели, невидимые и скрывшиеся игроки (melius-vanish) отфильтровываются на стороне сервера до того, как потратится хоть какая-то пропускная способность
- 📊 Ограниченная пропускная способность: жёсткие лимиты на передаваемые чанки на зрителя, настраиваемый охват и настраиваемый интервал обновления
- 🤝 Изящная деградация: ванильный клиент на модифицированном сервере или модифицированный клиент на ванильном сервере — оба варианта откатываются к обычному ванильному поведению
⚙️ Как это работает
Мод чётко разделён по сетевой границе:
- Клиент → Сервер (рукопожатие): При подключении клиент сообщает, на каком расстоянии он хочет видеть далёких игроков и сколько чанков местности вокруг каждого из них. Сервер отвечает подтверждением — своей дальностью прорисовки и тем, включена ли трансляция — чтобы клиент держал свой ползунок и хранилище чанков в соответствии с реальностью. Ванильный клиент никогда не отправляет рукопожатие и ничего не получает.
- Сервер (трансляция): Каждый интервал тика сервер находит отображаемых игроков в пределах этого расстояния и отправляет чанки, ближайшие к каждому из них — наращиваемые от ближайшего, начиная с чанка, в котором они стоят (по умолчанию 3×3), с ограничением по дальности прорисовки сервера — плюс ореол соседей в один чанк вокруг этого участка. Отправляются только уже загруженные чанки, и только те, которые ваниль ещё не отправила этому наблюдателю. Мобы, стоящие в видимом участке (не в ореоле), раскрываются вместе с местностью.
- Клиент (приём): Радиус хранения кэша чанков на клиенте расширяется, чтобы эти чанки за пределами дальности принимались, а не отбрасывались.
- Клиент (передача в Voxy): Каждый транслируемый далёкий чанк сразу преобразуется в LOD-хранилище Voxy по мере поступления — с использованием настоящего блока и небесного света из пакета чанка — и Voxy отрисовывает его через свой собственный дальний рендерер, корректно сортируя по глубине относительно своих LOD. Колонны за пределами сферы прорисовки Voxy дополнительно внедряются как дополнительные корни рендеринга, чтобы они отрисовывались на любом расстоянии, не раздувая сферу.
- Живые обновления: Когда блок меняется в транслируемом чанке, сервер помечает этот чанк (и только те чанки, которые он активно транслирует) как изменённый и повторно отправляет весь чанк на следующем интервале; клиент заново его поглощает, и Voxy перестраивает сетку этой колонны, так что далёкие изменения появляются без переподключения.
Почему Voxy (на клиентах): транслируемые чанки лежат за пределами дальности прорисовки Sodium, поэтому Sodium никогда не компилирует их в меши. Именно Voxy выводит эту местность на экран — без него половина мода, отвечающая за местность, ничего не делает, а далёкие игроки парят в пустоте. По этой причине он обязателен на клиентах, но только там: выделенный сервер занимается трансляцией и ничего не рендерит, поэтому ему Voxy не нужен и он не может его загрузить (это клиентский мод). Клиент выводит громкое предупреждение, если Voxy отсутствует.
Зачем ореол соседей: LOD-мешер Voxy читает соседей каждого чанка, чтобы построить его, поэтому чанк с нетранслированными соседями не может построить меш и остаётся невидимым — что оставило бы отрисовываться только внутреннюю часть любого участка. Трансляция одного дополнительного кольца вокруг запрошенного участка даёт каждому видимому чанку его соседей; сам ореол никогда не отрисовывается и никогда не раскрывает мобов.
📥 Установка
Установите JAR и на сервер, и на клиенты. Сервер занимается отслеживанием и трансляцией; клиент снимает ограничения рендеринга.
Требуется (обе стороны)
- Fabric Loader 0.16.12+
- Fabric API
- Java: 25 на 26.x, 21 на 1.21.1 и 1.20.1 (сам мод нацелен на Java 17 на 1.20.1, но нужный ему форк Voxy собран под Java 21)
Требуется на клиентах
- Voxy: отрисовывает транслируемую далёкую местность (клиентский мод; выделенным серверам он не нужен и нежелателен). Используйте сборку для вашей версии Minecraft:
| Minecraft | Voxy |
|---|---|
| 26.2 | Voxy 0.2.19 |
| 26.1.2 | Voxy 0.2.18 |
| 1.21.1 | форк mayjhon69669-sys/voxy-water-fix (ветка mc1211, 0.2.19) |
| 1.20.1 | форк m3t4f1v3/voxy (0.2.15), с Sodium 0.5.13 и Java 21 |
Опционально
- Mod Menu — доступ к экрану настроек прямо в игре
🖥️ Настройка
Настройки хранятся в config/i-see-your-chunks.json и редактируются прямо в игре через Mod Menu.
| Опция | Описание | По умолчанию |
|---|---|---|
enabled | Главный переключатель — при значении false полностью отключает мод | true |
renderRemotePlayers | Отрисовывать далёких игроков (и стримить их чанки) | true |
renderRemoteEntities | Отрисовывать далёких мобов, стоящих на стримленной местности | true |
visibilityDistanceBlocks | На каком расстоянии раскрываются далёкие игроки (отрисовка достигает максимум 1 024 000 блоков) | Максимум |
chunkRenderCount | Чанков местности вокруг каждого просматриваемого игрока (0 = ни одного, сначала ближайшие) | 9 (3×3) |
streamFarChunks | Серверная часть: стримить местность вокруг раскрытых игроков | true |
sendSpectators | Серверная часть: раскрывать игроков в режиме наблюдателя | false |
updateIntervalTicks | Серверная часть: тиков между проходами стриминга (1–40) | 5 |
Примечание:
streamFarChunks,sendSpectatorsиupdateIntervalTicksдействуют только на машине, где работает серверная логика. Остальные — клиентские. ПриchunkRenderCount = 0местность не отправляется, поэтому появляются только просматриваемые игроки — и то, на чём они едут; свободные мобы показываются лишь там, где есть стримленная земля, на которой можно стоять.
Изменение конфига сразу пересылает рукопожатие, так что стриминг подстраивается без переподключения.
🌫️ Туман
Далёкие игроки и мобы покрываются туманом точно так же, как местность под ними, поэтому далёкий игрок сливается с дымкой вместе с землёй под ним, а не выделяется на её фоне. Мод сам никогда не меняет туман Voxy; насколько далеко видно, решают настройки тумана Voxy.
- Minecraft 26.2 (Voxy 0.2.19) и 26.1.2 (Voxy 0.2.18): Voxy ограничивает туман местности после фиксированного расстояния, поэтому далёкая местность сохраняет частичную дымку, а далёкие игроки остаются видимыми на любой дистанции.
- Minecraft 1.21.1 и 1.20.1 (форки Voxy): форки используют тот же туман. Форк полностью растворяет местность в цвете тумана на расстоянии
section_render_distance × 512блоков (8 192 при значении по умолчанию 16). Дальше и местность, и игроки — чистый цвет тумана. Чтобы видеть дальше, уменьшите Fog Intensity или отключите Environmental Fog в настройках Voxy. Оба параметра действуют на местность и игроков вместе. - Шейдерпаки Iris управляют туманом сами, поэтому применяется туман из пака.
- На 1.21.1 светящийся игрок рисуется без тумана, чтобы его контур всё ещё отображался.
✅ Совместимость
| Мод | Статус | Примечания |
|---|---|---|
| Voxy | Обязателен на клиенте | Отрисовывает стримленную далёкую местность; нужен на клиентах, не требуется на выделенных серверах |
| Sodium | Полная | Нет привязки к внутренностям Sodium — при обновлении ломаться нечему |
| Iris / шейдеры | Полная | Стримленные чанки — обычная местность, поэтому шейдеры обрабатывают их как обычно |
| melius-vanish | Полная | Исчезнувшие игроки никогда не раскрываются (рефлективный мост, при сбое пропускает) |
| C2ME | Совместим | Более быстрая генерация не меняет то, что стримится — отправляются только уже загруженные чанки |
📋 Технические детали
Мод внедряется в следующих точках:
ChunkMap$TrackedEntity.updatePlayer()— снимает ограничение по дальности отслеживания и требованию чанка для каждого наблюдателя: безусловно для игроков и того, на чём они едут (включая цепочки транспорта), и для свободного моба только пока он стоит в чанке, который действительно отрисовывается для этого наблюдателя (видимый участок, никогда не ореол)ChunkMap.tick()— периодически перепроверяет управляемых сущностей относительно каждого игрока, поскольку видимость моба меняется, когда стримленная область вокруг далёкого игрока накрывает его или уходит с негоChunkHolder.broadcast()— помечает стримленный далёкий чанк как изменённый при его изменении, чтобы стример переслал весь чанк на следующем интервале (отслеживаются только чанки, которые он активно стримит; используется полная пересылка, потому что клиент не может применить инкрементальные дельты к чанку вне зоны видимости, который он никогда не кэшировал)- `ClientChunkCache.
**и**updateViewRadius()— расширяет радиус хранения на клиенте, чтобы стримленные чанки не отбрасывались как выходящие за пределы зоны видимости (нужны оба: радиус обычно приходит в пакете входа, до того какupdateViewRadius` вообще сработает) ClientChunkCache.replaceWithPacketData()— преобразует каждый прибывающий далёкий чанк напрямую в LOD-хранилище Voxy, подставляя собственное освещение. Обычный приём Voxy читает клиентский движок освещения, который никогда не освещает чанк за пределами дальности прорисовки (так что он молча записал бы ничего); вместо этого он прогоняется через собственный конвейер преобразования Voxy с настоящим светом, захваченным из пакета чанка. Чанки за пределами радиуса хранения клиента (просматриваемый игрок в тысячах блоков) отбрасываются ванилой до декодирования; они заново декодируются из целого буфера пакета в одноразовый чанк и принимаются напрямую, так что далёкая местность отрисовывается на любой дистанции, не удерживаясь в кэшеClientChunkCache.replaceWithPacketData()/drop()(тик сущностей): помечает стримленные чанки за пределами радиуса хранения как тикающие для сущностей и снимает пометку, когда сервер о них забывает. Клиент тикает сущностей только в чанках, которые у него сохранены, а обновления позиции вступают в силу только на собственном тике сущности, поэтому мобы (и транспорт) вокруг далёкого игрока иначе застыли бы на местеClientPacketListener.handleLevelChunkWithLight()— захватывает настоящий блочный и небесный свет из пакета чанка, чтобы приём выше мог передать его в Voxy (иначе ванила отбрасывает этот свет для чанков вне зоны видимости)LevelRenderer.isSectionCompiledAndVisible()(isSectionCompiled()на 1.21.1,isChunkCompiled()на 1.20.1): позволяет сущности отрисовываться в секции, которую Sodium никогда не компилировал, потому что эту землю рисует VoxyClientLevel.setBlocksDirty()(только 1.20.1): заново принимает изменённый чанк в Voxy в конце тика, когда он кэширован, но находится за пределами дальности прорисовки Sodium. Сервер 1.20.1 отправляет каждый чанк в пределах своей дальности видимости независимо от дальности прорисовки клиента, и иначе Voxy подхватывает изменения такого чанка только при его выгрузкеEntityRenderDispatcher.shouldRender()/Entity.shouldRenderAtSqrDistance()— переопределения лимита дистанции, которые всё ещё учитывают фрустумVoxyRenderSystem.computeProjectionMat()— поднимает захардкоженную дальнюю плоскость проекции Voxy с 48 000 блоков до общего предела дальней отрисовки, чтобы внедрённые дальние колонки не обрезались там (применяется только при наличии Voxy, управляется плагином конфигурации миксинов). Предел вычисляется на лету из ползунка дальности прорисовки (минимум 48 000, максимум 1 024 000), и этот метод выполняется каждый кадр, так что дальность сразу следует за ползунком; дальняя плоскость управляемых сущностей использует тот же предел, удерживая ландшафт и игроков на нём в синхроне
Рукопожатие клиент↔сервер (ClientHelloPayload туда, ServerAckPayload обратно) передаёт предпочтения и фактические лимиты сервера; здесь ничего не зависит от генерации чанков, так что сохраняется совместимость с модами на стороне генерации.
Дальность ландшафта. Чанки в пределах радиуса хранения клиента (~48 чанков) проходят через ванильный кэш как обычно. За его пределами они декодируются напрямую в LOD Voxy и никогда не кэшируются, так что ландшафт вокруг сколь угодно далёкого игрока всё равно отрисовывается — ограниченный собственным компактным хранилищем LOD Voxy, а не удерживаемыми чанками. Колонки за пределами сферы отрисовки Voxy внедряются как дополнительные корни отрисовки, и отсечение по дистанции Voxy для них снимается, так что они рисуются до дальней плоскости проекции Voxy — которую этот мод поднимает с захардкоженных 48 000. Эта дальняя плоскость вычисляется на лету из ползунка дальности прорисовки (с ограничением снизу в 48 000 и сверху в 1 024 000 на максимуме ползунка) и используется совместно с дальней плоскостью управляемых сущностей, так что ландшафт и игроки на нём достигают одинаковой дистанции и оба следуют за ползунком без переподключения. Потолок в 1 024 000 выбран просто как более чем достаточный для любого практического применения, а не потому что что-то технически останавливает его там — раздвинуть его дальше почти бесплатно по точности, поскольку буфер глубины использует reverse-Z. Освещение использует настоящий блочный + небесный свет из каждого пакета чанка; если чанк когда-либо придёт без данных об освещении, он откатывается к приближению небесного света на основе карты высот.
🗂️ Структура проекта
common/ версионно-независимый код, общий для всех версий MC (конфиг, сеть, стриминг, общие миксины, клиентская логика)
26.2/fabric/ модуль MC 26.2: версионно-специфичные миксины рендера, GUI, платформенные хелперы
26.1.2/fabric/ модуль MC 26.1.2
1.21.1/fabric/ модуль MC 1.21.1 (маппинги Mojang)
1.20.1/fabric/ модуль MC 1.20.1 (маппинги Mojang, байткод Java 17)🔨 Сборка
./gradlew clean buildКаждый JAR записывается в `/fabric/build/libs/`.
📜 Лицензия
Этот проект лицензирован под GNU Affero General Public License v3.0 (AGPL-3.0).
Вы вправе:
- ✅ Использовать в модпаках
- ✅ Изменять для личного использования
- ✅ Распространять изменённые версии (также должны быть AGPL-3.0)
Подробности см. в файле LICENSE.
Частые вопросы
Как установить I See Your Chunks?
Установите Fabric под свою версию Minecraft, скачайте I See Your Chunks под ту же версию и загрузчик, положите файл в папку mods и запустите игру с профилем загрузчика.
Для каких версий Minecraft есть I See Your Chunks?
У I See Your Chunks есть сборки для Minecraft 1.20.1, 1.21.1, 26.1.2–26.2.
Нужен ли I See Your Chunks на сервере?
Работает и в игре, и на сервере — ставьте, где нужен