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();