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