package net.minecraft.client.gui; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Collections; import java.util.List; import net.minecraft.client.AnvilConverterException; import net.minecraft.util.MathHelper; import net.minecraft.util.StringTranslate; import net.minecraft.world.EnumGameType; import net.minecraft.world.WorldSettings; import net.minecraft.world.storage.ISaveFormat; import net.minecraft.world.storage.ISaveHandler; import net.minecraft.world.storage.SaveFormatComparator; import net.minecraft.world.storage.WorldInfo; @SideOnly(Side.CLIENT) public class GuiSelectWorld extends GuiScreen { /** simple date formater */ private final DateFormat dateFormatter = new SimpleDateFormat(); /** * A reference to the screen object that created this. Used for navigating between screens. */ protected GuiScreen parentScreen; /** The title string that is displayed in the top-center of the screen. */ protected String screenTitle = "Select world"; /** True if a world has been selected. */ private boolean selected = false; /** the currently selected world */ private int selectedWorld; /** The save list for the world selection screen */ private List saveList; private GuiWorldSlot worldSlotContainer; /** E.g. World, Welt, Monde, Mundo */ private String localizedWorldText; private String localizedMustConvertText; /** * The game mode text that is displayed with each world on the world selection list. */ private String[] localizedGameModeText = new String[3]; /** set to true if you arein the process of deleteing a world/save */ private boolean deleting; /** The delete button in the world selection GUI */ private GuiButton buttonDelete; /** the select button in the world selection gui */ private GuiButton buttonSelect; /** The rename button in the world selection GUI */ private GuiButton buttonRename; private GuiButton buttonRecreate; public GuiSelectWorld(GuiScreen par1GuiScreen) { this.parentScreen = par1GuiScreen; } /** * Adds the buttons (and other controls) to the screen in question. */ public void initGui() { StringTranslate stringtranslate = StringTranslate.getInstance(); this.screenTitle = stringtranslate.translateKey("selectWorld.title"); try { this.loadSaves(); } catch (AnvilConverterException anvilconverterexception) { anvilconverterexception.printStackTrace(); this.mc.displayGuiScreen(new GuiErrorScreen("Unable to load words", anvilconverterexception.getMessage())); return; } this.localizedWorldText = stringtranslate.translateKey("selectWorld.world"); this.localizedMustConvertText = stringtranslate.translateKey("selectWorld.conversion"); this.localizedGameModeText[EnumGameType.SURVIVAL.getID()] = stringtranslate.translateKey("gameMode.survival"); this.localizedGameModeText[EnumGameType.CREATIVE.getID()] = stringtranslate.translateKey("gameMode.creative"); this.localizedGameModeText[EnumGameType.ADVENTURE.getID()] = stringtranslate.translateKey("gameMode.adventure"); this.worldSlotContainer = new GuiWorldSlot(this); this.worldSlotContainer.registerScrollButtons(this.buttonList, 4, 5); this.initButtons(); } /** * loads the saves */ private void loadSaves() throws AnvilConverterException { ISaveFormat isaveformat = this.mc.getSaveLoader(); this.saveList = isaveformat.getSaveList(); Collections.sort(this.saveList); this.selectedWorld = -1; } /** * returns the file name of the specified save number */ protected String getSaveFileName(int par1) { return ((SaveFormatComparator)this.saveList.get(par1)).getFileName(); } /** * returns the name of the saved game */ protected String getSaveName(int par1) { String s = ((SaveFormatComparator)this.saveList.get(par1)).getDisplayName(); if (s == null || MathHelper.stringNullOrLengthZero(s)) { StringTranslate stringtranslate = StringTranslate.getInstance(); s = stringtranslate.translateKey("selectWorld.world") + " " + (par1 + 1); } return s; } /** * intilize the buttons for this GUI */ public void initButtons() { StringTranslate stringtranslate = StringTranslate.getInstance(); this.buttonList.add(this.buttonSelect = new GuiButton(1, this.width / 2 - 154, this.height - 52, 150, 20, stringtranslate.translateKey("selectWorld.select"))); this.buttonList.add(new GuiButton(3, this.width / 2 + 4, this.height - 52, 150, 20, stringtranslate.translateKey("selectWorld.create"))); this.buttonList.add(this.buttonRename = new GuiButton(6, this.width / 2 - 154, this.height - 28, 72, 20, stringtranslate.translateKey("selectWorld.rename"))); this.buttonList.add(this.buttonDelete = new GuiButton(2, this.width / 2 - 76, this.height - 28, 72, 20, stringtranslate.translateKey("selectWorld.delete"))); this.buttonList.add(this.buttonRecreate = new GuiButton(7, this.width / 2 + 4, this.height - 28, 72, 20, stringtranslate.translateKey("selectWorld.recreate"))); this.buttonList.add(new GuiButton(0, this.width / 2 + 82, this.height - 28, 72, 20, stringtranslate.translateKey("gui.cancel"))); this.buttonSelect.enabled = false; this.buttonDelete.enabled = false; this.buttonRename.enabled = false; this.buttonRecreate.enabled = false; } /** * Fired when a control is clicked. This is the equivalent of ActionListener.actionPerformed(ActionEvent e). */ protected void actionPerformed(GuiButton par1GuiButton) { if (par1GuiButton.enabled) { if (par1GuiButton.id == 2) { String s = this.getSaveName(this.selectedWorld); if (s != null) { this.deleting = true; GuiYesNo guiyesno = getDeleteWorldScreen(this, s, this.selectedWorld); this.mc.displayGuiScreen(guiyesno); } } else if (par1GuiButton.id == 1) { this.selectWorld(this.selectedWorld); } else if (par1GuiButton.id == 3) { this.mc.displayGuiScreen(new GuiCreateWorld(this)); } else if (par1GuiButton.id == 6) { this.mc.displayGuiScreen(new GuiRenameWorld(this, this.getSaveFileName(this.selectedWorld))); } else if (par1GuiButton.id == 0) { this.mc.displayGuiScreen(this.parentScreen); } else if (par1GuiButton.id == 7) { GuiCreateWorld guicreateworld = new GuiCreateWorld(this); ISaveHandler isavehandler = this.mc.getSaveLoader().getSaveLoader(this.getSaveFileName(this.selectedWorld), false); WorldInfo worldinfo = isavehandler.loadWorldInfo(); isavehandler.flush(); guicreateworld.func_82286_a(worldinfo); this.mc.displayGuiScreen(guicreateworld); } else { this.worldSlotContainer.actionPerformed(par1GuiButton); } } } /** * Gets the selected world. */ public void selectWorld(int par1) { this.mc.displayGuiScreen((GuiScreen)null); if (!this.selected) { this.selected = true; String s = this.getSaveFileName(par1); if (s == null) { s = "World" + par1; } String s1 = this.getSaveName(par1); if (s1 == null) { s1 = "World" + par1; } if (this.mc.getSaveLoader().canLoadWorld(s)) { this.mc.launchIntegratedServer(s, s1, (WorldSettings)null); } } } public void confirmClicked(boolean par1, int par2) { if (this.deleting) { this.deleting = false; if (par1) { ISaveFormat isaveformat = this.mc.getSaveLoader(); isaveformat.flushCache(); isaveformat.deleteWorldDirectory(this.getSaveFileName(par2)); try { this.loadSaves(); } catch (AnvilConverterException anvilconverterexception) { anvilconverterexception.printStackTrace(); } } this.mc.displayGuiScreen(this); } } /** * Draws the screen and all the components in it. */ public void drawScreen(int par1, int par2, float par3) { this.worldSlotContainer.drawScreen(par1, par2, par3); this.drawCenteredString(this.fontRenderer, this.screenTitle, this.width / 2, 20, 16777215); super.drawScreen(par1, par2, par3); } /** * Gets a GuiYesNo screen with the warning, buttons, etc. */ public static GuiYesNo getDeleteWorldScreen(GuiScreen par0GuiScreen, String par1Str, int par2) { StringTranslate stringtranslate = StringTranslate.getInstance(); String s1 = stringtranslate.translateKey("selectWorld.deleteQuestion"); String s2 = "\'" + par1Str + "\' " + stringtranslate.translateKey("selectWorld.deleteWarning"); String s3 = stringtranslate.translateKey("selectWorld.deleteButton"); String s4 = stringtranslate.translateKey("gui.cancel"); GuiYesNo guiyesno = new GuiYesNo(par0GuiScreen, s1, s2, s3, s4, par2); return guiyesno; } static List getSize(GuiSelectWorld par0GuiSelectWorld) { return par0GuiSelectWorld.saveList; } /** * called whenever an element in this gui is selected */ static int onElementSelected(GuiSelectWorld par0GuiSelectWorld, int par1) { return par0GuiSelectWorld.selectedWorld = par1; } /** * returns the world currently selected */ static int getSelectedWorld(GuiSelectWorld par0GuiSelectWorld) { return par0GuiSelectWorld.selectedWorld; } /** * returns the select button */ static GuiButton getSelectButton(GuiSelectWorld par0GuiSelectWorld) { return par0GuiSelectWorld.buttonSelect; } /** * returns the rename button */ static GuiButton getRenameButton(GuiSelectWorld par0GuiSelectWorld) { return par0GuiSelectWorld.buttonDelete; } /** * returns the delete button */ static GuiButton getDeleteButton(GuiSelectWorld par0GuiSelectWorld) { return par0GuiSelectWorld.buttonRename; } static GuiButton func_82312_f(GuiSelectWorld par0GuiSelectWorld) { return par0GuiSelectWorld.buttonRecreate; } static String func_82313_g(GuiSelectWorld par0GuiSelectWorld) { return par0GuiSelectWorld.localizedWorldText; } static DateFormat func_82315_h(GuiSelectWorld par0GuiSelectWorld) { return par0GuiSelectWorld.dateFormatter; } static String func_82311_i(GuiSelectWorld par0GuiSelectWorld) { return par0GuiSelectWorld.localizedMustConvertText; } static String[] func_82314_j(GuiSelectWorld par0GuiSelectWorld) { return par0GuiSelectWorld.localizedGameModeText; } }