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

EvroxFR

Bucheron
20 Janvier 2018
26
2
16
23
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();
        
    }
 

Detobel36

Créateur de plugins (PhoenixRebirth)
Support
17 Août 2012
10 530
24
2 247
347
27
Bruxelles - Belgique
www.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

Bucheron
20 Janvier 2018
26
2
16
23
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

Bucheron
20 Janvier 2018
26
2
16
23
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
1
931
298
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

Bucheron
20 Janvier 2018
26
2
16
23
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 ^^'