Войти или зарегистрироваться

Помогите Спавн партиклов пока игрок летит

  • Автор темы Автор темы ILEZOV
  • Дата начала Дата начала

ILEZOV

Активный участник
Пользователь
Баллы
66
Здравствуйте, я пишу плагин на двойной прыжок, так вот мне надо пока игрок в воздухе спавнить за ним партиклы
Код
Код:
@EventHandler
    public void onFlightAttempt(PlayerToggleFlightEvent event) {
        Player p = event.getPlayer();
        if(!event.isFlying() && event.getPlayer().getGameMode() != GameMode.CREATIVE && p.hasPermission("coallobby.jump")) {
            event.getPlayer().setVelocity(event.getPlayer().getVelocity().add(new Vector(0,0.25,0)));
            event.setCancelled(true);
            p.sendMessage(ChatColor.translateAlternateColorCodes('&', prefix) + ChatColor.translateAlternateColorCodes('&', jump));
            p.playSound(p.getLocation(), Sound.valueOf(sound), 10,1);
        }
 
В твоём коде частица будет спауниться только в момент вызова
PlayerToggleFlightEvent.

Создаёшь список игроков.
Создаёшь задачу шедулера, которая спаунит партикли за всеми игроками в списке.
При начале двойного прыжка добавляешь игрока в список, при завершении прыжка удаляешь
 
В твоём коде частица будет спауниться только в момент вызова
PlayerToggleFlightEvent.

Создаёшь список игроков.
Создаёшь задачу шедулера, которая спаунит партикли за всеми игроками в списке.
При начале двойного прыжка добавляешь игрока в список, при завершении прыжка удаляешь
а как это сделать :nerd:
 
а что если пока игрок находится в воздухе, спавнить частицы, когда материал блока не будет равен воздуху, то не спавнить?
 
Я хотел сделать через цикл for, чтобы пока игрок не на земле, частицы буду спавниться, но Java говорит что mat==mat1 (Не утверждение)
Код:
Block a = p.getLocation().subtract(0, -1, 0).getBlock();
            Material mat1 = a.getBlockData().getMaterial();
            Material mat = Material.AIR;
            for (mat1 == mat){
                p.playEffect(p.getLocation(), Effect.valueOf(effect), 10);
            }
 
В твоём коде частица будет спауниться только в момент вызова
PlayerToggleFlightEvent.

Создаёшь список игроков.
Создаёшь задачу шедулера, которая спаунит партикли за всеми игроками в списке.
При начале двойного прыжка добавляешь игрока в список, при завершении прыжка удаляешь
Как сделать, чтобы игрок добавлялся в список при начале прыжка?
 
PHP:
    @EventHandler
    public void onFlightAttempt(PlayerToggleFlightEvent event) {
        Player p = event.getPlayer();
        if (!event.isFlying() && event.getPlayer().getGameMode() != GameMode.CREATIVE && p.hasPermission("coallobby.jump")) {
            event.getPlayer().setVelocity(event.getPlayer().getVelocity().add(new Vector(0, 0.25, 0)));
            event.setCancelled(true);
            p.sendMessage(ChatColor.translateAlternateColorCodes('&', prefix) + ChatColor.translateAlternateColorCodes('&', jump));
            p.playSound(p.getLocation(), Sound.valueOf(sound), 10, 1);
            new BukkitRunnable() {
                @Override
                public void run() {
                    if(p.isOnGround()){
                        this.cancel();
                        return;
                    }
                    //Спавниш партиклы
                }
            }.runTaskTimer(plugin, 1, 1);
        }
    }
Вот решение для твоего случая, решение так себе но тебе его будет проще понять. В данном случае после прыжка запускается Runnable который будет обрабатывать код внутри него каждый тик, после каждый тик проверяется стоит ли игрок на земле или нет, и если он стоит тогда прекращаем работу Runnable
 
PHP:
    @EventHandler
    public void onFlightAttempt(PlayerToggleFlightEvent event) {
        Player p = event.getPlayer();
        if (!event.isFlying() && event.getPlayer().getGameMode() != GameMode.CREATIVE && p.hasPermission("coallobby.jump")) {
            event.getPlayer().setVelocity(event.getPlayer().getVelocity().add(new Vector(0, 0.25, 0)));
            event.setCancelled(true);
            p.sendMessage(ChatColor.translateAlternateColorCodes('&', prefix) + ChatColor.translateAlternateColorCodes('&', jump));
            p.playSound(p.getLocation(), Sound.valueOf(sound), 10, 1);
            new BukkitRunnable() {
                @Override
                public void run() {
                    if(p.isOnGround()){
                        this.cancel();
                        return;
                    }
                    //Спавниш партиклы
                }
            }.runTaskTimer(plugin, 1, 1);
        }
    }
Вот решение для твоего случая, решение так себе но тебе его будет проще понять. В данном случае после прыжка запускается Runnable который будет обрабатывать код внутри него каждый тик, после каждый тик проверяется стоит ли игрок на земле или нет, и если он стоит тогда прекращаем работу Runnable
plugin красным светится
 
Какое значение должна хранить?
 
наверное для начала стоило выучить основы явы, хотя-бы основу баккита, а не лезть сразу в создание плагинов?
Майн - идеальное место, чтобы учить джаву и экспериментировать
 
Назад
Верх