diff --git a/src/main/java/WayofTime/bloodmagic/livingArmour/downgrade/LivingArmourUpgradeDigSlowdown.java b/src/main/java/WayofTime/bloodmagic/livingArmour/downgrade/LivingArmourUpgradeDigSlowdown.java new file mode 100644 index 00000000..24c0c691 --- /dev/null +++ b/src/main/java/WayofTime/bloodmagic/livingArmour/downgrade/LivingArmourUpgradeDigSlowdown.java @@ -0,0 +1,78 @@ +package WayofTime.bloodmagic.livingArmour.downgrade; + +import java.util.HashMap; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.world.World; +import WayofTime.bloodmagic.api.Constants; +import WayofTime.bloodmagic.api.livingArmour.ILivingArmour; +import WayofTime.bloodmagic.api.livingArmour.LivingArmourUpgrade; +import WayofTime.bloodmagic.livingArmour.LivingArmour; + +public class LivingArmourUpgradeDigSlowdown extends LivingArmourUpgrade +{ + public static HashMap changeMap = new HashMap(); + + public static final int[] costs = new int[] { -10, -17, -28, -42, -60, -80, -100, -125, -160, -200 }; + + public static final double[] digSpeedModifier = new double[] { 0.9, 0.8, 0.7, 0.6, 0.55, 0.5, 0.4, 0.35, 0.3, 0.2 }; + + public static void hasDug(LivingArmour armour) + { + changeMap.put(armour, true); + } + + public LivingArmourUpgradeDigSlowdown(int level) + { + super(level); + } + + @Override + public double getMiningSpeedModifier(EntityPlayer player) + { + return digSpeedModifier[this.level]; + } + + @Override + public void onTick(World world, EntityPlayer player, ILivingArmour livingArmour) + { + + } + + @Override + public String getUniqueIdentifier() + { + return Constants.Mod.MODID + ".upgrade.digSlowdown"; + } + + @Override + public int getMaxTier() + { + return 10; // Set to here until I can add more upgrades to it. + } + + @Override + public int getCostOfUpgrade() + { + return costs[this.level]; + } + + @Override + public void writeToNBT(NBTTagCompound tag) + { + // EMPTY + } + + @Override + public void readFromNBT(NBTTagCompound tag) + { + // EMPTY + } + + @Override + public String getUnlocalizedName() + { + return tooltipBase + "digSlowdown"; + } +} diff --git a/src/main/java/WayofTime/bloodmagic/livingArmour/tracker/downgrade/StatTrackerDigSlowdown.java b/src/main/java/WayofTime/bloodmagic/livingArmour/tracker/downgrade/StatTrackerDigSlowdown.java new file mode 100644 index 00000000..b24ad41c --- /dev/null +++ b/src/main/java/WayofTime/bloodmagic/livingArmour/tracker/downgrade/StatTrackerDigSlowdown.java @@ -0,0 +1,130 @@ +package WayofTime.bloodmagic.livingArmour.tracker.downgrade; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.world.World; +import WayofTime.bloodmagic.api.Constants; +import WayofTime.bloodmagic.api.livingArmour.LivingArmourUpgrade; +import WayofTime.bloodmagic.api.livingArmour.StatTracker; +import WayofTime.bloodmagic.livingArmour.LivingArmour; +import WayofTime.bloodmagic.livingArmour.downgrade.LivingArmourUpgradeDigSlowdown; +import WayofTime.bloodmagic.util.Utils; + +public class StatTrackerDigSlowdown extends StatTracker +{ + public int totalBlocksDug = 0; + + public static HashMap changeMap = new HashMap(); + public static int[] blocksRequired = new int[] { 64, 128, 250, 400, 700, 1200, 2000, 3500, 6000, 10000 }; + + public static void incrementCounter(LivingArmour armour) + { + changeMap.put(armour, changeMap.containsKey(armour) ? changeMap.get(armour) + 1 : 1); + } + + @Override + public String getUniqueIdentifier() + { + return Constants.Mod.MODID + ".tracker.digSlowdown"; + } + + @Override + public void resetTracker() + { + this.totalBlocksDug = 0; + } + + @Override + public void readFromNBT(NBTTagCompound tag) + { + totalBlocksDug = tag.getInteger(Constants.Mod.MODID + ".tracker.digSlowdown"); + } + + @Override + public void writeToNBT(NBTTagCompound tag) + { + tag.setInteger(Constants.Mod.MODID + ".tracker.digSlowdown", totalBlocksDug); + } + + @Override + public boolean onTick(World world, EntityPlayer player, LivingArmour livingArmour) + { + if (changeMap.containsKey(livingArmour)) + { + int change = Math.abs(changeMap.get(livingArmour)); + if (change > 0) + { + totalBlocksDug += Math.abs(changeMap.get(livingArmour)); + + changeMap.put(livingArmour, 0); + + this.markDirty(); + + return true; + } + } + + return false; + } + + @Override + public void onDeactivatedTick(World world, EntityPlayer player, LivingArmour livingArmour) + { + if (changeMap.containsKey(livingArmour)) + { + changeMap.remove(livingArmour); + } + } + + @Override + public List getUpgrades() + { + List upgradeList = new ArrayList(); + + for (int i = 0; i < 10; i++) + { + if (totalBlocksDug >= blocksRequired[i]) + { + upgradeList.add(new LivingArmourUpgradeDigSlowdown(i)); + } + } + + return upgradeList; + } + + @Override + public double getProgress(LivingArmour livingArmour, int currentLevel) + { + return Utils.calculateStandardProgress(totalBlocksDug, blocksRequired, currentLevel); + } + + @Override + public boolean providesUpgrade(String key) + { + return key.equals(Constants.Mod.MODID + ".upgrade.digSlowdown"); + } + + @Override + public void onArmourUpgradeAdded(LivingArmourUpgrade upgrade) + { + if (upgrade instanceof LivingArmourUpgradeDigSlowdown) + { + int level = upgrade.getUpgradeLevel(); + if (level < blocksRequired.length) + { + totalBlocksDug = Math.max(totalBlocksDug, blocksRequired[level]); + this.markDirty(); + } + } + } + + @Override + public boolean isTrackerDowngrade() + { + return true; + } +}