2016-07-13 27 views
1

Ich versuche, eine HashMap aus der Konfigurationsdatei mit der Standard-Bukkit-Konfigurationsdatei-API zu laden.Wie Laden von HashMap ordnungsgemäß aus einer .yml-Datei?

HashMap:

public static HashMap<String, String> banned = new HashMap<String, String>(); 

Dies ist die Art, wie ich die Daten zu bekommen versuchen:

public static boolean isBanned(String uuid) { 
    if (Dogends.config.getConfigurationSection("Banned").getKeys(true).contains(uuid)) { 
     return true; 
    } 
    return false; 
} 

Wenn der Spieler dann verboten ist, es ist in Ordnung, aber wenn der Spieler nicht verboten ist, dann Es löst eine NullPointerException aus.

Nullpointer:

Could not pass event PlayerLoginEvent to Dogends v1.0 
org.bukkit.event.EventException 
    at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:302) ~[cb.jar:git-Bukkit-880a532] 
    at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62) ~[cb.jar:git-Bukkit-880a532] 
    at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:501) [cb.jar:git-Bukkit-880a532] 
    at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:486) [cb.jar:git-Bukkit-880a532] 
    at net.minecraft.server.v1_8_R3.PlayerList.attemptLogin(PlayerList.java:439) [cb.jar:git-Bukkit-880a532] 
    at net.minecraft.server.v1_8_R3.LoginListener.b(LoginListener.java:89) [cb.jar:git-Bukkit-880a532] 
    at net.minecraft.server.v1_8_R3.LoginListener.c(LoginListener.java:53) [cb.jar:git-Bukkit-880a532] 
    at net.minecraft.server.v1_8_R3.NetworkManager.a(NetworkManager.java:222) [cb.jar:git-Bukkit-880a532] 
    at net.minecraft.server.v1_8_R3.ServerConnection.c(SourceFile:168) [cb.jar:git-Bukkit-880a532] 
    at net.minecraft.server.v1_8_R3.MinecraftServer.B(MinecraftServer.java:744) [cb.jar:git-Bukkit-880a532] 
    at net.minecraft.server.v1_8_R3.DedicatedServer.B(DedicatedServer.java:335) [cb.jar:git-Bukkit-880a532] 
    at net.minecraft.server.v1_8_R3.MinecraftServer.A(MinecraftServer.java:628) [cb.jar:git-Bukkit-880a532] 
    at net.minecraft.server.v1_8_R3.MinecraftServer.run(MinecraftServer.java:536) [cb.jar:git-Bukkit-880a532] 
    at java.lang.Thread.run(Unknown Source) [?:1.8.0_91] 
Caused by: java.lang.NullPointerException 
    at me.woulfiee.server.ban.BanCommand.isBanned(BanCommand.java:47) ~[?:?] 
    at me.woulfiee.server.ban.BanCommand.onPlayerLogin(BanCommand.java:103) ~[?:?] 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_91] 
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_91] 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_91] 
    at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_91] 
    at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:300) ~[cb.jar:git-Bukkit-880a532] 
    ... 13 more 

config.yml:

Ranks: 
    Player: 
    Players: [] 
    Mythic: 
    Players: [] 
    Doge: 
    Players: [] 
    Youtuber: 
    Players: [] 
    Builder: 
    Players: [] 
    Mod: 
    Players: [] 
    Admin: 
    Players: [] 
    Owner: 
    Players: 
     - d166739c-32d3-4b37-a1be-883be57d736c 
Broadcast: 
    Interval: 120 
Banned: 
    d166739c-32d3-4b37-a1be-883be57d736c: "CONSOLE \xa7eHELP" 
+0

Die Aussage in Ihrem 'if' ist waaaay zu lang. Teile es auf. Ziehen Sie den Konfigurationsabschnitt in eine lokale Variable und stellen Sie sicher, dass sie tatsächlich enthält, was Sie erwartet haben. Auf diese Weise können Sie herausfinden, wo die NPE auftritt. Außerdem würde das Posten der tatsächlichen Fehlermeldung ziemlich viele nützliche Informationen liefern. –

+0

Es ist schwer zu sagen, wenn Code auf diese Weise geschrieben wird. Ich sehe zwei mögliche Optionen Main.config.getConfigurationSection ("Banned") oder Main.config.getConfigurationSection ("Banned"). GetKeys (true) wird null. –

+0

Ich habe den Stack-Trace hinzugefügt. Server wirft die Ausnahme durch die Zeile 47 (wenn (nicht von getConfigurationSection(), sondern von getKeys (true) ...)). – Woulfiee

Antwort

0

Um das zu erreichen, was Sie wollen, sollten Sie versuchen, die folgenden:

  • Stellen Sie sicher, Ihre Konfiguration ist nicht null/existiert

    boolean isBanned (String UUID) {

    FileConfiguration yourConfig; 
    
    //Getting the Banned section 
    ConfigurationSection banned = yourConfig.getConfigurationSection("Banned"); 
    
    //All the keys inside the banned configuration section 
    Set<String> keys = banned.getKeys(false); //We don't want it to be deep 
    if (keys.contains(uuid))return true; //UUID is on the keys list, so the player is banned 
    return false; //UUID is not on the keys list, so the player is not banned 
    

    }

Ich glaube nicht wirklich Sie die hashmap benötigen, wenn Sie es für etwas anderes

+0

Vielen Dank für die Antwort, aber es funktioniert immer noch nicht. Der Server löst die Ausnahme durch "Set keys = banned.getKeys (false);" aus. Wenn es keine HashMap sein muss, was sollte es dann sein? Eine Liste? – Woulfiee

+0

Was ist der neue Fehler, der angezeigt wird? Dies ist der richtige Weg zum Wiederherstellen einer Liste aus den Konfigurationsdateien Vielleicht können Sie mehr Code in Ihrer ursprünglichen Frage bearbeiten, weil der Fehler aus einem anderen Grund ausgelöst wird – Kerooker

+0

Es wirft die NPE – Woulfiee

0

getConfigurationSection verwenden:

Wenn die ConfigurationSection nicht existiert aber ein Standardwert ist spe In diesem Fall wird der Standardwert zurückgegeben. Wenn die ConfigurationSection nicht existiert und kein Standardwert angegeben wurde, gibt dies null zurück.

ich raten bin, wenn es keine Benutzer gesperrt, gibt es keine Banned Abschnitt, so getConfigurationSection kehrt null, weshalb Ihr getKeys() Anruf eine NPE wirft.

Sie sollten zuerst prüfen, ob der Konfigurationsabschnitt existiert, und erst dann versuchen, ihn zu benutzen.