Bukkit:签名方法不起作用
Bukkit: Methods of Sign not working
for (String sign : config.getConfigurationSection("signs").getKeys(false))
{
double xcoord = config.getDouble("signs."+sign+".x");
double ycoord = config.getDouble("signs."+sign+".y");
double zcoord = config.getDouble("signs."+sign+".z");
Server s = Bukkit.getServer();
double cost = config.getDouble("signs."+sign+".price");
double onePercent = cost / 100;
double addToCost = onePercent * Integer.parseInt(args[1]);
double newCost = cost + addToCost;
config.set("signs."+sign+".price", newCost);
World world = s.getWorld(config.getString("signs."+sign+".world"));
Location loc = new Location(world, xcoord, ycoord, zcoord);
Sign newsign = (Sign) loc.getBlock().getState();
newsign.setLine(3, Double.toString(newCost));
newsign.update();
saveConfig();
}
本质上,我有这些经济购买标志,为了抬高它们的价格,用户运行一个命令,它应该自动更新价格和标志。问题是,它不会让我更新标志 - 上面我有这个循环遍历配置中的所有标志,它应该编辑每个标志上的项目价格。我不断收到以下错误消息:
"The method setLine(int, String) is undefined for the type Sign"
我以为setLine()是Sign的一个方法?从我看过的所有内容来看,setLine() 似乎用于此目的。此外,update() 方法不起作用,getLine() 和 getLines() 也不起作用。为什么 Sign 的方法不能正常工作?
通过查看 bukkit javadoc,似乎有一个 class 和一个名称都为 Sign 的接口。我相信您程序中的 Sign
class 确实在使用 org.bukkit.material.Sign
而它应该使用 org.bukkit.block.Sign
接口。尝试用正式名称替换该特定行中的登录,如下所示:
org.bukkit.block.Sign newsign = (org.bukkit.block.Sign) loc.getBlock().getState();
for (String sign : config.getConfigurationSection("signs").getKeys(false))
{
double xcoord = config.getDouble("signs."+sign+".x");
double ycoord = config.getDouble("signs."+sign+".y");
double zcoord = config.getDouble("signs."+sign+".z");
Server s = Bukkit.getServer();
double cost = config.getDouble("signs."+sign+".price");
double onePercent = cost / 100;
double addToCost = onePercent * Integer.parseInt(args[1]);
double newCost = cost + addToCost;
config.set("signs."+sign+".price", newCost);
World world = s.getWorld(config.getString("signs."+sign+".world"));
Location loc = new Location(world, xcoord, ycoord, zcoord);
Sign newsign = (Sign) loc.getBlock().getState();
newsign.setLine(3, Double.toString(newCost));
newsign.update();
saveConfig();
}
本质上,我有这些经济购买标志,为了抬高它们的价格,用户运行一个命令,它应该自动更新价格和标志。问题是,它不会让我更新标志 - 上面我有这个循环遍历配置中的所有标志,它应该编辑每个标志上的项目价格。我不断收到以下错误消息:
"The method setLine(int, String) is undefined for the type Sign"
我以为setLine()是Sign的一个方法?从我看过的所有内容来看,setLine() 似乎用于此目的。此外,update() 方法不起作用,getLine() 和 getLines() 也不起作用。为什么 Sign 的方法不能正常工作?
通过查看 bukkit javadoc,似乎有一个 class 和一个名称都为 Sign 的接口。我相信您程序中的 Sign
class 确实在使用 org.bukkit.material.Sign
而它应该使用 org.bukkit.block.Sign
接口。尝试用正式名称替换该特定行中的登录,如下所示:
org.bukkit.block.Sign newsign = (org.bukkit.block.Sign) loc.getBlock().getState();