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 File[] var1 = par0ArrayOfFile; 183 int var2 = par0ArrayOfFile.length; 184 185 for (int var3 = 0; var3 < var2; ++var3) 186 { 187 File var4 = var1[var3]; 188 System.out.println("Deleting " + var4); 189 190 if (var4.isDirectory() && !deleteFiles(var4.listFiles())) 191 { 192 System.out.println("Couldn\'t delete directory " + var4); 193 return false; 194 } 195 196 if (!var4.delete()) 197 { 198 System.out.println("Couldn\'t delete file " + var4); 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 }