package fr.synchroneyes.mineral.Teams;
import fr.synchroneyes.custom_events.MCPlayerJoinTeamEvent;
import fr.synchroneyes.custom_events.MCPlayerLeaveTeamEvent;
import fr.synchroneyes.custom_events.MCTeamScoreUpdated;
import fr.synchroneyes.groups.Core.Groupe;
import fr.synchroneyes.mineral.Core.Game.Game;
import fr.synchroneyes.mineral.Core.House;
import fr.synchroneyes.mineral.Core.MCPlayer;
import fr.synchroneyes.mineral.Statistics.Class.MeilleurJoueurStat;
import fr.synchroneyes.mineral.Statistics.Class.VilainJoueurStat;
import fr.synchroneyes.mineral.Translation.Lang;
import fr.synchroneyes.mineral.Utils.Log.GameLogger;
import fr.synchroneyes.mineral.Utils.Log.Log;
import fr.synchroneyes.mineral.Utils.Player.PlayerUtils;
import fr.synchroneyes.mineral.mineralcontest;
import org.bukkit.*;
import org.bukkit.block.Block;
import org.bukkit.block.Chest;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
import java.util.LinkedList;
import java.util.Locale;
public class Equipe implements Comparable<Equipe> {
private LinkedList<Player> joueurs;
private String nomEquipe;
private ChatColor couleur;
private int score = 0;
private int penalty = 0;
private House maison;
private Groupe groupe;
private Game partie;
public Equipe(String nom, ChatColor c, Groupe g, House maison) {
this.joueurs = new LinkedList<Player>();
this.nomEquipe = nom;
this.couleur = c;
this.groupe = g;
this.maison = maison;
this.partie = groupe.getGame();
}
public House getMaison() {
return maison;
}
public Groupe getGroupe() {
return groupe;
}
public Game getPartie() {
return partie;
}
public void clear() {
this.joueurs.clear();
this.score = 0;
this.penalty = 0;
}
public int getPenalty() {
return this.penalty;
}
public void updateScore(Player JoueurAyantAjouteLesPoints) throws Exception {
int score_gagne = 0;
// Variable permettant de v rifier si un minerai d pos doit faire perdre des points aux autres
boolean hasNegativePointItemBeenAdded = false;
int score_perdu_equipes = 0;
Block block_coffre = maison.getCoffreEquipeLocation().getBlock();
Chest openedChest = ((Chest) block_coffre.getState());
ItemStack[] items = openedChest.getInventory().getContents();
for (ItemStack item : items) {
if (item != null) {
int current_item_score = 0;
if (item.isSimilar(new ItemStack(Material.IRON_INGOT, 1))) {
current_item_score = groupe.getParametresPartie().getCVAR("SCORE_IRON").getValeurNumerique();
if (current_item_score >= 0) score_gagne += current_item_score * item.getAmount();
else {
hasNegativePointItemBeenAdded = true;
score_perdu_equipes += Math.abs(current_item_score) * item.getAmount();
}
score_gagne += current_item_score * item.getAmount();
} else if (item.isSimilar(new ItemStack(Material.GOLD_INGOT, 1))) {
current_item_score = groupe.getParametresPartie().getCVAR("SCORE_GOLD").getValeurNumerique();
if (current_item_score >= 0) score_gagne += current_item_score * item.getAmount();
else {
hasNegativePointItemBeenAdded = true;
score_perdu_equipes += Math.abs(current_item_score) * item.getAmount();
}
} else if (item.isSimilar(new ItemStack(Material.COBBLESTONE, 1))) {
current_item_score = groupe.getParametresPartie().getCVAR("SCORE_COBBLESTONE").getValeurNumerique();
if (current_item_score >= 0) score_gagne += current_item_score * item.getAmount();
else {
hasNegativePointItemBeenAdded = true;
score_perdu_equipes += Math.abs(current_item_score) * item.getAmount();
}
} else if (item.isSimilar(new ItemStack(Material.DIAMOND, 1))) {
current_item_score = groupe.getParametresPartie().getCVAR("SCORE_DIAMOND").getValeurNumerique();
if (current_item_score >= 0) score_gagne += current_item_score * item.getAmount();
else {
hasNegativePointItemBeenAdded = true;
score_perdu_equipes += Math.abs(current_item_score) * item.getAmount();
}
} else if (item.isSimilar(new ItemStack(Material.EMERALD, 1))) {
current_item_score = groupe.getParametresPartie().getCVAR("SCORE_EMERALD").getValeurNumerique();
if (current_item_score >= 0) score_gagne += current_item_score * item.getAmount();
else {
hasNegativePointItemBeenAdded = true;
score_perdu_equipes += Math.abs(current_item_score) * item.getAmount();
}
} else if (item.isSimilar(new ItemStack(Material.REDSTONE))) {
current_item_score = groupe.getParametresPartie().getCVAR("SCORE_REDSTONE").getValeurNumerique();
if (current_item_score >= 0) score_gagne += current_item_score * item.getAmount();
else {
hasNegativePointItemBeenAdded = true;
score_perdu_equipes += Math.abs(current_item_score) * item.getAmount();
}
} else {
block_coffre.getWorld().dropItemNaturally(block_coffre.getLocation(), item);
}
}
}
// On vide l'inventaire du coffre
openedChest.getInventory().clear();
boolean scoreWasUpdated = false;
if (score_gagne > 0) scoreWasUpdated = true;
MCPlayer mcPlayer = mineralcontest.plugin.getMCPlayer(JoueurAyantAjouteLesPoints);
if(mcPlayer != null) {
mcPlayer.addPlayerScore(score_gagne);
}
groupe.getGame().getStatsManager().register(MeilleurJoueurStat.class, JoueurAyantAjouteLesPoints, score_gagne);
score_gagne += getScore();
setScore(score_gagne);
// Si le score gagn est diff rend du score, a veut dire qu'on a d pos des blocs dans le coffre, on averti l' quipe
if (scoreWasUpdated) {
for (Player online : joueurs) {
if(online != null) {
online.sendMessage(mineralcontest.prefixPrive + Lang.translate(Lang.team_score_now.toString(), this));
}
}
}
// Si on a d pos de la redstone
if (hasNegativePointItemBeenAdded) {
if(mcPlayer != null) mcPlayer.addPlayerScorePenalityToOtherTeams(score_perdu_equipes);
// On enregistre le score perdu
groupe.getGame().getStatsManager().register(VilainJoueurStat.class, JoueurAyantAjouteLesPoints, score_perdu_equipes);
// On averti les autres joueurs qu'on leur a fait perdre des points
groupe.sendToEveryone(mineralcontest.prefixGlobal + this.getCouleur() + JoueurAyantAjouteLesPoints.getDisplayName() + ChatColor.WHITE + " a fait perdre " + ChatColor.RED + score_perdu_equipes + " points" + ChatColor.WHITE + " aux autres quipes!");
// On retire des points aux autres quipes!
for (House maison : partie.getHouses())
// Si ce n'est pas NOTRE quipe, on retire des points
if (maison.getTeam() != this)
maison.getTeam().retirerPoints(score_perdu_equipes);
}
}
/**
* Permet de retirer des points l' quipe
*
* @param score - le nombre de points perdre
*/
public void retirerPoints(int score) {
MCTeamScoreUpdated event = new MCTeamScoreUpdated(this.score, this.score - score, this);
Bukkit.getServer().getPluginManager().callEvent(event);
if(event.isCancelled()) return;
this.score -= score;
}
public void ajouterPoints(int score) {
MCTeamScoreUpdated event = new MCTeamScoreUpdated(this.score, this.score + score, this);
Bukkit.getServer().getPluginManager().callEvent(event);
if(event.isCancelled()) return;
this.score += score;
}
public void sendMessage(String message, Player sender) {
if (this.joueurs.contains(sender)) {
for (Player member : joueurs)
member.sendMessage(mineralcontest.prefixTeamChat + sender.getDisplayName() + ": " + message);
}
}
public void sendMessage(String message) {
for (Player member : joueurs)
member.sendMessage(message);
}
public int getScore() {
return this.score - this.penalty;
}
public void setScore(int score) {
MCTeamScoreUpdated event = new MCTeamScoreUpdated(this.score, score, this);
Bukkit.getServer().getPluginManager().callEvent(event);
if(event.isCancelled()) return;
this.score = score;
GameLogger.addLog(new Log("TeamChestScoreUpdated", "The team " + getNomEquipe() + " score got updated to " + score + "", "ChestEvent"));
}
public boolean addPlayerToTeam(Player p, boolean teleportToBase) throws Exception {
MCPlayerJoinTeamEvent event = new MCPlayerJoinTeamEvent(mineralcontest.plugin.getMCPlayer(p), this );
Bukkit.getPluginManager().callEvent(event);
if(event.isCancelled()) return false;
Game partie = mineralcontest.getPlayerGame(p);
if (partie != null) {
Equipe team = mineralcontest.getPlayerGame(p).getPlayerTeam(p);
if (team != null) team.removePlayer(p);
if (mineralcontest.getPlayerGame(p).isReferee(p)) mineralcontest.getPlayerGame(p).removeReferee(p, false);
}
this.joueurs.add(p);
p.setGameMode(GameMode.SURVIVAL);
if (PlayerUtils.getPlayerItemsCountInInventory(p) == 0 && mineralcontest.getPlayerGame(p).isGameInitialized) {
//PlayerBaseItem.givePlayerItems(p, PlayerBaseItem.onFirstSpawnName);
if (teleportToBase)
PlayerUtils.teleportPlayer(p, mineralcontest.getPlayerGroupe(p).getMonde(), mineralcontest.getPlayerGame(p).getPlayerHouse(p).getHouseLocation());
}
p.sendMessage(mineralcontest.prefix + Lang.translate(Lang.team_welcome.toString(), this));
mineralcontest.broadcastMessage(mineralcontest.prefixGlobal + Lang.translate(Lang.team_player_joined.toString(), this, p), groupe);
// On set son quipe
mineralcontest.plugin.getMCPlayer(p).setEquipe(this);
mineralcontest.plugin.getMCPlayer(p).setVisible();
return true;
}
public boolean removePlayer(Player p) {
if (isPlayerInTeam(p)) {
MCPlayerLeaveTeamEvent event = new MCPlayerLeaveTeamEvent(mineralcontest.plugin.getMCPlayer(p), this);
Bukkit.getServer().getPluginManager().callEvent(event);
if(event.isCancelled()) return false;
this.joueurs.remove(p);
p.sendMessage(mineralcontest.prefix + Lang.translate(Lang.team_kicked.toString(), this));
return true;
}
return false;
}
public boolean isPlayerInTeam(Player p) {
return this.joueurs.contains(p);
}
public LinkedList<Player> getJoueurs() {
return this.joueurs;
}
public String toString() {
String joueurs = "Team " + this.getCouleur() + this.nomEquipe + ChatColor.WHITE + ": ";
for (int i = 0; i < this.joueurs.size(); i++) {
joueurs += this.joueurs.get(i).getDisplayName() + " ";
}
return joueurs;
}
public String getNomEquipe() {
return this.nomEquipe;
}
public ChatColor getCouleur() {
return this.couleur;
}
public Color toColor() {
if (this.nomEquipe.equals(Lang.red_team.toString())) return Color.RED;
if (this.nomEquipe.equals(Lang.yellow_team.toString())) return Color.YELLOW;
if (this.nomEquipe.equals(Lang.blue_team.toString())) return Color.BLUE;
return Color.WHITE;
}
@Override
public int compareTo(Equipe equipe) {
return (int) (this.getScore() - equipe.getScore());
}
public Color getBukkitColor() {
switch (getCouleur()) {
case YELLOW:
case GOLD:
return Color.YELLOW;
case GREEN:
case DARK_GREEN:
return Color.GREEN;
case BLACK: return Color.BLACK;
case GRAY:
case DARK_GRAY:
return Color.GRAY;
case BLUE:
case DARK_BLUE:
return Color.BLUE;
case AQUA:
case DARK_AQUA:
return Color.AQUA;
case DARK_RED:
case RED:
return Color.RED;
case DARK_PURPLE:
case LIGHT_PURPLE:
return Color.PURPLE;
default: return Color.WHITE;
}
}
public String getFormattedScore() {
// ON calcule le nouveau score
String nouveau_score = "";
// On ajoute un espace pour les milliers etc
DecimalFormatSymbols customSymbols = DecimalFormatSymbols.getInstance(Locale.US);
customSymbols.setGroupingSeparator(' ');
nouveau_score = new DecimalFormat("#,###;-#,###", customSymbols).format(score);
// Si le score est positif, le score est vert
// sinon il est rouge
if(score >= 0){
nouveau_score = ChatColor.GREEN + nouveau_score;
} else {
nouveau_score = ChatColor.RED + nouveau_score;
}
return nouveau_score;
}
public String getFormattedScore(int score) {
// ON calcule le nouveau score
String nouveau_score = "";
// On ajoute un espace pour les milliers etc
DecimalFormatSymbols customSymbols = DecimalFormatSymbols.getInstance(Locale.US);
customSymbols.setGroupingSeparator(' ');
nouveau_score = new DecimalFormat("#,###;-#,###", customSymbols).format(score);
// Si le score est positif, le score est vert
// sinon il est rouge
if(score >= 0){
nouveau_score = ChatColor.GREEN + nouveau_score;
} else {
nouveau_score = ChatColor.RED + nouveau_score;
}
return nouveau_score;
}
}
To embed this project on your website, copy the following code and paste it into your website's HTML: