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 }