2014-02-21 85 views
0

所以我基本上製作了一個Warping系統,但我正在使用它作爲迷你遊戲。我希望服務器的所有者能夠設置不同玩家的變形,以便在迷你遊戲開始時產生。出於某種原因,我得到它是說,我不能瞬移玩家一個錯誤,這是我的瞬移部分代碼:無法傳送玩家到配置文件中設置的座標[Bukkit]

 p.teleport(cakestart); 

我可以:

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!"); 
      } 

     } 

的錯誤是發生給你需要的更多信息。

+0

什麼是StackTrace? (在控制檯中顯示的內容) – Jojodmo

回答

0

該對象可能無法轉換爲World對象。我會嘗試將世界保存爲字符串並使用Bukkit.getWorld("string");將其解析爲世界對象。

要從配置所有你需要做的得到世界是這樣的:

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

您錯過了''''那裏。 – hintss

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();,否則你不會在類型轉換中取得很大的成功。

編輯:事後思考:你也可能會使用雙打而不是整數作爲其他值,尤其是俯仰和偏航。