Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

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

Статус
Закрыто для дальнейших ответов.

0bsid1

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

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

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

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


Так будет, или ты уже убедился, что она действительно есть? Если есть, то в чём она заключается?
Я использую multiworld, он телепортирует онлайн игроков в нужный мир, если мир выгрузили.

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

Попытался отловить этот телепорт с помощью PlayerSpawnLocationEvent, но в нем уже пишет мир=world, то есть уже сменился мир.
PlayerTeleportEvent при входе не срабатывает.
 
Я использую multiworld, он телепортирует онлайн игроков в нужный мир, если мир выгрузили.

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

Попытался отловить этот телепорт с помощью PlayerSpawnLocationEvent, но в нем уже пишет мир=world, то есть уже сменился мир.
PlayerTeleportEvent при входе не срабатывает.
Можешь глянуть PlayerChangedWorldEvent, PlayerRespawnEvent и PlayerPortalEvent/EntityPortalEvent, но сомневаюсь, что из этого что-то выйдет. Точную причину получить проблематично. Из-за этого легко будет спутать с возрождением после смерти или с проходом через порталы.

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

Если в MultiWorld реализовано то, что тебе нужно, то можно как раз изучить его код.
Правда я не помню, чтобы там была фича с перекидыванием игроков в другой конкретный мир, если исходный мир отгружен. Это в конфиге MW настраивается или как?
 
Последнее редактирование:
Если в MultiWorld реализовано то, что тебе нужно, то можно как раз изучить его код.
Правда я не помню, чтобы там была фича с перекидыванием игроков в другой конкретный мир, если исходный мир отгружен. Это в конфиге MW настраивается или как?
upload_2023-10-30_9-58-40.png
 
Возможно мне стоит не закрывать энд мир, а просто делать проверку времени в ивентах
PlayerSpawnLocationEvent и PlayerChangedWorldEvent, если время доступности мира не совпадает - при PlayerSpawnLocationEvent телепортировать на нужный спавн, а при PlayerChangedWorldEvent просто отменять событие?
 
PlayerChangedWorldEvent не возвращает мир, куда перемещается игрок :(

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

Возможно мне стоит не закрывать энд мир, а просто делать проверку времени в ивентах
PlayerSpawnLocationEvent и PlayerChangedWorldEvent, если время доступности мира не совпадает - при PlayerSpawnLocationEvent телепортировать на нужный спавн, а при PlayerChangedWorldEvent просто отменять событие?
Ну, если у тебя нет задачи, допустим, вайпать мир, то почему бы и нет?

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

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

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

Назад
Верх