package com.flansmod.common.teams; import net.minecraft.nbt.NBTTagCompound; /** This represents a round in the teams mod * It designates the map, gametype and teams to be played that round * A list of valid rounds is kept by the TeamsManager and then either * players vote on which rounds to play or there is a rotation */ public class TeamsRound implements Comparable<TeamsRound> { public Gametype gametype; public TeamsMap map; /** The teams available. This does not include spectators */ public Team[] teams; /** The round length in minutes */ public int timeLimit; /** The round score limit */ public int scoreLimit; /** 0 is almost never picked, 1 is always always picked. Used to pick vote options */ public float popularity; /** Number of rounds since it was offered as an option in the vote. Used to pick vote options */ public int roundsSincePlayed; public TeamsRound(TeamsMap map2, Gametype gametype2, Team[] teams2, int timeLimit, int scoreLimit) { map = map2; gametype = gametype2; teams = teams2; this.timeLimit = timeLimit; this.scoreLimit = scoreLimit; popularity = 0.5F; } public TeamsRound(NBTTagCompound tags) { map = TeamsManager.getInstance().maps.get(tags.getString("Map")); gametype = Gametype.getGametype(tags.getString("Gametype")); timeLimit = tags.getInteger("TimeLimit"); scoreLimit = tags.getInteger("ScoreLimit"); teams = new Team[tags.getInteger("NumTeams")]; for(int i = 0; i < teams.length; i++) { teams[i] = Team.getTeam(tags.getString("Team_" + i)); if(teams[i] == null) { teams[i] = Team.teams.get(0); } } popularity = tags.getFloat("Pop"); } public void writeToNBT(NBTTagCompound tags) { tags.setString("Map", map.shortName); tags.setString("Gametype", gametype.shortName); tags.setInteger("TimeLimit", timeLimit); tags.setInteger("ScoreLimit", scoreLimit); tags.setInteger("NumTeams", teams.length); for(int i = 0; i < teams.length; i++) { tags.setString("Team_" + i, teams[i].shortName); } tags.setFloat("Pop", popularity); } public int getTeamID(Team team) { if(team == Team.spectators) return 1; if(team == teams[0]) return 2; if(team == teams[1]) return 3; return 0; } public Team getTeam(int id) { switch(id) { case 0 : return null; case 1 : return Team.spectators; default : return teams[id - 2]; } } /** In two team gametypes, returns the opposite team */ public Team getOtherTeam(Team team) { if(team == Team.spectators || team == null || teams.length != 2) return team; if(team == teams[0]) return teams[1]; return teams[0]; } public float getWeight() { return popularity * 4F + roundsSincePlayed; } @Override public int compareTo(TeamsRound o) { if(getWeight() < o.getWeight()) return 1; else if(getWeight() > o.getWeight()) return -1; else return 0; } }