    001    package net.minecraft.stats;
    002
    003    import cpw.mods.fml.common.Side;
    004    import cpw.mods.fml.common.asm.SideOnly;
    005    import java.text.DecimalFormat;
    006    import java.text.NumberFormat;
    007    import java.util.Locale;
    008    import net.minecraft.util.StatCollector;
    009
    010    public 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    }