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

Помогите Работа с партиклами, NPE

Тема в разделе "Разработка плагинов для новичков", создана пользователем HaloSpartan, 3 янв 2019.

  1. Автор темы
    HaloSpartan

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

    Баллы:
    66
    С помощь ранабла создаю прямую партиклов, ниже код:
    Код:
    @EventHandler
        public void shoot(PlayerInteractEvent e)
        {
            Player p = e.getPlayer();
            if(e.getAction() == Action.RIGHT_CLICK_AIR || e.getAction() == Action.RIGHT_CLICK_BLOCK)
            {
                if(p.getItemInHand().getType() != Material.STICK) return;
                {
                    p.sendMessage("Its work");
                    World world = Bukkit.getServer().getWorld(getName());
                new BukkitRunnable()
                {
                    Location loc = p.getLocation();
                    double t = 0;
                    double x = 1;
                    Vector v = loc.getDirection().normalize();
                    @Override
                    public void run() {
                        t = t + 0.5;
                        double x = v.getX()*t;
                        double y = v.getY()*t+1.5;
                        double z = v.getZ()*t;
                        Particle.DustOptions dustOptions = new Particle.DustOptions(Color.BLUE, 1);
                        world.spawnParticle(Particle.REDSTONE, new Location(p.getWorld(), x, y, z), 1, 1, 1 ,1, 1, dustOptions);
                        if(t > 10)
                        {
                            this.cancel();
                        }
                    }
                }.runTaskTimer(this, 0, 1);
                }
            }
        }
    При нажатии на ПКМ, линия партиклов не появляется, а в консоли вот такая ошибка:
    [16:07:18 WARN]: [smbf] Task #4 for smbfsuka v0.01 generated an exception
    java.lang.NullPointerException: null
    at smbf.mainClass$1.run(mainClass.java:51) ~[?:?]
    at org.bukkit.craftbukkit.v1_13_R2.scheduler.CraftTask.run(CraftTask.java:76) ~[minecraft_server.jar:git-Spigot-2474d93-e693496]
    at org.bukkit.craftbukkit.v1_13_R2.scheduler.CraftScheduler.mainThreadHeartbeat(CraftScheduler.java:361) [minecraft_server.jar:git-Spigot-2474d93-e693496]
    at net.minecraft.server.v1_13_R2.MinecraftServer.b(MinecraftServer.java:893) [minecraft_server.jar:git-Spigot-2474d93-e693496]
    at net.minecraft.server.v1_13_R2.DedicatedServer.b(DedicatedServer.java:417) [minecraft_server.jar:git-Spigot-2474d93-e693496]
    at net.minecraft.server.v1_13_R2.MinecraftServer.a(MinecraftServer.java:835) [minecraft_server.jar:git-Spigot-2474d93-e693496]
    at net.minecraft.server.v1_13_R2.MinecraftServer.run(MinecraftServer.java:733) [minecraft_server.jar:git-Spigot-2474d93-e693496]
    at java.lang.Thread.run(Thread.java:748) [?:1.8.0_131]
    P.S 51 строка: world.spawnParticle(Particle.REDSTONE, new Location(p.getWorld(), x, y, z), 1, 1, 1 ,1, 1, dustOptions);

    Есть предположение, что не правильно указана локация, если это так, то как указать правильно?
     
  2. _Nanit_

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

    Баллы:
    76
    Имя в Minecraft:
    _Nanit_
    Продебаж каждую переменную и поймешь какая равна null
     
  3. Krutius

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

    Баллы:
    76
    Имя в Minecraft:
    MrPencilBox
    if(p.getItemInHand().getType() != Material.STICK) return;

    замени на

    ItemStack itemStack = p.getItemInHand();
    if(itemStack != null && itemStack.getType() != Material.STICK) return;
     
  4. EnderBro3D

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

    Баллы:
    76
    Имя в Minecraft:
    EnderBro3D
    Похоже что мира getName() нет.
    Замени
    World world = Bukkit.getServer().getWorld(getName());
    на
    World world = p.getWorld();
     
  5. Автор темы
    HaloSpartan

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

    Баллы:
    66
    Теперь ошибки в консоли нет)
    Но всё равно партиклы не появились =/
     
  6. Автор темы
    HaloSpartan

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

    Баллы:
    66
    UP, вопрос открыт
     
  7. _MCMaster_

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

    Баллы:
    76
    Имя в Minecraft:
    DragOn4ik
    PHP:
    public static void drawLine(Location point1Location point2double spaceParticle particle) {
        
    World world point1.getWorld();
        
    Validate.isTrue(point2.getWorld().equals(world), "Lines cannot be in different worlds!");
        
    double distance point1.distance(point2);
        
    Vector p1 point1.toVector();
        
    Vector p2 point2.toVector();
        
    Vector vector p2.clone().subtract(p1).normalize().multiply(space);
        
    double length 0;
        for (; 
    length distancep1.add(vector)) {
            
    world.spawnParticle(particlep1.getX(), p1.getY(), p1.getZ(), 1);
            
    length += space;
        }
    }
     

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