Added "Grave Digger" living armour upgrade

This commit is contained in:
WayofTime 2016-04-04 20:18:10 -04:00
parent 1c6c7ba0a6
commit b0b61798fe
6 changed files with 187 additions and 9 deletions

View file

@ -5,6 +5,7 @@ Version 2.0.0-31
- Added Living Armour Upgrades:
- Strong Legs increases jump height. Pro tip: hold shift to bypass this jump boost.
- Soft Fall decreases all fall damage, up to 100% at level 5.
- Grave Digger, for fun times with alternative weapons
- Added increase in speed for Routing nodes inside of a chunk with Demon Aura
- Fixed OutOfBoundsException in the Sentient Sword when you didn't have enough Will.
- Fixed custom potion effects so they could be applied server-sided

View file

@ -0,0 +1,103 @@
package WayofTime.bloodmagic.livingArmour.tracker;
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.upgrade.LivingArmourUpgradeGraveDigger;
public class StatTrackerGraveDigger extends StatTracker
{
public double totalDamageDealt = 0;
public static HashMap<LivingArmour, Double> changeMap = new HashMap<LivingArmour, Double>();
public static int[] damageRequired = new int[] { 200, 800, 1300, 2500, 3800, 5000, 7000, 9200, 11500, 140000 };
public static void incrementCounter(LivingArmour armour, double damage)
{
changeMap.put(armour, changeMap.containsKey(armour) ? changeMap.get(armour) + damage : damage);
}
@Override
public String getUniqueIdentifier()
{
return Constants.Mod.MODID + ".tracker.graveDigger";
}
@Override
public void resetTracker()
{
this.totalDamageDealt = 0;
}
@Override
public void readFromNBT(NBTTagCompound tag)
{
totalDamageDealt = tag.getDouble(Constants.Mod.MODID + ".tracker.graveDigger");
}
@Override
public void writeToNBT(NBTTagCompound tag)
{
tag.setDouble(Constants.Mod.MODID + ".tracker.graveDigger", totalDamageDealt);
}
@Override
public boolean onTick(World world, EntityPlayer player, LivingArmour livingArmour)
{
if (changeMap.containsKey(livingArmour))
{
double change = Math.abs(changeMap.get(livingArmour));
if (change > 0)
{
totalDamageDealt += Math.abs(changeMap.get(livingArmour));
changeMap.put(livingArmour, 0d);
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<LivingArmourUpgrade> getUpgrades()
{
List<LivingArmourUpgrade> upgradeList = new ArrayList<LivingArmourUpgrade>();
for (int i = 0; i < 10; i++)
{
if (totalDamageDealt >= damageRequired[i])
{
upgradeList.add(new LivingArmourUpgradeGraveDigger(i));
}
}
return upgradeList;
}
@Override
public boolean providesUpgrade(String key)
{
return key.equals(Constants.Mod.MODID + ".upgrade.graveDigger");
}
}

View file

@ -0,0 +1,57 @@
package WayofTime.bloodmagic.livingArmour.upgrade;
import net.minecraft.nbt.NBTTagCompound;
import WayofTime.bloodmagic.api.Constants;
import WayofTime.bloodmagic.api.livingArmour.LivingArmourUpgrade;
public class LivingArmourUpgradeGraveDigger extends LivingArmourUpgrade
{
public static final int[] costs = new int[] { 5, 12, 20, 35, 49, 78, 110, 160, 215, 320 };
public static final double[] damageBoost = new double[] { 0.2, 0.4, 0.6, 0.8, 1, 1.2, 1.4, 1.6, 1.8, 2 };
public LivingArmourUpgradeGraveDigger(int level)
{
super(level);
}
public double getDamageModifier()
{
return damageBoost[this.level];
}
@Override
public String getUniqueIdentifier()
{
return Constants.Mod.MODID + ".upgrade.graveDigger";
}
@Override
public int getMaxTier()
{
return 10;
}
@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 + "graveDigger";
}
}

View file

@ -22,6 +22,7 @@ public class ModArmourTrackers
LivingArmourHandler.registerStatTracker(StatTrackerExperience.class);
LivingArmourHandler.registerStatTracker(StatTrackerJump.class);
LivingArmourHandler.registerStatTracker(StatTrackerFallProtect.class);
LivingArmourHandler.registerStatTracker(StatTrackerGraveDigger.class);
LivingArmourHandler.registerArmourUpgrade(new LivingArmourUpgradeSpeed(0));
LivingArmourHandler.registerArmourUpgrade(new LivingArmourUpgradeDigging(0));
@ -38,5 +39,6 @@ public class ModArmourTrackers
LivingArmourHandler.registerArmourUpgrade(new LivingArmourUpgradeExperience(0));
LivingArmourHandler.registerArmourUpgrade(new LivingArmourUpgradeJump(0));
LivingArmourHandler.registerArmourUpgrade(new LivingArmourUpgradeFallProtect(0));
LivingArmourHandler.registerArmourUpgrade(new LivingArmourUpgradeGraveDigger(0));
}
}

View file

@ -21,6 +21,7 @@ import net.minecraft.init.Enchantments;
import net.minecraft.init.Items;
import net.minecraft.inventory.EntityEquipmentSlot;
import net.minecraft.item.ItemArrow;
import net.minecraft.item.ItemSpade;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.potion.PotionEffect;
@ -30,7 +31,6 @@ import net.minecraft.world.ChunkCoordIntPair;
import net.minecraft.world.World;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.event.AnvilUpdateEvent;
import net.minecraftforge.event.entity.living.LivingAttackEvent;
import net.minecraftforge.event.entity.living.LivingDeathEvent;
import net.minecraftforge.event.entity.living.LivingDropsEvent;
import net.minecraftforge.event.entity.living.LivingEvent;
@ -89,6 +89,7 @@ import WayofTime.bloodmagic.livingArmour.tracker.StatTrackerArrowShot;
import WayofTime.bloodmagic.livingArmour.tracker.StatTrackerDigging;
import WayofTime.bloodmagic.livingArmour.tracker.StatTrackerExperience;
import WayofTime.bloodmagic.livingArmour.tracker.StatTrackerFallProtect;
import WayofTime.bloodmagic.livingArmour.tracker.StatTrackerGraveDigger;
import WayofTime.bloodmagic.livingArmour.tracker.StatTrackerGrimReaperSprint;
import WayofTime.bloodmagic.livingArmour.tracker.StatTrackerHealthboost;
import WayofTime.bloodmagic.livingArmour.tracker.StatTrackerJump;
@ -99,6 +100,7 @@ import WayofTime.bloodmagic.livingArmour.tracker.StatTrackerSolarPowered;
import WayofTime.bloodmagic.livingArmour.upgrade.LivingArmourUpgradeArrowShot;
import WayofTime.bloodmagic.livingArmour.upgrade.LivingArmourUpgradeDigging;
import WayofTime.bloodmagic.livingArmour.upgrade.LivingArmourUpgradeExperience;
import WayofTime.bloodmagic.livingArmour.upgrade.LivingArmourUpgradeGraveDigger;
import WayofTime.bloodmagic.livingArmour.upgrade.LivingArmourUpgradeGrimReaperSprint;
import WayofTime.bloodmagic.livingArmour.upgrade.LivingArmourUpgradeJump;
import WayofTime.bloodmagic.livingArmour.upgrade.LivingArmourUpgradeSelfSacrifice;
@ -592,17 +594,12 @@ public class EventHandler
}
@SubscribeEvent
public void onEntityAttacked(LivingAttackEvent event)
public void onEntityAttacked(LivingHurtEvent event)
{
DamageSource source = event.getSource();
Entity sourceEntity = event.getSource().getEntity();
EntityLivingBase attackedEntity = event.getEntityLiving();
if (attackedEntity.hurtResistantTime > 0)
{
return;
}
if (attackedEntity instanceof EntityPlayer)
{
EntityPlayer attackedPlayer = (EntityPlayer) attackedEntity;
@ -646,18 +643,35 @@ public class EventHandler
if (sourceEntity instanceof EntityPlayer)
{
EntityPlayer player = (EntityPlayer) sourceEntity;
// Living Armor Handling
if (LivingArmour.hasFullSet(player))
{
float amount = Math.min(Utils.getModifiedDamage(attackedEntity, event.getSource(), event.getAmount()), attackedEntity.getHealth());
ItemStack chestStack = player.getItemStackFromSlot(EntityEquipmentSlot.CHEST);
LivingArmour armour = ItemLivingArmour.armourMap.get(chestStack);
if (armour != null)
{
ItemStack mainWeapon = player.getItemStackFromSlot(EntityEquipmentSlot.MAINHAND);
if (mainWeapon != null && mainWeapon.getItem() instanceof ItemSpade)
{
LivingArmourUpgrade upgrade = ItemLivingArmour.getUpgrade(Constants.Mod.MODID + ".upgrade.graveDigger", chestStack);
if (upgrade instanceof LivingArmourUpgradeGraveDigger)
{
event.setAmount((float) (event.getAmount() * (1 + ((LivingArmourUpgradeGraveDigger) upgrade).getDamageModifier())));
}
}
float amount = Math.min(Utils.getModifiedDamage(attackedEntity, event.getSource(), event.getAmount()), attackedEntity.getHealth());
if (!source.isProjectile())
{
StatTrackerMeleeDamage.incrementCounter(armour, amount);
if (mainWeapon != null && mainWeapon.getItem() instanceof ItemSpade)
{
StatTrackerGraveDigger.incrementCounter(armour, amount);
}
}
}
}

View file

@ -321,6 +321,7 @@ tooltip.BloodMagic.livingArmour.upgrade.revealing=Revealing
tooltip.BloodMagic.livingArmour.upgrade.experienced=Experienced
tooltip.BloodMagic.livingArmour.upgrade.jump=Strong Legs
tooltip.BloodMagic.livingArmour.upgrade.fallProtect=Soft Fall
tooltip.BloodMagic.livingArmour.upgrade.graveDigger=Grave Digger
tooltip.BloodMagic.livingArmour.upgrade.level=%s (Level %d)
tooltip.BloodMagic.livingArmour.upgrade.points=&6Upgrade points: %s / %s