2015-06-10 24 views
0

我有兩個類「主要」的命令和更多的事件和「事件」,現在 我想讓事件「PlayerdeathEvent」傳送我到一個點,從點的座標保存在一個配置現在我測試:Java(Bukkit)如何訪問Config與此?

  1. 我在事件類使它

    public void lbbkampfrespawn() 
    { 
    
    FileConfiguration cfg = this.getConfig(); 
    
    { 
         String world = cfg.getString("LBBsetkampfrespawn1.world"); 
         double x = cfg.getDouble("LBBsetkampfrespawn1.x"); 
         double y = cfg.getDouble("LBBsetkampfrespawn1.y"); 
         double z = cfg.getDouble("LBBsetkampfrespawn1.z"); 
         double yaw = cfg.getDouble("LBBsetkampfrespawn1.yaw"); 
         double pitch = cfg.getDouble("LBBsetkampfrespawn1.pitch"); 
         Location loc = new Location(Bukkit.getWorld(world), x, y, z); 
         loc.setYaw((float) yaw); 
         loc.setPitch((float) pitch); 
         p1.teleport(loc); 
    } 
    { 
    
         String world = cfg.getString("LBBsetkampfrespawn2.world"); 
         double x = cfg.getDouble("LBBsetkampfrespawn2.x"); 
         double y = cfg.getDouble("LBBsetkampfrespawn2.y"); 
         double z = cfg.getDouble("LBBsetkampfrespawn2.z"); 
         double yaw = cfg.getDouble("LBBsetkampfrespawn2.yaw"); 
         double pitch = cfg.getDouble("LBBsetkampfrespawn2.pitch"); 
         Location loc = new Location(Bukkit.getWorld(world), x, y, z); 
         loc.setYaw((float) yaw); 
         loc.setPitch((float) pitch); 
         p2.teleport(loc); 
    } 
    
    
    
    } 
    
    
    } 
    

問題: 的不知道關於"getConfig()"日食說我crathe方法getConfig()

  • i相靜態

    public static void lbbkampfrespawn() 
    { 
    
    FileConfiguration cfg = this.getConfig(); 
    
    { 
         String world = cfg.getString("LBBsetkampfrespawn1.world"); 
         double x = cfg.getDouble("LBBsetkampfrespawn1.x"); 
         double y = cfg.getDouble("LBBsetkampfrespawn1.y"); 
         double z = cfg.getDouble("LBBsetkampfrespawn1.z"); 
         double yaw = cfg.getDouble("LBBsetkampfrespawn1.yaw"); 
         double pitch = cfg.getDouble("LBBsetkampfrespawn1.pitch"); 
         Location loc = new Location(Bukkit.getWorld(world), x, y, z); 
         loc.setYaw((float) yaw); 
         loc.setPitch((float) pitch); 
         p1.teleport(loc); 
    } 
    { 
    
         String world = cfg.getString("LBBsetkampfrespawn2.world"); 
         double x = cfg.getDouble("LBBsetkampfrespawn2.x"); 
         double y = cfg.getDouble("LBBsetkampfrespawn2.y"); 
         double z = cfg.getDouble("LBBsetkampfrespawn2.z"); 
         double yaw = cfg.getDouble("LBBsetkampfrespawn2.yaw"); 
         double pitch = cfg.getDouble("LBBsetkampfrespawn2.pitch"); 
         Location loc = new Location(Bukkit.getWorld(world), x, y, z); 
         loc.setYaw((float) yaw); 
         loc.setPitch((float) pitch); 
         p2.teleport(loc); 
    } 
    
    
    
    } 
    
  • 問題使它在主類:我不能USET此。在靜態

    我必須做的感謝您的幫助!

    當你需要更多的鱈魚,請發送什麼。

    謝謝。 Sry基因的拼寫

    回答

    1

    編者按:
    答案的德國版本以前包括在內,但removed because職位應是英文的。如果您想看到它,請使用revision history

    getConfig()方法繼承自JavaPlugin類,它只有一個類應該擴展。有許多方法可以從另一個類訪問配置文件。例如,可以保留對「主」類或插件(擴展JavaPlugin的那個)的引用,然後使用該對象/引用調用getConfig()。你也可以創建一個靜態的getter方法來返回你的插件的實例(不知道這是否是好的做法)。 Eclipse可能會告訴您創建getConfig()方法,因爲您在不延伸JavaPlugin的類中調用它。

    例如,假設您的課程延伸JavaPlugin稱爲「Main」。例如,如果您有一個想要訪問Main類的偵聽器類,您可以在偵聽器類的構造函數中詢問這些信息。在監聽器類你會:

    public class MainListener implements Listener { 
    
        private Main plugin; 
    
        public MainListener(Main plugin) { 
         this.plugin = plugin; 
        } 
    
        @EventHandler 
        public void onRespawn(PlayerRespawnEvent event) { 
         FileConfiguration config = plugin.getConfig(); 
        } 
    

    正如你所看到的,這使您能夠在您的MainListener類使用plugin.getConfig()任何地方。您將使用new MainListener(this);實例化偵聽器(例如您的Main類的onEnable()方法)。當然,不要忘記註冊聽衆。

    我明白你要在這裏做什麼,但我相信有一個更好的方式來做到這一點(傳送玩家在他死的時候是毛病或明顯不行)。我不知道爲什麼你讓你的方法是靜態的,你是否在事件方法中調用它?P1p2不作爲方法中的參數傳遞。這就是我會做(嘗試這樣做,它的工作):而不是瞬移對死亡事件的玩家的,改變重生位置當玩家重生,像這樣:

    @EventHandler 
    public void onPlayerRespawn(PlayerRespawnEvent event) { 
        FileConfiguration config = getConfig(); //Or whichever method you are using 
        World world = Bukkit.getWorld(config.getString("world")); 
        double x = config.getDouble("x"); 
        double y = config.getDouble("y"); 
        double z = config.getDouble("z"); 
        float yaw = (float) config.getDouble("yaw"); 
        float pitch = (float) config.getDouble("pitch"); 
        event.setRespawnLocation(new Location(world, x, y, z, yaw, pitch)); 
    } 
    

    這裏是我的測試配置。 YML文件:

    world: world 
    x: 0 
    y: 80 
    z: 0 
    yaw: 0 
    pitch: 0 
    

    注:我沒有檢查這個名字,這個世界是否真的存在和位置是否是一個安全的一個爲玩家瞬移。那將是你需要實施的東西。