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 }