LocateMore
Находит N ближайших структур, биомов или POI вместо только самого близкого. Точный порядок по расстоянию, полностью асинхронно: сервер продолжает тикать. Также исправляет ванильный /locate, который не возвращает истинно ближайший объект (MC-138887).
- Загрузчики
- Fabric
- Скачиваний на Modrinth
- 652
- Подписчиков на Modrinth
- 2
- версия
- 41
- Обновлён
- 19 октября 202619 окт.
- Опубликован
- в 2026
Коротко о моде
Ставится только на сервер; игрокам ставить не нужно
Находит N ближайших структур, биомов или POI вместо одной ближайшей. Точный порядок по расстоянию. Сервер продолжает тикать.
/locate structure minecraft:mansion 20
/locate biome minecraft:mushroom_fields 3
/locate poi #minecraft:village 5Ванильный /locate блокирует поток сервера и возвращает один результат, и этот результат не всегда ближайший. LocateMore добавляет к ванильной команде необязательное количество от 1 до 100 и пропускает ванильный поиск ближайшей структуры через тот же движок, так что обычный /locate, глаза Эндера, карты исследователя и другие моды тоже получают истинно ближайшую структуру, не блокируя тик. Результаты сыплются в чат, начиная с ближайшего, каждая строка телепортирует по клику, а прогресс показывает боссбар.
Почему это быстро
Ваниль раскручивает спираль наружу и перепроверяет пересекающиеся области. LocateMore начинает с сида: сид определяет единственные чанки, где может зародиться каждая структура, и движок обходит ровно эти кандидаты в истинном порядке по расстоянию, проверяя каждый теми же проверками, что и ваниль. Кандидаты в негенерированном мире обычно решаются чистой математикой (та же математика точек генерации и взвешенный выбор из набора, которые выполнила бы сама генерация, — каждый подтверждён арбитром, прежде чем ему доверились, и отозван на сессию, если арбитр когда-либо не согласится), так что для них не загружается и не генерируется ни один чанк. Результаты совпадают с ванильными; их просто больше и раньше.
Замеры (release-сборка, чистый мир, сид 20260821, количество 20; warm — тот же поиск ещё раз):
| структура | cold | warm |
|---|---|---|
| mansion | 1.7 s | 0.06 s |
| ancient_city | 0.10 s | |
| monument | 1.5 s | |
| jungle_pyramid | 3.7 s | 0.10 s |
| #village (тег, мультинабор) | 0.17 s | |
| fortress (Nether, мультинабор) | 0.04 s |
Ваниль в том же мире: 10 секунд заблокированных тиков ради 13 из 20. Каждый релиз перед выпуском сверяется координата за координатой с реальной генерацией на обеих поддерживаемых версиях (test/run-both.sh).
Биомы и POI тоже
/locate biome сэмплирует ту же сетку, что и ваниль, через тот же сэмплер климата, но вне потока и в точном порядке по расстоянию (ванильная спираль лишь приблизительно ближайшая). N результатов — это N различных пятен: попадание в пределах biomeSeparationBlocks (по умолчанию 512) от уже принятого подавляется. Радиус по умолчанию 12800, вдвое больше ванильного, поскольку дополнительная дальность — чистая математика.
/locate poi ищет по ВСЕМУ исследованному миру вместо ванильного радиуса в 256 блоков, читая хранилище poi вне потока и никогда не закрепляя данные poi в памяти так, как это делает ванильный запрос. POI — это состояние мира, поэтому неисследованный мир искать нельзя; изменения в памяти, ещё не записанные на диск, учитываются, а попадания перепроверяются по живой памяти перед выводом.
API для других модов
LocateMoreApi.findNearest(level, structures, origin, 5).thenAccept(result -> {
for (LocateMoreApi.StructureHit hit : result.hits()) {
// hit.pos(), hit.structure(), hit.distance()
}
});com.rasmus.locatemore.api — это контракт; все остальные пакеты внутренние. Вызывай в потоке сервера; future завершается там же, попадания в точном порядке по расстоянию, с флагами complete и orderingGuaranteed для случаев обрезки по бюджету и нерешённых случаев. SearchOptions понижает бюджеты для каждого вызова, отключает генерацию чанков (mathOnly()) и исключает предыдущие попадания.
Ограничения
- Обычный
/locateнамеренно возвращает истинно ближайшую структуру, чего ваниль иногда не делает (MC-138887). Для точного соответствия ванили (практика спидраннеров, инструменты для сидов):/gamerule locatemore:exact_locate false, для каждого мира, на лету;improveVanillaLocateвconfig/locatemore.json— это общий рубильник для сервера. - Мультинаборным структурам в негенерированном мире нужен их кандидатный чанк, сгенерированный до первой стадии, точно как при ванильном locate; каждая проба добавляет от 4 до 12 КБ к сохранению, и сводка сообщает их количество. Однонаборным структурам пробы не нужны.
- Состояние поиска не сохраняется между сессиями; перезагрузка датапака прерывает запущенные поиски и очищает памятку сессии. Метки — намеренное исключение: это закладки в собственных данных игрока, и они никогда не влияют на результат поиска.
- Границы по умолчанию: радиус 1 000 000 блоков, 60 с реального времени, 50 000 проверок кандидатов, 2 одновременных поиска. Частичные результаты сообщают об этом. Всё это лежит в
config/locatemore.json.
Команды
| команда | что делает |
|---|---|
| `/locate structure <id|#tag> [min_distance]` | асинхронный поиск, стримит N ближайших (опционально не ближе указанного расстояния) |
| `/locate biome <id|#tag> [min_distance]` | асинхронный поиск биомов, N отдельных участков |
| `/locate poi <id|#tag> [min_distance]` | асинхронный поиск poi по всей исследованной местности |
| `/locate near structure|biome structure|biome [radius]` | ближайший a, рядом с которым в пределах radius (по умолчанию 512) есть b, например деревня рядом с пустыней (в смешанных парах структура идёт первой) |
`/locate mark //locate marks//locate unmark ` | сохранить точку, где ты стоишь / список твоих меток / удалить одну; в каждой строке те же кликабельные координаты и кнопки, что и в результатах поиска, а при смерти автоматически ставится метка death (deathMark в конфиге отключает это на всём сервере) |
/locate track <mark|x y z name> | живое расстояние + стрелка в action bar, самоочищается |
/locate compass <mark|x y z name> | именованный компас, указывающий на точку |
| `/locate verify ` | ловушка дрейфа: сравнение теневого парсинга с ванильным на 20 чанках |
/locate prune | удалить пустые файлы регионов (ванильный путь сканирования всё равно их оставляет, MC-311323) |
/gamerule locatemore:exact_locate | переключатель для ванильных мест вызова, отдельно для каждого мира |
Требуются права оператора, как и для ванильного /locate. Каждая подкоманда также существует под /locatemore, и именно этот алиас мод прав (LuckPerms и т. п.) может выдать узел за узлом: locatemore.track, locatemore.compass, locatemore.mark, locatemore.prune, locatemore.verify, locatemore.near (ванильный корень /locate требует уровень оператора 2, прежде чем вообще рассматривать подкоманды). Теги структур и все измерения работают. Ванильные клиенты на выделенном сервере видят корректный вывод, потому что каждая строка использует ванильные ключи перевода.
Версии
Один jar работает на 26.1.2 и 26.2. Fabric, требует Fabric API. Лицензия MIT. Серверная сторона: установлен на сервере — ванильные клиенты получают всё; в одиночной игре достаточно установки на клиент.
Частые вопросы
Как установить LocateMore?
Установите Fabric под свою версию Minecraft, скачайте LocateMore под ту же версию и загрузчик, положите файл в папку mods и запустите игру с профилем загрузчика.
Для каких версий Minecraft есть LocateMore?
У LocateMore есть сборки для Minecraft 26.1–26.3.
Нужен ли LocateMore на сервере?
Ставится только на сервер; игрокам ставить не нужно