如何从.yml文件正确加载HashMap?

时间:2016-07-13 13:07:20

标签: java hashmap yaml minecraft bukkit

我正在尝试使用标准的Bukkit配置文件API从配置文件加载HashMap。

HashMap中:

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

这是我尝试获取数据的方式:

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

如果玩家被禁止,那么它没问题,但是当玩家没有被禁止时,它会抛出NullPointerException。

的NullPointerException:

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"

1 个答案:

答案 0 :(得分:0)

要完成您的工作,您应该尝试以下方法:

  • 确保您的配置不为空/存在

    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
    

    }

我不相信你确实需要哈希地图,除非你将其用于其他地方