    001package net.minecraft.scoreboard;
    002
    003import java.util.ArrayList;
    004import java.util.Collection;
    005import java.util.Collections;
    006import java.util.HashMap;
    007import java.util.Iterator;
    008import java.util.List;
    009import java.util.Map;
    010
    011public class Scoreboard
    012{
    013    private final Map field_96545_a = new HashMap();
    014    private final Map field_96543_b = new HashMap();
    015    private final Map field_96544_c = new HashMap();
    016    private final ScoreObjective[] field_96541_d = new ScoreObjective[3];
    017    private final Map field_96542_e = new HashMap();
    018    private final Map field_96540_f = new HashMap();
    019
    020    public ScoreObjective func_96518_b(String par1Str)
    021    {
    022        return (ScoreObjective)this.field_96545_a.get(par1Str);
    023    }
    024
    025    public ScoreObjective func_96535_a(String par1Str, ScoreObjectiveCriteria par2ScoreObjectiveCriteria)
    026    {
    027        ScoreObjective scoreobjective = this.func_96518_b(par1Str);
    028
    029        if (scoreobjective != null)
    030        {
    031            throw new IllegalArgumentException("An objective with the name \'" + par1Str + "\' already exists!");
    032        }
    033        else
    034        {
    035            scoreobjective = new ScoreObjective(this, par1Str, par2ScoreObjectiveCriteria);
    036            Object object = (List)this.field_96543_b.get(par2ScoreObjectiveCriteria);
    037
    038            if (object == null)
    039            {
    040                object = new ArrayList();
    041                this.field_96543_b.put(par2ScoreObjectiveCriteria, object);
    042            }
    043
    044            ((List)object).add(scoreobjective);
    045            this.field_96545_a.put(par1Str, scoreobjective);
    046            this.func_96522_a(scoreobjective);
    047            return scoreobjective;
    048        }
    049    }
    050
    051    public Collection func_96520_a(ScoreObjectiveCriteria par1ScoreObjectiveCriteria)
    052    {
    053        Collection collection = (Collection)this.field_96543_b.get(par1ScoreObjectiveCriteria);
    054        return collection == null ? new ArrayList() : new ArrayList(collection);
    055    }
    056
    057    public Score func_96529_a(String par1Str, ScoreObjective par2ScoreObjective)
    058    {
    059        Object object = (Map)this.field_96544_c.get(par1Str);
    060
    061        if (object == null)
    062        {
    063            object = new HashMap();
    064            this.field_96544_c.put(par1Str, object);
    065        }
    066
    067        Score score = (Score)((Map)object).get(par2ScoreObjective);
    068
    069        if (score == null)
    070        {
    071            score = new Score(this, par2ScoreObjective, par1Str);
    072            ((Map)object).put(par2ScoreObjective, score);
    073        }
    074
    075        return score;
    076    }
    077
    078    public Collection func_96534_i(ScoreObjective par1ScoreObjective)
    079    {
    080        ArrayList arraylist = new ArrayList();
    081        Iterator iterator = this.field_96544_c.values().iterator();
    082
    083        while (iterator.hasNext())
    084        {
    085            Map map = (Map)iterator.next();
    086            Score score = (Score)map.get(par1ScoreObjective);
    087
    088            if (score != null)
    089            {
    090                arraylist.add(score);
    091            }
    092        }
    093
    094        Collections.sort(arraylist, Score.field_96658_a);
    095        return arraylist;
    096    }
    097
    098    public Collection func_96514_c()
    099    {
    100        return this.field_96545_a.values();
    101    }
    102
    103    public Collection func_96526_d()
    104    {
    105        return this.field_96544_c.keySet();
    106    }
    107
    108    public void func_96515_c(String par1Str)
    109    {
    110        Map map = (Map)this.field_96544_c.remove(par1Str);
    111
    112        if (map != null)
    113        {
    114            this.func_96516_a(par1Str);
    115        }
    116    }
    117
    118    public Collection func_96528_e()
    119    {
    120        Collection collection = this.field_96544_c.values();
    121        ArrayList arraylist = new ArrayList();
    122
    123        if (collection != null)
    124        {
    125            Iterator iterator = collection.iterator();
    126
    127            while (iterator.hasNext())
    128            {
    129                Map map = (Map)iterator.next();
    130                arraylist.addAll(map.values());
    131            }
    132        }
    133
    134        return arraylist;
    135    }
    136
    137    public Map func_96510_d(String par1Str)
    138    {
    139        Object object = (Map)this.field_96544_c.get(par1Str);
    140
    141        if (object == null)
    142        {
    143            object = new HashMap();
    144        }
    145
    146        return (Map)object;
    147    }
    148
    149    public void func_96519_k(ScoreObjective par1ScoreObjective)
    150    {
    151        this.field_96545_a.remove(par1ScoreObjective.func_96679_b());
    152
    153        for (int i = 0; i < 3; ++i)
    154        {
    155            if (this.func_96539_a(i) == par1ScoreObjective)
    156            {
    157                this.func_96530_a(i, (ScoreObjective)null);
    158            }
    159        }
    160
    161        List list = (List)this.field_96543_b.get(par1ScoreObjective.func_96680_c());
    162
    163        if (list != null)
    164        {
    165            list.remove(par1ScoreObjective);
    166        }
    167
    168        Iterator iterator = this.field_96544_c.values().iterator();
    169
    170        while (iterator.hasNext())
    171        {
    172            Map map = (Map)iterator.next();
    173            map.remove(par1ScoreObjective);
    174        }
    175
    176        this.func_96533_c(par1ScoreObjective);
    177    }
    178
    179    public void func_96530_a(int par1, ScoreObjective par2ScoreObjective)
    180    {
    181        this.field_96541_d[par1] = par2ScoreObjective;
    182    }
    183
    184    public ScoreObjective func_96539_a(int par1)
    185    {
    186        return this.field_96541_d[par1];
    187    }
    188
    189    public ScorePlayerTeam func_96508_e(String par1Str)
    190    {
    191        return (ScorePlayerTeam)this.field_96542_e.get(par1Str);
    192    }
    193
    194    public ScorePlayerTeam func_96527_f(String par1Str)
    195    {
    196        ScorePlayerTeam scoreplayerteam = this.func_96508_e(par1Str);
    197
    198        if (scoreplayerteam != null)
    199        {
    200            throw new IllegalArgumentException("An objective with the name \'" + par1Str + "\' already exists!");
    201        }
    202        else
    203        {
    204            scoreplayerteam = new ScorePlayerTeam(this, par1Str);
    205            this.field_96542_e.put(par1Str, scoreplayerteam);
    206            this.func_96523_a(scoreplayerteam);
    207            return scoreplayerteam;
    208        }
    209    }
    210
    211    public void func_96511_d(ScorePlayerTeam par1ScorePlayerTeam)
    212    {
    213        this.field_96542_e.remove(par1ScorePlayerTeam.func_96661_b());
    214        Iterator iterator = par1ScorePlayerTeam.func_96670_d().iterator();
    215
    216        while (iterator.hasNext())
    217        {
    218            String s = (String)iterator.next();
    219            this.field_96540_f.remove(s);
    220        }
    221
    222        this.func_96513_c(par1ScorePlayerTeam);
    223    }
    224
    225    public void func_96521_a(String par1Str, ScorePlayerTeam par2ScorePlayerTeam)
    226    {
    227        if (this.func_96509_i(par1Str) != null)
    228        {
    229            this.func_96524_g(par1Str);
    230        }
    231
    232        this.field_96540_f.put(par1Str, par2ScorePlayerTeam);
    233        par2ScorePlayerTeam.func_96670_d().add(par1Str);
    234    }
    235
    236    public boolean func_96524_g(String par1Str)
    237    {
    238        ScorePlayerTeam scoreplayerteam = this.func_96509_i(par1Str);
    239
    240        if (scoreplayerteam != null)
    241        {
    242            this.func_96512_b(par1Str, scoreplayerteam);
    243            return true;
    244        }
    245        else
    246        {
    247            return false;
    248        }
    249    }
    250
    251    public void func_96512_b(String par1Str, ScorePlayerTeam par2ScorePlayerTeam)
    252    {
    253        if (this.func_96509_i(par1Str) != par2ScorePlayerTeam)
    254        {
    255            throw new IllegalStateException("Player is either on another team or not on any team. Cannot remove from team \'" + par2ScorePlayerTeam.func_96661_b() + "\'.");
    256        }
    257        else
    258        {
    259            this.field_96540_f.remove(par1Str);
    260            par2ScorePlayerTeam.func_96670_d().remove(par1Str);
    261        }
    262    }
    263
    264    public Collection func_96531_f()
    265    {
    266        return this.field_96542_e.keySet();
    267    }
    268
    269    public Collection func_96525_g()
    270    {
    271        return this.field_96542_e.values();
    272    }
    273
    274    public ScorePlayerTeam func_96509_i(String par1Str)
    275    {
    276        return (ScorePlayerTeam)this.field_96540_f.get(par1Str);
    277    }
    278
    279    public void func_96522_a(ScoreObjective par1ScoreObjective) {}
    280
    281    public void func_96532_b(ScoreObjective par1ScoreObjective) {}
    282
    283    public void func_96533_c(ScoreObjective par1ScoreObjective) {}
    284
    285    public void func_96536_a(Score par1Score) {}
    286
    287    public void func_96516_a(String par1Str) {}
    288
    289    public void func_96523_a(ScorePlayerTeam par1ScorePlayerTeam) {}
    290
    291    public void func_96538_b(ScorePlayerTeam par1ScorePlayerTeam) {}
    292
    293    public void func_96513_c(ScorePlayerTeam par1ScorePlayerTeam) {}
    294
    295    public static String func_96517_b(int par0)
    296    {
    297        switch (par0)
    298        {
    299            case 0:
    300                return "list";
    301            case 1:
    302                return "sidebar";
    303            case 2:
    304                return "belowName";
    305            default:
    306                return null;
    307        }
    308    }
    309
    310    public static int func_96537_j(String par0Str)
    311    {
    312        return par0Str.equalsIgnoreCase("list") ? 0 : (par0Str.equalsIgnoreCase("sidebar") ? 1 : (par0Str.equalsIgnoreCase("belowName") ? 2 : -1));
    313    }
    314}