2014-08-28 42 views
0

我正在做一個Bukkit插件,我需要在一個循環中更新。Minecraft scheduleSyncRepeatingTask Bukkit到另一個類

我使用:

Bukkit.getServer().getScheduler().scheduleSyncRepeatingTask(this, 
     new Runnable() { 
    public void run() { 
     // CODE 
    } 
}, 60, 100); 

onEnable方法中,但我不能啓動或停止方法,甚至得到它。

我想給玩家一個Item每秒他需要的物品的數量是在EventHandler的另一個類中的方法。

+0

歡迎來到[so]。這裏的問題預計會__針對具體的編程問題__什麼是_expected behaviour_,_specific錯誤或意想不到的行爲,你會得到_(一個明確的問題陳述)和一個___可重複使用的例子_?請參加__ [導遊] __。另請參見[__Minimal__,__Complete__和__Verifiable__示例](http://stackoverflow.com/help/mcve)或[__Short__,__Self Contained__,Correct(__Compilable__)示例](http://sscce.org/) – Unihedron 2014-08-29 08:02:35

+0

參見[BukkitScheduler](http://wiki.bukkit.org/Scheduler_Programming#BukkitScheduler)。 – 2014-08-30 17:12:20

回答

1

您應該使用BukkitRunnable,尤其是因爲your way of scheduling tasks is deprecated in recent bukkits

什麼,你應該做的是做一個擴展BukkitRunnable一個新的類,然後作出它的一個實例,並運行

,你可以稍後運行

​​

在BukkitRunnable的同一個實例上停止它。

http://wiki.bukkit.org/Scheduler_Programming

+0

你確定我們可以在類上使用'this.cancel()'嗎? – 2014-08-31 10:21:55

+0

[是](http://jd.bukkit.org/dev/apidocs/org/bukkit/scheduler/BukkitRunnable.html#cancel()) – hintss 2014-08-31 18:50:46

+0

你能舉個例子嗎? – CaptainStony 2014-09-01 12:25:53

0

您可以創建一個實現Runnable的新類。

public class MyTask implements Runnable { 
    public void run() { 
    //do something 
    } 
} 

然後,你可以,如果你想安排從其他類像事件處理程序,你可以在你的主類寫grtInstance()方法任務使用

Bukkit.getServer().getScheduler().scheduleSyncRepeatingTask(this, new MyTask(), 60, 100); 

安排,或者你可以使用Bukkit.getPluginManager().getPlugin("yourplugin")來檢索你的插件主類實例。

+0

我不能'在運行方法中使用事件處理程序,但我想要一個可以從另一個類調用的刷新程序的類。我想要一個方法繼續運行overagain – CaptainStony 2014-08-28 18:37:57

+0

所以你想從eventhandler調用run()方法?在eventhandler中的 – Jittapan 2014-08-28 23:59:45

+0

是一個if語句,可以運行evry 1秒 – CaptainStony 2014-08-29 08:51:52

0

您可以將一個ID,調度,用正確的參數,你可以再從其他類訪問。 另外,使用BukkitRunnables 您可以在調度程序中通過this.cancel取消它。