001package net.minecraft.scoreboard;
002
003import java.util.ArrayList;
004import java.util.Arrays;
005import java.util.HashSet;
006import java.util.Iterator;
007import java.util.List;
008import java.util.Set;
009import net.minecraft.entity.player.EntityPlayerMP;
010import net.minecraft.network.packet.Packet;
011import net.minecraft.network.packet.Packet206SetObjective;
012import net.minecraft.network.packet.Packet207SetScore;
013import net.minecraft.network.packet.Packet208SetDisplayObjective;
014import net.minecraft.network.packet.Packet209SetPlayerTeam;
015import net.minecraft.server.MinecraftServer;
016
017public class ServerScoreboard extends Scoreboard
018{
019    private final MinecraftServer field_96555_a;
020    private final Set field_96553_b = new HashSet();
021    private ScoreboardSaveData field_96554_c;
022
023    public ServerScoreboard(MinecraftServer par1MinecraftServer)
024    {
025        this.field_96555_a = par1MinecraftServer;
026    }
027
028    public void func_96536_a(Score par1Score)
029    {
030        super.func_96536_a(par1Score);
031
032        if (this.field_96553_b.contains(par1Score.func_96645_d()))
033        {
034            this.field_96555_a.getConfigurationManager().sendPacketToAllPlayers(new Packet207SetScore(par1Score, 0));
035        }
036
037        this.func_96551_b();
038    }
039
040    public void func_96516_a(String par1Str)
041    {
042        super.func_96516_a(par1Str);
043        this.field_96555_a.getConfigurationManager().sendPacketToAllPlayers(new Packet207SetScore(par1Str));
044        this.func_96551_b();
045    }
046
047    public void func_96530_a(int par1, ScoreObjective par2ScoreObjective)
048    {
049        ScoreObjective scoreobjective1 = this.func_96539_a(par1);
050        super.func_96530_a(par1, par2ScoreObjective);
051
052        if (scoreobjective1 != par2ScoreObjective && scoreobjective1 != null)
053        {
054            if (this.func_96552_h(scoreobjective1) > 0)
055            {
056                this.field_96555_a.getConfigurationManager().sendPacketToAllPlayers(new Packet208SetDisplayObjective(par1, par2ScoreObjective));
057            }
058            else
059            {
060                this.func_96546_g(scoreobjective1);
061            }
062        }
063
064        if (par2ScoreObjective != null)
065        {
066            if (this.field_96553_b.contains(par2ScoreObjective))
067            {
068                this.field_96555_a.getConfigurationManager().sendPacketToAllPlayers(new Packet208SetDisplayObjective(par1, par2ScoreObjective));
069            }
070            else
071            {
072                this.func_96549_e(par2ScoreObjective);
073            }
074        }
075
076        this.func_96551_b();
077    }
078
079    public void func_96521_a(String par1Str, ScorePlayerTeam par2ScorePlayerTeam)
080    {
081        super.func_96521_a(par1Str, par2ScorePlayerTeam);
082        this.field_96555_a.getConfigurationManager().sendPacketToAllPlayers(new Packet209SetPlayerTeam(par2ScorePlayerTeam, Arrays.asList(new String[] {par1Str}), 3));
083        this.func_96551_b();
084    }
085
086    public void func_96512_b(String par1Str, ScorePlayerTeam par2ScorePlayerTeam)
087    {
088        super.func_96512_b(par1Str, par2ScorePlayerTeam);
089        this.field_96555_a.getConfigurationManager().sendPacketToAllPlayers(new Packet209SetPlayerTeam(par2ScorePlayerTeam, Arrays.asList(new String[] {par1Str}), 4));
090        this.func_96551_b();
091    }
092
093    public void func_96522_a(ScoreObjective par1ScoreObjective)
094    {
095        super.func_96522_a(par1ScoreObjective);
096        this.func_96551_b();
097    }
098
099    public void func_96532_b(ScoreObjective par1ScoreObjective)
100    {
101        super.func_96532_b(par1ScoreObjective);
102
103        if (this.field_96553_b.contains(par1ScoreObjective))
104        {
105            this.field_96555_a.getConfigurationManager().sendPacketToAllPlayers(new Packet206SetObjective(par1ScoreObjective, 2));
106        }
107
108        this.func_96551_b();
109    }
110
111    public void func_96533_c(ScoreObjective par1ScoreObjective)
112    {
113        super.func_96533_c(par1ScoreObjective);
114
115        if (this.field_96553_b.contains(par1ScoreObjective))
116        {
117            this.func_96546_g(par1ScoreObjective);
118        }
119
120        this.func_96551_b();
121    }
122
123    public void func_96523_a(ScorePlayerTeam par1ScorePlayerTeam)
124    {
125        super.func_96523_a(par1ScorePlayerTeam);
126        this.field_96555_a.getConfigurationManager().sendPacketToAllPlayers(new Packet209SetPlayerTeam(par1ScorePlayerTeam, 0));
127        this.func_96551_b();
128    }
129
130    public void func_96538_b(ScorePlayerTeam par1ScorePlayerTeam)
131    {
132        super.func_96538_b(par1ScorePlayerTeam);
133        this.field_96555_a.getConfigurationManager().sendPacketToAllPlayers(new Packet209SetPlayerTeam(par1ScorePlayerTeam, 2));
134        this.func_96551_b();
135    }
136
137    public void func_96513_c(ScorePlayerTeam par1ScorePlayerTeam)
138    {
139        super.func_96513_c(par1ScorePlayerTeam);
140        this.field_96555_a.getConfigurationManager().sendPacketToAllPlayers(new Packet209SetPlayerTeam(par1ScorePlayerTeam, 1));
141        this.func_96551_b();
142    }
143
144    public void func_96547_a(ScoreboardSaveData par1ScoreboardSaveData)
145    {
146        this.field_96554_c = par1ScoreboardSaveData;
147    }
148
149    protected void func_96551_b()
150    {
151        if (this.field_96554_c != null)
152        {
153            this.field_96554_c.markDirty();
154        }
155    }
156
157    public List func_96550_d(ScoreObjective par1ScoreObjective)
158    {
159        ArrayList arraylist = new ArrayList();
160        arraylist.add(new Packet206SetObjective(par1ScoreObjective, 0));
161
162        for (int i = 0; i < 3; ++i)
163        {
164            if (this.func_96539_a(i) == par1ScoreObjective)
165            {
166                arraylist.add(new Packet208SetDisplayObjective(i, par1ScoreObjective));
167            }
168        }
169
170        Iterator iterator = this.func_96534_i(par1ScoreObjective).iterator();
171
172        while (iterator.hasNext())
173        {
174            Score score = (Score)iterator.next();
175            arraylist.add(new Packet207SetScore(score, 0));
176        }
177
178        return arraylist;
179    }
180
181    public void func_96549_e(ScoreObjective par1ScoreObjective)
182    {
183        List list = this.func_96550_d(par1ScoreObjective);
184        Iterator iterator = this.field_96555_a.getConfigurationManager().playerEntityList.iterator();
185
186        while (iterator.hasNext())
187        {
188            EntityPlayerMP entityplayermp = (EntityPlayerMP)iterator.next();
189            Iterator iterator1 = list.iterator();
190
191            while (iterator1.hasNext())
192            {
193                Packet packet = (Packet)iterator1.next();
194                entityplayermp.playerNetServerHandler.sendPacketToPlayer(packet);
195            }
196        }
197
198        this.field_96553_b.add(par1ScoreObjective);
199    }
200
201    public List func_96548_f(ScoreObjective par1ScoreObjective)
202    {
203        ArrayList arraylist = new ArrayList();
204        arraylist.add(new Packet206SetObjective(par1ScoreObjective, 1));
205
206        for (int i = 0; i < 3; ++i)
207        {
208            if (this.func_96539_a(i) == par1ScoreObjective)
209            {
210                arraylist.add(new Packet208SetDisplayObjective(i, par1ScoreObjective));
211            }
212        }
213
214        return arraylist;
215    }
216
217    public void func_96546_g(ScoreObjective par1ScoreObjective)
218    {
219        List list = this.func_96548_f(par1ScoreObjective);
220        Iterator iterator = this.field_96555_a.getConfigurationManager().playerEntityList.iterator();
221
222        while (iterator.hasNext())
223        {
224            EntityPlayerMP entityplayermp = (EntityPlayerMP)iterator.next();
225            Iterator iterator1 = list.iterator();
226
227            while (iterator1.hasNext())
228            {
229                Packet packet = (Packet)iterator1.next();
230                entityplayermp.playerNetServerHandler.sendPacketToPlayer(packet);
231            }
232        }
233
234        this.field_96553_b.remove(par1ScoreObjective);
235    }
236
237    public int func_96552_h(ScoreObjective par1ScoreObjective)
238    {
239        int i = 0;
240
241        for (int j = 0; j < 3; ++j)
242        {
243            if (this.func_96539_a(j) == par1ScoreObjective)
244            {
245                ++i;
246            }
247        }
248
249        return i;
250    }
251}