package crazypants.enderio.item.darksteel.upgrade; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Items; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.potion.PotionHelper; import crazypants.enderio.config.Config; import crazypants.enderio.item.darksteel.DarkSteelItems; public class SpeedUpgrade extends AbstractUpgrade { private static final String KEY_LEVEL = "level"; private static final String KEY_MULTIPLIER = "multiplier"; private static String UPGRADE_NAME = "speedBoost"; public static float[] WALK_MULTIPLIERS = new float[] { Config.darkSteelSpeedOneWalkModifier, Config.darkSteelSpeedTwoWalkMultiplier, Config.darkSteelSpeedThreeWalkMultiplier }; public static float[] SPRINT_MULTIPLIERS = new float[] { Config.darkSteelSpeedOneSprintModifier, Config.darkSteelSpeedTwoSprintMultiplier, Config.darkSteelSpeedThreeSprintMultiplier }; public static SpeedUpgrade SPEED_ONE = new SpeedUpgrade("enderio.darksteel.upgrade.speed_one", 1, Config.darkSteelSpeedOneCost); public static SpeedUpgrade SPEED_TWO = new SpeedUpgrade("enderio.darksteel.upgrade.speed_two", 2, Config.darkSteelSpeedTwoCost); public static SpeedUpgrade SPEED_THREE = new SpeedUpgrade("enderio.darksteel.upgrade.speed_three", 3, Config.darkSteelSpeedThreeCost); private short level; private float walkMultiplier; protected float sprintMultiplier; public static boolean isEquipped(EntityPlayer player) { ItemStack legs = player.getEquipmentInSlot(2); return loadFromItem(legs) != null; } public static SpeedUpgrade loadFromItem(ItemStack stack) { if(stack == null) { return null; } if(stack.stackTagCompound == null) { return null; } if(!stack.stackTagCompound.hasKey(KEY_UPGRADE_PREFIX + UPGRADE_NAME)) { return null; } return new SpeedUpgrade((NBTTagCompound) stack.stackTagCompound.getTag(KEY_UPGRADE_PREFIX + UPGRADE_NAME)); } private static ItemStack createUpgradeItem() { ItemStack pot = new ItemStack(Items.potionitem, 1, 0); int res = PotionHelper.applyIngredient(0, Items.nether_wart.getPotionEffect(new ItemStack(Items.nether_wart))); res = PotionHelper.applyIngredient(res, PotionHelper.sugarEffect); pot.setItemDamage(res); return pot; } public SpeedUpgrade(NBTTagCompound tag) { super(UPGRADE_NAME, tag); this.level = tag.getShort(KEY_LEVEL); } public SpeedUpgrade(String unlocName, int level, int levelCost) { super(UPGRADE_NAME, unlocName, createUpgradeItem(), levelCost); this.level = (short) level; } @Override public boolean canAddToItem(ItemStack stack) { if(stack == null || stack.getItem() != DarkSteelItems.itemDarkSteelLeggings || !EnergyUpgrade.itemHasAnyPowerUpgrade(stack)) { return false; } SpeedUpgrade up = loadFromItem(stack); if(up == null) { return getLevel() == 1; } return up.getLevel() == getLevel() - 1; } @Override public boolean hasUpgrade(ItemStack stack) { if(!super.hasUpgrade(stack)) { return false; } SpeedUpgrade up = loadFromItem(stack); if(up == null) { return false; } return up.unlocName.equals(unlocName); } @Override public void writeUpgradeToNBT(NBTTagCompound upgradeRoot) { upgradeRoot.setShort(KEY_LEVEL, getLevel()); upgradeRoot.setFloat(KEY_MULTIPLIER, getWalkMultiplier()); } public short getLevel() { return level; } public float getWalkMultiplier() { return walkMultiplier; } }