    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 void deleteWorldDirectory(String par1Str)
    137        {
    138            File var2 = new File(this.savesDirectory, par1Str);
    139
    140            if (var2.exists())
    141            {
    142                deleteFiles(var2.listFiles());
    143                var2.delete();
    144            }
    145        }
    146
    147        /**
    148         * @args: Takes one argument - the list of files and directories to delete. @desc: Deletes the files and directory
    149         * listed in the list recursively.
    150         */
    151        protected static void deleteFiles(File[] par0ArrayOfFile)
    152        {
    153            File[] var1 = par0ArrayOfFile;
    154            int var2 = par0ArrayOfFile.length;
    155
    156            for (int var3 = 0; var3 < var2; ++var3)
    157            {
    158                File var4 = var1[var3];
    159
    160                if (var4.isDirectory())
    161                {
    162                    System.out.println("Deleting " + var4);
    163                    deleteFiles(var4.listFiles());
    164                }
    165
    166                var4.delete();
    167            }
    168        }
    169
    170        /**
    171         * Returns back a loader for the specified save directory
    172         */
    173        public ISaveHandler getSaveLoader(String par1Str, boolean par2)
    174        {
    175            return new SaveHandler(this.savesDirectory, par1Str, par2);
    176        }
    177
    178        /**
    179         * Checks if the save directory uses the old map format
    180         */
    181        public boolean isOldMapFormat(String par1Str)
    182        {
    183            return false;
    184        }
    185
    186        /**
    187         * Converts the specified map to the new map format. Args: worldName, loadingScreen
    188         */
    189        public boolean convertMapFormat(String par1Str, IProgressUpdate par2IProgressUpdate)
    190        {
    191            return false;
    192        }
    193    }