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