gpt4 book ai didi

java - Bukkit:从配置文件获取数据返回 null

转载 作者:行者123 更新时间:2023-12-01 13:31:59 26 4
gpt4 key购买 nike

这个问题困扰了我一整天。我一直在谷歌上搜索、搜索和询问,但没有结果。

我有一个用于测试经济的小插件。保存数据效果很好!当我想加载里面存储的数据时,就会出现问题。

这是我的一类代码。 (记住,只是为了测试)

package me.dudemister.crimsongaming;

import java.io.File;
import java.io.IOException;
import java.util.logging.Level;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.AsyncPlayerChatEvent;
import org.bukkit.plugin.java.JavaPlugin;

public class CrimsonGaming extends JavaPlugin implements Listener
{

public boolean log = true;

public YamlConfiguration yc = YamlConfiguration.loadConfiguration(getResource("economy.yml"));
File cf = new File(getDataFolder(), "economy.yml");

public void log(Level level, String message)
{
if(log)
{
getLogger().log(level, message);
}
}

public void enableListeners()
{
Bukkit.getPluginManager().registerEvents(this, this);
}

public void loadData()
{

}

@Override
public void onEnable()
{
enableListeners();
loadData();
unpack();
}

@Override
public void onDisable()
{

}

@EventHandler
public void onChat(AsyncPlayerChatEvent event) throws IOException
{
Player player = event.getPlayer();
String message = event.getMessage();
String[] args = message.split(" ");
String cmd = args[0];

if(message.equalsIgnoreCase(".setupecon"))
{
log(Level.INFO, "Setting up economy...");
player.sendMessage(ChatColor.RED + "Setting up economy...");
yc.set("config.log", true);
yc.set("config.seedmoney", "150");
yc.set("config.bonusmoney", "100");
yc.set("config.bank.min", "0");
yc.set("config.bank.max", "1000000000");
yc.save(cf);
event.setCancelled(true);
}
if(message.equalsIgnoreCase(".money_give"))
{
log(Level.INFO, "Giving player " + player.getName() + " 1,000,000 dollars.");
player.sendMessage(ChatColor.RED + "Giving you $100.");
yc.set("player."+player.getName()+".balance", "100");
yc.save(cf);
}
if(message.equalsIgnoreCase(".money"))
{
String balance = yc.getString("player."+player.getName()+".balance");
log(Level.INFO, "Balance of player " + player.getName() + ": " + balance);
player.sendMessage(ChatColor.RED + "Your current net worth: " + balance);
event.setCancelled(true);
}
}

private void unpack()
{
try
{
if (cf.exists())
{
log(Level.INFO, "Economy detected, skipping unpacking process...");
}
else
{
log(Level.INFO, "No economy detected, creating new one...");
yc.save(cf);
}
}
catch (IOException e)
{
log(Level.SEVERE, "Could not create economy!");
}
}
}

现在,发生的事情是这样的:

一切都很好。它保存并更新配置。除了我想加载它的时候。这是日志和控制台中显示的内容:

Balance of player Dudemister1999: null

它会一直这样做,直到我给自己钱为止。

有什么想法吗?

最佳答案

事实证明,getResource 获取了插件 jar 内的文件。

jar 内的文件无法通过 java 流进行编辑。

您每次都尝试从 jar 内的文件读取,而不是从数据文件夹内创建的文件读取。您需要创建一个加载适当文件的函数:

public YamlConfiguration yc;
//...
public void loadData()
{
if (cf.exists())
yc = YamlConfiguration.loadConfiguration(cf);
else
yc = YamlConfiguration.loadConfiguration(getResource("economy.yml"));
}

附注:

您还应该使用 setIntgetInt 并研究标准 Bukkit 命令系统。 (使用plugin.yml和命令处理程序来正确处理权限等的一个。)

关于java - Bukkit:从配置文件获取数据返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21521907/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com