From b0b61798fe30ca896724d7e784b720b447c14fc6 Mon Sep 17 00:00:00 2001 From: WayofTime Date: Mon, 4 Apr 2016 20:18:10 -0400 Subject: [PATCH] Added "Grave Digger" living armour upgrade --- changelog.txt | 1 + .../tracker/StatTrackerGraveDigger.java | 103 ++++++++++++++++++ .../LivingArmourUpgradeGraveDigger.java | 57 ++++++++++ .../registry/ModArmourTrackers.java | 2 + .../bloodmagic/util/handler/EventHandler.java | 32 ++++-- .../assets/bloodmagic/lang/en_US.lang | 1 + 6 files changed, 187 insertions(+), 9 deletions(-) create mode 100644 src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerGraveDigger.java create mode 100644 src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeGraveDigger.java diff --git a/changelog.txt b/changelog.txt index f7513698..6759e114 100644 --- a/changelog.txt +++ b/changelog.txt @@ -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 diff --git a/src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerGraveDigger.java b/src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerGraveDigger.java new file mode 100644 index 00000000..03e6843b --- /dev/null +++ b/src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerGraveDigger.java @@ -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 changeMap = new HashMap(); + 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 getUpgrades() + { + List upgradeList = new ArrayList(); + + 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"); + } +} diff --git a/src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeGraveDigger.java b/src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeGraveDigger.java new file mode 100644 index 00000000..72a2123d --- /dev/null +++ b/src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeGraveDigger.java @@ -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"; + } +} \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/registry/ModArmourTrackers.java b/src/main/java/WayofTime/bloodmagic/registry/ModArmourTrackers.java index 158c18d4..2355fd16 100644 --- a/src/main/java/WayofTime/bloodmagic/registry/ModArmourTrackers.java +++ b/src/main/java/WayofTime/bloodmagic/registry/ModArmourTrackers.java @@ -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)); } } diff --git a/src/main/java/WayofTime/bloodmagic/util/handler/EventHandler.java b/src/main/java/WayofTime/bloodmagic/util/handler/EventHandler.java index 55410342..6bfd58c8 100644 --- a/src/main/java/WayofTime/bloodmagic/util/handler/EventHandler.java +++ b/src/main/java/WayofTime/bloodmagic/util/handler/EventHandler.java @@ -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); + } } } } diff --git a/src/main/resources/assets/bloodmagic/lang/en_US.lang b/src/main/resources/assets/bloodmagic/lang/en_US.lang index cfc07508..4e476c13 100644 --- a/src/main/resources/assets/bloodmagic/lang/en_US.lang +++ b/src/main/resources/assets/bloodmagic/lang/en_US.lang @@ -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