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 }