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