LeafRTP | Random Teleport
Быстрая случайная телепортация для всех, настраиваемая и расширяемая
- Загрузчики
- FabricNeoForgePaperPurpur
- Скачиваний на Modrinth
- 12,3 тыс.
- Подписчиков на Modrinth
- 11
- версий
- 8
- Обновлён
- 16 августа 202616 авг.
- Опубликован
- в 2026
Коротко о моде
Ставится только на сервер; игрокам ставить не нужно
Метаданные листинга на маркетплейсе (актуальные, для справки по SEO): Заголовок: "LeafRTP" Слоган: "Детерминированный движок случайной телепортации" -->
LeafRTP - Random Teleport
Назначение
LeafRTP — это команда /rtp. Она телепортирует игрока в случайное безопасное место в мире, максимально эффективно используя процессор.
История
Мы все когда-то были игроками и все жаловались на «лаги» на серверах. Многие из нас пытались выяснить, откуда они берутся, и, честно говоря, в моих исследованиях ушли дни работы только на то, чтобы понять, что причиной проблем с производительностью был плагин случайной телепортации. Самая большая нагрузка в любом профайлере никогда не помечалась в зависимости от того, кто вызвал api — эта часть скрыта, поэтому источник тысяч лишних чанков в памяти определяется неверно. Я прошёл через стадию «виноваты пользователи» и поумнел, осознав, что лучше починить инструмент, чем говорить людям не использовать его.
В 2021 году этот проект начался как демонстрация математических принципов и как задача по оптимизации повышенной сложности. Я хотел сделать что-то, на что сообщество могло бы ссылаться, и создать новый стандарт производительности, сделать себе имя как одержимый разработчик. Вместо этого его восприняли как продукт и запросили кучу функций, поэтому я поработал над элегантностью дизайна, чтобы несколько деталей дизайна давали экспоненциальное число возможных конфигураций. В результате он немного не в мете, но понять его полностью несложно. Измеряй в чанках, определи несколько регионов и обращайся к ним через команду или api, а всё, что между этим, — нюансы дизайна сервера.
«Чанки» были выбраны единицей измерения, потому что нагрузка на сервер основана на чанках, а не на блоках, и проверка соседних блоков «оптимальна», если она не выходит за границу чанка.
Мне не нравится регламентировать, как это использовать и с чем, поэтому в V2 я переработал код, чтобы использовать больше заменяемых поставщиков и потребителей, что позволяет легко программно менять проверки безопасности, проверки биомов, формы и т. д. Оптимизировать было особо нечего, поэтому я изучал практики написания кода. Честно говоря, «чистый код» — это сожаление, так как он увеличил задержку ввода, но структура дала мне довольно хорошую отправную точку для реорганизации.
Для v3 мне нужно было обновиться под современные версии игры и современные веб-платформы. У меня появились кое-какие светлые идеи насчёт оптимизаций локальности кэша, оптимизаций доступа к данным, кроссплатформенной поддержки через концепции SPI (service provider interface) и активного отслеживания, чтобы поймать любую «утечку памяти», о которой я слышал, но так и не смог воспроизвести на своей машине.
После обновления V3 и микрооптимизации процесса выбора я создал тестовый плагин, помогающий тестировать пропускную способность вплоть до 1 вызова rtp за игровой тик (20/с), который продемонстрировал падение производительности в чистой модели повторных попыток — в каждой реализации, что я тестировал, кроме этой. Я также смог убедиться, что распространённая оптимизация «использовать загруженные чанки» склонна размещать игроков в базах друг друга, усугубляя либо гриферство, либо повторные попытки — в зависимости от интеграции с приватами.
Paper, Spigot, Folia, Fabric, NeoForge и Velocity, на Minecraft 1.21.x / 26.x
Чем он отличается
Большинство плагинов /rtp построены вокруг скрипта: «выбери место, проверь его, пробуй, пробуй снова» + «добавь функцию x». Это создаёт недетерминированные затраты на вычисления вокруг «пробуй снова». LeafRTP — это перестройка ради инженерной строгости в основах, с приоритетом стабильности под нагрузкой.
Я подробнее задокументировал детали дизайна здесь, обозначив решения по дизайну/функциям, заменяющие решения и рассмотренные альтернативы.
Пространственное отображение и память
Измерения показывают, что примерно 35-65% мира «небезопасны» для размещения — из-за океанов, лавы, пустоты.
Выборки берутся из пространственно-заполняющей спирали Архимеда — индексированного отображения из 1D в 2D. Математика с графиками распределения: Почему существует LeafRTP.
Пространственное отображение позволяет хранить и вспоминать информацию о предыдущих выборках, включая биом и причину недействительности, используя сегменты вместо сжатия изображений, так как это даёт конкретную оптимизацию — смещённые выборки. Фаза выбора локации — это поиск за константное время с периодической перестройкой таблицы, исключающей недействительные локации, например океаны, лаву, пустоту.
Предфильтр Anvil
Предфильтр Anvil (.mca) читает данные биомов и блоков прямо из файлов регионов на диске, так что можно фильтровать пакеты локаций, если мир сгенерирован, а эти локации не загружены. Это также помогает читать то, что мир действительно содержит, а не то, что предсказывает генератор. Обычные сокращения (getBiome, getHighestBlockAt) отвечают по шумовой карте генерации, которая может расходиться с реальным рельефом, если место было отредактировано или перенесено через версию Minecraft. Архитектура.
Предварительно проверенный кеш
Безопасные точки назначения готовятся с заданной скоростью, и некоторое их количество держится наготове в кеше для каждого определённого региона, так что выдача /rtp — это возврат координаты, которая уже проверена. Цифры — в разделе «Производительность» ниже.
Возможности
- Настройка в игре —
/rtp menuоткрывает кликабельную книгу (Paper / Folia; в остальных случаях — постраничный чат) для просмотра миров, выбора регионов и изменения настроек на лету. Включает функцию поиска. - Движок эффектов — частицы, звуки, фейерверки, зелья, титры на каждой фазе телепортации.
- Тепловые карты в реальном времени —
/rtp scanнаносит безопасность регионов на настоящую карту в руках. - Экономика — плата за каждый
/rtp(Vault), цена по регионам, авто-возврат при отмене. - 12 интеграций с приватами — GriefDefender, GriefPrevention, Lands, WorldGuard, TownyAdvanced, SaberFactions, FactionsBridge, HuskClaims, RedProtect, CrashClaim, KingdomsX, Residence.
- PvP / боевой тег, PlaceholderAPI, кулдауны и лимиты для каждого игрока, переопределения для нескольких миров.
- Кросс-серверный
/rtp— работа на Velocity включает межсерверную связь через tcp-сокет, расширяемую аддонами. - Платформо-независимый движок — основной код работает на чистой Java и кастомных реализациях, что позволяет поддерживать кросс-серверность через лёгкие поставщики.
- Документация в jar — в V3 я начал включать в jar документацию для конкретной версии на случай, если обновлю вики для новых версий.
- Воспроизводимые бенчмарки с сырыми CSV и анализом по каждому запуску:
helpers/StressTestRTP/ - bStats включён — анонимная статистика использования помогает расставлять приоритеты в работе над платформами.
- Подробный API с примерами — входящие в комплект аддоны служат примерами подключения для добавления проверок или изменения поведения
/rtp. - Изменяемый SPI — большинство частей, связанных с совместимостью, можно заменить, например серверный бэкенд, экономику, проверку валидности локаций, формы, границу мира, проверки PvP, создание платформ, команды.
Посмотрите в деле
/rtp scan наносит безопасность регионов на настоящую игровую карту (зелёный — безопасно, красный — небезопасно) прямо во время проверки. /rtp info сообщает живой TPS/MSPT, кучу, процентили задержки и причины отклонений — без дополнительных метрик. Тяжёлая проверка выполняется вне тика на всех платформах. Посмотреть, как сканирование раскрашивает регион в реальном времени (видео). Подробности: Сканирование и пространственная память, Диагностика.
Требования
- Java 21+
- Поддерживаемый сервер — Paper, Spigot или форк семейства Bukkit (Arclight / Mohist для мостов с Forge), либо Fabric / NeoForge (1.21.x / 26.x).
Установка
- Закинь
LeafRTP-x.y.z.jarвplugins/(илиmods/). - Запусти сервер. Регион
defaultсоздастся сам. - Введи /rtp. Работает.
- Подгони размер региона под свой мир и привяжи каждый мир к региону.
radius,centerXиcenterZнаходятся внутри блокаshape:региона и измеряются в чанках, а не в блоках —radiusсо значением625покрывает 10 000 блоков. Смотри Regions и Worlds.
Советую попробовать /rtp admin
Начни отсюда: Быстрый старт и Предполагаемое использование. Полное руководство для админов автоматически распаковывается в plugins/RTP/docs/ при первом запуске и доступно онлайн в руководстве для админов.
Производительность
Каждое число ниже взято из публичного стенда: helpers/StressTestRTP/.
Полный бенчмарк против альтернативных плагинов случайной телепортации на Paper, Spigot и Folia
Строки Paper: 2 клиента с OP, спамящие /rtp подряд, очереди включены там, где плагин их предлагает, кулдауны/задержки обнулены. Прогон на Folia: 3 клиента с OP, радиус выровнен до 4096 блоков, ~600 с на плагин.
Каждая строка бенчмарка ниже измерена локально на одной и той же машине. В матрице поддержки ячейки, взятые из документации плагинов или выведенные из архитектуры, отмечены по ходу.
Метрики: Пропускная способность (TP/s, больше — лучше) | MSPT p99 (худший тик главного потока из 100 в мс, меньше — лучше) | Мин. TPS (наименьший наблюдаемый TPS; 20.00 = без просадок) | CPU / TP (CPU главного потока на успешную телепортацию).
Paper 1.20.1 / 1.21.11 — эталонный набор данных. Восемь плагинов, один и тот же стенд, один и тот же мир, одни и те же два клиента с OP.
| Плагин | TP/s | MSPT p99 (мс) | Мин. TPS | CPU / TP (мс) | Успех |
|---|---|---|---|---|---|
| LeafRTP | 19.8 | 4 | 20.00 | 16.9 | 100 % |
| JakesRTP | 20.0 | 70 | 20.00 | 26.0 | 100 % |
| BetterRTP | 7.3 | 852 | 20.00 | 53.6 | 100 % |
| HuskHomes | 6.2 | 372 | 20.00 | 52.2 | 100 % |
| AdvancedRTP | 2.16 | 2 100 | 19.95 | 92.1 | 96.3 % |
| EzRTP | 1.76 | 2 903 | 19.95 | 139.6 | 100 % |
| AsyRTP | 1.67 | 4 534 | 19.95 | 38.8 | 100 % |
EssentialsX /tpr | 0.96 | 4 504 | 19.95 | 88.9 | 75.9 % * |
- EssentialsX
/tpr— это команда телепорт-запроса (рукопожатие + принятие), а не телепорт-исполнения; 5-секундный дедлайн на попытку в стенде отсекает часть задержек принятия запроса. Числа отражают характер отправки, а не поломку плагина.
Spigot 1.20.1
| Плагин | TP/s | MSPT p99 (мс) | Мин. TPS |
|---|---|---|---|
| LeafRTP | 1.52 | 3 | 6.4 |
| JakesRTP | 1.04 | 2 252 | 7.5* |
| BetterRTP | 1.33 | 3 790 | 2.18 |
| HuskHomes | 0.93 | 4 939 | 2.59 |
- JakesRTP запускался последним в порядке фаз и унаследовал давление на чанки, оставшееся от предыдущих фаз, так что его минимальный TPS нельзя однозначно приписать только JakesRTP.
Folia 26.1
(только EzRTP тоже завершил прогон на Folia; у остальных протестированных плагинов там были проблемы с совместимостью или производительностью)
| Плагин | TP/s | CPU / TP (мс) | Зависания watchdog | Успех |
|---|---|---|---|---|
| LeafRTP | 12.5 | 4.15 | 0 | 100 % |
| EzRTP | 5.3 | 6.34 | 7 (один регион 20.4 с) | 96.2 % |
7 зависаний watchdog у EzRTP (один регион не отвечал 20.4 с) — это собственная запись сервера о синхронных вызовах World.loadChunk в потоках регионов; LeafRTP не сделал ни одного. Для справки: адаптер Pro для Folia прошёл тот же прогон на 13.5 TP/s. Результат бесплатной сборки на Folia обеспечивает общий движок rtp-core, а не адаптер только для Pro.
Оговорки. Малое число клиентов (2 на Paper, 3 на Folia); провал EzRTP в прогоне на Folia подтверждается собственным логом watchdog сервера, независимо от тестового стенда. Плагины-конкуренты часто обновляются; исправления приветствуются через issue на GitHub с опровергающим воспроизведением или ссылкой на документацию.
Полная методология, сырые CSV, анализ по каждому прогону: helpers/StressTestRTP/. Видеобенчмарк /rtp на кастомном генераторе мира: youtu.be/V0NyNK9JydM.
Команды, плейсхолдеры, мягкие зависимости
Команды (полный справочник: руководство администратора)
- /rtp — телепортирует в регион по умолчанию для вашего текущего мира или открывает gui (в зависимости от аддонов).
- /rtp [параметр]=[значение] — указать
region=,world=,player=или временные переопределения. - /rtp reload — перезагрузить всю конфигурацию с диска.
- /rtp scan start|pause|resume|reset|cancel — построить пространственную память, обходя регион (переименовано из
/rtp fillв 2.x). Демо: youtu.be/Ftjy1zw_S04. - /rtp menu — интерактивное меню-книга.
PlaceholderAPI
- %rtp_player_status% — idle, waiting, teleporting, ...
- %rtp_total_queue_length%, %rtp_public_queue_length%, %rtp_personal_queue_length%
- %rtp_teleport_world%, %rtp_teleport_x%, %rtp_teleport_y%, %rtp_teleport_z%
Мягкие зависимости (все опциональны): Vault (для опциональной платы за экономику), PlaceholderAPI, ProtocolLib. PaperLib больше не требуется.
FAQ
В: Как сделать, чтобы /rtp не лагал сервер, и почему LeafRTP быстрее других плагинов случайной телепортации? О: Большинство вызовов /rtp обслуживаются из заранее подготовленной очереди — чанки уже загружены и проверены на безопасность до того, как вы введёте команду. Два проектных решения делают поддержание этой очереди дешёвым: постоянная пространственная память для каждого региона (плагин запоминает, какие сектора мира не прошли проверки на безопасность, поэтому спиральный селектор пропускает известные плохие участки вместо бесконечного перебора) и асинхронный предфильтр вне тика (файлы регионов Anvil читаются напрямую, чтобы отсеять небезопасные биомы/блоки до загрузки любого чанка, так что проверка кандидатов никогда не блокирует главный поток). Заранее подготовленная очередь — лишь видимая верхушка: пространственная память держит выбор кандидатов в разумных рамках, а асинхронный предфильтр уводит проверку из тикового цикла.
В: Сложно ли настроить LeafRTP, и есть ли в нём экономика, GUI и эффекты частиц? О: Нет, и да. Закиньте jar, и /rtp сразу работает, на регионе default, созданном для вас. Подгоните этот регион под свой мир — форму, радиус, центр — и /rtp menu сделает это прямо в игре без правки YAML. В него входят кликабельное меню GUI, экономика Vault (плата за телепортацию с ценой для каждого региона), движок эффектов частиц / звуков / фейерверков, живые теплокарты и двенадцать интеграций с плагинами приватов.
В: Почему теперь он называется "LeafRTP", а не просто "RTP"? О: "RTP" — это общий термин для случайной телепортации, поэтому старое название было почти невозможно найти — оно пересекалось со всеми другими плагинами случайной телепортации, командами и темами на форумах в поиске и индексах магазинов. "LeafRTP" — это отдельное, индексируемое имя, которое однозначно указывает на этот плагин, при этом команда /rtp, rtp-api, пути к конфигам и файлы данных остаются точно такими же. Для существующих установок ничего не меняется — только публичное название.
В: Работает ли он с Iris / Terra / кастомными генераторами датапаков? О: Да. Файлы регионов читаются напрямую, поэтому модифицированные и пространственно-именованные ID биомов и блоков сохраняются. Настройка не требуется. Поскольку данные о биомах берутся из заполненных файлов .mca, а не из живого генератора/поиска по карте шума, `/rtp biome=` остаётся корректным даже в мирах, которые были предварительно сгенерированы в другом месте или перенесены между версиями Minecraft, где привязка биомов к сиду сместилась.
В: Поддерживаете ли вы треугольные / ромбовидные формы регионов? О: Используйте форму Polygon — треугольник это полигон с 3 вершинами, а ромб — это повёрнутый квадрат, так что обе формы уже выражаются без отдельного типа формы.
В: Нужен ли мне Chunky или другой предгенератор? О: Нет, но они хорошо работают вместе. /rtp scan обходит регион вне тиков, проверяет безопасность и генерирует любые чанки, до которых доходит, если их ещё нет на диске (через собственный генератор мира сервера), записывая при этом, какие секторы небезопасны, в постоянную пространственную память. Отдельный предгенератор остаётся опциональным: запустите Chunky сначала, если хотите, чтобы вся карта была на диске заранее, и тогда scan будет дёшево читать эти чанки через предфильтр Anvil вместо того, чтобы генерировать их на ходу.
В: Я на NeoForge. О: NeoForge — это полноценно поддерживаемая платформа на Minecraft 1.21.x / 26.x — просто закиньте мод.
В: Я на Forge. О: Запустите Arclight или Mohist (официально поддерживаются) и используйте этот jar. Нативный адаптер для Forge не планируется.
В: Память и MSPT — стоит ли беспокоиться? О: LeafRTP обменивает ограниченный объём RAM (очередь, ограниченная cacheCap) на скорость. TPS не должен падать ниже ~19 только из-за LeafRTP на здоровом сервере; всплески MSPT во время генерации новых областей ожидаемы — это цена генерации чанков, а не RTP.
В: Как сообщить об ошибке? О: Issue на GitHub с версией сервера, версией LeafRTP, платформой, соответствующими файлами конфигов и разделом лога с ошибкой. Смотрите руководство администратора для полного шаблона воспроизведения.
Политика поддержки сообщества (прочитайте перед созданием issue)
Поддержка бесплатной сборки — на уровне сообщества и по мере возможностей. Один мейнтейнер выпускает исправления, когда правильно оформленные issue поступают.
- Поддержка охватывает баги и вопросы по конфигурации, после того как вы прочитали руководство администратора.
- Отчёты об ошибках требуют воспроизведения: версия сервера, версия LeafRTP, платформа (Spigot / Paper / форк),
config.yml,regions/,safety.ymlи соответствующий разделserver.log. У отчётов без этого один раз запрашивают недостающее, затем закрывают. - "Оно не работает" — это не отчёт об ошибке. Расскажите, что вы сделали, что ожидали и что произошло на самом деле.
- Время ответа: никаких SLA для бесплатной сборки. Критические проблемы безопасности проходят вне очереди.
- Запросы функций через issue на GitHub. Приоритет следует опубликованному роадмапу, а не количеству тикетов.
Ссылки
- Руководство по администрированию и настройке LeafRTP — установка, настройка, справочник команд
- Руководство разработчика аддонов / API LeafRTP —
rtp-apiи примеры - Список изменений и роадмап LeafRTP
- Исходный код LeafRTP на GitHub — поставьте звезду, следите, вносите вклад, создавайте issue
Частые вопросы
Как установить LeafRTP | Random Teleport?
Установите Fabric под свою версию Minecraft, скачайте LeafRTP | Random Teleport под ту же версию и загрузчик, положите файл в папку mods и запустите игру с профилем загрузчика.
Для каких версий Minecraft есть LeafRTP | Random Teleport?
У LeafRTP | Random Teleport есть сборки для Minecraft 1.20.1–26.2.
Нужен ли LeafRTP | Random Teleport на сервере?
Ставится только на сервер; игрокам ставить не нужно