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

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

Тема в разделе "Разработка плагинов для новичков", создана пользователем nellsan, 27 июн 2022.

Метки:
Статус темы:
Закрыта.
  1. Автор темы
    nellsan

    nellsan Ньюби Пользователь

    Баллы:
    1
    Имя в Minecraft:
    Ne1san
    Нужно, чтобы после смерти, тп в другой мир с кулдауном, а потом на спавн первого мир. Помогите кодом, учусь
     
  2. ItsWay

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

    Баллы:
    76
    Имя в Minecraft:
    ItsWay
    объясни конкретнее, может смогу помочь.
     
  3. MySoR

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

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

    nellsan Ньюби Пользователь

    Баллы:
    1
    Имя в Minecraft:
    Ne1san
    то есть сначала ивент смерти ставишь, потом в нем респавн ивент или сначала респавн ивент, потом причина респавна и тд. А в main файле просто после запуска сервера просто регистрируешь один раз Ивент и все, больше ничего не надо в main, дальше просто в файле Ивентов пишешь?
     
  5. ItsWay

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

    Баллы:
    76
    Имя в Minecraft:
    ItsWay
    Начало выполняем ивент на респавн:
    Код:
    
        @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 то что крутит голову вверх/вниз тоесть по оси голова позиция.
    Сам за таймеры не шарю, но взял с форума инфу, я всё сделал, удачи чел.
     
  6. Автор темы
    nellsan

    nellsan Ньюби Пользователь

    Баллы:
    1
    Имя в Minecraft:
    Ne1san
    здесь выделяет Plugin, я пытался заменить на this Plugin и вроде не выделяет, но сам плагин не работает, при смерти просто телепортирует в этот же мир(название мира проверял)
     
  7. ItsWay

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

    Баллы:
    76
    Имя в Minecraft:
    ItsWay
    Эмм, сек подожди.
     
  8. ItsWay

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

    Баллы:
    76
    Имя в Minecraft:
    ItsWay
    Блин, я хз, на форумах по идеи должно работать, попробуй так:
    timer.runTaskTimer(this.plugin, 0, 20)
    0 - с чего начнёт идти вроде
    20 - секунд будет идти.
     
  9. FeniksDEV

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

    Баллы:
    76
    Имя в Minecraft:
    Feniksovich
  10. Автор темы
    nellsan

    nellsan Ньюби Пользователь

    Баллы:
    1
    Имя в Minecraft:
    Ne1san
  11. FeniksDEV

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

    Баллы:
    76
    Имя в Minecraft:
    Feniksovich
    Да собственно из темы тоже точно не понятно, чего ты хочешь.
    После возрождения игрок должен телепортироваться в, условно, world2, после по истечении некоторого времени в world1, так что ли?
     
  12. Автор темы
    nellsan

    nellsan Ньюби Пользователь

    Баллы:
    1
    Имя в Minecraft:
    Ne1san
    да, все в точности так
     
  13. FeniksDEV

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

    Баллы:
    76
    Имя в Minecraft:
    Feniksovich
    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 секунда, посчитаешь и заменишь на нужное число.
     
  14. Автор темы
    nellsan

    nellsan Ньюби Пользователь

    Баллы:
    1
    Имя в Minecraft:
    Ne1san
    подчеркивает Plugin так же было и в предыдущем коде
     
  15. mirrerror

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

    Баллы:
    76
    Имя в Minecraft:
    mirrerror
    Потому что тебе нужно туда подставить поле, наследующее JavaPlugin (главный класс твой)
     
  16. Автор темы
    nellsan

    nellsan Ньюби Пользователь

    Баллы:
    1
    Имя в Minecraft:
    Ne1san
    пример можно, так на словах не понятно
     
  17. mirrerror

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

    Баллы:
    76
    Имя в Minecraft:
    mirrerror
    Код:
    public class PluginMain extends JavaPlugin {
        private static PluginMain instance;
        @Override
        public void onEnable() {
            instance = this;
        }
        public static PluginMain getInstance() {
            return instance;
        }
    }
    Это в главный класс и вместо Plugin напиши Название_главного_класса.getInstance()
    PluginMain на свое заменяй
     
  18. FeniksDEV

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

    Баллы:
    76
    Имя в Minecraft:
    Feniksovich
    Как же DI, брат :(
     
  19. mirrerror

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

    Баллы:
    76
    Имя в Minecraft:
    mirrerror
    Я пишу это на коленках, без IDE, для новичка, который хочет написать свой небольшой плагин, зачем мне это сейчас? Да и мой способ получения именно инстенса главного класса, как по мне, нормальный. Тут вполне уместно использовать синглтон.
     
  20. Автор темы
    nellsan

    nellsan Ньюби Пользователь

    Баллы:
    1
    Имя в Minecraft:
    Ne1san
    после смерти меня тп на тот же спавн первого мира, а потом через несколько секунд тп в второй мир) немного не так
     
Статус темы:
Закрыта.

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