001package net.minecraft.stats;
002
003import cpw.mods.fml.relauncher.Side;
004import cpw.mods.fml.relauncher.SideOnly;
005import java.text.DecimalFormat;
006import java.text.NumberFormat;
007import java.util.Locale;
008import net.minecraft.util.StatCollector;
009
010public class StatBase
011{
012    /** The Stat ID */
013    public final int statId;
014
015    /** The Stat name */
016    public final String statName;
017    public boolean isIndependent;
018
019    /** Holds the GUID of the stat. */
020    public String statGuid;
021    private final IStatType type;
022    private static NumberFormat numberFormat = NumberFormat.getIntegerInstance(Locale.US);
023    public static IStatType simpleStatType = new StatTypeSimple();
024    private static DecimalFormat decimalFormat = new DecimalFormat("########0.00");
025    public static IStatType timeStatType = new StatTypeTime();
026    public static IStatType distanceStatType = new StatTypeDistance();
027
028    public StatBase(int par1, String par2Str, IStatType par3IStatType)
029    {
030        this.isIndependent = false;
031        this.statId = par1;
032        this.statName = par2Str;
033        this.type = par3IStatType;
034    }
035
036    public StatBase(int par1, String par2Str)
037    {
038        this(par1, par2Str, simpleStatType);
039    }
040
041    /**
042     * Initializes the current stat as independent (i.e., lacking prerequisites for being updated) and returns the
043     * current instance.
044     */
045    public StatBase initIndependentStat()
046    {
047        this.isIndependent = true;
048        return this;
049    }
050
051    /**
052     * Register the stat into StatList.
053     */
054    public StatBase registerStat()
055    {
056        if (StatList.oneShotStats.containsKey(Integer.valueOf(this.statId)))
057        {
058            throw new RuntimeException("Duplicate stat id: \"" + ((StatBase)StatList.oneShotStats.get(Integer.valueOf(this.statId))).statName + "\" and \"" + this.statName + "\" at id " + this.statId);
059        }
060        else
061        {
062            StatList.allStats.add(this);
063            StatList.oneShotStats.put(Integer.valueOf(this.statId), this);
064            this.statGuid = AchievementMap.getGuid(this.statId);
065            return this;
066        }
067    }
068
069    @SideOnly(Side.CLIENT)
070
071    /**
072     * Returns whether or not the StatBase-derived class is a statistic (running counter) or an achievement (one-shot).
073     */
074    public boolean isAchievement()
075    {
076        return false;
077    }
078
079    @SideOnly(Side.CLIENT)
080    public String func_75968_a(int par1)
081    {
082        return this.type.format(par1);
083    }
084
085    @SideOnly(Side.CLIENT)
086    public String getName()
087    {
088        return this.statName;
089    }
090
091    public String toString()
092    {
093        return StatCollector.translateToLocal(this.statName);
094    }
095
096    @SideOnly(Side.CLIENT)
097
098    static NumberFormat getNumberFormat()
099    {
100        return numberFormat;
101    }
102
103    @SideOnly(Side.CLIENT)
104
105    static DecimalFormat getDecimalFormat()
106    {
107        return decimalFormat;
108    }
109}