001package net.minecraft.client.multiplayer; 002 003import cpw.mods.fml.relauncher.Side; 004import cpw.mods.fml.relauncher.SideOnly; 005import java.io.File; 006import java.util.ArrayList; 007import java.util.Iterator; 008import java.util.List; 009import net.minecraft.client.Minecraft; 010import net.minecraft.nbt.CompressedStreamTools; 011import net.minecraft.nbt.NBTTagCompound; 012import net.minecraft.nbt.NBTTagList; 013 014@SideOnly(Side.CLIENT) 015public 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 nbttagcompound = CompressedStreamTools.read(new File(this.mc.mcDataDir, "servers.dat")); 038 NBTTagList nbttaglist = nbttagcompound.getTagList("servers"); 039 this.servers.clear(); 040 041 for (int i = 0; i < nbttaglist.tagCount(); ++i) 042 { 043 this.servers.add(ServerData.getServerDataFromNBTCompound((NBTTagCompound)nbttaglist.tagAt(i))); 044 } 045 } 046 catch (Exception exception) 047 { 048 exception.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 nbttaglist = new NBTTagList(); 061 Iterator iterator = this.servers.iterator(); 062 063 while (iterator.hasNext()) 064 { 065 ServerData serverdata = (ServerData)iterator.next(); 066 nbttaglist.appendTag(serverdata.getNBTCompound()); 067 } 068 069 NBTTagCompound nbttagcompound = new NBTTagCompound(); 070 nbttagcompound.setTag("servers", nbttaglist); 071 CompressedStreamTools.safeWrite(nbttagcompound, new File(this.mc.mcDataDir, "servers.dat")); 072 } 073 catch (Exception exception) 074 { 075 exception.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 serverdata = this.getServerData(par1); 117 this.servers.set(par1, this.getServerData(par2)); 118 this.servers.set(par2, serverdata); 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 serverlist = new ServerList(Minecraft.getMinecraft()); 133 serverlist.loadServerList(); 134 135 for (int i = 0; i < serverlist.countServers(); ++i) 136 { 137 ServerData serverdata1 = serverlist.getServerData(i); 138 139 if (serverdata1.serverName.equals(par0ServerData.serverName) && serverdata1.serverIP.equals(par0ServerData.serverIP)) 140 { 141 serverlist.setServer(i, par0ServerData); 142 break; 143 } 144 } 145 146 serverlist.saveServerList(); 147 } 148}