    001    package net.minecraft.client.gui;
    002
    003    import cpw.mods.fml.common.Side;
    004    import cpw.mods.fml.common.asm.SideOnly;
    005    import java.text.DateFormat;
    006    import java.text.SimpleDateFormat;
    007    import java.util.Collections;
    008    import java.util.List;
    009    import net.minecraft.util.MathHelper;
    010    import net.minecraft.util.StringTranslate;
    011    import net.minecraft.world.EnumGameType;
    012    import net.minecraft.world.WorldSettings;
    013    import net.minecraft.world.storage.ISaveFormat;
    014    import net.minecraft.world.storage.ISaveHandler;
    015    import net.minecraft.world.storage.SaveFormatComparator;
    016    import net.minecraft.world.storage.WorldInfo;
    017
    018    @SideOnly(Side.CLIENT)
    019    public class GuiSelectWorld extends GuiScreen
    020    {
    021        /** simple date formater */
    022        private final DateFormat dateFormatter = new SimpleDateFormat();
    023
    024        /**
    025         * A reference to the screen object that created this. Used for navigating between screens.
    026         */
    027        protected GuiScreen parentScreen;
    028
    029        /** The title string that is displayed in the top-center of the screen. */
    030        protected String screenTitle = "Select world";
    031
    032        /** True if a world has been selected. */
    033        private boolean selected = false;
    034
    035        /** the currently selected world */
    036        private int selectedWorld;
    037
    038        /** The save list for the world selection screen */
    039        private List saveList;
    040        private GuiWorldSlot worldSlotContainer;
    041
    042        /** E.g. World, Welt, Monde, Mundo */
    043        private String localizedWorldText;
    044        private String localizedMustConvertText;
    045
    046        /**
    047         * The game mode text that is displayed with each world on the world selection list.
    048         */
    049        private String[] localizedGameModeText = new String[3];
    050
    051        /** set to true if you arein the process of deleteing a world/save */
    052        private boolean deleting;
    053
    054        /** the rename button in the world selection gui */
    055        private GuiButton buttonRename;
    056
    057        /** the select button in the world selection gui */
    058        private GuiButton buttonSelect;
    059
    060        /** the delete button in the world selection gui */
    061        private GuiButton buttonDelete;
    062        private GuiButton field_82316_w;
    063
    064        public GuiSelectWorld(GuiScreen par1GuiScreen)
    065        {
    066            this.parentScreen = par1GuiScreen;
    067        }
    068
    069        /**
    070         * Adds the buttons (and other controls) to the screen in question.
    071         */
    072        public void initGui()
    073        {
    074            StringTranslate var1 = StringTranslate.getInstance();
    075            this.screenTitle = var1.translateKey("selectWorld.title");
    076            this.localizedWorldText = var1.translateKey("selectWorld.world");
    077            this.localizedMustConvertText = var1.translateKey("selectWorld.conversion");
    078            this.localizedGameModeText[EnumGameType.SURVIVAL.getID()] = var1.translateKey("gameMode.survival");
    079            this.localizedGameModeText[EnumGameType.CREATIVE.getID()] = var1.translateKey("gameMode.creative");
    080            this.localizedGameModeText[EnumGameType.ADVENTURE.getID()] = var1.translateKey("gameMode.adventure");
    081            this.loadSaves();
    082            this.worldSlotContainer = new GuiWorldSlot(this);
    083            this.worldSlotContainer.registerScrollButtons(this.controlList, 4, 5);
    084            this.initButtons();
    085        }
    086
    087        /**
    088         * loads the saves
    089         */
    090        private void loadSaves()
    091        {
    092            ISaveFormat var1 = this.mc.getSaveLoader();
    093            this.saveList = var1.getSaveList();
    094            Collections.sort(this.saveList);
    095            this.selectedWorld = -1;
    096        }
    097
    098        /**
    099         * returns the file name of the specified save number
    100         */
    101        protected String getSaveFileName(int par1)
    102        {
    103            return ((SaveFormatComparator)this.saveList.get(par1)).getFileName();
    104        }
    105
    106        /**
    107         * returns the name of the saved game
    108         */
    109        protected String getSaveName(int par1)
    110        {
    111            String var2 = ((SaveFormatComparator)this.saveList.get(par1)).getDisplayName();
    112
    113            if (var2 == null || MathHelper.stringNullOrLengthZero(var2))
    114            {
    115                StringTranslate var3 = StringTranslate.getInstance();
    116                var2 = var3.translateKey("selectWorld.world") + " " + (par1 + 1);
    117            }
    118
    119            return var2;
    120        }
    121
    122        /**
    123         * intilize the buttons for this GUI
    124         */
    125        public void initButtons()
    126        {
    127            StringTranslate var1 = StringTranslate.getInstance();
    128            this.controlList.add(this.buttonSelect = new GuiButton(1, this.width / 2 - 154, this.height - 52, 150, 20, var1.translateKey("selectWorld.select")));
    129            this.controlList.add(new GuiButton(3, this.width / 2 + 4, this.height - 52, 150, 20, var1.translateKey("selectWorld.create")));
    130            this.controlList.add(this.buttonDelete = new GuiButton(6, this.width / 2 - 154, this.height - 28, 72, 20, var1.translateKey("selectWorld.rename")));
    131            this.controlList.add(this.buttonRename = new GuiButton(2, this.width / 2 - 76, this.height - 28, 72, 20, var1.translateKey("selectWorld.delete")));
    132            this.controlList.add(this.field_82316_w = new GuiButton(7, this.width / 2 + 4, this.height - 28, 72, 20, var1.translateKey("selectWorld.recreate")));
    133            this.controlList.add(new GuiButton(0, this.width / 2 + 82, this.height - 28, 72, 20, var1.translateKey("gui.cancel")));
    134            this.buttonSelect.enabled = false;
    135            this.buttonRename.enabled = false;
    136            this.buttonDelete.enabled = false;
    137            this.field_82316_w.enabled = false;
    138        }
    139
    140        /**
    141         * Fired when a control is clicked. This is the equivalent of ActionListener.actionPerformed(ActionEvent e).
    142         */
    143        protected void actionPerformed(GuiButton par1GuiButton)
    144        {
    145            if (par1GuiButton.enabled)
    146            {
    147                if (par1GuiButton.id == 2)
    148                {
    149                    String var2 = this.getSaveName(this.selectedWorld);
    150
    151                    if (var2 != null)
    152                    {
    153                        this.deleting = true;
    154                        GuiYesNo var3 = getDeleteWorldScreen(this, var2, this.selectedWorld);
    155                        this.mc.displayGuiScreen(var3);
    156                    }
    157                }
    158                else if (par1GuiButton.id == 1)
    159                {
    160                    this.selectWorld(this.selectedWorld);
    161                }
    162                else if (par1GuiButton.id == 3)
    163                {
    164                    this.mc.displayGuiScreen(new GuiCreateWorld(this));
    165                }
    166                else if (par1GuiButton.id == 6)
    167                {
    168                    this.mc.displayGuiScreen(new GuiRenameWorld(this, this.getSaveFileName(this.selectedWorld)));
    169                }
    170                else if (par1GuiButton.id == 0)
    171                {
    172                    this.mc.displayGuiScreen(this.parentScreen);
    173                }
    174                else if (par1GuiButton.id == 7)
    175                {
    176                    GuiCreateWorld var5 = new GuiCreateWorld(this);
    177                    ISaveHandler var6 = this.mc.getSaveLoader().getSaveLoader(this.getSaveFileName(this.selectedWorld), false);
    178                    WorldInfo var4 = var6.loadWorldInfo();
    179                    var6.flush();
    180                    var5.func_82286_a(var4);
    181                    this.mc.displayGuiScreen(var5);
    182                }
    183                else
    184                {
    185                    this.worldSlotContainer.actionPerformed(par1GuiButton);
    186                }
    187            }
    188        }
    189
    190        /**
    191         * Gets the selected world.
    192         */
    193        public void selectWorld(int par1)
    194        {
    195            this.mc.displayGuiScreen((GuiScreen)null);
    196
    197            if (!this.selected)
    198            {
    199                this.selected = true;
    200                String var2 = this.getSaveFileName(par1);
    201
    202                if (var2 == null)
    203                {
    204                    var2 = "World" + par1;
    205                }
    206
    207                String var3 = this.getSaveName(par1);
    208
    209                if (var3 == null)
    210                {
    211                    var3 = "World" + par1;
    212                }
    213
    214                if (this.mc.getSaveLoader().func_90033_f(var2))
    215                {
    216                    this.mc.launchIntegratedServer(var2, var3, (WorldSettings)null);
    217                }
    218            }
    219        }
    220
    221        public void confirmClicked(boolean par1, int par2)
    222        {
    223            if (this.deleting)
    224            {
    225                this.deleting = false;
    226
    227                if (par1)
    228                {
    229                    ISaveFormat var3 = this.mc.getSaveLoader();
    230                    var3.flushCache();
    231                    var3.deleteWorldDirectory(this.getSaveFileName(par2));
    232                    this.loadSaves();
    233                }
    234
    235                this.mc.displayGuiScreen(this);
    236            }
    237        }
    238
    239        /**
    240         * Draws the screen and all the components in it.
    241         */
    242        public void drawScreen(int par1, int par2, float par3)
    243        {
    244            this.worldSlotContainer.drawScreen(par1, par2, par3);
    245            this.drawCenteredString(this.fontRenderer, this.screenTitle, this.width / 2, 20, 16777215);
    246            super.drawScreen(par1, par2, par3);
    247        }
    248
    249        /**
    250         * Gets a GuiYesNo screen with the warning, buttons, etc.
    251         */
    252        public static GuiYesNo getDeleteWorldScreen(GuiScreen par0GuiScreen, String par1Str, int par2)
    253        {
    254            StringTranslate var3 = StringTranslate.getInstance();
    255            String var4 = var3.translateKey("selectWorld.deleteQuestion");
    256            String var5 = "\'" + par1Str + "\' " + var3.translateKey("selectWorld.deleteWarning");
    257            String var6 = var3.translateKey("selectWorld.deleteButton");
    258            String var7 = var3.translateKey("gui.cancel");
    259            GuiYesNo var8 = new GuiYesNo(par0GuiScreen, var4, var5, var6, var7, par2);
    260            return var8;
    261        }
    262
    263        static List getSize(GuiSelectWorld par0GuiSelectWorld)
    264        {
    265            return par0GuiSelectWorld.saveList;
    266        }
    267
    268        /**
    269         * called whenever an element in this gui is selected
    270         */
    271        static int onElementSelected(GuiSelectWorld par0GuiSelectWorld, int par1)
    272        {
    273            return par0GuiSelectWorld.selectedWorld = par1;
    274        }
    275
    276        /**
    277         * returns the world currently selected
    278         */
    279        static int getSelectedWorld(GuiSelectWorld par0GuiSelectWorld)
    280        {
    281            return par0GuiSelectWorld.selectedWorld;
    282        }
    283
    284        /**
    285         * returns the select button
    286         */
    287        static GuiButton getSelectButton(GuiSelectWorld par0GuiSelectWorld)
    288        {
    289            return par0GuiSelectWorld.buttonSelect;
    290        }
    291
    292        /**
    293         * returns the rename button
    294         */
    295        static GuiButton getRenameButton(GuiSelectWorld par0GuiSelectWorld)
    296        {
    297            return par0GuiSelectWorld.buttonRename;
    298        }
    299
    300        /**
    301         * returns the delete button
    302         */
    303        static GuiButton getDeleteButton(GuiSelectWorld par0GuiSelectWorld)
    304        {
    305            return par0GuiSelectWorld.buttonDelete;
    306        }
    307
    308        static GuiButton func_82312_f(GuiSelectWorld par0GuiSelectWorld)
    309        {
    310            return par0GuiSelectWorld.field_82316_w;
    311        }
    312
    313        static String func_82313_g(GuiSelectWorld par0GuiSelectWorld)
    314        {
    315            return par0GuiSelectWorld.localizedWorldText;
    316        }
    317
    318        static DateFormat func_82315_h(GuiSelectWorld par0GuiSelectWorld)
    319        {
    320            return par0GuiSelectWorld.dateFormatter;
    321        }
    322
    323        static String func_82311_i(GuiSelectWorld par0GuiSelectWorld)
    324        {
    325            return par0GuiSelectWorld.localizedMustConvertText;
    326        }
    327
    328        static String[] func_82314_j(GuiSelectWorld par0GuiSelectWorld)
    329        {
    330            return par0GuiSelectWorld.localizedGameModeText;
    331        }
    332    }