1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  2. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

Помогите Телепорт при выгрузке мира

Тема в разделе "Разработка плагинов для новичков", создана пользователем 0bsid1, 29 окт 2023.

Статус темы:
Закрыта.
  1. Автор темы
    0bsid1

    0bsid1 Старожил Пользователь

    Баллы:
    123
    Имя в Minecraft:
    Artarious
    Хочу сделать мир энда доступным только в определённое время.
    И вот проблема, при world unload всех игроков с мира телепортирует на spawnpoint в обычный мир world.

    Есть ли возможность отловить эти события телепорта и телепортировать их на другую точку?

    Если делать отдельный телепорт всех игроков в нужном мире, перед тем как выключить мир, то будет проблема с игроками, которые вышли из игры с выключенном мире.
     
  2. Dymeth

    Dymeth Активный участник Пользователь

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    Ты никак не отгрузишь мир, если в нём есть хотя бы один игрок. Тебе в любом случае придётся телепортировать игроков самостоятельно, поэтому никакой эвент тебе не нужен.
    upload_2023-10-30_1-43-27.png

    Так будет, или ты уже убедился, что она действительно есть? Если есть, то в чём она заключается?
     
  3. Автор темы
    0bsid1

    0bsid1 Старожил Пользователь

    Баллы:
    123
    Имя в Minecraft:
    Artarious
    Я использую multiworld, он телепортирует онлайн игроков в нужный мир, если мир выгрузили.

    Но проблема все же остаётся,
    Если игрок вышел в энд мире, его выгрузили и потом он зашёл - он автоматически появляется именно в обычном world мире, на worldспавн поинте.

    Попытался отловить этот телепорт с помощью PlayerSpawnLocationEvent, но в нем уже пишет мир=world, то есть уже сменился мир.
    PlayerTeleportEvent при входе не срабатывает.
     
  4. Dymeth

    Dymeth Активный участник Пользователь

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    Можешь глянуть PlayerChangedWorldEvent, PlayerRespawnEvent и PlayerPortalEvent/EntityPortalEvent, но сомневаюсь, что из этого что-то выйдет. Точную причину получить проблематично. Из-за этого легко будет спутать с возрождением после смерти или с проходом через порталы.

    Ещё можешь поиграться с методом player.getEntitySpawnReason()

    Если в MultiWorld реализовано то, что тебе нужно, то можно как раз изучить его код.
    Правда я не помню, чтобы там была фича с перекидыванием игроков в другой конкретный мир, если исходный мир отгружен. Это в конфиге MW настраивается или как?
     
    Последнее редактирование: 30 окт 2023
  5. Автор темы
    0bsid1

    0bsid1 Старожил Пользователь

    Баллы:
    123
    Имя в Minecraft:
    Artarious
    upload_2023-10-30_9-48-57.png
    Ничего не выдает.


    Так же PlayerJoinEvent, PlayerSpawnLocationEvent
    upload_2023-10-30_9-56-59.png
     
  6. Автор темы
    0bsid1

    0bsid1 Старожил Пользователь

    Баллы:
    123
    Имя в Minecraft:
    Artarious
    upload_2023-10-30_9-58-40.png
     
  7. Автор темы
    0bsid1

    0bsid1 Старожил Пользователь

    Баллы:
    123
    Имя в Minecraft:
    Artarious
    Возможно мне стоит не закрывать энд мир, а просто делать проверку времени в ивентах
    PlayerSpawnLocationEvent и PlayerChangedWorldEvent, если время доступности мира не совпадает - при PlayerSpawnLocationEvent телепортировать на нужный спавн, а при PlayerChangedWorldEvent просто отменять событие?
     
  8. Автор темы
    0bsid1

    0bsid1 Старожил Пользователь

    Баллы:
    123
    Имя в Minecraft:
    Artarious
    PlayerChangedWorldEvent не возвращает мир, куда перемещается игрок :(

    при телепорте через портал работает PlayerTeleportEvent, сделаю через него.
     
    Последнее редактирование: 30 окт 2023
  9. Dymeth

    Dymeth Активный участник Пользователь

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    Ну вот, просто перед отгрузкой телепортирует онлайн-игроков в другой мир. Собственно то, что я и предложил.
    Проблему, озвученную тобой ранее, этот кусок кода точно не решает. Если игрок оффлайн и попытался войти на сервер с выгруженным миром, то его так и так закинет в дефолтный мир.

    Ну, если у тебя нет задачи, допустим, вайпать мир, то почему бы и нет?

    Ну правильно, потому что Changed. Мир уже сменён. Поэтому просто можешь получить исходный мир при помощи event.getPlayer().getWorld(). Но это событие закономерно неотменяемое.

    Если просто хочешь запретить ходить через портал, то нормально, да
     
Статус темы:
Закрыта.

Поделиться этой страницей