Bukkit - Displaying null when getting a string from the config file

﹥>﹥吖頭↗ 提交于 2019-12-13 03:32:00

问题


So I've been working on a custom feature for my minecraft server, one of the things that I need to do is get an integer from the config file that is specific to each player to display how many Packages(keys) they have (Virtual items)

The issue that I am having is that in the GUI it is displaying 'null' instead of how many they have... Could anyone help me please?

Item in the gui

Code for creating the player's instance in the config (Using a custom file class that was provided to me by a friend of mine.)

@EventHandler

public void playerJoin(PlayerJoinEvent event) {

    Main main = Main.getPlugin(Main.class);
    Player player = event.getPlayer();
    UUID uuid = player.getUniqueId();

    if (!main.getDataFolder().exists())
        main.getDataFolder().mkdirs();
    File file = new File(main.getDataFolder(), "players.yml");
    FileConfiguration config = YamlConfiguration.loadConfiguration(file);

    if (!config.contains("Users." + uuid + ".Username")) {

        try {

            System.out.println("Creating entry for " + player + " (" + uuid + ")");
            config.set("Users." + uuid + ".Username", player);
            config.set("Users." + uuid + ".Packages.Common", 0);
            config.set("Users." + uuid + ".Packages.Rare", 0);
            config.set("Users." + uuid + ".Packages.Epic", 0);
            config.set("Users." + uuid + ".Packages.Legendary", 0);
            config.set("Users." + uuid + ".Packages.Exotic", 0);
            config.save(file);
            System.out.println("Successfully created the  entry for " + " (" + uuid + ")");

        } catch (Exception e) {
        }
    }
}

Code for the creation of the item in the gui:

public static String inventoryname = Utils.chat("&fWhite Backpack");

public static Inventory WhiteBackpack(Player player) {

UUID uuid = player.getUniqueId();
Inventory inv = Bukkit.createInventory(null, 27, (inventoryname));

ItemStack common = new ItemStack(Material.INK_SACK);
common.setDurability((byte) 8);
ItemMeta commonMeta = common.getItemMeta();
commonMeta.setDisplayName(Utils.chat("&fCommon Packages &8» &f&l" + Main.pl.getFileControl().getConfig().getString("Users." + uuid + ".Packages.Common")));
common.setItemMeta(commonMeta);

inv.setItem(10, common);

return inv;

}


回答1:


There are a couple things wrong with your code.

First, you never account for what happens if the config you are loading does not exist. When you do main.getDataFolder().mkdirs(), you account for if the folder is missing, but not the file.

Second, you are doing the following operation:

config.set("Users."  + uuid + ".Username", player);

This is incorrect because the player variable is of the type Player, not of the type String. To fix this, you need to instead do the following:

config.set("Users." + uuid + ".Username", player.getName());

Third, you are attempting to write to a file that might not exist. When you initialize you file, you need to also make sure it exists, and if it does not, you need to create it. Right now you have the following:

File file = new File(main.getDataFolder(), "players.yml");

It must be changed to this block of code:

File file = new File(main.getDataFolder(), "players.yml");
if (!file.exists()) {
    try {
        file.createNewFile();
    } catch (IOException ex) {
        ex.printStackTrace();
    }
}

You could just have it be created when you attempt to save the file later on, but that is not ideal since it's safer to let Bukkit write to a file that already exists.

Fourth, and I'm not necessarily sure that this is a problem per se, but you are trying to access an Integer value from the config file as if it were a String. Try to replace the following:

commonMeta.setDisplayName(Utils.chat("&fCommon Packages &8» &f&l"
    + Main.pl.getFileControl().getConfig().getString("Users." + uuid + ".Packages.Common")));

with this instead:

commonMeta.setDisplayName(Utils.chat("&fCommon Packages &8» &f&l"
    + Main.pl.getFileControl().getConfig().getInt("Users." + uuid + ".Packages.Common")));

Hope this gets you moving in the right direction!



来源:https://stackoverflow.com/questions/51233908/bukkit-displaying-null-when-getting-a-string-from-the-config-file

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!