无法将播放器传送到配置文件中设置的坐标[Bukkit]

时间:2014-02-21 17:24:01

标签: java bukkit

所以我基本上制作了一个Warping系统,但是我用它来制作一个迷你游戏。我希望服务器的所有者能够设置不同玩家在小游戏开始时产生的扭曲。由于某种原因,我收到一个错误,说我无法传送播放器,这是我传送部分的代码:

    if(cmd.getName().equalsIgnoreCase("cakestart")){

            if(getConfig().contains("locations." + args[0])){
                int locationsX = this.getConfig().getInt("locations" + args[0] + ".X");
                int locationsY = this.getConfig().getInt("locations" + args[0] + ".Y");
                int locationsZ = this.getConfig().getInt("locations" + args[0] + ".Z");
                int locationsYaw = this.getConfig().getInt("locations" + args[0] + ".Yaw");
                int locationsPitch = this.getConfig().getInt("locations" + args[0] + ".Pitch");
                Object locationsworld = this.getConfig().get("locations" + args[0] + ".World");

                Location cakestart = new Location((World) locationsworld, locationsX, locationsY, locationsZ, locationsYaw, locationsPitch);

                p.teleport(cakestart);
                p.sendMessage("TPED!");
            }

        }

错误发生在:

        p.teleport(cakestart);

我可以提供您需要的更多信息。

2 个答案:

答案 0 :(得分:1)

我建议不要

Object locationsworld = this.getConfig().get("locations" + args[0] + ".World");
Location cakestart = new Location((World) locationsworld, locationsX, locationsY, locationsZ, locationsYaw, locationsPitch);

您可以将locationsworld定义为字符串,然后使用它唯一的区分大小写的名称从服务器获取实际世界。假设您在扩展JavaPlugin的主类中,它将如下所示:

String locationsworld = this.getConfig().get("locations" + args[0] + ".World");
World tworld = this.getServer().getWorld(locationsworld);
Location cakestart = new Location(tworld, locationsX, locationsY, locationsZ, locationsYaw, locationsPitch);

这样你就没有一个无效的世界。在世界级中有更多的信息只是一个名称,除非你保存所有信息而不仅仅是World.getName();,否则你不会在类型转换方面取得太大成功。

编辑:事后补充:你也可能会对其他值使用双打而不是整数,尤其是俯仰和偏航。

答案 1 :(得分:0)

可能无法将Object强制转换为World对象。我会尝试将世界保存为字符串并使用Bukkit.getWorld("string");将其解析为世界对象。

要从配置中获取世界,您只需要这样做:

Bukkit.getWorld(getConfig().getString("path of the world in the config");