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?
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. –
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
Ich bemerkte, dass du 'clone' benutzt hast ... hast du bestätigt, dass jemand Code in' clone' geschrieben hat? – smac89