Plugin Résolu Code en Java foireux

Salut,

Déjà dans ton code il n'y a pas de boucle qui ferait baisser ton timeur. Donc ici tu change juste l'XP de la personne et rien ne bouge... Tu dois utiliser les schedulers pour faire une tâche "parallèle" à bukkit (afin d'éviter de faire un sleep qui bloquerait tout ton serveur).

Bon, concrètement:
PHP:
    public boolean onCommand(CommandSender sender, Command command, String label, String[] args){
        
        // On vérifie que c'est bien un joueur
        if(!sender instanceof Player) {
                sender.sendMessage("Réservé aux joueurs");
                return false;
        }


        final Player p = (Player) sender;
        int ptimer = 0;

        String help = ChatColor.RED + "Merci de mettre une durée chiffrée " + ChatColor.GRAY + "(/timer <temps>)";
   
        if(label.equalsIgnoreCase("timer")){
            String Number = null;
         
            if(args.length == 1) {
                try {
                    ptimer = Integer.parseInt(args[0]);
                } catch(Exception e) { // flemme de trouver de tête quel est l'exception xD
                    p.sendMessage(help);
                    return false;
                }
             
                p.sendMessage(ChatColor.DARK_GREEN + "Ton timer vient de commencer !");
                p.setLevel(ptimer);
             
                final int finalPTimer = ptimer; // compatibilité java 7

                // La variable "plugin" c'est ton instance "main"
                int taskId = Bukkit.getScheduler().runTaskTimer(plugin, new Runnable() {
                        int schedulTimer = finalPTimer;
                        @Override
                        public void run() {
                            p.setLevel(schedulTimer--);
                            // Si le compteur à fini
                            if(ptimer < 0) {
                                Bukkit.getScheduler().cancelTask(taskId);
                            }
                        }
                    }, 20L, 20L); // 20 ticks correspondent à une seconde


            } else {
                p.sendMessage(help);
            }
       
        }
   
        return false;
   
    }
Le code n'a pas été testé... Tout a été écrit de tête (merci d'être indulgent xD).


Cordialement,
Detobel36
 
Bonjour !

Merci Deto je test ça de suite ! :D

AlexFatta

EDIT :

@Detobel36
Voici voilà :/ Encore plus de rouge xDD
erreur java.jpg
 
Dernière édition:
Dernière édition:
@Detobel36 J'ai pas compris où je dois le mettre parce que à la fin c'est vague xD Et puis getTaskID() Eclipse le trouve pas alors je sais pas si je dois import ou pas mais en tout cas Eclipse ne trouve le pas.

AlexFatta
 
Salut,

@Detobel36 J'ai pas compris où je dois le mettre parce que à la fin c'est vague xD Et puis getTaskID() Eclipse le trouve pas alors je sais pas si je dois import ou pas mais en tout cas Eclipse ne trouve le pas.
Allé allé... C'est comme pour les problèmes de config, une recherche sur internet n'aurait pas été du luxe.

Au moins sur la javadoc de spigot/bukkit: https://hub.spigotmc.org/javadocs/spigot/
Tu serais tombé la dessus: https://hub.spigotmc.org/javadocs/spigot/org/bukkit/scheduler/BukkitTask.html#getTaskId()

Conclusion:
PHP:
                // La variable "plugin" c'est ton instance "main"
                int taskId = Bukkit.getScheduler().runTaskTimer(plugin, new Runnable() {
                        int schedulTimer = finalPTimer;
                        @Override
                        public void run() {
                            p.setLevel(schedulTimer--);
                            // Si le compteur à fini
                            if(ptimer < 0) {
                                Bukkit.getScheduler().cancelTask(taskId);
                            }
                        }
                    }, 20L, 20L).getTaskId(); // A la fin ICI <----


Cordialement,
Detobel36