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 }