Hallo liebes Forum. Ich übe mich gerade ein wenig im Programmieren mit Minecraft und habe versucht, eine Klasse, mit der ich einzelne Spielerfiles bearbeite, zu programmieren. Das ganz Objektorientiert, was ja eigentlich gut sein sollte oder? Nur bleibt ein eigenartiger Bug den ich nicht allzuleicht erklären kann.
Ich habe das SpielerFile Objekt so programmiert:
So. Jetzt möchte ich in anderen Klassen, ebenfalls objektorientiert Einträge in das Spielerfile machen. Ich habe in dem File noch ein paar andere Methoden die ich jetzt mal nicht alle aufgeschrieben habe, da es glaube ich nicht an ihnen liegt. Durch rumprobieren habe ich nämlich festgestellt dass folgendes nicht funktioniert:
Um genauzusein gibt es eine Nullpointer Exception, die auf die Zeile 50, aka "pf.getString("Rasse.Name"));" verweist. Wenn ich also testweise in der methode getAusdauerMax() einmal ein File erstelle wie in der Klasse PlayerFiles, dann gibt es keine Fehlermeldungen mehr. Ich habe zum test auch schonmal im Konstruktor vom SpielerFiles nen Broadcast getippt aber der wurde ausgeführt. Also eigentlich müsste alles klappen
Ich hoffe sehr, mir kann jemand helfen,
Mfg CubBossa
Ich habe das SpielerFile Objekt so programmiert:
Javascript:
public class SpielerFile {
//Variablen
private Player p = null;
private File file = null;
private YamlConfiguration cfg = null;
public static HashMap<Player, Boolean> tutAbsolved = new HashMap<Player, Boolean>();
//Konstruktoren
public SpielerFile(Player p) {
this.p = p;
this.file = new File("plugins/Athernon/Players", ""+p.getUniqueId()+".yml");
this.cfg = YamlConfiguration.loadConfiguration(file);
}
public void setSpieler(Player p) {
this.p = p;
this.file = new File("plugins/Athernon/Players", ""+p.getUniqueId()+".yml");
this.cfg = YamlConfiguration.loadConfiguration(file);
}
//Methoden
/**
* Erstellt ein Spielerfile wenn der Spieler noch keines besitzt
*/
public void createFile(OfflinePlayer p) {
if(!file.exists()) {
cfg.set("Name", p.getName());
try {
cfg.save(file);
} catch (Exception ex) {}
}
}
public Object get(String pfad) {
if(file.exists()) {
return cfg.get(pfad);
} else {
createFile(p);
return null;
}
}
}
So. Jetzt möchte ich in anderen Klassen, ebenfalls objektorientiert Einträge in das Spielerfile machen. Ich habe in dem File noch ein paar andere Methoden die ich jetzt mal nicht alle aufgeschrieben habe, da es glaube ich nicht an ihnen liegt. Durch rumprobieren habe ich nämlich festgestellt dass folgendes nicht funktioniert:
Javascript:
public class Ausdauer {
//Variablen
private Player p;
private KlassenTools kt;
private int TaskID = -1;
private double ausdauer = 0;
private Ausdauer ad = this;
private SpielerFile pf;
//Konstruktoren
public Ausdauer(Player p) {
this.p = p;
this.kt = new KlassenTools(p);
this.ausdauer = this.getAusdauerMax();
this.pf = new SpielerFile(p);
}
public Ausdauer(Player p, double ausdauer, int TaskID) {
this.p = p;
this.kt = new KlassenTools(p);
this.ausdauer = ausdauer;
this.TaskID = TaskID;
this.pf = new SpielerFile(p);
}
//Methoden
public double getAusdauer() {
return ausdauer;
}
public double getAusdauerMax() {
return 30 + 100 *
kt.getLevel() /
kt.getMaxLevel(
pf.getString("Rasse.Name"));
}
}
Um genauzusein gibt es eine Nullpointer Exception, die auf die Zeile 50, aka "pf.getString("Rasse.Name"));" verweist. Wenn ich also testweise in der methode getAusdauerMax() einmal ein File erstelle wie in der Klasse PlayerFiles, dann gibt es keine Fehlermeldungen mehr. Ich habe zum test auch schonmal im Konstruktor vom SpielerFiles nen Broadcast getippt aber der wurde ausgeführt. Also eigentlich müsste alles klappen
Ich hoffe sehr, mir kann jemand helfen,
Mfg CubBossa