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