这一整天一直困扰着我。我一直在谷歌搜索,搜索并四处寻找无济于事。
我有一个用于测试经济的小插件。保存数据工作正常!当我希望加载存储在里面的数据时它就成了问题。
这是我的一流代码。 (记住,仅用于测试)
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
直到我给自己付钱才这样做。
有什么想法吗?
答案 0 :(得分:1)
事实证明getResource
获取了插件jar中的文件。
jars中的文件无法通过流编辑java。
您每次尝试从jar中的文件读取,而不是在数据文件夹中创建的文件。您需要创建一个加载相应文件的函数:
public YamlConfiguration yc;
//...
public void loadData()
{
if (cf.exists())
yc = YamlConfiguration.loadConfiguration(cf);
else
yc = YamlConfiguration.loadConfiguration(getResource("economy.yml"));
}
旁注:
您还应该使用setInt
和getInt
并研究标准的Bukkit命令系统。 (使用plugin.yml和正确处理权限等的命令处理程序的那个。)