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

Discussion dans 'Support serveur et plugins' créé par EvroxFR, 1 Avril 2019.

  1. EvroxFR

    EvroxFR Explorateur de cavernes

    Inscrit:
    20 Janvier 2018
    Messages:
    26
    J'aime reçus:
    2
    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();
            
        }
     
  2. Alex Fatta

    Alex Fatta Commandant de la Flotte et de la Horde

    Inscrit:
    13 Août 2014
    Messages:
    1 288
    J'aime reçus:
    174
  3. EvroxFR

    EvroxFR Explorateur de cavernes

    Inscrit:
    20 Janvier 2018
    Messages:
    26
    J'aime reçus:
    2
  4. Detobel36

    Detobel36 Créateur de plugins (PhoenixRebirth)
    Support

    Inscrit:
    17 Août 2012
    Messages:
    9 166
    J'aime reçus:
    1 938
    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
     
  5. EvroxFR

    EvroxFR Explorateur de cavernes

    Inscrit:
    20 Janvier 2018
    Messages:
    26
    J'aime reçus:
    2
    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 =)
     
  6. Detobel36

    Detobel36 Créateur de plugins (PhoenixRebirth)
    Support

    Inscrit:
    17 Août 2012
    Messages:
    9 166
    J'aime reçus:
    1 938
    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
     
  7. EvroxFR

    EvroxFR Explorateur de cavernes

    Inscrit:
    20 Janvier 2018
    Messages:
    26
    J'aime reçus:
    2

    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);
     
  8. DiscowZombie

    DiscowZombie Dev passionné
    Staff Modérateur Support

    Inscrit:
    2 Mars 2017
    Messages:
    2 595
    J'aime reçus:
    862
    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. ;)
     
  9. EvroxFR

    EvroxFR Explorateur de cavernes

    Inscrit:
    20 Janvier 2018
    Messages:
    26
    J'aime reçus:
    2
    Je ferai désormais attention, merci beaucoup.

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

Partager cette page