2016-04-30 7 views
1

Ich habe ein Plugin für Spigot für ein paar Tage entwickelt, und habe bereits einige StackOverflow Posts darüber gemacht. Dieser ist jedoch am verwirrendsten.Nonsensical NullPointerException/Variable entscheidet sich nicht zu existieren

package redempt.divinity.ability.modifier.modifiers; 

import org.bukkit.Location; 
import org.bukkit.Material; 
import org.bukkit.entity.Entity; 
import org.bukkit.entity.Player; 
import org.bukkit.event.entity.EntityDamageByEntityEvent; 
import org.bukkit.util.Vector; 
import redempt.divinity.ability.AbilityType; 
import redempt.divinity.ability.modifier.ProjectileModifier; 

public class NoGravity extends ProjectileModifier { 
    private Vector vector; 
    Location lastpos; 
    @Override 
    public void onUse(Player player, Entity projectile) { 
     vector = player.getLocation().getDirection().normalize().clone(); 
     System.out.println(vector); 
     lastpos = projectile.getLocation(); 
    } 
    @Override 
    public String getName() { 
     return "No gravity"; 
    } 
    @Override 
    public Material getRepresentation() { 
     return Material.FEATHER; 
    } 
    @Override 
    public AbilityType getType() { 
     return AbilityType.PROJECTILE; 
    } 
    @Override 
    public void onHit(EntityDamageByEntityEvent event) { 
    } 
    @Override 
    public void onTick(Entity entity) { 
//  if (lastpos == null || vector == null) { 
//   return; 
//  } 
     System.out.println(vector); 
     if (entity.getLocation().getBlock().getType().equals(Material.AIR)) { 
      entity.setVelocity(vector); 
     } 
     lastpos = entity.getLocation(); 
    } 
} 

Nun ist die Ausgabe der Konsole:

[11:49:13 INFO]: null 
[11:49:13 INFO]: null 
[11:49:13 INFO]: null 
[11:49:14 INFO]: 0.18347871628032447,-0.275177341220671,-0.9437229421556131 
[11:49:14 INFO]: null 
[11:49:14 INFO]: null 
[11:49:14 INFO]: null 
[11:49:14 INFO]: null 
[11:49:14 INFO]: null 
[11:49:14 INFO]: null 
..And so on 

Wie Sie sehen können, wird die Variable 'Vektor' ist ein privates Vector-Objekt. Aus irgendeinem Grund scheint es jedoch nicht sehr viel vorhanden zu sein und scheint nur gelegentlich nicht null zu sein. Kann irgendjemand etwas darüber sagen, warum dies geschieht?

+2

Nun, die erste Sache, die ich tun würde, ist Ihre Protokollierung zu ändern, so dass Sie sagen können, welche Linie von welcher Methode kommt. Ich würde auch 'this' drucken, damit Sie sehen können, ob Sie mehrere Instanzen haben. –

+0

Ist das der eigentliche Code? Die Nachrichten sehen wie Logmeldungen aus, aber der Code hat 'System.out.println()' Anweisungen, keine Loganweisungen. Ich weiß nicht, was die Zeile formatiert, um [HH: MM: SS INFO] zu haben: darauf. – arcy

+0

Ich bemerkte, dass du 'clone' benutzt hast ... hast du bestätigt, dass jemand Code in' clone' geschrieben hat? – smac89

Antwort

0

Es stellt sich heraus, dass es irgendwie 2 Instanzen des genau gleichen Objekts gab, außer dass man seine onUse() aufgerufen hat, und die andere nicht. Ich habe das Problem jetzt behoben.

+0

Bitte akzeptieren Sie Ihre eigene Antwort, damit die Leute wissen, dass die Frage gelöst wurde :) –