напишите код для телепорта(с кд), пожалуйста

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

nellsan

Ньюби
Пользователь
Баллы
1
Имя в Minecraft
Ne1san
Нужно, чтобы после смерти, тп в другой мир с кулдауном, а потом на спавн первого мир. Помогите кодом, учусь
 
телепорт игрока - Player#teleport(Location)
Получить мир = Bukkit#getWorld(Name)
Ивент смерти - PlayerDeathEvent
Ивент воскрешения(он то тебе и нужен) - PlayerRespawnEvent
Таймер - BukkitRunnable
С начало слушаешь PlayerRespawnEvent -> в нем прописываешь таймер на любое время -> в таймере телепортируешь игрока.
Полностью код за тебя писать никто не хочет
 
телепорт игрока - Player#teleport(Location)
Получить мир = Bukkit#getWorld(Name)
Ивент смерти - PlayerDeathEvent
Ивент воскрешения(он то тебе и нужен) - PlayerRespawnEvent
Таймер - BukkitRunnable
С начало слушаешь PlayerRespawnEvent -> в нем прописываешь таймер на любое время -> в таймере телепортируешь игрока.
Полностью код за тебя писать никто не хочет

то есть сначала ивент смерти ставишь, потом в нем респавн ивент или сначала респавн ивент, потом причина респавна и тд. А в main файле просто после запуска сервера просто регистрируешь один раз Ивент и все, больше ничего не надо в main, дальше просто в файле Ивентов пишешь?
 
Начало выполняем ивент на респавн:
Код:
    @EventHandler
   public void onPlrSpawn(PlayerRespawnEvent event) {
     
   BukkitRunnable timer = new BukkitRunnable() {
              @Override
              public void run() {
                // выполняем функцию телепорта
                Location loctp = new Location(Bukkit.getWorld("world"), -0, 50, -0, 0, 0); // Создаём переменную тип локация(где гетмир ставим ворлд, в твоём случае название твоего мира).
                Bukkit.getPlayer(event.getPlayer().getName()).teleport(loctp); // Тут получаем игрока через баккит по имени игрока, и телепортируем его на локацию.
                 
                  }

          };
         
          timer.runTaskTimer(plugin, 2, 20);
          timer.cancel(); // останавлием таймер, что б оптимизировался плагин, тобишь если не удалять то будет занимать физ.память сервера(тоесть потому что таймер существует).
          timer = null; // удаляем таймер.
         
   }
Так, вот, получилось как то так. И да, где мы сделали переменную типа локации как там позиция указывается -
X - (-0) первая кордионата
Y - (50) вторая кордионата
Z - (-0) третья кордионата.
Y - (0) Yaw то что крутит игрок по оси своей места
P - (0) Pitch то что крутит голову вверх/вниз тоесть по оси голова позиция.
Сам за таймеры не шарю, но взял с форума инфу, я всё сделал, удачи чел.
 
timer.runTaskTimer(plugin, 2, 20);
здесь выделяет Plugin, я пытался заменить на this Plugin и вроде не выделяет, но сам плагин не работает, при смерти просто телепортирует в этот же мир(название мира проверял)
 
здесь выделяет Plugin, я пытался заменить на this Plugin и вроде не выделяет, но сам плагин не работает, при смерти просто телепортирует в этот же мир(название мира проверял)
Эмм, сек подожди.
 
Блин, я хз, на форумах по идеи должно работать, попробуй так:
timer.runTaskTimer(this.plugin, 0, 20)
0 - с чего начнёт идти вроде
20 - секунд будет идти.
 
Ну я ничего не понял, что нужно исправить)
Да собственно из темы тоже точно не понятно, чего ты хочешь.
После возрождения игрок должен телепортироваться в, условно, world2, после по истечении некоторого времени в world1, так что ли?
 
Да собственно из темы тоже точно не понятно, чего ты хочешь.
После возрождения игрок должен телепортироваться в, условно, world2, после по истечении некоторого времени в world1, так что ли?
да, все в точности так
 
да, все в точности так

https://pastes.dev/1N4NRRr1Ln

Код:
    @EventHandler(priority=EventPriority.HIGH)
    public void onRespawn(PlayerRespawnEvent e) {
        Location loc = new Location(Bukkit.getWorld("world1"), 0, 0, 0, 0, 0);
        e.getPlayer().teleport(loc);

        BukkitRunnable br = new BukkitRunnable() {
            @Override
            public void run() {
                Player p = Bukkit.getPlayerExact(e.getPlayer().getName());
                if (p != null) {
                    Location loc = new Location(Bukkit.getWorld("world2"), 0, 0, 0, 0, 0);
                    p.teleport(loc);
                }
            }
        };
        br.runTaskLater(plugin, 20);
    }

20 тиков = 1 секунда, посчитаешь и заменишь на нужное число.
 
пример можно, так на словах не понятно
Код:
public class PluginMain extends JavaPlugin {
    private static PluginMain instance;
    @Override
    public void onEnable() {
        instance = this;
    }
    public static PluginMain getInstance() {
        return instance;
    }
}
Это в главный класс и вместо Plugin напиши Название_главного_класса.getInstance()
PluginMain на свое заменяй
 
Код:
public class PluginMain extends JavaPlugin {
    private static PluginMain instance;
    @Override
    public void onEnable() {
        instance = this;
    }
    public static PluginMain getInstance() {
        return instance;
    }
}
Это в главный класс и вместо Plugin напиши Название_главного_класса.getInstance()
PluginMain на свое заменяй

Как же DI, брат :(
 
Я пишу это на коленках, без IDE, для новичка, который хочет написать свой небольшой плагин, зачем мне это сейчас? Да и мой способ получения именно инстенса главного класса, как по мне, нормальный. Тут вполне уместно использовать синглтон.
 
https://pastes.dev/1N4NRRr1Ln

Код:
    @EventHandler(priority=EventPriority.HIGH)
    public void onRespawn(PlayerRespawnEvent e) {
        Location loc = new Location(Bukkit.getWorld("world1"), 0, 0, 0, 0, 0);
        e.getPlayer().teleport(loc);

        BukkitRunnable br = new BukkitRunnable() {
            @Override
            public void run() {
                Player p = Bukkit.getPlayerExact(e.getPlayer().getName());
                if (p != null) {
                    Location loc = new Location(Bukkit.getWorld("world2"), 0, 0, 0, 0, 0);
                    p.teleport(loc);
                }
            }
        };
        br.runTaskLater(plugin, 20);
    }

20 тиков = 1 секунда, посчитаешь и заменишь на нужное число.

после смерти меня тп на тот же спавн первого мира, а потом через несколько секунд тп в второй мир) немного не так
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх