001 package net.minecraft.client.gui; 002 003 import cpw.mods.fml.relauncher.Side; 004 import cpw.mods.fml.relauncher.SideOnly; 005 import java.text.DateFormat; 006 import java.text.SimpleDateFormat; 007 import java.util.Collections; 008 import java.util.List; 009 import net.minecraft.util.MathHelper; 010 import net.minecraft.util.StringTranslate; 011 import net.minecraft.world.EnumGameType; 012 import net.minecraft.world.WorldSettings; 013 import net.minecraft.world.storage.ISaveFormat; 014 import net.minecraft.world.storage.ISaveHandler; 015 import net.minecraft.world.storage.SaveFormatComparator; 016 import net.minecraft.world.storage.WorldInfo; 017 018 @SideOnly(Side.CLIENT) 019 public class GuiSelectWorld extends GuiScreen 020 { 021 /** simple date formater */ 022 private final DateFormat dateFormatter = new SimpleDateFormat(); 023 024 /** 025 * A reference to the screen object that created this. Used for navigating between screens. 026 */ 027 protected GuiScreen parentScreen; 028 029 /** The title string that is displayed in the top-center of the screen. */ 030 protected String screenTitle = "Select world"; 031 032 /** True if a world has been selected. */ 033 private boolean selected = false; 034 035 /** the currently selected world */ 036 private int selectedWorld; 037 038 /** The save list for the world selection screen */ 039 private List saveList; 040 private GuiWorldSlot worldSlotContainer; 041 042 /** E.g. World, Welt, Monde, Mundo */ 043 private String localizedWorldText; 044 private String localizedMustConvertText; 045 046 /** 047 * The game mode text that is displayed with each world on the world selection list. 048 */ 049 private String[] localizedGameModeText = new String[3]; 050 051 /** set to true if you arein the process of deleteing a world/save */ 052 private boolean deleting; 053 054 /** the rename button in the world selection gui */ 055 private GuiButton buttonRename; 056 057 /** the select button in the world selection gui */ 058 private GuiButton buttonSelect; 059 060 /** the delete button in the world selection gui */ 061 private GuiButton buttonDelete; 062 private GuiButton field_82316_w; 063 064 public GuiSelectWorld(GuiScreen par1GuiScreen) 065 { 066 this.parentScreen = par1GuiScreen; 067 } 068 069 /** 070 * Adds the buttons (and other controls) to the screen in question. 071 */ 072 public void initGui() 073 { 074 StringTranslate var1 = StringTranslate.getInstance(); 075 this.screenTitle = var1.translateKey("selectWorld.title"); 076 this.localizedWorldText = var1.translateKey("selectWorld.world"); 077 this.localizedMustConvertText = var1.translateKey("selectWorld.conversion"); 078 this.localizedGameModeText[EnumGameType.SURVIVAL.getID()] = var1.translateKey("gameMode.survival"); 079 this.localizedGameModeText[EnumGameType.CREATIVE.getID()] = var1.translateKey("gameMode.creative"); 080 this.localizedGameModeText[EnumGameType.ADVENTURE.getID()] = var1.translateKey("gameMode.adventure"); 081 this.loadSaves(); 082 this.worldSlotContainer = new GuiWorldSlot(this); 083 this.worldSlotContainer.registerScrollButtons(this.controlList, 4, 5); 084 this.initButtons(); 085 } 086 087 /** 088 * loads the saves 089 */ 090 private void loadSaves() 091 { 092 ISaveFormat var1 = this.mc.getSaveLoader(); 093 this.saveList = var1.getSaveList(); 094 Collections.sort(this.saveList); 095 this.selectedWorld = -1; 096 } 097 098 /** 099 * returns the file name of the specified save number 100 */ 101 protected String getSaveFileName(int par1) 102 { 103 return ((SaveFormatComparator)this.saveList.get(par1)).getFileName(); 104 } 105 106 /** 107 * returns the name of the saved game 108 */ 109 protected String getSaveName(int par1) 110 { 111 String var2 = ((SaveFormatComparator)this.saveList.get(par1)).getDisplayName(); 112 113 if (var2 == null || MathHelper.stringNullOrLengthZero(var2)) 114 { 115 StringTranslate var3 = StringTranslate.getInstance(); 116 var2 = var3.translateKey("selectWorld.world") + " " + (par1 + 1); 117 } 118 119 return var2; 120 } 121 122 /** 123 * intilize the buttons for this GUI 124 */ 125 public void initButtons() 126 { 127 StringTranslate var1 = StringTranslate.getInstance(); 128 this.controlList.add(this.buttonSelect = new GuiButton(1, this.width / 2 - 154, this.height - 52, 150, 20, var1.translateKey("selectWorld.select"))); 129 this.controlList.add(new GuiButton(3, this.width / 2 + 4, this.height - 52, 150, 20, var1.translateKey("selectWorld.create"))); 130 this.controlList.add(this.buttonDelete = new GuiButton(6, this.width / 2 - 154, this.height - 28, 72, 20, var1.translateKey("selectWorld.rename"))); 131 this.controlList.add(this.buttonRename = new GuiButton(2, this.width / 2 - 76, this.height - 28, 72, 20, var1.translateKey("selectWorld.delete"))); 132 this.controlList.add(this.field_82316_w = new GuiButton(7, this.width / 2 + 4, this.height - 28, 72, 20, var1.translateKey("selectWorld.recreate"))); 133 this.controlList.add(new GuiButton(0, this.width / 2 + 82, this.height - 28, 72, 20, var1.translateKey("gui.cancel"))); 134 this.buttonSelect.enabled = false; 135 this.buttonRename.enabled = false; 136 this.buttonDelete.enabled = false; 137 this.field_82316_w.enabled = false; 138 } 139 140 /** 141 * Fired when a control is clicked. This is the equivalent of ActionListener.actionPerformed(ActionEvent e). 142 */ 143 protected void actionPerformed(GuiButton par1GuiButton) 144 { 145 if (par1GuiButton.enabled) 146 { 147 if (par1GuiButton.id == 2) 148 { 149 String var2 = this.getSaveName(this.selectedWorld); 150 151 if (var2 != null) 152 { 153 this.deleting = true; 154 GuiYesNo var3 = getDeleteWorldScreen(this, var2, this.selectedWorld); 155 this.mc.displayGuiScreen(var3); 156 } 157 } 158 else if (par1GuiButton.id == 1) 159 { 160 this.selectWorld(this.selectedWorld); 161 } 162 else if (par1GuiButton.id == 3) 163 { 164 this.mc.displayGuiScreen(new GuiCreateWorld(this)); 165 } 166 else if (par1GuiButton.id == 6) 167 { 168 this.mc.displayGuiScreen(new GuiRenameWorld(this, this.getSaveFileName(this.selectedWorld))); 169 } 170 else if (par1GuiButton.id == 0) 171 { 172 this.mc.displayGuiScreen(this.parentScreen); 173 } 174 else if (par1GuiButton.id == 7) 175 { 176 GuiCreateWorld var5 = new GuiCreateWorld(this); 177 ISaveHandler var6 = this.mc.getSaveLoader().getSaveLoader(this.getSaveFileName(this.selectedWorld), false); 178 WorldInfo var4 = var6.loadWorldInfo(); 179 var6.flush(); 180 var5.func_82286_a(var4); 181 this.mc.displayGuiScreen(var5); 182 } 183 else 184 { 185 this.worldSlotContainer.actionPerformed(par1GuiButton); 186 } 187 } 188 } 189 190 /** 191 * Gets the selected world. 192 */ 193 public void selectWorld(int par1) 194 { 195 this.mc.displayGuiScreen((GuiScreen)null); 196 197 if (!this.selected) 198 { 199 this.selected = true; 200 String var2 = this.getSaveFileName(par1); 201 202 if (var2 == null) 203 { 204 var2 = "World" + par1; 205 } 206 207 String var3 = this.getSaveName(par1); 208 209 if (var3 == null) 210 { 211 var3 = "World" + par1; 212 } 213 214 if (this.mc.getSaveLoader().canLoadWorld(var2)) 215 { 216 this.mc.launchIntegratedServer(var2, var3, (WorldSettings)null); 217 } 218 } 219 } 220 221 public void confirmClicked(boolean par1, int par2) 222 { 223 if (this.deleting) 224 { 225 this.deleting = false; 226 227 if (par1) 228 { 229 ISaveFormat var3 = this.mc.getSaveLoader(); 230 var3.flushCache(); 231 var3.deleteWorldDirectory(this.getSaveFileName(par2)); 232 this.loadSaves(); 233 } 234 235 this.mc.displayGuiScreen(this); 236 } 237 } 238 239 /** 240 * Draws the screen and all the components in it. 241 */ 242 public void drawScreen(int par1, int par2, float par3) 243 { 244 this.worldSlotContainer.drawScreen(par1, par2, par3); 245 this.drawCenteredString(this.fontRenderer, this.screenTitle, this.width / 2, 20, 16777215); 246 super.drawScreen(par1, par2, par3); 247 } 248 249 /** 250 * Gets a GuiYesNo screen with the warning, buttons, etc. 251 */ 252 public static GuiYesNo getDeleteWorldScreen(GuiScreen par0GuiScreen, String par1Str, int par2) 253 { 254 StringTranslate var3 = StringTranslate.getInstance(); 255 String var4 = var3.translateKey("selectWorld.deleteQuestion"); 256 String var5 = "\'" + par1Str + "\' " + var3.translateKey("selectWorld.deleteWarning"); 257 String var6 = var3.translateKey("selectWorld.deleteButton"); 258 String var7 = var3.translateKey("gui.cancel"); 259 GuiYesNo var8 = new GuiYesNo(par0GuiScreen, var4, var5, var6, var7, par2); 260 return var8; 261 } 262 263 static List getSize(GuiSelectWorld par0GuiSelectWorld) 264 { 265 return par0GuiSelectWorld.saveList; 266 } 267 268 /** 269 * called whenever an element in this gui is selected 270 */ 271 static int onElementSelected(GuiSelectWorld par0GuiSelectWorld, int par1) 272 { 273 return par0GuiSelectWorld.selectedWorld = par1; 274 } 275 276 /** 277 * returns the world currently selected 278 */ 279 static int getSelectedWorld(GuiSelectWorld par0GuiSelectWorld) 280 { 281 return par0GuiSelectWorld.selectedWorld; 282 } 283 284 /** 285 * returns the select button 286 */ 287 static GuiButton getSelectButton(GuiSelectWorld par0GuiSelectWorld) 288 { 289 return par0GuiSelectWorld.buttonSelect; 290 } 291 292 /** 293 * returns the rename button 294 */ 295 static GuiButton getRenameButton(GuiSelectWorld par0GuiSelectWorld) 296 { 297 return par0GuiSelectWorld.buttonRename; 298 } 299 300 /** 301 * returns the delete button 302 */ 303 static GuiButton getDeleteButton(GuiSelectWorld par0GuiSelectWorld) 304 { 305 return par0GuiSelectWorld.buttonDelete; 306 } 307 308 static GuiButton func_82312_f(GuiSelectWorld par0GuiSelectWorld) 309 { 310 return par0GuiSelectWorld.field_82316_w; 311 } 312 313 static String func_82313_g(GuiSelectWorld par0GuiSelectWorld) 314 { 315 return par0GuiSelectWorld.localizedWorldText; 316 } 317 318 static DateFormat func_82315_h(GuiSelectWorld par0GuiSelectWorld) 319 { 320 return par0GuiSelectWorld.dateFormatter; 321 } 322 323 static String func_82311_i(GuiSelectWorld par0GuiSelectWorld) 324 { 325 return par0GuiSelectWorld.localizedMustConvertText; 326 } 327 328 static String[] func_82314_j(GuiSelectWorld par0GuiSelectWorld) 329 { 330 return par0GuiSelectWorld.localizedGameModeText; 331 } 332 }