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 }