我有一个插件,可以让你创建竞技场并保存位置。 我已将位置放在 config.yml 中,但我仍然丢失了它们。
以下是onEnable()
方法:
public void onEnable() {
new Joining(this);
getLogger().info("Final Frontier enabled!");
}
可以让您创建新位置的命令:
if (args[0].equalsIgnoreCase("create")) {
if (args[1] != null && !games.containsKey(args[1])) {
p.sendMessage(ChatColor.YELLOW
+ "You have created game " + ChatColor.GREEN + args[1]);
p.sendMessage(ChatColor.YELLOW
+ "Make sure to set the spawn point for both "
+ ChatColor.RED + "attacking "
+ ChatColor.YELLOW + "and" + ChatColor.AQUA
+ " defending " + ChatColor.YELLOW + "teams!");
numberOfPlayersOnMap.put(args[1], 0);
games.put(args[1].toLowerCase(), p.getLocation());
playerLimit.put(args[1], 12);
gamesList.add(args[1]);
config.set(args[1], p.getLocation()); // IMPORTANT
saveConfig();
return true;
}
}
答案 0 :(得分:1)
你应该在插座论坛上发布这些问题,这些问题不在stackoverflow主题上,你会发现更多的人(都知道Bukkit)愿意帮助你。
您不应该只将原始位置对象保存到文件中。一种简单的方法就是保存坐标,然后在加载数据时从中创建一个新位置。
要编写数据,您可以执行以下操作:
Location loc = p.getLocation();
config.set(args[1], loc.getWorld().getName() + "," + loc.getBlockX() + "," + loc.getBlockY() + "," + loc.getBlockZ());//Writes the actual data to the config file
然后你可以通过读取你之前写的整个字符串并拆分各个部分来解析这些数据:
String location = config.getString(args[1]); //Reads the raw string
String[] parts = location.split(","); //Splits it up into each part
Location location = new Location(Bukkit.getWorld(parts[0]), Integer.parseInt(parts[1]), Integer.parseInt(parts[2]), Integer.parseInt(parts[3]));//Creates a new location with the raw data