Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

Помогите Не взрывается фейерверк 1.12.2

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

GoodPlayer

Активный участник
Пользователь
Баллы
66
Имя в Minecraft
GoodPlayer
Сижу уже часа 4, ничё понять не могу. Пытаюсь запустить фейерверк над игроком. В итоге, он запускается, но взрываться не взрывается, он тупо пропадает в воздухе. Пробовал firework.detonate(), но он также тупо исчезает. Пробовал firework.setTicksLived(100), но тоже ничего не меняет. Пытался менять тип фейерверка, тоже ничего не меняет. Код:
Код:
    private void launchFireworks(Player player) {
      
        Location location = player.getLocation();
        for (int i = 0; i < 10; i++) {
            Firework firework = (Firework) location.getWorld().spawnEntity(location, EntityType.FIREWORK);
            FireworkMeta meta = firework.getFireworkMeta();
            meta.addEffect(FireworkEffect.builder()
                    .withColor(Color.RED, Color.GREEN, Color.BLUE)
                    .with(FireworkEffect.Type.BURST)
                    .withTrail()
                    .build());
            meta.setPower(2);
            firework.setFireworkMeta(meta);
          
        }
    }
}
 
Сижу уже часа 4, ничё понять не могу. Пытаюсь запустить фейерверк над игроком. В итоге, он запускается, но взрываться не взрывается, он тупо пропадает в воздухе. Пробовал firework.detonate(), но он также тупо исчезает. Пробовал firework.setTicksLived(100), но тоже ничего не меняет. Пытался менять тип фейерверка, тоже ничего не меняет. Код:
Код:
    private void launchFireworks(Player player) {
     
        Location location = player.getLocation();
        for (int i = 0; i < 10; i++) {
            Firework firework = (Firework) location.getWorld().spawnEntity(location, EntityType.FIREWORK);
            FireworkMeta meta = firework.getFireworkMeta();
            meta.addEffect(FireworkEffect.builder()
                    .withColor(Color.RED, Color.GREEN, Color.BLUE)
                    .with(FireworkEffect.Type.BURST)
                    .withTrail()
                    .build());
            meta.setPower(2);
            firework.setFireworkMeta(meta);
         
        }
    }
}
Меня чёто напрягает логика твоего кода. Ты сначало спавнишь, а потом мету меняешь. И не уверен на 100% что ты сущность до предмета не кастишь.
 
Меня чёто напрягает логика твоего кода. Ты сначало спавнишь, а потом мету меняешь. И не уверен на 100% что ты сущность до предмета не кастишь.
Как я могу сначала задать фейерверку мету, а потом его спавнить? Посмотрел код других плагинов, там точно также, сначала спавнят, потом задают мету, но там всё работает. Даже брал оттуда код, вставлял в свой плагин, тоже самое, фейерверк просто пропадает в воздухе.
 
Как я могу сначала задать фейерверку мету, а потом его спавнить?
Передавай в метод спауна функцию, которая будет вызвана ещё до фактического спауна сущности: https://jd.papermc.io/paper/1.12/or...ion-java.lang.Class-org.bukkit.util.Consumer-

В коде это выглядит так:
PHP:
Firework firework = location.getWorld().spawn(location, Firework.class, firework1 -> {
    FireworkMeta meta = firework1.getFireworkMeta();
    // Действия с meta
    firework1.setFireworkMeta(meta);
});

В конце не забудь вызывать firework.detonate()

Эти два изменения решают проблему.

Посмотрел код других плагинов, там точно также, сначала спавнят, потом задают мету, но там всё работает. Даже брал оттуда код, вставлял в свой плагин, тоже самое, фейерверк просто пропадает в воздухе.
Скорее всего, в других плагинах detonate() вызывается с задержкой в 1 тик после спауна сущности. Это тоже работает, можешь сделать и так. Но предложенный мной вариант кажется более адекватным
 
Последнее редактирование:
Передавай в метод спауна функцию, которая будет вызвана ещё до фактического спауна сущности: https://jd.papermc.io/paper/1.12/or...ion-java.lang.Class-org.bukkit.util.Consumer-

В коде это выглядит так:
PHP:
Firework firework = location.getWorld().spawn(location, Firework.class, firework1 -> {
    FireworkMeta meta = firework1.getFireworkMeta();
    // Действия с meta
    firework1.setFireworkMeta(meta);
});

В конце не забудь вызывать firework.detonate()

Эти два изменения решают проблему.


Скорее всего, в других плагинах detonate() вызывается с задержкой в 1 тик после спауна сущности. Это тоже работает, можешь сделать и так. Но предложенный мной вариант кажется более адекватным
Спасибо огромное, заработало!
 
Статус
Закрыто для дальнейших ответов.

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

Назад
Верх