当前位置: 首页 > 知识库问答 >
问题:

文件夹。getPlayersConfig()。contains()引发NullPointerException

关玮
2023-03-14

所以我目前正在开发一个Bukkit(技术上是插口插件),我希望当一个玩家第一次加入时,它能在一个文件(players.yml)中生成一个字符串。

我目前有:

public void onPlayerJoin(PlayerJoinEvent e){
    String player = e.getPlayer().getName().toString();

    if(!files.getPlayersConfig().contains(player)) {
        files.getPlayersConfig().set(player + ".enabled", true);
        files.getPlayersConfig().set(player + ".money", 100);
        files.savePlayersConfig();
        files.reloadPlayersConfig();
    }
}

我基本上要做的是在每个玩家第一次加入时在文件中创建一个字符串“player”。

例如,如果一个球员的名字鲍勃第一次加入,该文件将生成

bob:
    enabled: true
    money: 100

但是,我不希望每次玩家加入时都重置它,因此我尝试让它检查文件是否包含“bob”,如果返回null,它将创建它。我的问题是,它显示为一个错误,而不是仅仅创建它,所以它不是空的。

(抱歉措辞不好,但有点难以解释。)

谢谢

日志:

PlayerJoinEvent to McEconPlus v1.0
org.bukkit.event.EventException
    at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:305) ~[spigot.jar:git-Spigot-8dc4297-fbda3a7]
    at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62) ~[spigot.jar:git-Spigot-8dc4297-fbda3a7]
    at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:502) [spigot.jar:git-Spigot-8dc4297-fbda3a7]
    at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:487) [spigot.jar:git-Spigot-8dc4297-fbda3a7]
    at net.minecraft.server.v1_8_R1.PlayerList.onPlayerJoin(PlayerList.java:262) [spigot.jar:git-Spigot-8dc4297-fbda3a7]
    at net.minecraft.server.v1_8_R1.PlayerList.a(PlayerList.java:147) [spigot.jar:git-Spigot-8dc4297-fbda3a7]
    at net.minecraft.server.v1_8_R1.LoginListener.b(LoginListener.java:109) [spigot.jar:git-Spigot-8dc4297-fbda3a7]
    at net.minecraft.server.v1_8_R1.LoginListener.c(LoginListener.java:41) [spigot.jar:git-Spigot-8dc4297-fbda3a7]
    at net.minecraft.server.v1_8_R1.NetworkManager.a(NetworkManager.java:159) [spigot.jar:git-Spigot-8dc4297-fbda3a7]
    at net.minecraft.server.v1_8_R1.ServerConnection.c(ServerConnection.java:82) [spigot.jar:git-Spigot-8dc4297-fbda3a7]
    at net.minecraft.server.v1_8_R1.MinecraftServer.z(MinecraftServer.java:785) [spigot.jar:git-Spigot-8dc4297-fbda3a7]
    at net.minecraft.server.v1_8_R1.DedicatedServer.z(DedicatedServer.java:316) [spigot.jar:git-Spigot-8dc4297-fbda3a7]
    at net.minecraft.server.v1_8_R1.MinecraftServer.y(MinecraftServer.java:623) [spigot.jar:git-Spigot-8dc4297-fbda3a7]
    at net.minecraft.server.v1_8_R1.MinecraftServer.run(MinecraftServer.java:526) [spigot.jar:git-Spigot-8dc4297-fbda3a7]
    at java.lang.Thread.run(Unknown Source) [?:1.7.0_67]
**Caused by: java.lang.NullPointerException**
    at me.mrson.McEconPlus.Events.MCEP_CreatePlayers.onPlayerJoin(MCEP_CreatePlayers.java:21) ~[?:?]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.7.0_67]
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.7.0_67]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.7.0_67]
    at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.7.0_67]
    at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:301) ~[spigot.jar:git-Spigot-8dc4297-fbda3a7]
    ... 14 more

根据要求的主要类:

公共类MCEP_Base扩展了JavaPlugin{私有静态插件Plugin;

public File configFile = new File(this.getDataFolder(), "config.yml");
public FileConfiguration config = YamlConfiguration.loadConfiguration(configFile);

public File playersFile = new File(this.getDataFolder(), "players.yml");
public FileConfiguration players = YamlConfiguration.loadConfiguration(playersFile);


public void onEnable(){
    plugin = this;

    //config

    config.options().copyDefaults(true);
    config.addDefault("Enabled", "true");
    this.saveCustomConfig();

    players.options().copyDefaults(true);
    players.addDefault("Enabled", true);
    this.savePlayersConfig();

    //Logger
    this.getLogger().log(Level.FINEST, "[McEcon+] Enabling.");

    //Commands
    getCommand("econ").setExecutor(new MCEP_Econ());
    getCommand("pay").setExecutor(new MCEP_Pay());
    getCommand("sell").setExecutor(new MCEP_Sell());

    //Events
    registerEvents(this, new MCEP_CreatePlayers());


}

public void onDisable(){
    plugin = null;
}

public static void registerEvent(Plugin plugin, Listener... listeners){
    for(Listener listener : listeners){
        Bukkit.getServer().getPluginManager().registerEvents(listener, plugin);
    }
}

public static Plugin getPlugin() {
    return plugin;
}

public void saveCustomConfig(){
    try{
        config.save(configFile);
    }catch(IOException ex){
        ex.printStackTrace();
    }
}

public void savePlayersConfig(){
    try{
        players.save(playersFile);
    }catch(IOException ex){
        ex.printStackTrace();
    }
}

public FileConfiguration getCustomConfig(){
    if(config == null){
        saveCustomConfig();
    }
    return config;
}

public FileConfiguration getPlayersConfig() {
    if (players == null) {
        savePlayersConfig();
    }
    return players;
}

public void reloadCustomConfig(){
    if(configFile == null){
        configFile = new File(getDataFolder(), "config.yml");
    }
    config = YamlConfiguration.loadConfiguration(configFile);
    config.set("Enabled", true);
}

public void reloadPlayersConfig(){
    if(playersFile == null){
        playersFile = new File(getDataFolder(), "players.yml");
    }
    players = YamlConfiguration.loadConfiguration(playersFile);
    players.set("Enabled", true);
}

public static void registerEvents(org.bukkit.plugin.Plugin plugin, Listener... listeners) {
    for (Listener listener : listeners) {
        Bukkit.getServer().getPluginManager().registerEvents(listener, plugin);
    }
}

}

与我的Listener类一起:

公共类MCEP\u CreatePlayers实现监听器{MCEP\u基文件;

@EventHandler()
public void onPlayerJoin(PlayerJoinEvent e){
    String player = e.getPlayer().getName().toString();
    if(files == null){
        MCEP_Base.getPlugin().getLogger().warning("Test");
    }else if(files.getPlayersConfig() == null){
        MCEP_Base.getPlugin().getLogger().warning("Test1");
    }
    else if(!files.players.contains(player)) {
        files.getPlayersConfig().set(player + ".enabled", true);
        files.getPlayersConfig().set(player + ".money", 100);
        files.savePlayersConfig();
        files.reloadPlayersConfig();
    }
}

}

共有1个答案

陆绍辉
2023-03-14

您可以添加另一个检查以查看getPlayersConfig()是否返回null:

if(files.getPlayersConfig() == null) {
// handle this case
}
else if(!files.getPlayersConfig().contains(player)) {
// continue with rest of your code
}
 类似资料:
  • 在某些情况下,我正在开发一个小行星游戏 所以,我的小行星是一个多边形(Java内置对象),子弹只是一个点。当我试图探测小行星和子弹之间的碰撞时,我使用Polygon.contains(x,y)和子弹坐标。但出于某种原因,我得到NullPointerExcure时使用这种方法,但我只得到异常有时99%的时间一切完美的工作,然后我得到这个异常。当我射击子弹时,我会得到一个异常,如果抛出异常,子弹就会停

  • 在Eclipse(最新的Oxygen 3,JavaEE版本)中,我有一个“动态Web项目”(选择的项目方面有:动态Web模块、Java、附加JavaScript的运行时:Tomcat 7.0)。 问题1):在项目资源管理器中,我看到两个文件夹:Java资源/库/引用库和参考库(在项目根,在Java资源文件夹层次结构之外)。 这两者的主要区别是什么?为什么我们有两个相同的(?)文件夹?在我的例子中,

  • 我有一个像这样的文件夹 应用程序 供应商 引导程序 公开的 文件夹 img 当我从url访问时http://example.com/img/img.png它工作,但当我喜欢访问http://example.com/img/我得到禁止403,我需要的是重定向或显示该页面没有找到我的。htaccess看起来像这样。 选项-多视图选项-索引重写引擎打开

  • 本文向大家介绍Python引用(import)文件夹下的py文件的方法,包括了Python引用(import)文件夹下的py文件的方法的使用技巧和注意事项,需要的朋友参考一下 Python的import包含文件功能就跟PHP的include类似,但更确切的说应该更像是PHP中的require,因为Python里的import只要目标不存在就报错程序无法往下执行。要包含目录里的文件,PHP中只需要给

  • 我正在创建一个javafx GUI应用程序,我的项目是一个maven配置的项目。我希望能够在我的控制器中引用我的fxml文件,如下所示: 其中,我的main.fxml文件位于src/main/resources文件夹中,而我的控制器位于src/main/java文件夹中。我该怎么做呢?我的src/main/resources文件夹在构建路径中,并且我能够从src/main/java文件夹中的类调用