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    }