package com.flansmod.common.teams;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import net.minecraft.client.model.ModelBase;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import com.flansmod.common.FlansMod;
import com.flansmod.common.PlayerData;
import com.flansmod.common.PlayerHandler;
import com.flansmod.common.types.EnumType;
import com.flansmod.common.types.InfoType;
import com.flansmod.common.types.TypeFile;
public class Team extends InfoType
{
public static List<Team> teams = new ArrayList<Team>();
public List<String> members = new ArrayList<String>();
//public List<ITeamBase> bases = new ArrayList<ITeamBase>();
public List<PlayerClass> classes = new ArrayList<PlayerClass>();
public static Team spectators;
public int score = 0;
public int teamColour = 0xffffff;
public char textColour = 'f';
public ItemStack hat;
public ItemStack chest;
public ItemStack legs;
public ItemStack shoes;
public Team(String s, String s1, int teamCol, char textCol)
{
super(new TypeFile("NoPack", EnumType.team, s, false));
shortName = s;
name = s1;
teamColour = teamCol;
textColour = textCol;
teams.add(this);
}
public Team(TypeFile file)
{
super(file);
teams.add(this);
}
@Override
protected void read(String[] split, TypeFile file)
{
super.read(split, file);
try
{
if (split[0].equals("TeamColour"))
{
teamColour = (Integer.parseInt(split[1]) << 16) + ((Integer.parseInt(split[2])) << 8) + ((Integer.parseInt(split[3])));
}
if (split[0].equals("TextColour"))
{
if(split[1].equals("Black"))
textColour = '0';
if(split[1].equals("Blue"))
textColour = '1';
if(split[1].equals("Green"))
textColour = '2';
if(split[1].equals("Aqua"))
textColour = '3';
if(split[1].equals("Red"))
textColour = '4';
if(split[1].equals("Purple"))
textColour = '5';
if(split[1].equals("Orange"))
textColour = '6';
if(split[1].equals("LGrey"))
textColour = '7';
if(split[1].equals("Grey"))
textColour = '8';
if(split[1].equals("LBlue"))
textColour = '9';
if(split[1].equals("LGreen"))
textColour = 'a';
if(split[1].equals("LAqua"))
textColour = 'b';
if(split[1].equals("Red"))
textColour = 'c';
if(split[1].equals("Pink"))
textColour = 'd';
if(split[1].equals("Yellow"))
textColour = 'e';
if(split[1].equals("White"))
textColour = 'f';
}
if(split[0].equals("Hat") || split[0].equals("Helmet"))
{
if(split[1].equals("None"))
return;
for(Item item : FlansMod.armourItems)
{
ArmourType armour = ((ItemTeamArmour)item).type;
if(armour != null && armour.shortName.equals(split[1]))
hat = new ItemStack(item);
}
}
if(split[0].equals("Chest") || split[0].equals("Top"))
{
if(split[1].equals("None"))
return;
for(Item item : FlansMod.armourItems)
{
ArmourType armour = ((ItemTeamArmour)item).type;
if(armour != null && armour.shortName.equals(split[1]))
chest = new ItemStack(item);
}
}
if(split[0].equals("Legs") || split[0].equals("Bottom"))
{
if(split[1].equals("None"))
return;
for(Item item : FlansMod.armourItems)
{
ArmourType armour = ((ItemTeamArmour)item).type;
if(armour != null && armour.shortName.equals(split[1]))
legs = new ItemStack(item);
}
}
if(split[0].equals("Shoes") || split[0].equals("Boots"))
{
if(split[1].equals("None"))
return;
for(Item item : FlansMod.armourItems)
{
ArmourType armour = ((ItemTeamArmour)item).type;
if(armour != null && armour.shortName.equals(split[1]))
shoes = new ItemStack(item);
}
}
if(split[0].equals("AddDefaultClass") || split[0].equals("AddClass"))
{
classes.add(PlayerClass.getClass(split[1]));
}
} catch (Exception e)
{
System.out.println("Reading team file failed.");
e.printStackTrace();
}
}
public static Team getTeam(String s)
{
for(Team team : teams)
{
if(team.shortName.equals(s))
return team;
}
return null;
}
public static Team getTeam(int iHash)
{
for(Team team : teams)
{
if(team.shortName.hashCode() == iHash)
return team;
}
return null;
}
/*
//Called both by ops and the gametype
public void addBase(ITeamBase base)
{
bases.add(base);
}
//Called both by ops and the gametype
public void removeBase(ITeamBase base)
{
bases.remove(base);
}
*/
public void removePlayer(EntityPlayer player)
{
removePlayer(player.getName());
}
public String removePlayer(String username)
{
members.remove(username);
if(PlayerHandler.getPlayerData(username) != null)
PlayerHandler.getPlayerData(username).team = null;
return username;
}
public EntityPlayer addPlayer(EntityPlayer player)
{
addPlayer(player.getName());
return player;
}
public String addPlayer(String username)
{
ArrayList<String> list = new ArrayList<String>();
list.add(username);
for(Team team : teams)
{
team.members.removeAll(list);
}
members.add(username);
PlayerHandler.getPlayerData(username).newTeam = PlayerHandler.getPlayerData(username).team = this;
return username;
}
public String removeWorstPlayer()
{
sortPlayers();
if(members.size() == 0)
return null;
else return removePlayer(members.get(members.size() - 1));
}
public void sortPlayers()
{
Collections.sort(members, new ComparatorScore());
}
public static class ComparatorScore implements Comparator<String>
{
@Override
public int compare(String a, String b)
{
PlayerData dataA = PlayerHandler.getPlayerData(a);
PlayerData dataB = PlayerHandler.getPlayerData(b);
if(dataA == null || dataB == null)
return 0;
return dataB.score - dataA.score;
}
}
@Override
protected void preRead(TypeFile file)
{
}
@Override
protected void postRead(TypeFile file)
{
}
@Override
@SideOnly(Side.CLIENT)
public ModelBase GetModel()
{
return null;
}
}