2017-05-15 79 views
1

即時嘗試延遲bukkit插件中的命令。這是用於它的acutal調度程序。Java Bukkit在另一個類中延遲

public class Particle implements CommandExecutor 
{ 

@Override 
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] arg) { 

    if (sender instanceof Player) 
    { 
      Bukkit.getScheduler().scheduleSyncDelayedTask(this, new Runnable(){ 

      @Override 
      public void run() { 
       player.sendMessage("blabla"); 

      } 

     }, 12); 
return true; 
} 

return false; 
} 

這是我如何在插件中實現我的粒子類。

public void onEnable(){ 
    this.getCommand("part").setExecutor(new Particle()); 
} 

因爲這個調度是一個類裏面,我需要我的插件參考我不能使用「本」在scheduleSyncDelayedTask(這一點,新的Runnable(){ 什麼我用,而不是讓我的插件參考?

+0

請給我們一個真正的[MCVE] – GhostCat

+0

那麼應該我給什麼例子?在課堂內部時,我需要參考我的插件。如果我將在我的插件主類中,我可以使用這個..我在這裏使用什麼。 – qBASHp

+0

就像這個方法調用的代碼一樣嗎?我們應該如何知道這是什麼類,這是指這是指什麼? – GhostCat

回答

1

可以作爲一個構造函數的引用您的JavaPlugin類傳遞給你的聽衆

private JavaPlugin plugin; 


public Particle(JavaPlugin plugin){ 
    this.plugin = plugin; 
} 

@Override 
public boolean onCommand(/* Do your thing*/){ 
    Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, /*...*/); 
} 

然後,您將聽者粒子

的新實例
setExecutor(new Particle(this), /*...*/); 
0

我自己解決了這個問題。對於那些正在尋找相同的東西。您需要更改

Bukkit.getScheduler().scheduleSyncDelayedTask(this, new Runnable(){ 

Bukkit.getScheduler().scheduleSyncDelayedTask(JavaPlugin.getProvidingPlugin(<NameOfTheClassYouAreIn.class), new Runnable(){ 
+0

這可能會起作用,但根據Javadocs,您可能會遇到IllegalStateException,具體取決於您在 – Kerooker

+0

中調用它的位置。在我的情況下,它解決了:) – qBASHp

+0

這很好!但可能不是最優的! – Kerooker