Bukkit-从配置文件获取字符串时显示null

时间:2018-07-08 16:18:27

标签: plugins config minecraft bukkit

所以我一直在为我的Minecraft服务器开发自定义功能,我需要做的一件事情就是从配置文件中获取一个整数,该整数是每个玩家特有的,以显示它们有多少个Packages(键)。有(虚拟物品)

我遇到的问题是,在GUI中显示的是“ null”,而不是显示的是...有没有人可以帮助我?

Item in the gui

用于在配置中创建玩家实例的代码(使用由我的一个朋友提供给我的自定义文件类。)

@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) {
        }
    }
}

在gui中创建项目的代码:

公共静态字符串库存名称= Utils.chat(“&fWhite背包”);

公共静态库存WhiteBackpack(播放器){

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 个答案:

答案 0 :(得分:0)

您的代码有几处错误。

首先,您永远不会考虑如果正在加载的配置不存在会发生什么情况。当您执行main.getDataFolder().mkdirs()时,要说明是否缺少文件夹,而不是文件。

第二,您正在执行以下操作:

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

这是不正确的,因为player变量的类型为Player,而不是类型为String。要解决此问题,您需要执行以下操作:

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

第三,您正在尝试写入可能不存在的文件。初始化文件时,还需要确保它存在,如果不存在,则需要创建它。现在,您有以下内容:

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

必须将其更改为以下代码块:

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

您可以在以后尝试保存文件时创建它,但这并不理想,因为让Bukkit写入已存在的文件更安全。

第四,并且我不一定要确定这本身就是问题,但是您正在尝试从配置文件访问Integer值,就好像它是一个{ {3}}。尝试替换以下内容:

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

与此相反:

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

希望这可以使您朝正确的方向前进!