Résolu Lancement simultané ou attente de l'autre joueurs timer

Booskap

Aventurier
7 Novembre 2019
10
3
3
25
Bonjour,

Je vous explique mon problème, je créer un plugin FFa personnalisé.
J'ai donc un système de choix de kits et une téléportation via Timer, le problème étant que lorsque qu'un joueurs séléctionne un kit pendant que le timer est lancé ça fait planter le timer , il tourne en boucle..

Je vous montre le code ça sera plus simple que de long discours.. :


InventoryClickEvent :

Java:
@EventHandler
    public void onClickKit(InventoryClickEvent e) {
        Inventory inv = e.getInventory();
        Player p = (Player) e.getWhoClicked();
        ItemStack current = e.getCurrentItem();
      
        if(current == null) return;
      
        if(inv.getName().equalsIgnoreCase("§c§lKIT MENU")) {
            e.setCancelled(true);
            p.closeInventory();
          
            switch(current.getType()) {
                case DIAMOND_SWORD:
//                    p.getInventory().clear();
                    if(p.getGameMode() == GameMode.SPECTATOR) {
                        new TaskJoin();
                        TaskJoin.runnable(p);
              
//                        Kits.WARRIOR.add(p);
                      
                        Item helmet = new Item(Material.IRON_HELMET, 1, "§e§lCasque");
                        Item chestPlate = new Item(Material.IRON_CHESTPLATE, 1, "§e§lPlastron");
                        Item leggings = new Item(Material.IRON_LEGGINGS, 1, "§e§lLeggin");
                        Item boots = new Item(Material.IRON_BOOTS, 1, "§e§lBottes");
                        Item sword = new Item(Material.IRON_SWORD, 1, "§e§lEpee du guerrier");
                        Item gApple = new Item(Material.GOLDEN_APPLE, 6, "§e§lPomme d'or");
                          
                        p.getInventory().setHelmet(helmet.getItems());
                        p.getInventory().setChestplate(chestPlate.getItems());
                        p.getInventory().setLeggings(leggings.getItems());
                        p.getInventory().setBoots(boots.getItems());
                        p.getInventory().setItemInHand(sword.getItems());
                        p.getInventory().setItem(1, gApple.getItems());
                      
                      
                          
                        p.sendMessage("§7[§6Herozia§7]"+"§rSelection du kit §4§lGuerrier §ravec §a§osucces");                 
                    }
                  
                    break;
                case BOW:
//                    Kits.ARCHER.add(p);
                  
                    break;
                case TNT:
//                    Kits.PYROMAN.add(p);
                  
                    break;
                default:
                    p.sendMessage("§7[§6Herozia§7]"+"§cErreur veuillez reessayer.");
                    break;
            }
          
        }
      
    }

TaskJoin :

Java:
public class TaskJoin {

    private static int timer = 5;
    static int task;
//    private static Main main;
    private static int qtLoc = 0;
  
//    public TaskJoin(Main main) {
//        this.main = main;
//    }
  
    public static void runnable(Player p) {
        task = Bukkit.getScheduler().scheduleSyncRepeatingTask(Main.getInstance(), new Runnable() {
          
            @Override
            public void run() {
              
                p.sendMessage("§7[§6Herozia§7]"+"Téléportation dans "+timer+"s");

                if(timer == 0) {
                    Bukkit.getScheduler().cancelTask(task);
                    Location loc1 = new Location(p.getWorld(), -207, 6, -850, -43.6f, 21.4f);
                    Location loc2 = new Location(p.getWorld(), -201, 6, -834, -88.6f, 21.4f);
                    Location loc3 = new Location(p.getWorld(), -208, 6, -829, -152.6f, 7f);
                    Location loc4 = new Location(p.getWorld(), -215, 6, -834, -122.8f, 14.4f);
                    Random rLoc = new Random();
                  
                    ArrayList<Location> aLoc = new ArrayList<Location>();
                    aLoc.add(loc1);
                    aLoc.add(loc2);
                    aLoc.add(loc3);
                    aLoc.add(loc4);
                    qtLoc = aLoc.size();
                  
                    p.sendMessage("§7[§6Herozia§7]"+"Téléportation vers l'arène FFA en cours..");
                    p.teleport(aLoc.get(0+rLoc.nextInt(qtLoc)));
//                 
//                    Kits pKits = Main.getInstance().kits.get(p);
//                    ArrayList<ItemStack> itemKit = pKits.getItem();
//                 
//                    for(ItemStack item : itemKit) {
//                        p.getInventory().addItem(item);
//                    }
//                 
//                    p.getInventory().clear();
                    p.setGameMode(GameMode.SURVIVAL);
                    timer = 6;
                  
                }
              
                timer--;
            }

        }, 0, 20);
          
    }

}

Main :

Java:
public class Main extends JavaPlugin {
  
    private static Main instance;
    private List<Player> pl = new ArrayList<>();
    public HashMap<Player, Kits> kits = new HashMap<>();
  
    public KitContents kitContents = new KitContents();
  
    @Override
    public void onEnable() {
        System.out.println("\n"+"===========[Ffa Herozia Plugin]==========="+"\n\t\tis Enabled"+"\n==========================================");
      
        instance = this;
      
        PluginManager pm = getServer().getPluginManager();
        pm.registerEvents(new PlayerListeners(this), this);
        pm.registerEvents(new OnJoinEvent(this), this);
        pm.registerEvents(new OnInteractEvent(), this);
        pm.registerEvents(new OnClickEvent(), this);
        pm.registerEvents(new Scoreboard(), this);
//        onEventRegister();
    }
    @Override
    public void onDisable() {
        System.out.println("\n"+"===========[Ffa Herozia Plugin]==========="+"\n\t\tis Enabled"+"\n==========================================");
    }
  
    public static Main getInstance() {
        return instance;
    }
  
//    public void onEventRegister() {
//        getServer().getPluginManager().registerEvents(new OnJoinEvent(), this);
//    }
  
    public List<Player> getPlayers(){
        return pl;
    }

}

J'ai pensé a faire une arraylist ou une hashmap de player , mais je vois pas comment faire une condition qui gère ça .. si vous pouvez m'indiquer la bonne voie, merci a vous..
 
Dernière édition:

Alex Fatta

Commandant de la Flotte et de la Horde
13 Août 2014
1 391
1
191
187
Bonjour !

Tu peux simplement mettre en place un booléen qui vérifie si oui ou non le timer est lancé lorsque le joueur sélectionne un kit ;)

AlexFatta
 
Dernière édition:

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,

Ce que dit @Alex Fatta est une bonne idée.
Cependant, il y a une incohérence dans ton code. Enfin, soit je n'ai pas bien compris, soit tu n'as pas bien compris ;)
Quand tu met un élément en "static", cela signifie que c'est le même peut importe le nombre d'objet que tu créés.

Donc, quand tu met "task" en static, cela signifie que tu considère UN SEUL compteur... Ton code laisse plutôt penser que tu as un compteur par joueur.

Donc soit tu veux un compteur général et dans ce cas la, il faut "retirer" le fait que le compteur soit lié à un joueur. Soit il faut adapter ton code pour qu'il accepte un compteur (maximum) par joueur.

Du coup voici un exemple en partant du principe que chaque joueur ai son compteur (attention, code non testé !!):
Java:
    private static final Item helmet = new Item(Material.IRON_HELMET, 1, "§e§lCasque");
    private static final Item chestPlate = new Item(Material.IRON_CHESTPLATE, 1, "§e§lPlastron");
    private static final Item leggings = new Item(Material.IRON_LEGGINGS, 1, "§e§lLeggin");
    private static final Item boots = new Item(Material.IRON_BOOTS, 1, "§e§lBottes");
    private static final Item sword = new Item(Material.IRON_SWORD, 1, "§e§lEpee du guerrier");
    private static final Item gApple = new Item(Material.GOLDEN_APPLE, 6, "§e§lPomme d'or");

    private static final Main plugin = Main.getInstance();

    @EventHandler
    public void onClickKit(InventoryClickEvent e) {
        final Inventory inv = e.getInventory();
        final Player p = (Player) e.getWhoClicked();
        final ItemStack current = e.getCurrentItem();
 
        if(current == null) return;
 
        if(inv.getName().equalsIgnoreCase("§c§lKIT MENU")) {
            e.setCancelled(true);
            p.closeInventory();
     
            switch(current.getType()) {
                case DIAMOND_SWORD:
//                    p.getInventory().clear();
                    if(p.getGameMode() == GameMode.SPECTATOR) {
                        TaskJoin.startTaskIfNot(p);

                        final PlayerInventory pInventory = p.getInventory();
                        pInventory.setHelmet(helmet.getItems());
                        pInventory.setChestplate(chestPlate.getItems());
                        pInventory.setLeggings(leggings.getItems());
                        pInventory.setBoots(boots.getItems());
                        pInventory.setItemInHand(sword.getItems());
                        pInventory.setItem(1, gApple.getItems());
                 
                     
                        plugin.sendPlayerMessage(p, "§rSelection du kit §4§lGuerrier §ravec §a§osucces");            
                    } else {
                        // Petit message d'erreur non ?
                    }
                    break;

                case BOW:
//                    Kits.ARCHER.add(p);
                    break;

                case TNT:
//                    Kits.PYROMAN.add(p);
                    break;

                default:
                    plugin.sendPlayerMessage(p, "§cErreur veuillez reessayer.");
                    break;
            }
     
        }
 
    }

Java:
public class TaskJoin {

    // Attribut static, donc commun à toutes les class
    private static final Main plugin = Main.getInstance();
    private static final Random random = new Random();
    private static ArrayList<Location> gameLocation = new ArrayList<Location>();
    private static ArrayList<Player> listPlayerCompteur = new ArrayList<Player>();
    private static final int DEFAULT_TIME_TIMER = 5;


    // Attributs propre à ce compteur
    private final Player player;
    private int timer;
    private int taskId;

    static {
        gameLocation.add(new Location(p.getWorld(), -207, 6, -850, -43.6f, 21.4f));
        gameLocation.add(new Location(p.getWorld(), -201, 6, -834, -88.6f, 21.4f));
        gameLocation.add(new Location(p.getWorld(), -208, 6, -829, -152.6f, 7f));
        gameLocation.add(new Location(p.getWorld(), -215, 6, -834, -122.8f, 14.4f));
    }

    private TaskJoin(final Player player) {
        this.player = player;
        timer = DEFAULT_TIME_TIMER;

        listPlayerCompteur.add(player);
        runnable();
    }


    private Integer runnable() {
        taskId = Bukkit.getScheduler().scheduleSyncRepeatingTask(Main.getInstance(), new Runnable() {
     
            @Override
            public void run() {
         
                plugin.sendPlayerMessage(player, "Téléportation dans "+timer+"s");

                if(timer == 0) {
                    Bukkit.getScheduler().cancelTask(taskId);
                    listPlayerCompteur.remove(player);
             
                    plugin.sendPlayerMessage(p, "Téléportation vers l'arène FFA en cours...");
                    p.teleport(gameLocation.get(random.nextInt(gameLocation.size())));

                    p.setGameMode(GameMode.SURVIVAL);
                }
         
                --timer;
            }

        }, 0, 20L);
     
    }

    public static void startTaskIfNot(final Player player) {
        if(!listPlayerCompteur.contains(player)) {
            new TaskJoin(player);
        }
    }

}

Java:
public class Main extends JavaPlugin {

    private static Main instance;
    private static final String PREFIX = "§7[§6Herozia§7]";

    private HashMap<Player, Kits> kits = new HashMap<>();
    private KitContents kitContents = new KitContents();

    @Override
    public void onEnable() {
        getLogger().info("\n"+"===========[Ffa Herozia Plugin]==========="+"\n\t\tis Enabled"+"\n==========================================");
 
        instance = this;
 
        final PluginManager pm = getServer().getPluginManager();
        pm.registerEvents(new PlayerListeners(this), this);
        pm.registerEvents(new OnJoinEvent(this), this);
        pm.registerEvents(new OnInteractEvent(), this);
        pm.registerEvents(new OnClickEvent(), this);
        pm.registerEvents(new Scoreboard(), this);
    }

    @Override
    public void onDisable() {
        getLogger().info("\n"+"===========[Ffa Herozia Plugin]==========="+"\n\t\tis Disabled"+"\n==========================================");
    }

    public static Main getInstance() {
        return instance;
    }

    public void sendPlayerMessage(final Player player, final String message) {
        player.sendMessage(PREFIX + " " + message);
    }

}

Ha oui, au passage: "System.out" c'est pas fait pour spigot... Spigot/Bukkit à son propre système de log (getLogger())


Cordialement,
Detobel36
 
Dernière édition:
  • J'aime
Reactions: Booskap

Booskap

Aventurier
7 Novembre 2019
10
3
3
25
EDIT 3 (Je le mets la): Ne prêtez pas attention au bétise que je dis en dessous je mets directement la solution ici, merci à @Alex Fatta pour la solution qui m'a rappeler l'utilité des booléen ;) et de m'avoir aidé sur mes 2 postes.
Merci aussi a @Detobel36 pour m'avoir montrer l'énormité de mon erreur et a comprendre l'utilité des static / final ainsi que le bloc static, sans oublié la solution qui fonctionne a merveille.

Je mets donc les bonnes classe ici , j'ai simple remis les location dans le timer(même si c'est pas opti) je ferai une classe directement pour mettre ça dedans ou autre et j'appelerai une simple fonction ça sera certainement plus propres, et un simple return taskId; pour la méthode runnable(), bref trêve de bavardage
voici le code :

Java:
import org.bukkit.entity.Player;
import org.bukkit.plugin.PluginManager;
import org.bukkit.plugin.java.JavaPlugin;

import eu.booskap.kits.KitContents;
import eu.booskap.kits.Kits;
import eu.booskap.listener.OnClickEvent;
import eu.booskap.listener.OnDeathEvent;
import eu.booskap.listener.OnInteractEvent;
import eu.booskap.listener.OnJoinEvent;
import eu.booskap.listener.PlayerListeners;
import eu.booskap.listener.Scoreboard;

public class Main extends JavaPlugin {
    
    private static Main instance;
    private static final String PREFIX = "§7[§6Herozia§7]§r";
    
    private List<Player> pl = new ArrayList<>();
    //public provisoirement , passer en private avec getter // setter
    public HashMap<Player, Kits> kits = new HashMap<>();
    public KitContents kitContents = new KitContents();
    
    @Override
    public void onEnable() {
        getLogger().info("\n"+"===========[Ffa Herozia Plugin]==========="+"\n\t\tis Enabled"+"\n==========================================");
        
        instance = this;
        
        PluginManager pm = getServer().getPluginManager();
        pm.registerEvents(new PlayerListeners(this), this);
        pm.registerEvents(new OnJoinEvent(), this);
        pm.registerEvents(new OnInteractEvent(), this);
        pm.registerEvents(new OnClickEvent(), this);
        pm.registerEvents(new Scoreboard(), this);
        pm.registerEvents(new OnDeathEvent(), this);
//        onEventRegister();
    }
    @Override
    public void onDisable() {
        getLogger().info("\n"+"===========[Ffa Herozia Plugin]==========="+"\n\t\tis Enabled"+"\n==========================================");
    }
    
    public static Main getInstance() {
        return instance;
    }
    
    public void sendMessagePlayer(final Player p, final String msg) {
        p.sendMessage(PREFIX+" "+msg);
    }
    
//    public void onEventRegister() {
//        getServer().getPluginManager().registerEvents(new OnJoinEvent(), this);
//    }
    
    public List<Player> getPlayers(){
        return pl;
    }

}
Java:
package eu.booskap.listener;

import org.bukkit.GameMode;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.PlayerInventory;

import eu.booskap.ffaherozia.Main;
import eu.booskap.timers.TaskJoin;

public class OnClickEvent implements Listener{
    
    private static final Item helmet = new Item(Material.IRON_HELMET, 1, "§e§lCasque");
    private static final Item chestPlate = new Item(Material.IRON_CHESTPLATE, 1, "§e§lPlastron");
    private static final Item leggings = new Item(Material.IRON_LEGGINGS, 1, "§e§lLeggin");
    private static final Item boots = new Item(Material.IRON_BOOTS, 1, "§e§lBottes");
    private static final Item sword = new Item(Material.IRON_SWORD, 1, "§e§lEpee du guerrier");
    private static final Item gApple = new Item(Material.GOLDEN_APPLE, 6, "§e§lPomme d'or");
    
    private static final Main main = Main.getInstance();
    
    @EventHandler
    public void onClickKit(InventoryClickEvent e) {
        final Inventory inv = e.getInventory();
        final Player p = (Player) e.getWhoClicked();
        final ItemStack current = e.getCurrentItem();
        
        if(current == null) return;
        
        if(inv.getName().equalsIgnoreCase("§c§lKIT MENU")) {
            e.setCancelled(true);
            p.closeInventory();
            
            switch(current.getType()) {
                case DIAMOND_SWORD:
//                    p.getInventory().clear();
                    if(p.getGameMode() == GameMode.SPECTATOR) {
//                        new TaskJoin(p);
                        TaskJoin.startTaskIfNot(p);
                        
                        final PlayerInventory pInventory = p.getInventory();
                                                    
                        pInventory.setHelmet(helmet.getItems());
                        pInventory.setChestplate(chestPlate.getItems());
                        pInventory.setLeggings(leggings.getItems());
                        pInventory.setBoots(boots.getItems());
                        pInventory.setItemInHand(sword.getItems());
                        pInventory.setItem(1, gApple.getItems());
                            
                        main.sendMessagePlayer(p, "§rSelection du kit §4§lGuerrier §ravec §a§osucces");                   
                    }
                    else {
                        main.sendMessagePlayer(p, "§c§lErreur: §r§cveuillez reessayer.");
                    }                   
                    break;
                case BOW:
//                    Kits.ARCHER.add(p);
                    
                    break;
                case TNT:
//                    Kits.PYROMAN.add(p);
                    
                    break;
                default:
                    main.sendMessagePlayer(p, "§c§lErreur: §r§cveuillez reessayer.");
                    break;
            }
            
        }
        
    }
    
}
Java:
package eu.booskap.timers;

import java.util.ArrayList;
import java.util.Random;

import org.bukkit.Bukkit;
import org.bukkit.GameMode;
import org.bukkit.Location;
import org.bukkit.entity.Player;

import eu.booskap.ffaherozia.Main;

public class TaskJoin {
 
    private static final Main main = Main.getInstance();
    private static final Random random = new Random();
    private static ArrayList<Location> gameLoc = new ArrayList<Location>();
    private static ArrayList<Player> listPlayerCompteur = new ArrayList<Player>();
    private static final int DEFAULT_TIME_TIMER = 5;
    private static Player pl;
    
    private final Player p;
    private int timer;
    private int task;
    
//    static {
//        gameLoc.add(new Location(pl.getWorld(), -207, 6, -850, -43.6f, 21.4f));
//        gameLoc.add(new Location(pl.getWorld(), -201, 6, -834, -88.6f, 21.4f));
//        gameLoc.add(new Location(pl.getWorld(), -208, 6, -829, -152.6f, 7f));
//        gameLoc.add(new Location(pl.getWorld(), -215, 6, -834, -122.8f, 14.4f));
//    }
    
    private TaskJoin(final Player p) {
        this.p = p;
        
        timer = DEFAULT_TIME_TIMER;
        
        listPlayerCompteur.add(p);
        runnable();
    }
    
    public Integer runnable() {
        task = Bukkit.getScheduler().scheduleSyncRepeatingTask(Main.getInstance(), new Runnable() {
            
            @Override
            public void run() {
                
                main.sendMessagePlayer(p, "Téléportation dans: "+timer+"s");

                if(timer == 0) {
                    Bukkit.getScheduler().cancelTask(task);
                    listPlayerCompteur.remove(p);
                    
                    gameLoc.add(new Location(p.getWorld(), -207, 6, -850, -43.6f, 21.4f));
                    gameLoc.add(new Location(p.getWorld(), -201, 6, -834, -88.6f, 21.4f));
                    gameLoc.add(new Location(p.getWorld(), -208, 6, -829, -152.6f, 7f));
                    gameLoc.add(new Location(p.getWorld(), -215, 6, -834, -122.8f, 14.4f));
                    
                    main.sendMessagePlayer(p, "§aTéléportation vers l'arène FFA en cours..");
                    p.teleport(gameLoc.get(random.nextInt(gameLoc.size())));

                    p.setGameMode(GameMode.SURVIVAL);
                }
                
                timer--;
            }

        }, 0, 20L);
        
            return task;
    }

    public static void startTaskIfNot(final Player p) {
        if(!(listPlayerCompteur.contains(p))) {
            new TaskJoin(p);
        }
        
    }

}

Cordialement,
Detobel36
Salut , je pense que c'est moi qui n'est pas bien compris ^^, ce qui est dommage c'est que je ne connais pas encore cette aspect du static ou final, static il me semble que la variable / methode ne bougera pas en gros et final n'est utilisable qu'une seul fois ? je suis pas sur d'avoir ton compris.

En tout cas ton exemple ma appris pas mal de chose et j'appreci beaucoup donc déjà un grand merci :merci, mais malheuresement étant donné que je ne comprend pas totalement tous ça pour le moment, je n'arrive pas a trouvé la solution , j'ai une erreur d'initialisation apparement et de nullPointerException , donc pour moi il y'a un objet qui est null est qui n'arrive pas a s’initialiser si je me trompe ?

Il y'a aussi la métode static de la localisation qui ne prend pas le player.getWorld(), l'ide me dit que cela viens du fait que player n'est pas static et pour finir la méthode runnable que tu passes en Integer demande un retour , je supose que c'est le taskId ?

PS : Peut être a cause du packageFriendly ?

Je ne pense pas que ça soit utile de remettre le code étant donné que je n'ai rajouter qu'un return mais bon :

Java:
package eu.booskap.listener;

import org.bukkit.GameMode;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.PlayerInventory;

import eu.booskap.ffaherozia.Main;
import eu.booskap.timers.TaskJoin;

public class OnClickEvent implements Listener{
 
    private static final Item helmet = new Item(Material.IRON_HELMET, 1, "§e§lCasque");
    private static final Item chestPlate = new Item(Material.IRON_CHESTPLATE, 1, "§e§lPlastron");
    private static final Item leggings = new Item(Material.IRON_LEGGINGS, 1, "§e§lLeggin");
    private static final Item boots = new Item(Material.IRON_BOOTS, 1, "§e§lBottes");
    private static final Item sword = new Item(Material.IRON_SWORD, 1, "§e§lEpee du guerrier");
    private static final Item gApple = new Item(Material.GOLDEN_APPLE, 6, "§e§lPomme d'or");
 
    private static final Main main = Main.getInstance();
 
    @EventHandler
    public void onClickKit(InventoryClickEvent e) {
        final Inventory inv = e.getInventory();
        final Player p = (Player) e.getWhoClicked();
        final ItemStack current = e.getCurrentItem();
     
        if(current == null) return;
     
        if(inv.getName().equalsIgnoreCase("§c§lKIT MENU")) {
            e.setCancelled(true);
            p.closeInventory();
         
            switch(current.getType()) {
                case DIAMOND_SWORD:
//                    p.getInventory().clear();
                    if(p.getGameMode() == GameMode.SPECTATOR) {
//                        new TaskJoin(p);
                        TaskJoin.startTaskIfNot(p);
                     
                        final PlayerInventory pInventory = p.getInventory();
                                                 
                        pInventory.setHelmet(helmet.getItems());
                        pInventory.setChestplate(chestPlate.getItems());
                        pInventory.setLeggings(leggings.getItems());
                        pInventory.setBoots(boots.getItems());
                        pInventory.setItemInHand(sword.getItems());
                        pInventory.setItem(1, gApple.getItems());
                         
                        main.sendMessagePlayer(p, "§rSelection du kit §4§lGuerrier §ravec §a§osucces");                
                    }
                    else {
                        main.sendMessagePlayer(p, "§c§lErreur: §r§cveuillez reessayer.");
                    }                
                    break;
                case BOW:
//                    Kits.ARCHER.add(p);
                 
                    break;
                case TNT:
//                    Kits.PYROMAN.add(p);
                 
                    break;
                default:
                    main.sendMessagePlayer(p, "§c§lErreur: §r§cveuillez reessayer.");
                    break;
            }
         
        }
     
    }
 
}

Java:
package eu.booskap.ffaherozia;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import org.bukkit.entity.Player;
import org.bukkit.plugin.PluginManager;
import org.bukkit.plugin.java.JavaPlugin;

import eu.booskap.kits.KitContents;
import eu.booskap.kits.Kits;
import eu.booskap.listener.OnClickEvent;
import eu.booskap.listener.OnDeathEvent;
import eu.booskap.listener.OnInteractEvent;
import eu.booskap.listener.OnJoinEvent;
import eu.booskap.listener.PlayerListeners;
import eu.booskap.listener.Scoreboard;

public class Main extends JavaPlugin {
 
    private static Main instance;
    private static final String PREFIX = "§7[§6Herozia§7]§r";
 
    private List<Player> pl = new ArrayList<>();
    //public provisoirement , passer en private avec getter // setter
    public HashMap<Player, Kits> kits = new HashMap<>();
    public KitContents kitContents = new KitContents();
 
    @Override
    public void onEnable() {
        getLogger().info("\n"+"===========[Ffa Herozia Plugin]==========="+"\n\t\tis Enabled"+"\n==========================================");
     
        instance = this;
     
        PluginManager pm = getServer().getPluginManager();
        pm.registerEvents(new PlayerListeners(this), this);
        pm.registerEvents(new OnJoinEvent(), this);
        pm.registerEvents(new OnInteractEvent(), this);
        pm.registerEvents(new OnClickEvent(), this);
        pm.registerEvents(new Scoreboard(), this);
        pm.registerEvents(new OnDeathEvent(), this);
//        onEventRegister();
    }
    @Override
    public void onDisable() {
        getLogger().info("\n"+"===========[Ffa Herozia Plugin]==========="+"\n\t\tis Enabled"+"\n==========================================");
    }
 
    public static Main getInstance() {
        return instance;
    }
 
    public void sendMessagePlayer(final Player p, final String msg) {
        p.sendMessage(PREFIX+" "+msg);
    }
 
//    public void onEventRegister() {
//        getServer().getPluginManager().registerEvents(new OnJoinEvent(), this);
//    }
 
    public List<Player> getPlayers(){
        return pl;
    }

}

et pour finir :

Java:
package eu.booskap.timers;

import java.util.ArrayList;
import java.util.Random;

import org.bukkit.Bukkit;
import org.bukkit.GameMode;
import org.bukkit.Location;
import org.bukkit.entity.Player;

import eu.booskap.ffaherozia.Main;

public class TaskJoin {

    private static final Main main = Main.getInstance();
    private static final Random random = new Random();
    private static ArrayList<Location> gameLoc = new ArrayList<Location>();
    private static ArrayList<Player> listPlayerCompteur = new ArrayList<Player>();
    private static final int DEFAULT_TIME_TIMER = 5;
//    private static Player pl;
 
    private final Player p;
    private int timer;
    private int task;
 
    static {
        gameLoc.add(new Location(p.getWorld(), -207, 6, -850, -43.6f, 21.4f));
        gameLoc.add(new Location(p.getWorld(), -201, 6, -834, -88.6f, 21.4f));
        gameLoc.add(new Location(p.getWorld(), -208, 6, -829, -152.6f, 7f));
        gameLoc.add(new Location(p.getWorld(), -215, 6, -834, -122.8f, 14.4f));
    }
 
    private TaskJoin(final Player p) {
        this.p = p;
     
        timer = DEFAULT_TIME_TIMER;
     
        listPlayerCompteur.add(p);
        runnable();
    }
 
    public Integer runnable() {
        return task = Bukkit.getScheduler().scheduleSyncRepeatingTask(Main.getInstance(), new Runnable() {
         
            @Override
            public void run() {
             
                main.sendMessagePlayer(p, "Téléportation dans :"+timer+"s");

                if(timer == 0) {
                    Bukkit.getScheduler().cancelTask(task);
                    listPlayerCompteur.remove(p);
                 
                    main.sendMessagePlayer(p, "§aTéléportation vers l'arène FFA en cours..");
                    p.teleport(gameLoc.get(random.nextInt(gameLoc.size())));

                    p.setGameMode(GameMode.SURVIVAL);
                }
             
                timer--;
            }

        }, 0, 20L);
     
         
    }

    public static void startTaskIfNot(final Player p) {
        if(!listPlayerCompteur.contains(p)) {
            new TaskJoin(p);
        }
     
    }

}

En tout cas tu m'as bien avancé, je commence a comprendre l'utilité et la puissance que peut avoir les arraylist, mais je vais devoir encore travailler dur pour faire quelque chose de propre ^^

EDIT : pour avancer mes dire voici le log :
Code:
[14:01:26] [Server thread/ERROR]: Could not pass event InventoryClickEvent to HeroziaFFA v1.0
org.bukkit.event.EventException
    at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:305) ~[spigot.jar:git-Spigot-c3c767f-33d5de3]
    at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62) ~[spigot.jar:git-Spigot-c3c767f-33d5de3]
    at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:502) [spigot.jar:git-Spigot-c3c767f-33d5de3]
    at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:487) [spigot.jar:git-Spigot-c3c767f-33d5de3]
    at net.minecraft.server.v1_8_R1.PlayerConnection.a(PlayerConnection.java:1588) [spigot.jar:git-Spigot-c3c767f-33d5de3]
    at net.minecraft.server.v1_8_R1.PacketPlayInWindowClick.a(SourceFile:31) [spigot.jar:git-Spigot-c3c767f-33d5de3]
    at net.minecraft.server.v1_8_R1.PacketPlayInWindowClick.a(SourceFile:9) [spigot.jar:git-Spigot-c3c767f-33d5de3]
    at net.minecraft.server.v1_8_R1.PacketHandleTask.run(SourceFile:13) [spigot.jar:git-Spigot-c3c767f-33d5de3]
    at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) [?:1.8.0_231]
    at java.util.concurrent.FutureTask.run(Unknown Source) [?:1.8.0_231]
    at net.minecraft.server.v1_8_R1.MinecraftServer.z(MinecraftServer.java:696) [spigot.jar:git-Spigot-c3c767f-33d5de3]
    at net.minecraft.server.v1_8_R1.DedicatedServer.z(DedicatedServer.java:316) [spigot.jar:git-Spigot-c3c767f-33d5de3]
    at net.minecraft.server.v1_8_R1.MinecraftServer.y(MinecraftServer.java:634) [spigot.jar:git-Spigot-c3c767f-33d5de3]
    at net.minecraft.server.v1_8_R1.MinecraftServer.run(MinecraftServer.java:537) [spigot.jar:git-Spigot-c3c767f-33d5de3]
    at java.lang.Thread.run(Unknown Source) [?:1.8.0_231]
Caused by: java.lang.ExceptionInInitializerError
    at eu.booskap.listener.OnClickEvent.onClickKit(OnClickEvent.java:44) ~[?:?]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_231]
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_231]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_231]
    at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_231]
    at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:301) ~[spigot.jar:git-Spigot-c3c767f-33d5de3]
    ... 14 more
Caused by: java.lang.NullPointerException
    at eu.booskap.timers.TaskJoin.<clinit>(TaskJoin.java:27) ~[?:?]
    at eu.booskap.listener.OnClickEvent.onClickKit(OnClickEvent.java:44) ~[?:?]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_231]
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_231]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_231]
    at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_231]
    at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:301) ~[spigot.jar:git-Spigot-c3c767f-33d5de3]
    ... 14 more

EDIT 2 : Désolé je pense qu'il va y avoir beaucoup d'edit :fou: , donc j'ai mis en commentaire le bloc static pour les gameLocalisation et le timer ce lance bien , je dirai donc que le problème viens surement de la, je reviens sur le poste si je trouve la solution ! :)
 
Dernière édition:
  • J'aime
Reactions: Detobel36

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,

Ravis que tu ai résolu ton soucis.
J'ai fais avec ce que j'avais ;) Mais il n'y a jamais UNE solution pour arriver quelque chose de bien :D

N'hésites pas à mettre la balise "Résolu" :)


Bon courage
Cordialement,
Detobel36