Multiple File Configuration for Players

Discussion in 'Plugin Development' started by parat26, Aug 27, 2014.

Thread Status:
Not open for further replies.
  1. Hey there,

    I am having lots of difficulties with NullPointerExceptions and what not with retrieving data from multiple configuration files for each player. The files are created normally when the player first joins the server, but I have problems getting the right player file, and retrieving data from it.

    Any suggestions/improvements?

    The main SettingsManager

    Code:java
    1. public class SettingsManager
    2. {
    3. public static File file;
    4. public static FileConfiguration config;
    5.  
    6. public SettingsManager(String fileName)
    7. {
    8. file = new File(UnderCovern.getPlugin().getDataFolder(), fileName + ".yml");
    9.  
    10. if (!file.exists())
    11. {
    12. try
    13. {
    14. file.createNewFile();
    15. }
    16. catch (Exception e)
    17. {
    18. UtilLogger.exception(e, "[SettingsManager] Could not create new file.");
    19. }
    20. }
    21.  
    22. config = YamlConfiguration.loadConfiguration(file);
    23. }
    24.  
    25. ...


    It will create a new file for each player. Here is the implementation I follow on a PlayerJoinEvent.

    Code:java
    1. new SettingsManager(player.getName());
    2.  
    3. if (!(player.hasPlayedBefore()))
    4. {
    5. SettingsManager.getConfig().createSection(player.getName());
    6.  
    7. SettingsManager.getConfig().createSection(player.getName() + ".Coins");
    8.  
    9. SettingsManager.getConfig().set(player.getName() + ".Coins", "0");
    10.  
    11. SettingsManager.getConfig().createSection(player.getName() + ".Rank");
    12.  
    13. SettingsManager.getConfig().set(player.getName() + ".Rank", Rank.STARTER.getRankName());
    14.  
    15. SettingsManager.save();
    16. }


    And lastly, here is my difficulty. I do not know how to retrieve data.
    Code:java
    1. public static String getRank(Player player)
    2. {
    3. if (plugin.getDataFolder().getName().contains(player.getName()))
    4. {
    5. return SettingsManager.getConfig().getString(player.getName() + ".Rank");
    6. }
    7.  
    8. return null;
    9. }
     
  2. Offline

    mine-care

    Use uuids not playernames,
    Can we see stacktraces?
    Thanks.
     
  3. Offline

    MnMaxon

    I think you should change the last part to:
    Code:java
    1. public static String getRank(Player player)
    2. {
    3. new SettingsManager(player.getName());
    4. if (SettingManager.get(player.getName() + ".Rank")!=null)
    5. {
    6. return SettingsManager.getConfig().getString(player.getName() + ".Rank");
    7. }
    8.  
    9. return null;
    10. }

    plugin.getDataFolder().getName()
    Would return something like "/plugins/PLUGIN_NAME", and:
    plugin.getDataFolder().getName().contains(player.getName())
    would never be true.
     
  4. Offline

    _LB

Thread Status:
Not open for further replies.

Share This Page