Plugin Problème spawn mob après Timer()

EvroxFR

Explorateur de cavernes
20 Janvier 2018
26
2
16
19
Bonjour, j'ai un soucis avec mon plugin en développement.
Je veux faire spawn un mob à la fin d'un Timer.
J'ai crée une commande pour le faire spawn, cela fonctionne parfaitement.
Mais pour le faire spawn a la fin de mon timer, cela ne fonctionne pas mais je n'ai pas d'erreur console.

Timer:
Code:
if(Teams.team1.size() == 5 && Teams.team2.size() == 5 && Teams.team3.size() == 5) {
            
            timer.scheduleAtFixedRate(new TimerTask() {
                @Override
                public void run() {
                    
                    time--;
                    getServer().broadcastMessage(PREFIX+"§9L'event commence dans "+time+" §9sec");
                    if(time <= 0) {
                        timer.cancel();
                        timer.purge();
                        time = 11;
                        launchGame();
                    }
                    
                }
            }, 0, 1000);
            
        }
Fonctions utilisées:
Code:
    public void teleportTeams() {
        
        Location spawnteam1 = new Location(Bukkit.getWorld(getConfig().getString("world")),
                getConfig().getDouble("spawns.team1.x"),
                getConfig().getDouble("spawns.team1.y"),
                getConfig().getDouble("spawns.team1.z"),
                getConfig().getInt("spawns.team1.yaw"),
                getConfig().getInt("spawns.team1.pitch"));
        Location spawnteam2 = new Location(Bukkit.getWorld(getConfig().getString("world")),
                getConfig().getDouble("spawns.team2.x"),
                getConfig().getDouble("spawns.team2.y"),
                getConfig().getDouble("spawns.team2.z"),
                getConfig().getInt("spawns.team2.yaw"),
                getConfig().getInt("spawns.team2.pitch"));
        Location spawnteam3 = new Location(Bukkit.getWorld(getConfig().getString("world")),
                getConfig().getDouble("spawns.team3.x"),
                getConfig().getDouble("spawns.team3.y"),
                getConfig().getDouble("spawns.team3.z"),
                getConfig().getInt("spawns.team3.yaw"),
                getConfig().getInt("spawns.team3.pitch"));
        
        for (int i = 0; i < Teams.team1.size(); i++) {
              Player p = Teams.team1.get(i).getPlayer();
              if(p != null)
                  p.teleport(spawnteam1);
        }
        for (int i = 0; i < Teams.team2.size(); i++) {
              Player p = Teams.team2.get(i).getPlayer();
              if(p != null)
                  p.teleport(spawnteam2);
        }
        for (int i = 0; i < Teams.team3.size(); i++) {
              Player p = Teams.team3.get(i).getPlayer();
              if(p != null)
                  p.teleport(spawnteam3);
        }

        
    }
    
    public void spawnCreature() {
        
        Location spawnMob = new Location(Bukkit.getWorld(getConfig().getString("world")),
                getConfig().getDouble("spawns.mob.x"),
                getConfig().getDouble("spawns.mob.y") + 2,
                getConfig().getDouble("spawns.mob.z"));
        @SuppressWarnings("unused")
        Giant giant = (Giant) spawnMob.getWorld().spawnEntity(spawnMob, EntityType.GIANT);
        
    }
    
    public void launchGame() {
        
        teleportTeams();
        spawnCreature();
        
    }
 

EvroxFR

Explorateur de cavernes
20 Janvier 2018
26
2
16
19

Detobel36

Créateur de plugins (PhoenixRebirth)
Support
17 Août 2012
9 622
2 122
347
24
Bruxelles - Belgique
phoenix-rebirth.fr
Salut,

Qu'est-ce qui ne fonctionne pas ? Tu as des erreurs ?
Qu'est-ce qu'il se passe à la fin du timer ?

Pourquoi ne pas utiliser les Bukkit.getScheduler().runTaskLater()... à la place de "scheduleAtFixedRate" qui est lié à Java mais pas à spigot ?


Cordialement,
Detobel36
 

EvroxFR

Explorateur de cavernes
20 Janvier 2018
26
2
16
19
Salut,

Qu'est-ce qui ne fonctionne pas ? Tu as des erreurs ?
Qu'est-ce qu'il se passe à la fin du timer ?

Pourquoi ne pas utiliser les Bukkit.getScheduler().runTaskLater()... à la place de "scheduleAtFixedRate" qui est lié à Java mais pas à spigot ?


Cordialement,
Detobel36
Comme c'est écrit sur le poste, aucune erreur.
A la fin du timer, les joeurs sont TP mais le mob ne spawn pas (fonctionne sans timer)

Je vais essayer le timer bukkit, merci =)
 

EvroxFR

Explorateur de cavernes
20 Janvier 2018
26
2
16
19
Salut,


Je pense que c'est parce que ta tâche est asynchrone... Essaye avec le scheduler bukkit et revient vers nous si ça bug encore (en nous montrant ton nouveau code).


Cordialement,
Detobel36

Tu avais raison, le fait que ça soit synchro fonctionne.

Le nouveau code:
Code:
this.getServer().broadcastMessage(PREFIX+"L'event commence dans 10 sec");
            
            this.getServer().getScheduler().scheduleSyncDelayedTask(this, new Runnable() {
                
                  public void run() {
                      
                      launchGame();
                      
                  }
                  
            }, 200L);
 

DiscowZombie

Développeur
Staff
Modérateur
Support
2 Mars 2017
2 659
933
248
19
Alsace
www.discowzombie.fr
Salut,

les opérations asynchrones sur Bukkit sont interdites, sauf lorsque c'est expressément mentionné comme supporter. Ça paraît donc plutôt logique que ça ne fonctionne, cependant tu aurais dû recevoir une exception de Bukkit, il me semblait que c'était le cas. ;)
 

EvroxFR

Explorateur de cavernes
20 Janvier 2018
26
2
16
19
Salut,

les opérations asynchrones sur Bukkit sont interdites, sauf lorsque c'est expressément mentionné comme supporter. Ça paraît donc plutôt logique que ça ne fonctionne, cependant tu aurais dû recevoir une exception de Bukkit, il me semblait que c'était le cas. ;)
Je ferai désormais attention, merci beaucoup.

Pour le fait qu'il n'y ait pas d’exception, je ne sais pas ^^'
 

Pour voir moins d'annonces créez un compte ou connectez-vous.