package net.minecraft.scoreboard;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
public class Scoreboard
{
/** Map of objective names to ScoreObjective objects. */
private final Map scoreObjectives = new HashMap();
private final Map field_96543_b = new HashMap();
private final Map field_96544_c = new HashMap();
private final ScoreObjective[] field_96541_d = new ScoreObjective[3];
private final Map field_96542_e = new HashMap();
/** Map of usernames to ScorePlayerTeam objects. */
private final Map teamMemberships = new HashMap();
/**
* Returns a ScoreObjective for the objective name
*/
public ScoreObjective getObjective(String par1Str)
{
return (ScoreObjective)this.scoreObjectives.get(par1Str);
}
public ScoreObjective func_96535_a(String par1Str, ScoreObjectiveCriteria par2ScoreObjectiveCriteria)
{
ScoreObjective scoreobjective = this.getObjective(par1Str);
if (scoreobjective != null)
{
throw new IllegalArgumentException("An objective with the name \'" + par1Str + "\' already exists!");
}
else
{
scoreobjective = new ScoreObjective(this, par1Str, par2ScoreObjectiveCriteria);
Object object = (List)this.field_96543_b.get(par2ScoreObjectiveCriteria);
if (object == null)
{
object = new ArrayList();
this.field_96543_b.put(par2ScoreObjectiveCriteria, object);
}
((List)object).add(scoreobjective);
this.scoreObjectives.put(par1Str, scoreobjective);
this.func_96522_a(scoreobjective);
return scoreobjective;
}
}
public Collection func_96520_a(ScoreObjectiveCriteria par1ScoreObjectiveCriteria)
{
Collection collection = (Collection)this.field_96543_b.get(par1ScoreObjectiveCriteria);
return collection == null ? new ArrayList() : new ArrayList(collection);
}
public Score func_96529_a(String par1Str, ScoreObjective par2ScoreObjective)
{
Object object = (Map)this.field_96544_c.get(par1Str);
if (object == null)
{
object = new HashMap();
this.field_96544_c.put(par1Str, object);
}
Score score = (Score)((Map)object).get(par2ScoreObjective);
if (score == null)
{
score = new Score(this, par2ScoreObjective, par1Str);
((Map)object).put(par2ScoreObjective, score);
}
return score;
}
public Collection func_96534_i(ScoreObjective par1ScoreObjective)
{
ArrayList arraylist = new ArrayList();
Iterator iterator = this.field_96544_c.values().iterator();
while (iterator.hasNext())
{
Map map = (Map)iterator.next();
Score score = (Score)map.get(par1ScoreObjective);
if (score != null)
{
arraylist.add(score);
}
}
Collections.sort(arraylist, Score.field_96658_a);
return arraylist;
}
public Collection getScoreObjectives()
{
return this.scoreObjectives.values();
}
public Collection getObjectiveNames()
{
return this.field_96544_c.keySet();
}
public void func_96515_c(String par1Str)
{
Map map = (Map)this.field_96544_c.remove(par1Str);
if (map != null)
{
this.func_96516_a(par1Str);
}
}
public Collection func_96528_e()
{
Collection collection = this.field_96544_c.values();
ArrayList arraylist = new ArrayList();
if (collection != null)
{
Iterator iterator = collection.iterator();
while (iterator.hasNext())
{
Map map = (Map)iterator.next();
arraylist.addAll(map.values());
}
}
return arraylist;
}
public Map func_96510_d(String par1Str)
{
Object object = (Map)this.field_96544_c.get(par1Str);
if (object == null)
{
object = new HashMap();
}
return (Map)object;
}
public void func_96519_k(ScoreObjective par1ScoreObjective)
{
this.scoreObjectives.remove(par1ScoreObjective.getName());
for (int i = 0; i < 3; ++i)
{
if (this.func_96539_a(i) == par1ScoreObjective)
{
this.func_96530_a(i, (ScoreObjective)null);
}
}
List list = (List)this.field_96543_b.get(par1ScoreObjective.getCriteria());
if (list != null)
{
list.remove(par1ScoreObjective);
}
Iterator iterator = this.field_96544_c.values().iterator();
while (iterator.hasNext())
{
Map map = (Map)iterator.next();
map.remove(par1ScoreObjective);
}
this.func_96533_c(par1ScoreObjective);
}
public void func_96530_a(int par1, ScoreObjective par2ScoreObjective)
{
this.field_96541_d[par1] = par2ScoreObjective;
}
public ScoreObjective func_96539_a(int par1)
{
return this.field_96541_d[par1];
}
public ScorePlayerTeam func_96508_e(String par1Str)
{
return (ScorePlayerTeam)this.field_96542_e.get(par1Str);
}
public ScorePlayerTeam func_96527_f(String par1Str)
{
ScorePlayerTeam scoreplayerteam = this.func_96508_e(par1Str);
if (scoreplayerteam != null)
{
throw new IllegalArgumentException("An objective with the name \'" + par1Str + "\' already exists!");
}
else
{
scoreplayerteam = new ScorePlayerTeam(this, par1Str);
this.field_96542_e.put(par1Str, scoreplayerteam);
this.func_96523_a(scoreplayerteam);
return scoreplayerteam;
}
}
public void func_96511_d(ScorePlayerTeam par1ScorePlayerTeam)
{
this.field_96542_e.remove(par1ScorePlayerTeam.func_96661_b());
Iterator iterator = par1ScorePlayerTeam.getMembershipCollection().iterator();
while (iterator.hasNext())
{
String s = (String)iterator.next();
this.teamMemberships.remove(s);
}
this.func_96513_c(par1ScorePlayerTeam);
}
public void func_96521_a(String par1Str, ScorePlayerTeam par2ScorePlayerTeam)
{
if (this.getPlayersTeam(par1Str) != null)
{
this.func_96524_g(par1Str);
}
this.teamMemberships.put(par1Str, par2ScorePlayerTeam);
par2ScorePlayerTeam.getMembershipCollection().add(par1Str);
}
public boolean func_96524_g(String par1Str)
{
ScorePlayerTeam scoreplayerteam = this.getPlayersTeam(par1Str);
if (scoreplayerteam != null)
{
this.removePlayerFromTeam(par1Str, scoreplayerteam);
return true;
}
else
{
return false;
}
}
/**
* Removes the given username from the given ScorePlayerTeam. If the player is not on the team then an
* IllegalStateException is thrown.
*/
public void removePlayerFromTeam(String par1Str, ScorePlayerTeam par2ScorePlayerTeam)
{
if (this.getPlayersTeam(par1Str) != par2ScorePlayerTeam)
{
throw new IllegalStateException("Player is either on another team or not on any team. Cannot remove from team \'" + par2ScorePlayerTeam.func_96661_b() + "\'.");
}
else
{
this.teamMemberships.remove(par1Str);
par2ScorePlayerTeam.getMembershipCollection().remove(par1Str);
}
}
public Collection func_96531_f()
{
return this.field_96542_e.keySet();
}
public Collection func_96525_g()
{
return this.field_96542_e.values();
}
/**
* Gets the ScorePlayerTeam object for the given username.
*/
public ScorePlayerTeam getPlayersTeam(String par1Str)
{
return (ScorePlayerTeam)this.teamMemberships.get(par1Str);
}
public void func_96522_a(ScoreObjective par1ScoreObjective) {}
public void func_96532_b(ScoreObjective par1ScoreObjective) {}
public void func_96533_c(ScoreObjective par1ScoreObjective) {}
public void func_96536_a(Score par1Score) {}
public void func_96516_a(String par1Str) {}
public void func_96523_a(ScorePlayerTeam par1ScorePlayerTeam) {}
public void func_96538_b(ScorePlayerTeam par1ScorePlayerTeam) {}
public void func_96513_c(ScorePlayerTeam par1ScorePlayerTeam) {}
/**
* Returns 'list' for 0, 'sidebar' for 1, 'belowName for 2, otherwise null.
*/
public static String getObjectiveDisplaySlot(int par0)
{
switch (par0)
{
case 0:
return "list";
case 1:
return "sidebar";
case 2:
return "belowName";
default:
return null;
}
}
/**
* Returns 0 for (case-insensitive) 'list', 1 for 'sidebar', 2 for 'belowName', otherwise -1.
*/
public static int getObjectiveDisplaySlotNumber(String par0Str)
{
return par0Str.equalsIgnoreCase("list") ? 0 : (par0Str.equalsIgnoreCase("sidebar") ? 1 : (par0Str.equalsIgnoreCase("belowName") ? 2 : -1));
}
}