001    package net.minecraft.stats;
002    
003    import cpw.mods.fml.relauncher.Side;
004    import cpw.mods.fml.relauncher.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    }