2013-04-21 48 views
6

我正在爲我的朋友做一個bukkit插件,我想找出如何每2滴答(1/10秒)調用一個函數。如何使功能被稱爲每2滴答

+2

爲什麼downvote?如何比詢問如何使用任何其他API更有效? Bukkit實際上是一個非常受歡迎的已發佈api,如果無法提出有關您最好開始有關每個API的低級投票問題的問題 - MySQL,Hibernate ... – 2013-04-21 03:37:27

+0

[Java Loop每分鐘](http: //download.stackoverflow.com/questions/2702980/java-loop-every-minute) – 2013-04-22 06:25:58

+3

@DavidZ使用'BukkitAPI'這個和使用'Java'完全不同。使用'Sleep'會使整個服務器停止'x'秒,導致滯後和其他許多問題。 – Jojodmo 2014-02-23 01:53:13

回答

14

嗯,這可能不是你想看的地方。您應該使用this來滿足您的任何開發需求。
無論哪種方式,我都可以回答你的問題。你想使用內置的調度程序。您可以使用

server.getScheduler(); 

具體來說,您會希望創建一個Runnable並使其打電話給你的方法,每2個蜱訪問它。

int id = server.getScheduler().scheduleSyncRepeatingTask(plugin, new Runnable() { 
    public void run() { 
     myMethod(); 
    }, 0, 2); 

我將在一秒內解釋同步和異步的區別,但這應該完成你想要的。第一個參數只是對插件的引用(通常爲thisplugin)。第二個是可運行的,你應該用你想調用的方法替換myMethod。第三個參數是延遲量(以滴答爲單位),直到方法第一次運行。我假設爲0,但也可能是兩個,取決於你想要做什麼。最後一個參數是兩次運行之間的時間量,你希望是兩次。
你會發現,該方法返回一個整數,你可以用它來取消任務,像這樣:

server.getScheduler().cancelTask(id); 

它討論異步和同步之間的區別是很重要的。您會注意到我們在開始時調用的方法說時間表同步 RepeatingTask。同步意味着我們指定爲第二個參數的Runnable將在服務器的主線程上運行。任何調用Bukkit/CraftBukkit/Minecraft方法的方法都必須作爲同步運行。如果你運行一些說,修改塊,作爲異步你可以完全破壞服務器。只是不這樣做;)另一方面,異步爲Runnable創建一個單獨的線程,用於後臺任務,如複製和粘貼文件或檢查它是什麼時間。再次,從不運行一種方法,將修改世界爲異步。最後,如果您以後只想運行一次方法但沒有重複,您可以使用方法int id = scheduleSyncDelayedTask(plugin, Runnable, 2),前兩個參數相同,第三個延遲直到可運行運行(蜱)

祝你好運,
提示

+0

確實產卵實體還計入Bukkit/craftbukkit/minecraft方法嗎?或者我可以使用ASync運行這些命令嗎? – xorinzor 2014-07-11 15:19:52

+0

@xorinzor你應該同步運行。 – 2015-01-24 13:50:15

+0

@ Tips48'myMethod();'後面缺少一個大括號。 – Chad 2015-07-03 22:44:04