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 this.mc.launchIntegratedServer(var2, var3, (WorldSettings)null); 207 } 208 } 209 210 public void confirmClicked(boolean par1, int par2) 211 { 212 if (this.deleting) 213 { 214 this.deleting = false; 215 216 if (par1) 217 { 218 ISaveFormat var3 = this.mc.getSaveLoader(); 219 var3.flushCache(); 220 var3.deleteWorldDirectory(this.getSaveFileName(par2)); 221 this.loadSaves(); 222 } 223 224 this.mc.displayGuiScreen(this); 225 } 226 } 227 228 /** 229 * Draws the screen and all the components in it. 230 */ 231 public void drawScreen(int par1, int par2, float par3) 232 { 233 this.worldSlotContainer.drawScreen(par1, par2, par3); 234 this.drawCenteredString(this.fontRenderer, this.screenTitle, this.width / 2, 20, 16777215); 235 super.drawScreen(par1, par2, par3); 236 } 237 238 /** 239 * Gets a GuiYesNo screen with the warning, buttons, etc. 240 */ 241 public static GuiYesNo getDeleteWorldScreen(GuiScreen par0GuiScreen, String par1Str, int par2) 242 { 243 StringTranslate var3 = StringTranslate.getInstance(); 244 String var4 = var3.translateKey("selectWorld.deleteQuestion"); 245 String var5 = "\'" + par1Str + "\' " + var3.translateKey("selectWorld.deleteWarning"); 246 String var6 = var3.translateKey("selectWorld.deleteButton"); 247 String var7 = var3.translateKey("gui.cancel"); 248 GuiYesNo var8 = new GuiYesNo(par0GuiScreen, var4, var5, var6, var7, par2); 249 return var8; 250 } 251 252 static List getSize(GuiSelectWorld par0GuiSelectWorld) 253 { 254 return par0GuiSelectWorld.saveList; 255 } 256 257 /** 258 * called whenever an element in this gui is selected 259 */ 260 static int onElementSelected(GuiSelectWorld par0GuiSelectWorld, int par1) 261 { 262 return par0GuiSelectWorld.selectedWorld = par1; 263 } 264 265 /** 266 * returns the world currently selected 267 */ 268 static int getSelectedWorld(GuiSelectWorld par0GuiSelectWorld) 269 { 270 return par0GuiSelectWorld.selectedWorld; 271 } 272 273 /** 274 * returns the select button 275 */ 276 static GuiButton getSelectButton(GuiSelectWorld par0GuiSelectWorld) 277 { 278 return par0GuiSelectWorld.buttonSelect; 279 } 280 281 /** 282 * returns the rename button 283 */ 284 static GuiButton getRenameButton(GuiSelectWorld par0GuiSelectWorld) 285 { 286 return par0GuiSelectWorld.buttonRename; 287 } 288 289 /** 290 * returns the delete button 291 */ 292 static GuiButton getDeleteButton(GuiSelectWorld par0GuiSelectWorld) 293 { 294 return par0GuiSelectWorld.buttonDelete; 295 } 296 297 static GuiButton func_82312_f(GuiSelectWorld par0GuiSelectWorld) 298 { 299 return par0GuiSelectWorld.field_82316_w; 300 } 301 302 static String func_82313_g(GuiSelectWorld par0GuiSelectWorld) 303 { 304 return par0GuiSelectWorld.localizedWorldText; 305 } 306 307 static DateFormat func_82315_h(GuiSelectWorld par0GuiSelectWorld) 308 { 309 return par0GuiSelectWorld.dateFormatter; 310 } 311 312 static String func_82311_i(GuiSelectWorld par0GuiSelectWorld) 313 { 314 return par0GuiSelectWorld.localizedMustConvertText; 315 } 316 317 static String[] func_82314_j(GuiSelectWorld par0GuiSelectWorld) 318 { 319 return par0GuiSelectWorld.localizedGameModeText; 320 } 321 }