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

Помогите Взрыв фейерверка на координатах

CraftCoder

Старожил
Пользователь
Баллы
108
Имя в Minecraft
CraftCoderr
Как взорвать фейерверк на определенных координатах? Если спавнить фейерверк в координатах, то он летит вверх, как сделать чтобы он сразу взрывался?
 
Не самый крутой вариант, по-другому как-то можно?
Только пакеты/рефлекции/NMS. Хотя можно сделать как-то и в ванильке, но только вот звук "полета фейерверка" будет.

Клик
И да, научись искать в Гугле или лазить по просторам форума Баккита.
 
Могу предложить вариант c PlayEffect в качестве API :)

Вообще я "взрывал" фейерверк тремя или четырьмя способами. К сожалению, они себя по разному ведут в разных версиях.

Вот вариант, с использованием ProtocolLib (делал под 1.6.4): https://github.com/fromgate/PlayEff.../customeffects/PacketProtocolLib.java#L58-L71

Вот ещё два вариант без ProtocolLib (под 1.6.4 и под 1.7.2)
https://github.com/fromgate/PlayEff...effect/customeffects/PacketNMS.java#L174-L211

Кроме того, в 1.7.9 (появилось по моему, всё же раньше) у enitity Firework есть метод detonate(); фактически это реализация второго способа из предыдущей ссылки.
 
Оказывается я немного не понял заказчика. Нужно чтобы фейерверк взлетал, но не высоко. Как я понял за высоту отвечает Power(setPower), попытался поменять этот параметр, но так и не увидел зависимости высоты от этого числа. Какое значение нужно поставить чтобы взрывался как можно ниже?
 
Давно бы уже посмотрели, что из себя представляет FireworkMeta. Там есть метод setPower - это "заряд" фейерверка. Чем он выше - тем дальше он летит.
Если высота полета при power = 0 не устроит, то дальше можно начинать хитрить. К примеру, принудительно изменять фейерверку velocity (только делать это нужно один раз в тик).
 
Я делал так:
Java:
    public void launchFirework(Entity p, int speed, Color color) {
        Firework fw = (Firework) p.getWorld().spawn(p.getLocation(), Firework.class);
        FireworkMeta meta = fw.getFireworkMeta();
        meta.addEffect(FireworkEffect.builder().withColor(color).with(Type.STAR).build());
        fw.setFireworkMeta(meta);
        fw.setVelocity(p.getLocation().getDirection().multiply(speed));
    }
 
Запускаю фейерверк вот так:
Код:
Firework firework = player.getWorld().spawn(player.getLocation(), Firework.class);
FireworkMeta meta = firework.getFireworkMeta();
meta.addEffect(FireworkEffect.builder().withColor(Color.GREEN).with(Type.BALL).build());
meta.setPower(0);
firework.setFireworkMeta(meta);
, но сначала этот фейерверк взлетает, летит в сторону, потом сам запускается второй фейерверк и только он взрывается.
 
Запускаю фейерверк вот так:
Код:
Firework firework = player.getWorld().spawn(player.getLocation(), Firework.class);
FireworkMeta meta = firework.getFireworkMeta();
meta.addEffect(FireworkEffect.builder().withColor(Color.GREEN).with(Type.BALL).build());
meta.setPower(0);
firework.setFireworkMeta(meta);
, но сначала этот фейерверк взлетает, летит в сторону, потом сам запускается второй фейерверк и только он взрывается.
Ну бывает, у меня тоже не так все гладко. Я как раз недавно пригляделся. Хотя, взрыв на рандомных координатах тоже хорош.
 
Назад
Верх