001    package net.minecraft.client.multiplayer;
002    
003    import cpw.mods.fml.relauncher.Side;
004    import cpw.mods.fml.relauncher.SideOnly;
005    import java.io.File;
006    import java.util.ArrayList;
007    import java.util.Iterator;
008    import java.util.List;
009    import net.minecraft.client.Minecraft;
010    import net.minecraft.nbt.CompressedStreamTools;
011    import net.minecraft.nbt.NBTTagCompound;
012    import net.minecraft.nbt.NBTTagList;
013    
014    @SideOnly(Side.CLIENT)
015    public class ServerList
016    {
017        /** The Minecraft instance. */
018        private final Minecraft mc;
019    
020        /** List of ServerData instances. */
021        private final List servers = new ArrayList();
022    
023        public ServerList(Minecraft par1Minecraft)
024        {
025            this.mc = par1Minecraft;
026            this.loadServerList();
027        }
028    
029        /**
030         * Loads a list of servers from servers.dat, by running ServerData.getServerDataFromNBTCompound on each NBT compound
031         * found in the "servers" tag list.
032         */
033        public void loadServerList()
034        {
035            try
036            {
037                NBTTagCompound var1 = CompressedStreamTools.read(new File(this.mc.mcDataDir, "servers.dat"));
038                NBTTagList var2 = var1.getTagList("servers");
039                this.servers.clear();
040    
041                for (int var3 = 0; var3 < var2.tagCount(); ++var3)
042                {
043                    this.servers.add(ServerData.getServerDataFromNBTCompound((NBTTagCompound)var2.tagAt(var3)));
044                }
045            }
046            catch (Exception var4)
047            {
048                var4.printStackTrace();
049            }
050        }
051    
052        /**
053         * Runs getNBTCompound on each ServerData instance, puts everything into a "servers" NBT list and writes it to
054         * servers.dat.
055         */
056        public void saveServerList()
057        {
058            try
059            {
060                NBTTagList var1 = new NBTTagList();
061                Iterator var2 = this.servers.iterator();
062    
063                while (var2.hasNext())
064                {
065                    ServerData var3 = (ServerData)var2.next();
066                    var1.appendTag(var3.getNBTCompound());
067                }
068    
069                NBTTagCompound var5 = new NBTTagCompound();
070                var5.setTag("servers", var1);
071                CompressedStreamTools.safeWrite(var5, new File(this.mc.mcDataDir, "servers.dat"));
072            }
073            catch (Exception var4)
074            {
075                var4.printStackTrace();
076            }
077        }
078    
079        /**
080         * Gets the ServerData instance stored for the given index in the list.
081         */
082        public ServerData getServerData(int par1)
083        {
084            return (ServerData)this.servers.get(par1);
085        }
086    
087        /**
088         * Removes the ServerData instance stored for the given index in the list.
089         */
090        public void removeServerData(int par1)
091        {
092            this.servers.remove(par1);
093        }
094    
095        /**
096         * Adds the given ServerData instance to the list.
097         */
098        public void addServerData(ServerData par1ServerData)
099        {
100            this.servers.add(par1ServerData);
101        }
102    
103        /**
104         * Counts the number of ServerData instances in the list.
105         */
106        public int countServers()
107        {
108            return this.servers.size();
109        }
110    
111        /**
112         * Takes two list indexes, and swaps their order around.
113         */
114        public void swapServers(int par1, int par2)
115        {
116            ServerData var3 = this.getServerData(par1);
117            this.servers.set(par1, this.getServerData(par2));
118            this.servers.set(par2, var3);
119            this.saveServerList();
120        }
121    
122        /**
123         * Sets the given index in the list to the given ServerData instance.
124         */
125        public void setServer(int par1, ServerData par2ServerData)
126        {
127            this.servers.set(par1, par2ServerData);
128        }
129    
130        public static void func_78852_b(ServerData par0ServerData)
131        {
132            ServerList var1 = new ServerList(Minecraft.getMinecraft());
133            var1.loadServerList();
134    
135            for (int var2 = 0; var2 < var1.countServers(); ++var2)
136            {
137                ServerData var3 = var1.getServerData(var2);
138    
139                if (var3.serverName.equals(par0ServerData.serverName) && var3.serverIP.equals(par0ServerData.serverIP))
140                {
141                    var1.setServer(var2, par0ServerData);
142                    break;
143                }
144            }
145    
146            var1.saveServerList();
147        }
148    }