package net.minecraft.client.gui;
import cpw.mods.fml.client.FMLClientHandler;
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.Date;
import net.minecraft.client.AnvilConverterException;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.client.resources.I18n;
import net.minecraft.util.EnumChatFormatting;
import net.minecraft.util.MathHelper;
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;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
@SideOnly(Side.CLIENT)
public class GuiSelectWorld extends GuiScreen implements GuiYesNoCallback
{
private static final Logger logger = LogManager.getLogger();
private final DateFormat field_146633_h = new SimpleDateFormat();
protected GuiScreen field_146632_a;
protected String field_146628_f = "Select world";
private boolean field_146634_i;
private int field_146640_r;
private java.util.List field_146639_s;
private GuiSelectWorld.List field_146638_t;
private String field_146637_u;
private String field_146636_v;
private String[] field_146635_w = new String[3];
private boolean field_146643_x;
private GuiButton field_146642_y;
private GuiButton field_146641_z;
private GuiButton field_146630_A;
private GuiButton field_146631_B;
private static final String __OBFID = "CL_00000711";
public GuiSelectWorld(GuiScreen p_i1054_1_)
{
this.field_146632_a = p_i1054_1_;
}
/**
* Adds the buttons (and other controls) to the screen in question.
*/
public void initGui()
{
this.field_146628_f = I18n.format("selectWorld.title", new Object[0]);
try
{
this.func_146627_h();
}
catch (AnvilConverterException anvilconverterexception)
{
logger.error("Couldn\'t load level list", anvilconverterexception);
this.mc.displayGuiScreen(new GuiErrorScreen("Unable to load worlds", anvilconverterexception.getMessage()));
return;
}
this.field_146637_u = I18n.format("selectWorld.world", new Object[0]);
this.field_146636_v = I18n.format("selectWorld.conversion", new Object[0]);
this.field_146635_w[WorldSettings.GameType.SURVIVAL.getID()] = I18n.format("gameMode.survival", new Object[0]);
this.field_146635_w[WorldSettings.GameType.CREATIVE.getID()] = I18n.format("gameMode.creative", new Object[0]);
this.field_146635_w[WorldSettings.GameType.ADVENTURE.getID()] = I18n.format("gameMode.adventure", new Object[0]);
this.field_146638_t = new GuiSelectWorld.List();
this.field_146638_t.registerScrollButtons(4, 5);
this.func_146618_g();
}
private void func_146627_h() throws AnvilConverterException
{
ISaveFormat isaveformat = this.mc.getSaveLoader();
this.field_146639_s = isaveformat.getSaveList();
Collections.sort(this.field_146639_s);
this.field_146640_r = -1;
}
protected String func_146621_a(int p_146621_1_)
{
return ((SaveFormatComparator)this.field_146639_s.get(p_146621_1_)).getFileName();
}
protected String func_146614_d(int p_146614_1_)
{
String s = ((SaveFormatComparator)this.field_146639_s.get(p_146614_1_)).getDisplayName();
if (s == null || MathHelper.stringNullOrLengthZero(s))
{
s = I18n.format("selectWorld.world", new Object[0]) + " " + (p_146614_1_ + 1);
}
return s;
}
public void func_146618_g()
{
this.buttonList.add(this.field_146641_z = new GuiButton(1, this.width / 2 - 154, this.height - 52, 150, 20, I18n.format("selectWorld.select", new Object[0])));
this.buttonList.add(new GuiButton(3, this.width / 2 + 4, this.height - 52, 150, 20, I18n.format("selectWorld.create", new Object[0])));
this.buttonList.add(this.field_146630_A = new GuiButton(6, this.width / 2 - 154, this.height - 28, 72, 20, I18n.format("selectWorld.rename", new Object[0])));
this.buttonList.add(this.field_146642_y = new GuiButton(2, this.width / 2 - 76, this.height - 28, 72, 20, I18n.format("selectWorld.delete", new Object[0])));
this.buttonList.add(this.field_146631_B = new GuiButton(7, this.width / 2 + 4, this.height - 28, 72, 20, I18n.format("selectWorld.recreate", new Object[0])));
this.buttonList.add(new GuiButton(0, this.width / 2 + 82, this.height - 28, 72, 20, I18n.format("gui.cancel", new Object[0])));
this.field_146641_z.enabled = false;
this.field_146642_y.enabled = false;
this.field_146630_A.enabled = false;
this.field_146631_B.enabled = false;
}
protected void actionPerformed(GuiButton button)
{
if (button.enabled)
{
if (button.id == 2)
{
String s = this.func_146614_d(this.field_146640_r);
if (s != null)
{
this.field_146643_x = true;
GuiYesNo guiyesno = func_152129_a(this, s, this.field_146640_r);
this.mc.displayGuiScreen(guiyesno);
}
}
else if (button.id == 1)
{
this.func_146615_e(this.field_146640_r);
}
else if (button.id == 3)
{
this.mc.displayGuiScreen(new GuiCreateWorld(this));
}
else if (button.id == 6)
{
this.mc.displayGuiScreen(new GuiRenameWorld(this, this.func_146621_a(this.field_146640_r)));
}
else if (button.id == 0)
{
this.mc.displayGuiScreen(this.field_146632_a);
}
else if (button.id == 7)
{
GuiCreateWorld guicreateworld = new GuiCreateWorld(this);
ISaveHandler isavehandler = this.mc.getSaveLoader().getSaveLoader(this.func_146621_a(this.field_146640_r), false);
WorldInfo worldinfo = isavehandler.loadWorldInfo();
isavehandler.flush();
guicreateworld.func_146318_a(worldinfo);
this.mc.displayGuiScreen(guicreateworld);
}
else
{
this.field_146638_t.actionPerformed(button);
}
}
}
public void func_146615_e(int p_146615_1_)
{
this.mc.displayGuiScreen((GuiScreen)null);
if (!this.field_146634_i)
{
this.field_146634_i = true;
String s = this.func_146621_a(p_146615_1_);
if (s == null)
{
s = "World" + p_146615_1_;
}
String s1 = this.func_146614_d(p_146615_1_);
if (s1 == null)
{
s1 = "World" + p_146615_1_;
}
if (this.mc.getSaveLoader().canLoadWorld(s))
{
FMLClientHandler.instance().tryLoadExistingWorld(this, s, s1);
}
}
}
public void confirmClicked(boolean result, int id)
{
if (this.field_146643_x)
{
this.field_146643_x = false;
if (result)
{
ISaveFormat isaveformat = this.mc.getSaveLoader();
isaveformat.flushCache();
isaveformat.deleteWorldDirectory(this.func_146621_a(id));
try
{
this.func_146627_h();
}
catch (AnvilConverterException anvilconverterexception)
{
logger.error("Couldn\'t load level list", anvilconverterexception);
}
}
this.mc.displayGuiScreen(this);
}
}
/**
* Draws the screen and all the components in it. Args : mouseX, mouseY, renderPartialTicks
*/
public void drawScreen(int mouseX, int mouseY, float partialTicks)
{
this.field_146638_t.drawScreen(mouseX, mouseY, partialTicks);
this.drawCenteredString(this.fontRendererObj, this.field_146628_f, this.width / 2, 20, 16777215);
super.drawScreen(mouseX, mouseY, partialTicks);
}
public static GuiYesNo func_152129_a(GuiYesNoCallback p_152129_0_, String p_152129_1_, int p_152129_2_)
{
String s1 = I18n.format("selectWorld.deleteQuestion", new Object[0]);
String s2 = "\'" + p_152129_1_ + "\' " + I18n.format("selectWorld.deleteWarning", new Object[0]);
String s3 = I18n.format("selectWorld.deleteButton", new Object[0]);
String s4 = I18n.format("gui.cancel", new Object[0]);
GuiYesNo guiyesno = new GuiYesNo(p_152129_0_, s1, s2, s3, s4, p_152129_2_);
return guiyesno;
}
@SideOnly(Side.CLIENT)
class List extends GuiSlot
{
private static final String __OBFID = "CL_00000712";
public List()
{
super(GuiSelectWorld.this.mc, GuiSelectWorld.this.width, GuiSelectWorld.this.height, 32, GuiSelectWorld.this.height - 64, 36);
}
protected int getSize()
{
return GuiSelectWorld.this.field_146639_s.size();
}
/**
* The element in the slot that was clicked, boolean for whether it was double clicked or not
*/
protected void elementClicked(int p_148144_1_, boolean p_148144_2_, int p_148144_3_, int p_148144_4_)
{
GuiSelectWorld.this.field_146640_r = p_148144_1_;
boolean flag1 = GuiSelectWorld.this.field_146640_r >= 0 && GuiSelectWorld.this.field_146640_r < this.getSize();
GuiSelectWorld.this.field_146641_z.enabled = flag1;
GuiSelectWorld.this.field_146642_y.enabled = flag1;
GuiSelectWorld.this.field_146630_A.enabled = flag1;
GuiSelectWorld.this.field_146631_B.enabled = flag1;
if (p_148144_2_ && flag1)
{
GuiSelectWorld.this.func_146615_e(p_148144_1_);
}
}
/**
* Returns true if the element passed in is currently selected
*/
protected boolean isSelected(int p_148131_1_)
{
return p_148131_1_ == GuiSelectWorld.this.field_146640_r;
}
/**
* Return the height of the content being scrolled
*/
protected int getContentHeight()
{
return GuiSelectWorld.this.field_146639_s.size() * 36;
}
protected void drawBackground()
{
GuiSelectWorld.this.drawDefaultBackground();
}
protected void drawSlot(int p_148126_1_, int p_148126_2_, int p_148126_3_, int p_148126_4_, Tessellator p_148126_5_, int p_148126_6_, int p_148126_7_)
{
SaveFormatComparator saveformatcomparator = (SaveFormatComparator)GuiSelectWorld.this.field_146639_s.get(p_148126_1_);
String s = saveformatcomparator.getDisplayName();
if (s == null || MathHelper.stringNullOrLengthZero(s))
{
s = GuiSelectWorld.this.field_146637_u + " " + (p_148126_1_ + 1);
}
String s1 = saveformatcomparator.getFileName();
s1 = s1 + " (" + GuiSelectWorld.this.field_146633_h.format(new Date(saveformatcomparator.getLastTimePlayed()));
s1 = s1 + ")";
String s2 = "";
if (saveformatcomparator.requiresConversion())
{
s2 = GuiSelectWorld.this.field_146636_v + " " + s2;
}
else
{
s2 = GuiSelectWorld.this.field_146635_w[saveformatcomparator.getEnumGameType().getID()];
if (saveformatcomparator.isHardcoreModeEnabled())
{
s2 = EnumChatFormatting.DARK_RED + I18n.format("gameMode.hardcore", new Object[0]) + EnumChatFormatting.RESET;
}
if (saveformatcomparator.getCheatsEnabled())
{
s2 = s2 + ", " + I18n.format("selectWorld.cheats", new Object[0]);
}
}
GuiSelectWorld.this.drawString(GuiSelectWorld.this.fontRendererObj, s, p_148126_2_ + 2, p_148126_3_ + 1, 16777215);
GuiSelectWorld.this.drawString(GuiSelectWorld.this.fontRendererObj, s1, p_148126_2_ + 2, p_148126_3_ + 12, 8421504);
GuiSelectWorld.this.drawString(GuiSelectWorld.this.fontRendererObj, s2, p_148126_2_ + 2, p_148126_3_ + 12 + 10, 8421504);
}
}
}