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