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 :
TaskJoin :
Main :
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..
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:

, 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 ?
, 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 ! 
