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

Помогите Создание ауры вокруг игрока

Тема в разделе "Разработка плагинов для новичков", создана пользователем Dunda, 13 фев 2021.

Метки:
  1. Автор темы
    Dunda

    Dunda Участник

    Баллы:
    31
    Всем привет.

    Можно ли создать ауру со специальными эффектами вокруг игрока и если да, то как?
    В Spigot API не могу найти ничего подходящего. В сети плагины или до 2017 года, или платные.
     
  2. SaMEC

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

    Баллы:
    173
    Skype:
    support.meedway
    Имя в Minecraft:
    Nick
    player.spawnParticle
     
  3. Den_Blade

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

    Баллы:
    66
    Имя в Minecraft:
    Den_Blade
    Если я правильно тебя понял, то вот:

    Код:
        public static void CreateEffect(final Location loc) {
            final PacketPlayOutWorldParticles packet = new PacketPlayOutWorldParticles(EnumParticle.REDSTONE, true, (float)(loc.getX() + 0.0), (float)(loc.getY() + 0.0), (float)(loc.getZ() + 0.0), 0.0f, 0.0f, 0.0f, 0.0f, 1, new int[0]);
            for (final Player online : Bukkit.getOnlinePlayers()) {
                ((CraftPlayer)online).getHandle().playerConnection.sendPacket((Packet)packet);
            }
        }
     
        public static void spawnSphere(Location l) {
            double r = 1.5;
            for(double phi = 0; phi <= Math.PI; phi += Math.PI / 10) {
                double y = r * Math.cos(phi) + 1;
                for(double theta = 0; theta <= 2 * Math.PI; theta += Math.PI / 10) {
                    double x = r * Math.cos(theta) * Math.sin(phi);
                    double z = r * Math.sin(theta) * Math.sin(phi);
    
                    l.add(x, y, z);
                    CreateEffect(l);
                    l.subtract(x, y, z);
                }
            }
        }
        }
    Этим ты создашь сферу на локации игрока, диаметр регулируй сам, чтобы создать:
    spawnSphere(p.getLocation());
     

    Вложения:

    Последнее редактирование: 13 фев 2021
  4. Автор темы
    Dunda

    Dunda Участник

    Баллы:
    31
    Спасибо огромное за информацию!

    У меня осталась пара вопросов:
    1) Будет ли эта сфера перемещаться вместе с игроком?
    2) Как сделать так, чтобы каждый игрок, кто попадаёт в область этой сферы получал эффект, допустим, регенерации? Как это сделать без частиц? Вот стоит игрок, а вокруг все получают эффект скорости.
     
    Последнее редактирование: 13 фев 2021
  5. SaMEC

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

    Баллы:
    173
    Skype:
    support.meedway
    Имя в Minecraft:
    Nick
    бесконечный таск, проверять в радиусе сущности
     
  6. Автор темы
    Dunda

    Dunda Участник

    Баллы:
    31
    Спасибо, попробую.
     
  7. alexandrage

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

    Баллы:
    173
    Нет
     
  8. alexandrage

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

    Баллы:
    173
    И вообще на партиклы есть апи в ведре, а не этот костыль, что тебе дали.
     
  9. dimkaS

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

    Баллы:
    76
    Имя в Minecraft:
    dimkaS
    Разве есть метод на отрисовку сферы?
     
  10. Witenin

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

    Баллы:
    76
    Имя в Minecraft:
    Witenin
    Что хочешь можно сделать, жаль уже скрина нет, показал бы
     
  11. LOVEC3327

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

    Баллы:
    76
    Имя в Minecraft:
    LOVEC3327
    Есть метод на спавн партикла.
     
  12. SaMEC

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

    Баллы:
    173
    Skype:
    support.meedway
    Имя в Minecraft:
    Nick
    Вторым постом же отправил вам метод, с добрым утром...
    upload_2021-2-14_10-34-23.png
     
  13. alexandrage

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

    Баллы:
    173
    Есть spawnParticle. Да и то что ты сделал будет светить игрока за километр. Да и тпс отожрет еще.
     
  14. Den_Blade

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

    Баллы:
    66
    Имя в Minecraft:
    Den_Blade

    1) Можно реализовать таким способом :
    Код:
        public static void effect(final Player p) {
            final BukkitRunnable runable = new BukkitRunnable() {
                int timer = 70; //Длительность
                int timer5 = 20;
              
                public void run() {
                   spawnSphere(p.getLocation());
                    if (this.timer-- >= 0) {
                        if (this.timer5-- < 0) {
                                    return;
                                }                                                             
                        else {
                                    return;
                                }                                   
                    }
                    else {
                        this.cancel();
                    }
                }
            };
            runable.runTaskTimer((Plugin)Main.instance, 0L, 1L);
        }
    Потом: effect(Player);
    И сфера всегда будет перемещаться вместе с игроком;

    2)
    Код:
                BukkitRunnable runable = new BukkitRunnable() {
                    int timer = 75;
                    @Override
                    public void run() {
                        if (this.timer-- > 0) {
                            for (Entity entity : Player.getNearbyEntities(1.5D, 1.5D, 1.5D)) {      
                                LivingEntity target = (LivingEntity)entity;
                                        target.addPotionEffect(new PotionEffect(PotionEffectType.CONFUSION, 200, 1));
                                      target.addPotionEffect(new PotionEffect(PotionEffectType.BLINDNESS, 200, 1));
                                        target.addPotionEffect(new PotionEffect(PotionEffectType.WEAKNESS, 200, 0));
                                          target.addPotionEffect(new PotionEffect(PotionEffectType.SLOW, 200, 1));
                                }
                            }
                        }             
                };
                runable.runTaskTimer((Plugin)Main.instance, 0L, 1L);
            }
    В данном случае ты просто проверяешь всех кто есть в каком-то радиусе от игрока и накладываешь на них эффекты если они зашли в него. Чтобы эффекты накладывались именно зайдя в сферу , просто сделай соответствующий ей радиус

    А чтобы сделать без частиц,просто не спавнь их:good:
     
  15. dimkaS

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

    Баллы:
    76
    Имя в Minecraft:
    dimkaS
    партиклы можно спавнить в асунке, так что насчет партиклов и падения тпс можно не парится)
     
  16. alexandrage

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

    Баллы:
    173
    Конечно конечно, очередь пакетов ж никто не отменял :D
     

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