Bonjour,
Actuellement en création de mini-jeux pour mon serveur, je cherche à faire un système d'équilibrage de teams.
J'ai pour le moment 3 classes pour géré mes teams. Une class Enum qui gère le nom de l'équipe, la location, le meta de la laine, ainsi que la couleur.
Ensuite j'ai une classe Teams, qui stock les membres de l'équipe, l'ajout du joueur, les infos de la TeamList avec les return du nom, une méthode pour TP les joueurs à la location de l'équipe et d'autres methodes pas encore utiles.
Puis ma class Main, ou l'enregistrement se fait (avec une boucle qui parcours la class TeamList pour crée la class Team avec la TeamList), ainsi qu'une méthode pour vérifier si le joueur est dans une team.
Ensuite viens mon problème. Si la partie se lance, et que toutes les teams sont vides, alors on dois égalisé les teams (4 joueurs pour 4 teams = 1 joueur par équipe, on est d'accord ?)
J'ai fais cette méthode dans la class Main (même si je pourrais la stocker autre part) :
J'ai donc cette sorti de debug :
Et donc tout les joueurs seront dans la même team
J'aimerai avoir de l'aide, car la je bloque depuis 3 jours, et c'est la première fois que je fais un système de team.
Il existe surement des moyens plus simple, et j'en suis sûr, mais je dois mal faire mes recherches.
Je précise que je suis en paper 1.9 (j'ai toujours aimer cette version).
Merci bien de l'aide précieuse car sans sa, je peux pas avancé
Actuellement en création de mini-jeux pour mon serveur, je cherche à faire un système d'équilibrage de teams.
J'ai pour le moment 3 classes pour géré mes teams. Une class Enum qui gère le nom de l'équipe, la location, le meta de la laine, ainsi que la couleur.
Java:
package fr.kenda.rushranked.teams;
import org.bukkit.Bukkit;
import org.bukkit.DyeColor;
import org.bukkit.Location;
public enum TeamList {
BLEU("§bEquipe Bleu", new Location(Bukkit.getWorld("world"), 0, 9.5, 38), DyeColor.LIGHT_BLUE, 11),
ROUGE("§cEquipe Rouge", new Location(Bukkit.getWorld("world"), 0, 9.5, -37), DyeColor.RED, 14);
private final String name;
private final Location location;
private final DyeColor color;
private final int meta;
TeamList(String name, Location location, DyeColor color, int meta) {
this.name = name;
this.location = location;
this.color = color;
this.meta = meta;
}
public String getName(){
return name;
}
public Location getLocation(){
return location;
}
public DyeColor getColor() {
return color;
}
public int getMeta() {
return meta;
}
}
Ensuite j'ai une classe Teams, qui stock les membres de l'équipe, l'ajout du joueur, les infos de la TeamList avec les return du nom, une méthode pour TP les joueurs à la location de l'équipe et d'autres methodes pas encore utiles.
Java:
package fr.kenda.rushranked.teams;
import org.bukkit.DyeColor;
import org.bukkit.entity.Player;
import java.util.ArrayList;
public class Teams {
private final TeamList team;
private final ArrayList<Player> members = new ArrayList<>();
public Teams(TeamList team) {
this.team = team;
}
public void addPlayerTeam(Player player) {
members.add(player);
}
public void removePlayerTeam(Player player) {
members.remove(player);
}
public String getName() {
return team.getName();
}
public ArrayList<Player> getMembers() {
return members;
}
public void teleportTeam() {
for (Player player : this.members) {
player.teleport(team.getLocation());
}
}
public DyeColor getColor(){
return team.getColor();
}
}
Puis ma class Main, ou l'enregistrement se fait (avec une boucle qui parcours la class TeamList pour crée la class Team avec la TeamList), ainsi qu'une méthode pour vérifier si le joueur est dans une team.
Java:
@Override
public void onEnable() {
instance = this;
getServer().getConsoleSender().sendMessage(prefix + "§aLancement du plugin avec succès.");
for (TeamList teamsList : TeamList.values()) {
teams.add(new Teams(teamsList));
}
setStatus(GameStatus.WAITING);
[...]
}
//Vérifie si le joueur est dans une team
public static boolean isInTeam(Player player) {
boolean isInTeam = false;
for (Teams teams : teams) {
isInTeam = teams.getMembers().contains(player);
}
return isInTeam;
}
Ensuite viens mon problème. Si la partie se lance, et que toutes les teams sont vides, alors on dois égalisé les teams (4 joueurs pour 4 teams = 1 joueur par équipe, on est d'accord ?)
J'ai fais cette méthode dans la class Main (même si je pourrais la stocker autre part) :
Code:
public static void addRandomTeam(Player player) {
for (Teams teamChecker : teams) {
System.out.println("Boucle 1: " + teamChecker.getName());
for (Teams teamsDetec : teams) {
System.out.println("Boucle 2 : " + teamsDetec.getName());
if (teamChecker != teamsDetec) {
System.out.println("La team n'est pas la même");
System.out.println("teamchecker " + teamChecker.getMembers().size());
System.out.println("teams " + teamsDetec.getMembers().size());
if (teamChecker.getMembers().size() <= teamsDetec.getMembers().size()) {
System.out.println("On l'ajoute dans la team : " + teamChecker);
teamChecker.addPlayerTeam(player);
System.out.println("Teamchecker list : " + teamChecker.getMembers());
System.out.println("teamDetect list : " + teamsDetec.getMembers());
}
}
}
}
}
Code:
[17:44:31] [Server thread/INFO]: Le joueur Dinasto n'est pas dans une team.
[17:44:31] [Server thread/INFO]: Boucle 1: §bEquipe Bleu
[17:44:31] [Server thread/INFO]: Boucle 2 : §bEquipe Bleu
[17:44:31] [Server thread/INFO]: Boucle 2 : §cEquipe Rouge
[17:44:31] [Server thread/INFO]: La team n'est pas la même
[17:44:31] [Server thread/INFO]: teamchecker 0
[17:44:31] [Server thread/INFO]: teams 0
[17:44:31] [Server thread/INFO]: On l'ajoute dans la team : fr.kenda.rushranked.teams.Teams@5087dd9d
[17:44:31] [Server thread/INFO]: [CraftPlayer{name=Dinasto}]
[17:44:31] [Server thread/INFO]: []
[17:44:31] [Server thread/INFO]: Boucle 1: §cEquipe Rouge
[17:44:31] [Server thread/INFO]: Boucle 2 : §bEquipe Bleu
[17:44:31] [Server thread/INFO]: La team n'est pas la même
[17:44:31] [Server thread/INFO]: teamchecker 0
[17:44:31] [Server thread/INFO]: teams 1
[17:44:31] [Server thread/INFO]: On l'ajoute dans la team : fr.kenda.rushranked.teams.Teams@4fdd1776
[17:44:31] [Server thread/INFO]: [CraftPlayer{name=Dinasto}]
[17:44:31] [Server thread/INFO]: [CraftPlayer{name=Dinasto}]
[17:44:31] [Server thread/INFO]: Boucle 2 : §cEquipe Rouge
[17:44:31] [Server thread/INFO]: Le joueur Kenda_ n'est pas dans une team.
[17:44:31] [Server thread/INFO]: Boucle 1: §bEquipe Bleu
[17:44:31] [Server thread/INFO]: Boucle 2 : §bEquipe Bleu
[17:44:31] [Server thread/INFO]: Boucle 2 : §cEquipe Rouge
[17:44:31] [Server thread/INFO]: La team n'est pas la même
[17:44:31] [Server thread/INFO]: teamchecker 1
[17:44:31] [Server thread/INFO]: teams 1
[17:44:31] [Server thread/INFO]: On l'ajoute dans la team : fr.kenda.rushranked.teams.Teams@5087dd9d
[17:44:31] [Server thread/INFO]: [CraftPlayer{name=Dinasto}, CraftPlayer{name=Kenda_}]
[17:44:31] [Server thread/INFO]: [CraftPlayer{name=Dinasto}]
[17:44:31] [Server thread/INFO]: Boucle 1: §cEquipe Rouge
[17:44:31] [Server thread/INFO]: Boucle 2 : §bEquipe Bleu
[17:44:31] [Server thread/INFO]: La team n'est pas la même
[17:44:31] [Server thread/INFO]: teamchecker 1
[17:44:31] [Server thread/INFO]: teams 2
[17:44:31] [Server thread/INFO]: On l'ajoute dans la team : fr.kenda.rushranked.teams.Teams@4fdd1776
[17:44:31] [Server thread/INFO]: [CraftPlayer{name=Dinasto}, CraftPlayer{name=Kenda_}]
[17:44:31] [Server thread/INFO]: [CraftPlayer{name=Dinasto}, CraftPlayer{name=Kenda_}]
[17:44:31] [Server thread/INFO]: Boucle 2 : §cEquipe Rouge
Et donc tout les joueurs seront dans la même team

J'aimerai avoir de l'aide, car la je bloque depuis 3 jours, et c'est la première fois que je fais un système de team.
Il existe surement des moyens plus simple, et j'en suis sûr, mais je dois mal faire mes recherches.
Je précise que je suis en paper 1.9 (j'ai toujours aimer cette version).
Merci bien de l'aide précieuse car sans sa, je peux pas avancé
