blob: cd8f18689b6cf07b5f1e64af59c2f1175443dbfe [file] [log] [blame] [raw]
package mekanism.common;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import mekanism.api.EnumColor;
import mekanism.api.MekanismConfig.general;
import mekanism.common.base.IUpgradeTile;
import mekanism.common.util.LangUtils;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.common.util.Constants.NBT;
public enum Upgrade
{
SPEED("speed", 8, EnumColor.RED),
ENERGY("energy", 8, EnumColor.BRIGHT_GREEN),
FILTER("filter", 1, EnumColor.DARK_AQUA),
GAS("gas", 8, EnumColor.YELLOW),
MUFFLING("muffling", 4, EnumColor.DARK_GREY);
private String name;
private int maxStack;
private EnumColor color;
private Upgrade(String s, int max, EnumColor c)
{
name = s;
maxStack = max;
color = c;
}
public String getName()
{
return LangUtils.localize("upgrade." + name);
}
public String getDescription()
{
return LangUtils.localize("upgrade." + name + ".desc");
}
public int getMax()
{
return maxStack;
}
public EnumColor getColor()
{
return color;
}
public boolean canMultiply()
{
return getMax() > 1;
}
public ItemStack getStack()
{
switch(this)
{
case SPEED:
return new ItemStack(MekanismItems.SpeedUpgrade);
case ENERGY:
return new ItemStack(MekanismItems.EnergyUpgrade);
case FILTER:
return new ItemStack(MekanismItems.FilterUpgrade);
case MUFFLING:
return new ItemStack(MekanismItems.MufflingUpgrade);
case GAS:
return new ItemStack(MekanismItems.GasUpgrade);
}
return null;
}
public List<String> getInfo(TileEntity tile)
{
List<String> ret = new ArrayList<String>();
if(tile instanceof IUpgradeTile)
{
if(tile instanceof IUpgradeInfoHandler)
{
return ((IUpgradeInfoHandler)tile).getInfo(this);
}
else {
ret = getMultScaledInfo((IUpgradeTile)tile);
}
}
return ret;
}
public List<String> getMultScaledInfo(IUpgradeTile tile)
{
List<String> ret = new ArrayList<String>();
if(canMultiply())
{
double effect = Math.pow(general.maxUpgradeMultiplier, (float)tile.getComponent().getUpgrades(this)/(float)getMax());
ret.add(LangUtils.localize("gui.upgrades.effect") + ": " + (Math.round(effect*100)/100F) + "x");
}
return ret;
}
public List<String> getExpScaledInfo(IUpgradeTile tile)
{
List<String> ret = new ArrayList<String>();
if(canMultiply())
{
double effect = Math.pow(2, (float)tile.getComponent().getUpgrades(this));
ret.add(LangUtils.localize("gui.upgrades.effect") + ": " + effect + "x");
}
return ret;
}
public static Map<Upgrade, Integer> buildMap(NBTTagCompound nbtTags)
{
Map<Upgrade, Integer> upgrades = new HashMap<Upgrade, Integer>();
if(nbtTags != null)
{
if(nbtTags.hasKey("upgrades"))
{
NBTTagList list = nbtTags.getTagList("upgrades", NBT.TAG_COMPOUND);
for(int tagCount = 0; tagCount < list.tagCount(); tagCount++)
{
NBTTagCompound compound = list.getCompoundTagAt(tagCount);
Upgrade upgrade = Upgrade.values()[compound.getInteger("type")];
upgrades.put(upgrade, compound.getInteger("amount"));
}
}
}
return upgrades;
}
public static void saveMap(Map<Upgrade, Integer> upgrades, NBTTagCompound nbtTags)
{
NBTTagList list = new NBTTagList();
for(Map.Entry<Upgrade, Integer> entry : upgrades.entrySet())
{
list.appendTag(getTagFor(entry.getKey(), entry.getValue()));
}
nbtTags.setTag("upgrades", list);
}
public static NBTTagCompound getTagFor(Upgrade upgrade, int amount)
{
NBTTagCompound compound = new NBTTagCompound();
compound.setInteger("type", upgrade.ordinal());
compound.setInteger("amount", amount);
return compound;
}
public static interface IUpgradeInfoHandler
{
public List<String> getInfo(Upgrade upgrade);
}
}