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 }