2015-01-03 2 views
1

Так что я сейчас работаю над Bukkit (плагин с технологией Spigot), и я хочу, чтобы он сделал строку в файле (players.yml), когда игрок присоединяется к первый раз.files.getPlayersConfig(). Содержит() throws NullPointerException

я в настоящее время:

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(); 
    } 
} 

То, что я в основном пытаюсь сделать, это создать строку «игрок» в файл для каждого игрока в первый раз, когда они присоединиться.

Например, если имя игрока боб вступил в первый раз, то файл будет генерировать

bob: 
    enabled: true 
    money: 100 

Однако, я не хочу, чтобы сбросить каждый раз, когда игрок присоединяется, так вот почему я m, пытаясь заставить его проверить, содержит ли файл «bob», и если он вернет null, он создаст его. Моя проблема в том, что она появляется как ошибка, а не просто создает ее, поэтому она не является нулевой.

(Извините за плохой формулировки, но это своего рода трудно объяснить.)

Спасибо.

Log:

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 { частный статический плагин плагин;

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); 
    } 
} 

}

Вместе с моим Слушатель класса:

MCEP_CreatePlayers общественного класса реализует Listener { MCEP_Base файлы;

@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(); 
    } 
} 

}

+0

Можете ли вы показать ваш * нуль-защита * часть кода? –

+1

Нет, это не возвращает исключение. Либо файлы имеют значение null, либо возвращает значение getPlayersConfig(). –

+0

Я знаю, что возвращаемое значение getPlayersConfig() равно null. Тем не менее, я хочу, чтобы он что-то делал, если он возвращает null. – son588

ответ

2

Вы можете добавить еще одну проверку, чтобы увидеть, если getPlayersConfig() возвращает нуль:

if(files.getPlayersConfig() == null) { 
// handle this case 
} 
else if(!files.getPlayersConfig().contains(player)) { 
// continue with rest of your code 
} 
+0

Когда я сделал if (files.getPlayersConfig() == null) {...}, он все равно возвращает исключение NullPointerException в этой строке. – son588

+0

Если вы все еще получаете NPE, это означает, что объект-файл сам по себе является нулевым. Можете ли вы проверить файлы == null и посмотреть, так ли это? – codelion

+0

Так что 'files'' null.' Очевидно. – EJP

Смежные вопросы