Added "Grave Digger" living armour upgrade
This commit is contained in:
parent
1c6c7ba0a6
commit
b0b61798fe
|
@ -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
|
||||
|
|
|
@ -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");
|
||||
}
|
||||
}
|
|
@ -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";
|
||||
}
|
||||
}
|
|
@ -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));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
Loading…
Reference in a new issue