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

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);

Есть предположение, что не правильно указана локация, если это так, то как указать правильно?
 
Продебаж каждую переменную и поймешь какая равна null
 
if(p.getItemInHand().getType() != Material.STICK) return;

замени на

ItemStack itemStack = p.getItemInHand();
if(itemStack != null && itemStack.getType() != Material.STICK) return;
 
Похоже что мира getName() нет.
Замени
World world = Bukkit.getServer().getWorld(getName());
на
World world = p.getWorld();
 
UP, вопрос открыт
PHP:
public static void drawLine(Location point1, Location point2, double space, Particle 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 < distance; p1.add(vector)) {
        world.spawnParticle(particle, p1.getX(), p1.getY(), p1.getZ(), 1);
        length += space;
    }
}
 
Назад
Верх