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.io.FileInputStream;
007 import java.io.FileOutputStream;
008 import java.util.ArrayList;
009 import java.util.List;
010
011 public class SaveFormatOld implements ISaveFormat
012 {
013 /**
014 * Reference to the File object representing the directory for the world saves
015 */
016 protected final File savesDirectory;
017
018 public SaveFormatOld(File par1File)
019 {
020 if (!par1File.exists())
021 {
022 par1File.mkdirs();
023 }
024
025 this.savesDirectory = par1File;
026 }
027
028 @SideOnly(Side.CLIENT)
029 public List getSaveList()
030 {
031 ArrayList var1 = new ArrayList();
032
033 for (int var2 = 0; var2 < 5; ++var2)
034 {
035 String var3 = "World" + (var2 + 1);
036 WorldInfo var4 = this.getWorldInfo(var3);
037
038 if (var4 != null)
039 {
040 var1.add(new SaveFormatComparator(var3, "", var4.getLastTimePlayed(), var4.getSizeOnDisk(), var4.getGameType(), false, var4.isHardcoreModeEnabled(), var4.areCommandsAllowed()));
041 }
042 }
043
044 return var1;
045 }
046
047 public void flushCache() {}
048
049 /**
050 * gets the world info
051 */
052 public WorldInfo getWorldInfo(String par1Str)
053 {
054 File var2 = new File(this.savesDirectory, par1Str);
055
056 if (!var2.exists())
057 {
058 return null;
059 }
060 else
061 {
062 File var3 = new File(var2, "level.dat");
063 NBTTagCompound var4;
064 NBTTagCompound var5;
065
066 if (var3.exists())
067 {
068 try
069 {
070 var4 = CompressedStreamTools.readCompressed(new FileInputStream(var3));
071 var5 = var4.getCompoundTag("Data");
072 return new WorldInfo(var5);
073 }
074 catch (Exception var7)
075 {
076 var7.printStackTrace();
077 }
078 }
079
080 var3 = new File(var2, "level.dat_old");
081
082 if (var3.exists())
083 {
084 try
085 {
086 var4 = CompressedStreamTools.readCompressed(new FileInputStream(var3));
087 var5 = var4.getCompoundTag("Data");
088 return new WorldInfo(var5);
089 }
090 catch (Exception var6)
091 {
092 var6.printStackTrace();
093 }
094 }
095
096 return null;
097 }
098 }
099
100 @SideOnly(Side.CLIENT)
101
102 /**
103 * @args: Takes two arguments - first the name of the directory containing the world and second the new name for
104 * that world. @desc: Renames the world by storing the new name in level.dat. It does *not* rename the directory
105 * containing the world data.
106 */
107 public void renameWorld(String par1Str, String par2Str)
108 {
109 File var3 = new File(this.savesDirectory, par1Str);
110
111 if (var3.exists())
112 {
113 File var4 = new File(var3, "level.dat");
114
115 if (var4.exists())
116 {
117 try
118 {
119 NBTTagCompound var5 = CompressedStreamTools.readCompressed(new FileInputStream(var4));
120 NBTTagCompound var6 = var5.getCompoundTag("Data");
121 var6.setString("LevelName", par2Str);
122 CompressedStreamTools.writeCompressed(var5, new FileOutputStream(var4));
123 }
124 catch (Exception var7)
125 {
126 var7.printStackTrace();
127 }
128 }
129 }
130 }
131
132 /**
133 * @args: Takes one argument - the name of the directory of the world to delete. @desc: Delete the world by deleting
134 * the associated directory recursively.
135 */
136 public boolean deleteWorldDirectory(String par1Str)
137 {
138 File var2 = new File(this.savesDirectory, par1Str);
139
140 if (!var2.exists())
141 {
142 return true;
143 }
144 else
145 {
146 System.out.println("Deleting level " + par1Str);
147
148 for (int var3 = 1; var3 <= 5; ++var3)
149 {
150 System.out.println("Attempt " + var3 + "...");
151
152 if (deleteFiles(var2.listFiles()))
153 {
154 break;
155 }
156
157 System.out.println("Unsuccessful in deleting contents.");
158
159 if (var3 < 5)
160 {
161 try
162 {
163 Thread.sleep(500L);
164 }
165 catch (InterruptedException var5)
166 {
167 ;
168 }
169 }
170 }
171
172 return var2.delete();
173 }
174 }
175
176 /**
177 * @args: Takes one argument - the list of files and directories to delete. @desc: Deletes the files and directory
178 * listed in the list recursively.
179 */
180 protected static boolean deleteFiles(File[] par0ArrayOfFile)
181 {
182 for (int var1 = 0; var1 < par0ArrayOfFile.length; ++var1)
183 {
184 File var2 = par0ArrayOfFile[var1];
185 System.out.println("Deleting " + var2);
186
187 if (var2.isDirectory() && !deleteFiles(var2.listFiles()))
188 {
189 System.out.println("Couldn\'t delete directory " + var2);
190 return false;
191 }
192
193 if (!var2.delete())
194 {
195 System.out.println("Couldn\'t delete file " + var2);
196 return false;
197 }
198 }
199
200 return true;
201 }
202
203 /**
204 * Returns back a loader for the specified save directory
205 */
206 public ISaveHandler getSaveLoader(String par1Str, boolean par2)
207 {
208 return new SaveHandler(this.savesDirectory, par1Str, par2);
209 }
210
211 /**
212 * Checks if the save directory uses the old map format
213 */
214 public boolean isOldMapFormat(String par1Str)
215 {
216 return false;
217 }
218
219 /**
220 * Converts the specified map to the new map format. Args: worldName, loadingScreen
221 */
222 public boolean convertMapFormat(String par1Str, IProgressUpdate par2IProgressUpdate)
223 {
224 return false;
225 }
226
227 @SideOnly(Side.CLIENT)
228 public boolean func_90033_f(String par1Str)
229 {
230 File var2 = new File(this.savesDirectory, par1Str);
231 return var2.isDirectory();
232 }
233 }