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 = func_74061_a(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        public static GuiYesNo func_74061_a(GuiScreen par0GuiScreen, String par1Str, int par2)
227        {
228            StringTranslate var3 = StringTranslate.getInstance();
229            String var4 = var3.translateKey("selectWorld.deleteQuestion");
230            String var5 = "\'" + par1Str + "\' " + var3.translateKey("selectWorld.deleteWarning");
231            String var6 = var3.translateKey("selectWorld.deleteButton");
232            String var7 = var3.translateKey("gui.cancel");
233            GuiYesNo var8 = new GuiYesNo(par0GuiScreen, var4, var5, var6, var7, par2);
234            return var8;
235        }
236    
237        static List getSize(GuiSelectWorld par0GuiSelectWorld)
238        {
239            return par0GuiSelectWorld.saveList;
240        }
241    
242        /**
243         * called whenever an element in this gui is selected
244         */
245        static int onElementSelected(GuiSelectWorld par0GuiSelectWorld, int par1)
246        {
247            return par0GuiSelectWorld.selectedWorld = par1;
248        }
249    
250        /**
251         * returns the world currently selected
252         */
253        static int getSelectedWorld(GuiSelectWorld par0GuiSelectWorld)
254        {
255            return par0GuiSelectWorld.selectedWorld;
256        }
257    
258        /**
259         * returns the select button
260         */
261        static GuiButton getSelectButton(GuiSelectWorld par0GuiSelectWorld)
262        {
263            return par0GuiSelectWorld.buttonSelect;
264        }
265    
266        /**
267         * returns the rename button
268         */
269        static GuiButton getRenameButton(GuiSelectWorld par0GuiSelectWorld)
270        {
271            return par0GuiSelectWorld.buttonRename;
272        }
273    
274        /**
275         * returns the delete button
276         */
277        static GuiButton getDeleteButton(GuiSelectWorld par0GuiSelectWorld)
278        {
279            return par0GuiSelectWorld.buttonDelete;
280        }
281    
282        /**
283         * Gets the localized world name
284         */
285        static String getLocalizedWorldName(GuiSelectWorld par0GuiSelectWorld)
286        {
287            return par0GuiSelectWorld.localizedWorldText;
288        }
289    
290        /**
291         * returns the date formatter for this gui
292         */
293        static DateFormat getDateFormatter(GuiSelectWorld par0GuiSelectWorld)
294        {
295            return par0GuiSelectWorld.dateFormatter;
296        }
297    
298        /**
299         * Gets the localized must convert text
300         */
301        static String getLocalizedMustConvert(GuiSelectWorld par0GuiSelectWorld)
302        {
303            return par0GuiSelectWorld.localizedMustConvertText;
304        }
305    
306        /**
307         * Gets the localized GameMode
308         */
309        static String[] getLocalizedGameMode(GuiSelectWorld par0GuiSelectWorld)
310        {
311            return par0GuiSelectWorld.localizedGameModeText;
312        }
313    }