Blindspot
Minecraft Fabric мод, нацеленный на исправление множества мелких проблем с производительностью.
- Загрузчики
- Fabric
- Скачиваний на Modrinth
- 798
- Подписчиков на Modrinth
- 0
- версий
- 5
- Обновлён
- 7 октября 20267 окт.
- Опубликован
- в 2026
Коротко о моде
Ставится только в игру; на сервер ставить не нужно
Minecraft Fabric мод, который исправляет мелкие, незамеченные проблемы производительности на стороне клиента, не охваченные крупными модами оптимизации.
Требования
- Minecraft 26.1.x, 26.2 или 26.3
- Fabric Loader >= 0.19.5
Fabric API не требуется.
Возможности
- Оптимизация списка друзей (Minecraft 26.2 и новее): кэширует список друзей вместо его перестроения при каждом вызове.
- Оптимизация боковой панели таблицы очков: кэширует отсортированные записи боковой панели вместо сканирования и сортировки всех очков каждый кадр.
- Оптимизация списка игроков (Tab): кэширует порядок игроков в списке вместо повторной сортировки всех игроков каждый кадр, пока список открыт.
Оптимизация списка друзей не входит в версию для 26.1, потому что в Minecraft 26.1 нет списка друзей.
Технические подробности и глубокое погружение
Накладные расходы на проверку присутствия в списке друзей
Только Minecraft 26.2 и новее.
Ванильный PlayerSocialManager.getFriends() преобразует весь список друзей в новый список через Stream при каждом вызове, хотя сами данные меняются только при поступлении нового списка друзей. Пока список друзей включён, PresenceHandler.tick() вызывает его один раз за отрисованный кадр (вызов идёт из Minecraft.runTick, а не из игрового тика 20 раз в секунду). Стоимость одного вызова мала, но это повторяющаяся работа, дающая каждый раз один и тот же результат.
Blindspot кэширует результат и пересчитывает его только тогда, когда ванильная игра сохраняет новые данные о друзьях.
Боковая панель таблицы очков перестраивается каждый кадр
Чтобы нарисовать боковую панель, ванильная игра вызывает Scoreboard.listPlayerScores() каждый кадр. Он проходит по всем держателям очков, известным таблице очков, а не только по тем, что на отображаемой цели. Затем он отфильтровывает скрытые записи, сортирует их все и оставляет топ-15. При тысячах записей это сканирование и сортировка выполняются каждый кадр, даже если ни одно очко не изменилось. В тесте с примерно 5 000 записей очков на клиенте боковая панель занимала около 0,9–1,3 мс на кадр в ванили и около 0,06–0,08 мс с Blindspot.
Blindspot хранит итоговый отфильтрованный, отсортированный и ограниченный список и передаёт его в ванильный конвейер вместо полного списка очков. Чтобы знать, когда этот список устарел, Blindspot добавляет к таблице очков счётчики версий, которые меняются при создании, изменении или удалении очка, а также при изменении состава команды. Список перестраивается собственным кодом ванили только тогда, когда изменился один из этих счётчиков или отображается другая цель. Всё после этого шага по-прежнему выполняется каждый кадр точно так же, как в ванили: цвета и префиксы команд, форматы чисел, ширина текста. Поэтому изменения шрифта, языка и ресурспаков ведут себя так же, как без мода.
Список игроков (Tab) пересортировывается каждый кадр
Пока список игроков открыт, ваниль сортирует всех перечисленных игроков каждый кадр. Каждое сравнение ищет команды обоих игроков в таблице очков. Порядок зависит только от порядка списка, заданного сервером, режима наблюдателя, команды и имени игрока, которые меняются редко.
Blindspot кэширует отсортированный порядок и позволяет ванили перестраивать его только тогда, когда игрок добавлен в список или удалён из него, изменён игровой режим или порядок в списке игрока, либо изменён состав команды. Обновления пинга, отображаемые имена и скины не влияют на порядок и не вызывают перестроение. Сами строки (имена, пинг, очки, сердца) по-прежнему рисуются ванилью каждый кадр.
Проверка кэшей
Запустите игру с аргументом JVM -Dblindspot.verifyCaches=true, чтобы Blindspot вычислял ванильный результат параллельно с каждым попаданием в кэш сайдбара и списка игроков и сравнивал их. В логе тогда отображается любое несовпадение и, каждые 1 000 проверок, процент попаданий. Каждая проверка выполняет полное ванильное вычисление вдобавок к кэшу, так что игра работает медленнее, чем без Blindspot, пока эта функция включена. Она предназначена только для тестирования и баг-репортов.
Совместимость
Blindspot не меняет то, что отрисовывается, что отправляется на сервер или принимается от него, или как симулируется мир. Его хуки в код сайдбара, списка игроков, таблицы очков и обработки пакетов только кэшируют результаты, которые vanilla вычислил бы в любом случае, или отмечают, когда эти результаты меняются.
Протестировано вместе с Sodium 0.9.2 и Lithium 0.26.2 на Minecraft 26.3, в одиночной и многопользовательской игре. Не тестировалось со всеми модами.
Моды, которые полностью заменяют ванильный код сайдбара или списка игроков, могут конфликтовать с ним. Blindspot настроен так, что такой конфликт обычно проявляется как краш при запуске, а не как незаметно неверные результаты в игре. Если вы столкнётесь с таким, пожалуйста, откройте issue на GitHub с вашим логом.
Исходный код и участие
Blindspot — открытый исходный код под LGPL-3.0-only. Исходный код на GitHub.
Нашли ещё одну небольшую, упущенную из виду проблему производительности вроде этих? Не стесняйтесь открыть issue или pull request там.
Частые вопросы
Как установить Blindspot?
Установите Fabric под свою версию Minecraft, скачайте Blindspot под ту же версию и загрузчик, положите файл в папку mods и запустите игру с профилем загрузчика.
Для каких версий Minecraft есть Blindspot?
У Blindspot есть сборки для Minecraft 26.1–26.3.
Нужен ли Blindspot на сервере?
Ставится только в игру; на сервер ставить не нужно