我正在爲我的朋友做一個bukkit插件,我想找出如何每2滴答(1/10秒)調用一個函數。如何使功能被稱爲每2滴答
6
A
回答
14
嗯,這可能不是你想看的地方。您應該使用this來滿足您的任何開發需求。
無論哪種方式,我都可以回答你的問題。你想使用內置的調度程序。您可以使用
server.getScheduler();
具體來說,您會希望創建一個Runnable並使其打電話給你的方法,每2個蜱訪問它。
int id = server.getScheduler().scheduleSyncRepeatingTask(plugin, new Runnable() {
public void run() {
myMethod();
}, 0, 2);
我將在一秒內解釋同步和異步的區別,但這應該完成你想要的。第一個參數只是對插件的引用(通常爲this
或plugin
)。第二個是可運行的,你應該用你想調用的方法替換myMethod
。第三個參數是延遲量(以滴答爲單位),直到方法第一次運行。我假設爲0,但也可能是兩個,取決於你想要做什麼。最後一個參數是兩次運行之間的時間量,你希望是兩次。
你會發現,該方法返回一個整數,你可以用它來取消任務,像這樣:
server.getScheduler().cancelTask(id);
它討論異步和同步之間的區別是很重要的。您會注意到我們在開始時調用的方法說時間表同步 RepeatingTask。同步意味着我們指定爲第二個參數的Runnable將在服務器的主線程上運行。任何調用Bukkit/CraftBukkit/Minecraft方法的方法都必須作爲同步運行。如果你運行一些說,修改塊,作爲異步你可以完全破壞服務器。只是不這樣做;)另一方面,異步爲Runnable創建一個單獨的線程,用於後臺任務,如複製和粘貼文件或檢查它是什麼時間。再次,從不運行一種方法,將修改世界爲異步。最後,如果您以後只想運行一次方法但沒有重複,您可以使用方法int id = scheduleSyncDelayedTask(plugin, Runnable, 2)
,前兩個參數相同,第三個延遲直到可運行運行(蜱)
祝你好運,
提示
爲什麼downvote?如何比詢問如何使用任何其他API更有效? Bukkit實際上是一個非常受歡迎的已發佈api,如果無法提出有關您最好開始有關每個API的低級投票問題的問題 - MySQL,Hibernate ... – 2013-04-21 03:37:27
[Java Loop每分鐘](http: //download.stackoverflow.com/questions/2702980/java-loop-every-minute) – 2013-04-22 06:25:58
@DavidZ使用'BukkitAPI'這個和使用'Java'完全不同。使用'Sleep'會使整個服務器停止'x'秒,導致滯後和其他許多問題。 – Jojodmo 2014-02-23 01:53:13