001package net.minecraft.network.packet;
002
003import java.io.DataInputStream;
004import java.io.DataOutputStream;
005import java.io.IOException;
006import java.util.ArrayList;
007import java.util.Collection;
008import java.util.Iterator;
009import net.minecraft.scoreboard.ScorePlayerTeam;
010
011public class Packet209SetPlayerTeam extends Packet
012{
013    /** A unique name for the team. */
014    public String teamName = "";
015
016    /** Only if mode = 0 or 2. */
017    public String teamDisplayName = "";
018
019    /**
020     * Only if mode = 0 or 2. Displayed before the players' name that are part of this team.
021     */
022    public String teamPrefix = "";
023
024    /**
025     * Only if mode = 0 or 2. Displayed after the players' name that are part of this team.
026     */
027    public String teamSuffix = "";
028
029    /** Only if mode = 0 or 3 or 4. Players to be added/remove from the team. */
030    public Collection playerNames = new ArrayList();
031
032    /**
033     * If 0 then the team is created. If 1 then the team is removed. If 2 the team team information is updated. If 3
034     * then new players are added to the team. If 4 then players are removed from the team.
035     */
036    public int mode = 0;
037
038    /** Only if mode = 0 or 2. */
039    public int friendlyFire;
040
041    public Packet209SetPlayerTeam() {}
042
043    public Packet209SetPlayerTeam(ScorePlayerTeam par1, int par2)
044    {
045        this.teamName = par1.func_96661_b();
046        this.mode = par2;
047
048        if (par2 == 0 || par2 == 2)
049        {
050            this.teamDisplayName = par1.func_96669_c();
051            this.teamPrefix = par1.func_96668_e();
052            this.teamSuffix = par1.func_96663_f();
053            this.friendlyFire = par1.func_98299_i();
054        }
055
056        if (par2 == 0)
057        {
058            this.playerNames.addAll(par1.func_96670_d());
059        }
060    }
061
062    public Packet209SetPlayerTeam(ScorePlayerTeam par1, Collection par2, int par3)
063    {
064        if (par3 != 3 && par3 != 4)
065        {
066            throw new IllegalArgumentException("Method must be join or leave for player constructor");
067        }
068        else if (par2 != null && !par2.isEmpty())
069        {
070            this.mode = par3;
071            this.teamName = par1.func_96661_b();
072            this.playerNames.addAll(par2);
073        }
074        else
075        {
076            throw new IllegalArgumentException("Players cannot be null/empty");
077        }
078    }
079
080    /**
081     * Abstract. Reads the raw packet data from the data stream.
082     */
083    public void readPacketData(DataInputStream par1DataInputStream) throws IOException
084    {
085        this.teamName = readString(par1DataInputStream, 16);
086        this.mode = par1DataInputStream.readByte();
087
088        if (this.mode == 0 || this.mode == 2)
089        {
090            this.teamDisplayName = readString(par1DataInputStream, 32);
091            this.teamPrefix = readString(par1DataInputStream, 16);
092            this.teamSuffix = readString(par1DataInputStream, 16);
093            this.friendlyFire = par1DataInputStream.readByte();
094        }
095
096        if (this.mode == 0 || this.mode == 3 || this.mode == 4)
097        {
098            short short1 = par1DataInputStream.readShort();
099
100            for (int i = 0; i < short1; ++i)
101            {
102                this.playerNames.add(readString(par1DataInputStream, 16));
103            }
104        }
105    }
106
107    /**
108     * Abstract. Writes the raw packet data to the data stream.
109     */
110    public void writePacketData(DataOutputStream par1DataOutputStream) throws IOException
111    {
112        writeString(this.teamName, par1DataOutputStream);
113        par1DataOutputStream.writeByte(this.mode);
114
115        if (this.mode == 0 || this.mode == 2)
116        {
117            writeString(this.teamDisplayName, par1DataOutputStream);
118            writeString(this.teamPrefix, par1DataOutputStream);
119            writeString(this.teamSuffix, par1DataOutputStream);
120            par1DataOutputStream.writeByte(this.friendlyFire);
121        }
122
123        if (this.mode == 0 || this.mode == 3 || this.mode == 4)
124        {
125            par1DataOutputStream.writeShort(this.playerNames.size());
126            Iterator iterator = this.playerNames.iterator();
127
128            while (iterator.hasNext())
129            {
130                String s = (String)iterator.next();
131                writeString(s, par1DataOutputStream);
132            }
133        }
134    }
135
136    /**
137     * Passes this Packet on to the NetHandler for processing.
138     */
139    public void processPacket(NetHandler par1NetHandler)
140    {
141        par1NetHandler.handleSetPlayerTeam(this);
142    }
143
144    /**
145     * Abstract. Return the size of the packet (not counting the header).
146     */
147    public int getPacketSize()
148    {
149        return 3 + this.teamName.length();
150    }
151}