package net.minecraft.stats;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.block.Block;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.StatCollector;
public class Achievement extends StatBase
{
/**
* Is the column (related to center of achievement gui, in 24 pixels unit) that the achievement will be displayed.
*/
public final int displayColumn;
/**
* Is the row (related to center of achievement gui, in 24 pixels unit) that the achievement will be displayed.
*/
public final int displayRow;
/**
* Holds the parent achievement, that must be taken before this achievement is avaiable.
*/
public final Achievement parentAchievement;
/**
* Holds the description of the achievement, ready to be formatted and/or displayed.
*/
private final String achievementDescription;
@SideOnly(Side.CLIENT)
/**
* Holds a string formatter for the achievement, some of then needs extra dynamic info - like the key used to open
* the inventory.
*/
private IStatStringFormat statStringFormatter;
/**
* Holds the ItemStack that will be used to draw the achievement into the GUI.
*/
public final ItemStack theItemStack;
/**
* Special achievements have a 'spiked' (on normal texture pack) frame, special achievements are the hardest ones to
* achieve.
*/
private boolean isSpecial;
public Achievement(int par1, String par2Str, int par3, int par4, Item par5Item, Achievement par6Achievement)
{
this(par1, par2Str, par3, par4, new ItemStack(par5Item), par6Achievement);
}
public Achievement(int par1, String par2Str, int par3, int par4, Block par5Block, Achievement par6Achievement)
{
this(par1, par2Str, par3, par4, new ItemStack(par5Block), par6Achievement);
}
public Achievement(int par1, String par2Str, int par3, int par4, ItemStack par5ItemStack, Achievement par6Achievement)
{
super(5242880 + par1, "achievement." + par2Str);
this.theItemStack = par5ItemStack;
this.achievementDescription = "achievement." + par2Str + ".desc";
this.displayColumn = par3;
this.displayRow = par4;
if (par3 < AchievementList.minDisplayColumn)
{
AchievementList.minDisplayColumn = par3;
}
if (par4 < AchievementList.minDisplayRow)
{
AchievementList.minDisplayRow = par4;
}
if (par3 > AchievementList.maxDisplayColumn)
{
AchievementList.maxDisplayColumn = par3;
}
if (par4 > AchievementList.maxDisplayRow)
{
AchievementList.maxDisplayRow = par4;
}
this.parentAchievement = par6Achievement;
}
/**
* Indicates whether or not the given achievement or statistic is independent (i.e., lacks prerequisites for being
* update).
*/
public Achievement setIndependent()
{
this.isIndependent = true;
return this;
}
/**
* Special achievements have a 'spiked' (on normal texture pack) frame, special achievements are the hardest ones to
* achieve.
*/
public Achievement setSpecial()
{
this.isSpecial = true;
return this;
}
/**
* Adds the achievement on the internal list of registered achievements, also, it's check for duplicated id's.
*/
public Achievement registerAchievement()
{
super.registerStat();
AchievementList.achievementList.add(this);
return this;
}
@SideOnly(Side.CLIENT)
/**
* Returns whether or not the StatBase-derived class is a statistic (running counter) or an achievement (one-shot).
*/
public boolean isAchievement()
{
return true;
}
@SideOnly(Side.CLIENT)
/**
* Returns the fully description of the achievement - ready to be displayed on screen.
*/
public String getDescription()
{
return this.statStringFormatter != null ? this.statStringFormatter.formatString(StatCollector.translateToLocal(this.achievementDescription)) : StatCollector.translateToLocal(this.achievementDescription);
}
@SideOnly(Side.CLIENT)
/**
* Defines a string formatter for the achievement.
*/
public Achievement setStatStringFormatter(IStatStringFormat par1IStatStringFormat)
{
this.statStringFormatter = par1IStatStringFormat;
return this;
}
@SideOnly(Side.CLIENT)
/**
* Special achievements have a 'spiked' (on normal texture pack) frame, special achievements are the hardest ones to
* achieve.
*/
public boolean getSpecial()
{
return this.isSpecial;
}
/**
* Register the stat into StatList.
*/
public StatBase registerStat()
{
return this.registerAchievement();
}
/**
* Initializes the current stat as independent (i.e., lacking prerequisites for being updated) and returns the
* current instance.
*/
public StatBase initIndependentStat()
{
return this.setIndependent();
}
}