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

标签 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 。

空指针异常:

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"

最佳答案

要实现您的愿望,您应该尝试以下操作:

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

    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
    

    }

我不相信你真的需要 HashMap ,除非你将它用于其他用途

关于java - 如何从 .yml 文件正确加载 HashMap?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38352651/

相关文章:

ruby-on-rails - rails : Unable to use new `config/secrets.yml`

java.lang.NoClassDefFoundError : sun/awt/X11GraphicsEnvironment issuses faced while running our applet based app on linux 错误

java - 映射两个不同大小的ArrayList

java - 用 HashMap 进行反射

c - (C 编程) 如何使用在另一个文件中定义的数据结构和函数?

java - 将 Yaml 文件转换为 java 对象

java - 如何在 Open API 3.0 中为 GET API 定义 map 对象

java - Java同步HashMap中的size()、put()、remove()、get()是原子的吗?

java - Android 和 Java 上的 RabbitMQ

JAVA:动态创建按钮的事件处理程序