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

Помогите Задержка перед телепортацией.

Тема в разделе "Разработка плагинов для новичков", создана пользователем Beginner1567, 3 авг 2018.

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

    Beginner1567 Новичок Пользователь

    Баллы:
    11
    Имя в Minecraft:
    Begginer1567
    Как сделать задержку перед телепортаций? Возможно ли как то использовать телепортацию из EssentialsX
     
  2. Zнамя Юности

    Zнамя Юности Активный участник Пользователь

    Баллы:
    76
    new BukkitRunnable() {
    public void run() {
    bla bla
    }.runTaskLater(plugin, 100L);
    }
     
  3. Nikolai_Faint

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

    Баллы:
    96
    PHP:
    Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, () -> { } , 20);
    //1 * 20 - Задержка будет 1 секунду
    //Plugin - создаешь конструктор (если юзаешь в мейне, тогда this)
    //{} - действие
     
    Последнее редактирование: 4 авг 2018
  4. Автор темы
    Beginner1567

    Beginner1567 Новичок Пользователь

    Баллы:
    11
    Имя в Minecraft:
    Begginer1567
    new BukkitRunnable() {
    public void run() {
    p.teleport(myloc1);
    }.runTaskLater(plugin, 100L);
    }
    ошибка
     
  5. l_Slime_l

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

    Баллы:
    76
    Ошибку скинь, у тебя наверное myloc1 или plugin null.
     
  6. Автор темы
    Beginner1567

    Beginner1567 Новичок Пользователь

    Баллы:
    11
    Имя в Minecraft:
    Begginer1567
    Упс, я тупой, ошибки нет, проблема теперь в том что я не могу понять сколько в секундах задерка. 100L = 3 секунды?
     
  7. l_Slime_l

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

    Баллы:
    76
    Задержка задаётся в тиках. 20 тиков = 1 сек. Соответственно 100 тиков = 5 сек.
     
  8. Автор темы
    Beginner1567

    Beginner1567 Новичок Пользователь

    Баллы:
    11
    Имя в Minecraft:
    Begginer1567
    А можно ли как то отменить это действие если человека ударят?
     
  9. FrostDelta123

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

    Баллы:
    76
    Имя в Minecraft:
    FrostDelta123
    Проверяй ивент дамага и останавливай шедулер.
     
  10. Автор темы
    Beginner1567

    Beginner1567 Новичок Пользователь

    Баллы:
    11
    Имя в Minecraft:
    Begginer1567
    Хочу сделать если человек двинулся - отменить тп.
    Создал ArrayList<Player> tp = New ArrayList<>();
    Код:
                            if (tp.contains(p)) {
                                p.sendMessage(ChatColor.DARK_RED + "Вы уже телепортируетесь!");
                                return true;
                            }
                            p.sendMessage(ChatColor.GREEN + "Телепортация начнётся через 3 секунды!");
                            tp.add(p);
                            new BukkitRunnable() {
                                public void run() {
                                if (tp.contains(p)) {
                                tp.remove(p);
                                p.teleport(tpLoc);
                                }
                                }
                                }.runTaskLater(Main.instance, 60L);
    Добавил проверки, и теперь нельзя два раза телепортироваться.
    Ну а теперь хотел сделать так что бы когда его ударили - тп сбивалось.
    Создал для этого эвент.
    Код:
        @EventHandler
        public void damage(EntityDamageEvent e) {
            if (e.getEntity() instanceof Player) {
                Player p = (Player) e.getEntity();
                if (tp.contains(p)) {
                    tp.remove(p);
                   p.sendMessage("§c§lВас ударили, тп отменено!");
                }
            }
        }
    Меня ударили - результата 0 я всё ещё тпхаюсь.
     
  11. Автор темы
    Beginner1567

    Beginner1567 Новичок Пользователь

    Баллы:
    11
    Имя в Minecraft:
    Begginer1567
    Каким образом его отменить? Я просто вообще не когда до этого с ними не работал.
     
  12. Exception_Prototype

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

    Баллы:
    96
    [WARNING] Не идеальный пример!
    PHP:
    /*могут быть проблемы с удалением из мапы из другого потока, но здесь ты сам.
    Можешь тыкнуть вместо HashMap -> ConcurrentHashMap,
    но это будет такое себе решение. Смотри код Эссеншелса, там вроде норм сделано.*/
    private static final Map<StringBukkitTaskmap = new HashMap<>();

    /**
    * Телепортируем игрока p на локацию to с задержкой delay
    *
    * @param p     игрок
    * @param to    локация, куда телепотируем
    * @param delay задержка на телепортацию
    */
    public void tp(Player pLocation tolong delay) {
        
    //к примеру ты вызываешь метод
         
    p.sendMessage(ChatColor.GREEN "Телепортация начнётся через " + (delay 20) + " секунд!");
        
    map.put(p.getName(), Bukkit.getScheduler().runTaskLater(this, () -> { //this - plugin
            
    p.teleport(to);
            
    p.sendMessage(ChatColor.DARK_RED "Вы уже телепортируетесь!");
            
    map.remove(p.getName());
        }, 
    delay));
    }

    @
    EventHandler(ignoreCancelled true)
    public 
    void damage(EntityDamageByEntityEvent event) {
        if (
    event.getEntity() instanceof Player) {
            final 
    Player player = (Playerevent.getEntity();
            final 
    BukkitTask task map.remove(player.getName());
            if (
    task != null && task.getTaskId() != -1) {
                
    player.sendMessage("Ваша телепортиация отменена, вы получили урон.");
                
    task.cancel();
            }
        }
    }
     
    Последнее редактирование: 4 авг 2018
  13. Exception_Prototype

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

    Баллы:
    96
    Ты таймер удаляешь из листа, но сам таймер не отменяешь, соответственно телепортация по факту не отменена.
     
  14. alexandrage

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

    Баллы:
    173
    IEssentials ess = (IEssentials) Bukkit.getServer().getPluginManager().getPlugin("Essentials");
    Trade charge = new Trade("home", ess);
    User user = ess.getUser(player);
    user.getTeleport().teleport(location, charge, TeleportCause.COMMAND);
     
  15. Автор темы
    Beginner1567

    Beginner1567 Новичок Пользователь

    Баллы:
    11
    Имя в Minecraft:
    Begginer1567
    При таком использовании задержка из конфига эссентиалс будет работать?
     
  16. alexandrage

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

    Баллы:
    173
    Агась. Я так юзаю на кастомный телепорт.
     
Статус темы:
Закрыта.

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