2017-05-15 2 views
1

Je tente de retarder une commande dans un plugin bukkit. C'est le planificateur acutal qui est utilisé pour cela.Délai Java Bukkit avec Schedule dans une autre classe

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; 
} 

Voici comment j'ai implémenté ma classe de particules dans le plugin.

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

Parce que ce planificateur est dans une classe et je besoin d'une référence à mon plug-in que je ne peux pas utiliser « ce » à scheduleSyncDelayedTask (ce, nouveau Runnable() { Que dois-je utiliser obtenir à la place une référence à mon plugin ?

+0

S'il vous plaît nous donner un vrai [mcve] – GhostCat

+0

Eh bien quel exemple dois-je donner? J'ai besoin d'une référence à mon plugin quand je suis dans une classe. Si je devais être dans ma classe principale du plugin, je pourrais l'utiliser .. Que dois-je utiliser à la place ici. – qBASHp

+0

Comme le code autour de cette méthode appel? Comment sommes-nous censés savoir dans quelle classe il s'agit et à quoi cela fait-il référence? – GhostCat

Répondre

1

vous pouvez passer la référence à votre classe JavaPlugin en tant que constructeur à votre écoute

private JavaPlugin plugin; 


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

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

Et puis, vous définissez l'auditeur comme une nouvelle instance de particules

setExecutor(new Particle(this), /*...*/); 
0

J'ai résolu le problème moi-même. Pour ceux qui cherchent la même chose. Vous devez changer

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

à

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

Cela peut fonctionner, mais selon les Javadocs, vous pourriez faire face à une exception IllegalStateException en fonction de l'endroit où vous l'appelez en – Kerooker

+0

ok. Dans mon cas cela a fonctionné :) – qBASHp

+0

C'est bon! Mais peut-être pas optimal! – Kerooker