【问题标题】:Bukkit - Displaying null when getting a string from the config fileBukkit - 从配置文件中获取字符串时显示 null
【发布时间】:2018-07-08 16:18:27
【问题描述】:

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

我遇到的问题是,在 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 中创建项目的代码:

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;

}

【问题讨论】:

标签: plugins config minecraft bukkit


【解决方案1】:

您的代码有几处问题。

首先,如果您正在加载的配置不存在,您永远不会考虑会发生什么。当您执行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 值,就好像它是 String .尝试替换以下内容:

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

希望这能让你朝着正确的方向前进!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-06
    • 1970-01-01
    相关资源
    最近更新 更多