所以我一直在为我的Minecraft服务器开发自定义功能,我需要做的一件事情就是从配置文件中获取一个整数,该整数是每个玩家特有的,以显示它们有多少个Packages(键)。有(虚拟物品)
我遇到的问题是,在GUI中显示的是“ null”,而不是显示的是...有没有人可以帮助我?
用于在配置中创建玩家实例的代码(使用由我的一个朋友提供给我的自定义文件类。)
@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;
}
答案 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")));
希望这可以使您朝正确的方向前进!