    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        private GuiButton field_82316_w;
    055
    056        public GuiSelectWorld(GuiScreen par1GuiScreen)
    057        {
    058            this.parentScreen = par1GuiScreen;
    059        }
    060
    061        /**
    062         * Adds the buttons (and other controls) to the screen in question.
    063         */
    064        public void initGui()
    065        {
    066            StringTranslate var1 = StringTranslate.getInstance();
    067            this.screenTitle = var1.translateKey("selectWorld.title");
    068            this.localizedWorldText = var1.translateKey("selectWorld.world");
    069            this.localizedMustConvertText = var1.translateKey("selectWorld.conversion");
    070            this.localizedGameModeText[EnumGameType.SURVIVAL.getID()] = var1.translateKey("gameMode.survival");
    071            this.localizedGameModeText[EnumGameType.CREATIVE.getID()] = var1.translateKey("gameMode.creative");
    072            this.localizedGameModeText[EnumGameType.ADVENTURE.getID()] = var1.translateKey("gameMode.adventure");
    073            this.loadSaves();
    074            this.worldSlotContainer = new GuiWorldSlot(this);
    075            this.worldSlotContainer.registerScrollButtons(this.controlList, 4, 5);
    076            this.initButtons();
    077        }
    078
    079        /**
    080         * loads the saves
    081         */
    082        private void loadSaves()
    083        {
    084            ISaveFormat var1 = this.mc.getSaveLoader();
    085            this.saveList = var1.getSaveList();
    086            Collections.sort(this.saveList);
    087            this.selectedWorld = -1;
    088        }
    089
    090        /**
    091         * returns the file name of the specified save number
    092         */
    093        protected String getSaveFileName(int par1)
    094        {
    095            return ((SaveFormatComparator)this.saveList.get(par1)).getFileName();
    096        }
    097
    098        /**
    099         * returns the name of the saved game
    100         */
    101        protected String getSaveName(int par1)
    102        {
    103            String var2 = ((SaveFormatComparator)this.saveList.get(par1)).getDisplayName();
    104
    105            if (var2 == null || MathHelper.stringNullOrLengthZero(var2))
    106            {
    107                StringTranslate var3 = StringTranslate.getInstance();
    108                var2 = var3.translateKey("selectWorld.world") + " " + (par1 + 1);
    109            }
    110
    111            return var2;
    112        }
    113
    114        /**
    115         * intilize the buttons for this GUI
    116         */
    117        public void initButtons()
    118        {
    119            StringTranslate var1 = StringTranslate.getInstance();
    120            this.controlList.add(this.buttonSelect = new GuiButton(1, this.width / 2 - 154, this.height - 52, 150, 20, var1.translateKey("selectWorld.select")));
    121            this.controlList.add(new GuiButton(3, this.width / 2 + 4, this.height - 52, 150, 20, var1.translateKey("selectWorld.create")));
    122            this.controlList.add(this.buttonDelete = new GuiButton(6, this.width / 2 - 154, this.height - 28, 72, 20, var1.translateKey("selectWorld.rename")));
    123            this.controlList.add(this.buttonRename = new GuiButton(2, this.width / 2 - 76, this.height - 28, 72, 20, var1.translateKey("selectWorld.delete")));
    124            this.controlList.add(this.field_82316_w = new GuiButton(7, this.width / 2 + 4, this.height - 28, 72, 20, var1.translateKey("selectWorld.recreate")));
    125            this.controlList.add(new GuiButton(0, this.width / 2 + 82, this.height - 28, 72, 20, var1.translateKey("gui.cancel")));
    126            this.buttonSelect.enabled = false;
    127            this.buttonRename.enabled = false;
    128            this.buttonDelete.enabled = false;
    129            this.field_82316_w.enabled = false;
    130        }
    131
    132        /**
    133         * Fired when a control is clicked. This is the equivalent of ActionListener.actionPerformed(ActionEvent e).
    134         */
    135        protected void actionPerformed(GuiButton par1GuiButton)
    136        {
    137            if (par1GuiButton.enabled)
    138            {
    139                if (par1GuiButton.id == 2)
    140                {
    141                    String var2 = this.getSaveName(this.selectedWorld);
    142
    143                    if (var2 != null)
    144                    {
    145                        this.deleting = true;
    146                        GuiYesNo var3 = getDeleteWorldScreen(this, var2, this.selectedWorld);
    147                        this.mc.displayGuiScreen(var3);
    148                    }
    149                }
    150                else if (par1GuiButton.id == 1)
    151                {
    152                    this.selectWorld(this.selectedWorld);
    153                }
    154                else if (par1GuiButton.id == 3)
    155                {
    156                    this.mc.displayGuiScreen(new GuiCreateWorld(this));
    157                }
    158                else if (par1GuiButton.id == 6)
    159                {
    160                    this.mc.displayGuiScreen(new GuiRenameWorld(this, this.getSaveFileName(this.selectedWorld)));
    161                }
    162                else if (par1GuiButton.id == 0)
    163                {
    164                    this.mc.displayGuiScreen(this.parentScreen);
    165                }
    166                else if (par1GuiButton.id == 7)
    167                {
    168                    GuiCreateWorld var5 = new GuiCreateWorld(this);
    169                    ISaveHandler var6 = this.mc.getSaveLoader().getSaveLoader(this.getSaveFileName(this.selectedWorld), false);
    170                    WorldInfo var4 = var6.loadWorldInfo();
    171                    var6.flush();
    172                    var5.func_82286_a(var4);
    173                    this.mc.displayGuiScreen(var5);
    174                }
    175                else
    176                {
    177                    this.worldSlotContainer.actionPerformed(par1GuiButton);
    178                }
    179            }
    180        }
    181
    182        /**
    183         * Gets the selected world.
    184         */
    185        public void selectWorld(int par1)
    186        {
    187            this.mc.displayGuiScreen((GuiScreen)null);
    188
    189            if (!this.selected)
    190            {
    191                this.selected = true;
    192                String var2 = this.getSaveFileName(par1);
    193
    194                if (var2 == null)
    195                {
    196                    var2 = "World" + par1;
    197                }
    198
    199                String var3 = this.getSaveName(par1);
    200
    201                if (var3 == null)
    202                {
    203                    var3 = "World" + par1;
    204                }
    205
    206                if (this.mc.getSaveLoader().func_90033_f(var2))
    207                {
    208                    this.mc.launchIntegratedServer(var2, var3, (WorldSettings)null);
    209                }
    210            }
    211        }
    212
    213        public void confirmClicked(boolean par1, int par2)
    214        {
    215            if (this.deleting)
    216            {
    217                this.deleting = false;
    218
    219                if (par1)
    220                {
    221                    ISaveFormat var3 = this.mc.getSaveLoader();
    222                    var3.flushCache();
    223                    var3.deleteWorldDirectory(this.getSaveFileName(par2));
    224                    this.loadSaves();
    225                }
    226
    227                this.mc.displayGuiScreen(this);
    228            }
    229        }
    230
    231        /**
    232         * Draws the screen and all the components in it.
    233         */
    234        public void drawScreen(int par1, int par2, float par3)
    235        {
    236            this.worldSlotContainer.drawScreen(par1, par2, par3);
    237            this.drawCenteredString(this.fontRenderer, this.screenTitle, this.width / 2, 20, 16777215);
    238            super.drawScreen(par1, par2, par3);
    239        }
    240
    241        /**
    242         * Gets a GuiYesNo screen with the warning, buttons, etc.
    243         */
    244        public static GuiYesNo getDeleteWorldScreen(GuiScreen par0GuiScreen, String par1Str, int par2)
    245        {
    246            StringTranslate var3 = StringTranslate.getInstance();
    247            String var4 = var3.translateKey("selectWorld.deleteQuestion");
    248            String var5 = "\'" + par1Str + "\' " + var3.translateKey("selectWorld.deleteWarning");
    249            String var6 = var3.translateKey("selectWorld.deleteButton");
    250            String var7 = var3.translateKey("gui.cancel");
    251            GuiYesNo var8 = new GuiYesNo(par0GuiScreen, var4, var5, var6, var7, par2);
    252            return var8;
    253        }
    254
    255        static List getSize(GuiSelectWorld par0GuiSelectWorld)
    256        {
    257            return par0GuiSelectWorld.saveList;
    258        }
    259
    260        /**
    261         * called whenever an element in this gui is selected
    262         */
    263        static int onElementSelected(GuiSelectWorld par0GuiSelectWorld, int par1)
    264        {
    265            return par0GuiSelectWorld.selectedWorld = par1;
    266        }
    267
    268        /**
    269         * returns the world currently selected
    270         */
    271        static int getSelectedWorld(GuiSelectWorld par0GuiSelectWorld)
    272        {
    273            return par0GuiSelectWorld.selectedWorld;
    274        }
    275
    276        /**
    277         * returns the select button
    278         */
    279        static GuiButton getSelectButton(GuiSelectWorld par0GuiSelectWorld)
    280        {
    281            return par0GuiSelectWorld.buttonSelect;
    282        }
    283
    284        /**
    285         * returns the rename button
    286         */
    287        static GuiButton getRenameButton(GuiSelectWorld par0GuiSelectWorld)
    288        {
    289            return par0GuiSelectWorld.buttonRename;
    290        }
    291
    292        /**
    293         * returns the delete button
    294         */
    295        static GuiButton getDeleteButton(GuiSelectWorld par0GuiSelectWorld)
    296        {
    297            return par0GuiSelectWorld.buttonDelete;
    298        }
    299
    300        static GuiButton func_82312_f(GuiSelectWorld par0GuiSelectWorld)
    301        {
    302            return par0GuiSelectWorld.field_82316_w;
    303        }
    304
    305        static String func_82313_g(GuiSelectWorld par0GuiSelectWorld)
    306        {
    307            return par0GuiSelectWorld.localizedWorldText;
    308        }
    309
    310        static DateFormat func_82315_h(GuiSelectWorld par0GuiSelectWorld)
    311        {
    312            return par0GuiSelectWorld.dateFormatter;
    313        }
    314
    315        static String func_82311_i(GuiSelectWorld par0GuiSelectWorld)
    316        {
    317            return par0GuiSelectWorld.localizedMustConvertText;
    318        }
    319
    320        static String[] func_82314_j(GuiSelectWorld par0GuiSelectWorld)
    321        {
    322            return par0GuiSelectWorld.localizedGameModeText;
    323        }
    324    }