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

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

Beginner1567

Новичок
Пользователь
Баллы
11
Имя в Minecraft
Begginer1567
Как сделать задержку перед телепортаций? Возможно ли как то использовать телепортацию из EssentialsX
 
PHP:
Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, () -> { } , 1 * 20);
//1 * 20 - Задержка будет 1 секунду
//Plugin - создаешь конструктор (если юзаешь в мейне, тогда this)
//{} - действие
 
Последнее редактирование:
Упс, я тупой, ошибки нет, проблема теперь в том что я не могу понять сколько в секундах задерка. 100L = 3 секунды?
 
Упс, я тупой, ошибки нет, проблема теперь в том что я не могу понять сколько в секундах задерка. 100L = 3 секунды?
Задержка задаётся в тиках. 20 тиков = 1 сек. Соответственно 100 тиков = 5 сек.
 
Хочу сделать если человек двинулся - отменить тп.
Создал 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 я всё ещё тпхаюсь.
 
[WARNING] Не идеальный пример!
PHP:
/*могут быть проблемы с удалением из мапы из другого потока, но здесь ты сам.
Можешь тыкнуть вместо HashMap -> ConcurrentHashMap,
но это будет такое себе решение. Смотри код Эссеншелса, там вроде норм сделано.*/
private static final Map<String, BukkitTask> map = new HashMap<>();

/**
* Телепортируем игрока p на локацию to с задержкой delay
*
* @param p     игрок
* @param to    локация, куда телепотируем
* @param delay задержка на телепортацию
*/
public void tp(Player p, Location to, long 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 = (Player) event.getEntity();
        final BukkitTask task = map.remove(player.getName());
        if (task != null && task.getTaskId() != -1) {
            player.sendMessage("Ваша телепортиация отменена, вы получили урон.");
            task.cancel();
        }
    }
}
 
Последнее редактирование:
Возможно ли как то использовать телепортацию из EssentialsX
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);
 
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);
При таком использовании задержка из конфига эссентиалс будет работать?
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх