From 39df6d5bb01dd496ac764eba569caa820466864a Mon Sep 17 00:00:00 2001 From: WayofTime Date: Sat, 2 Apr 2016 10:10:49 -0400 Subject: [PATCH] Fixed living armour's training bracelet so that it deactivates any training of upgrades not supported Added "Experienced" living armour upgrade, which provides more xp from picked up orbs. --- changelog.txt | 2 + .../api/livingArmour/StatTracker.java | 2 + .../bloodmagic/livingArmour/LivingArmour.java | 1 + .../tracker/StatTrackerArrowShot.java | 9 ++ .../tracker/StatTrackerDigging.java | 9 ++ .../tracker/StatTrackerExperience.java | 103 ++++++++++++++++++ .../livingArmour/tracker/StatTrackerFood.java | 9 ++ .../tracker/StatTrackerGrimReaperSprint.java | 9 ++ .../tracker/StatTrackerHealthboost.java | 9 ++ .../tracker/StatTrackerMeleeDamage.java | 9 ++ .../tracker/StatTrackerMovement.java | 6 + .../tracker/StatTrackerPhysicalProtect.java | 9 ++ .../tracker/StatTrackerPoison.java | 21 ++-- .../tracker/StatTrackerSelfSacrifice.java | 9 ++ .../tracker/StatTrackerSolarPowered.java | 9 ++ .../LivingArmourUpgradeExperience.java | 57 ++++++++++ .../registry/ModArmourTrackers.java | 2 + .../bloodmagic/util/handler/EventHandler.java | 29 +++++ .../assets/bloodmagic/lang/en_US.lang | 1 + 19 files changed, 297 insertions(+), 8 deletions(-) create mode 100644 src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerExperience.java create mode 100644 src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeExperience.java diff --git a/changelog.txt b/changelog.txt index dcd34822..6fcd603f 100644 --- a/changelog.txt +++ b/changelog.txt @@ -4,6 +4,8 @@ Version 2.0.0-28 - Fixed the soul snare. - Removed health buff from Steadfast armour - Changed corrosive sword's effect from poison to wither +- Fixed living armour's training bracelet so that it deactivates any training of upgrades not supported +- Added "Experienced" living armour upgrade, which provides more xp from picked up orbs. ------------------------------------------------------ Version 2.0.0-27 diff --git a/src/main/java/WayofTime/bloodmagic/api/livingArmour/StatTracker.java b/src/main/java/WayofTime/bloodmagic/api/livingArmour/StatTracker.java index 8b35a8f8..b7dd5428 100644 --- a/src/main/java/WayofTime/bloodmagic/api/livingArmour/StatTracker.java +++ b/src/main/java/WayofTime/bloodmagic/api/livingArmour/StatTracker.java @@ -37,6 +37,8 @@ public abstract class StatTracker */ public abstract boolean onTick(World world, EntityPlayer player, LivingArmour livingArmour); + public abstract void onDeactivatedTick(World world, EntityPlayer player, LivingArmour livingArmour); + public abstract List getUpgrades(); public final boolean isDirty() diff --git a/src/main/java/WayofTime/bloodmagic/livingArmour/LivingArmour.java b/src/main/java/WayofTime/bloodmagic/livingArmour/LivingArmour.java index 6387c800..70afe662 100644 --- a/src/main/java/WayofTime/bloodmagic/livingArmour/LivingArmour.java +++ b/src/main/java/WayofTime/bloodmagic/livingArmour/LivingArmour.java @@ -165,6 +165,7 @@ public class LivingArmour implements ILivingArmour if (!allowed) { + tracker.onDeactivatedTick(world, player, this); continue; } } diff --git a/src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerArrowShot.java b/src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerArrowShot.java index f48a1549..47f23370 100644 --- a/src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerArrowShot.java +++ b/src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerArrowShot.java @@ -70,6 +70,15 @@ public class StatTrackerArrowShot extends StatTracker return false; } + @Override + public void onDeactivatedTick(World world, EntityPlayer player, LivingArmour livingArmour) + { + if (changeMap.containsKey(livingArmour)) + { + changeMap.remove(livingArmour); + } + } + @Override public List getUpgrades() { diff --git a/src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerDigging.java b/src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerDigging.java index c8060634..85e366fb 100644 --- a/src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerDigging.java +++ b/src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerDigging.java @@ -70,6 +70,15 @@ public class StatTrackerDigging extends StatTracker return false; } + @Override + public void onDeactivatedTick(World world, EntityPlayer player, LivingArmour livingArmour) + { + if (changeMap.containsKey(livingArmour)) + { + changeMap.remove(livingArmour); + } + } + @Override public List getUpgrades() { diff --git a/src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerExperience.java b/src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerExperience.java new file mode 100644 index 00000000..d69cb2c5 --- /dev/null +++ b/src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerExperience.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.LivingArmourUpgradeExperience; + +public class StatTrackerExperience extends StatTracker +{ + public double totalExperienceGained = 0; + + public static HashMap changeMap = new HashMap(); + public static int[] experienceRequired = new int[] { 100, 400, 1000, 1600, 3200, 5000, 7000, 9200, 11500, 140000 }; + + public static void incrementCounter(LivingArmour armour, int exp) + { + changeMap.put(armour, changeMap.containsKey(armour) ? changeMap.get(armour) + exp : exp); + } + + @Override + public String getUniqueIdentifier() + { + return Constants.Mod.MODID + ".tracker.experienced"; + } + + @Override + public void resetTracker() + { + this.totalExperienceGained = 0; + } + + @Override + public void readFromNBT(NBTTagCompound tag) + { + totalExperienceGained = tag.getDouble(Constants.Mod.MODID + ".tracker.experienced"); + } + + @Override + public void writeToNBT(NBTTagCompound tag) + { + tag.setDouble(Constants.Mod.MODID + ".tracker.experienced", totalExperienceGained); + } + + @Override + public boolean onTick(World world, EntityPlayer player, LivingArmour livingArmour) + { + if (changeMap.containsKey(livingArmour)) + { + double change = Math.abs(changeMap.get(livingArmour)); + if (change > 0) + { + totalExperienceGained += 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 (totalExperienceGained >= experienceRequired[i]) + { + upgradeList.add(new LivingArmourUpgradeExperience(i)); + } + } + + return upgradeList; + } + + @Override + public boolean providesUpgrade(String key) + { + return key.equals(Constants.Mod.MODID + ".upgrade.experienced"); + } +} diff --git a/src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerFood.java b/src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerFood.java index 44074180..ec6a0276 100644 --- a/src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerFood.java +++ b/src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerFood.java @@ -72,6 +72,15 @@ public class StatTrackerFood extends StatTracker return false; } + @Override + public void onDeactivatedTick(World world, EntityPlayer player, LivingArmour livingArmour) + { + if (lastFoodEatenMap.containsKey(player)) + { + lastFoodEatenMap.remove(player); + } + } + @Override public List getUpgrades() { diff --git a/src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerGrimReaperSprint.java b/src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerGrimReaperSprint.java index 0d0e6093..8a90cebf 100644 --- a/src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerGrimReaperSprint.java +++ b/src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerGrimReaperSprint.java @@ -77,6 +77,15 @@ public class StatTrackerGrimReaperSprint extends StatTracker return true; } + @Override + public void onDeactivatedTick(World world, EntityPlayer player, LivingArmour livingArmour) + { + if (changeMap.containsKey(livingArmour)) + { + changeMap.remove(livingArmour); + } + } + @Override public List getUpgrades() { diff --git a/src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerHealthboost.java b/src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerHealthboost.java index 85922a65..ae047fa3 100644 --- a/src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerHealthboost.java +++ b/src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerHealthboost.java @@ -70,6 +70,15 @@ public class StatTrackerHealthboost extends StatTracker return false; } + @Override + public void onDeactivatedTick(World world, EntityPlayer player, LivingArmour livingArmour) + { + if (changeMap.containsKey(livingArmour)) + { + changeMap.remove(livingArmour); + } + } + @Override public List getUpgrades() { diff --git a/src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerMeleeDamage.java b/src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerMeleeDamage.java index 3a1961d9..679b3270 100644 --- a/src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerMeleeDamage.java +++ b/src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerMeleeDamage.java @@ -70,6 +70,15 @@ public class StatTrackerMeleeDamage extends StatTracker return false; } + @Override + public void onDeactivatedTick(World world, EntityPlayer player, LivingArmour livingArmour) + { + if (changeMap.containsKey(livingArmour)) + { + changeMap.remove(livingArmour); + } + } + @Override public List getUpgrades() { diff --git a/src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerMovement.java b/src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerMovement.java index 7e637d13..cd7fbcb6 100644 --- a/src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerMovement.java +++ b/src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerMovement.java @@ -83,6 +83,12 @@ public class StatTrackerMovement extends StatTracker return false; } + @Override + public void onDeactivatedTick(World world, EntityPlayer player, LivingArmour livingArmour) + { + + } + @Override public List getUpgrades() { diff --git a/src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerPhysicalProtect.java b/src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerPhysicalProtect.java index fcc0c9fb..74bf9414 100644 --- a/src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerPhysicalProtect.java +++ b/src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerPhysicalProtect.java @@ -70,6 +70,15 @@ public class StatTrackerPhysicalProtect extends StatTracker return false; } + @Override + public void onDeactivatedTick(World world, EntityPlayer player, LivingArmour livingArmour) + { + if (changeMap.containsKey(livingArmour)) + { + changeMap.remove(livingArmour); + } + } + @Override public List getUpgrades() { diff --git a/src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerPoison.java b/src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerPoison.java index 61e35a21..b2fc5e63 100644 --- a/src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerPoison.java +++ b/src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerPoison.java @@ -1,18 +1,17 @@ package WayofTime.bloodmagic.livingArmour.tracker; +import java.util.ArrayList; +import java.util.List; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.MobEffects; +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.LivingArmourUpgradePoisonResist; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.MobEffects; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.potion.Potion; -import net.minecraft.world.World; - -import java.util.ArrayList; -import java.util.List; public class StatTrackerPoison extends StatTracker { @@ -57,6 +56,12 @@ public class StatTrackerPoison extends StatTracker return false; } + @Override + public void onDeactivatedTick(World world, EntityPlayer player, LivingArmour livingArmour) + { + + } + @Override public List getUpgrades() { diff --git a/src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerSelfSacrifice.java b/src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerSelfSacrifice.java index 36d87ff5..55b635fa 100644 --- a/src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerSelfSacrifice.java +++ b/src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerSelfSacrifice.java @@ -71,6 +71,15 @@ public class StatTrackerSelfSacrifice extends StatTracker return false; } + @Override + public void onDeactivatedTick(World world, EntityPlayer player, LivingArmour livingArmour) + { + if (changeMap.containsKey(livingArmour)) + { + changeMap.remove(livingArmour); + } + } + @Override public List getUpgrades() { diff --git a/src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerSolarPowered.java b/src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerSolarPowered.java index a047869a..b3006d27 100644 --- a/src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerSolarPowered.java +++ b/src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerSolarPowered.java @@ -70,6 +70,15 @@ public class StatTrackerSolarPowered extends StatTracker return false; } + @Override + public void onDeactivatedTick(World world, EntityPlayer player, LivingArmour livingArmour) + { + if (changeMap.containsKey(livingArmour)) + { + changeMap.remove(livingArmour); + } + } + @Override public List getUpgrades() { diff --git a/src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeExperience.java b/src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeExperience.java new file mode 100644 index 00000000..7cab3ea4 --- /dev/null +++ b/src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeExperience.java @@ -0,0 +1,57 @@ +package WayofTime.bloodmagic.livingArmour.upgrade; + +import WayofTime.bloodmagic.api.Constants; +import WayofTime.bloodmagic.api.livingArmour.LivingArmourUpgrade; +import net.minecraft.nbt.NBTTagCompound; + +public class LivingArmourUpgradeExperience extends LivingArmourUpgrade +{ + public static final int[] costs = new int[] { 7, 13, 22, 40, 65, 90, 130, 180, 250, 350 }; + public static final double[] experienceModifier = new double[] { 0.15, 0.3, 0.45, 0.6, 0.75, 0.9, 1.05, 1.2, 1.35, 1.5 }; + + public LivingArmourUpgradeExperience(int level) + { + super(level); + } + + public double getExperienceModifier() + { + return experienceModifier[this.level]; + } + + @Override + public String getUniqueIdentifier() + { + return Constants.Mod.MODID + ".upgrade.experienced"; + } + + @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 + "experienced"; + } +} diff --git a/src/main/java/WayofTime/bloodmagic/registry/ModArmourTrackers.java b/src/main/java/WayofTime/bloodmagic/registry/ModArmourTrackers.java index 05c65aca..93fa2ec7 100644 --- a/src/main/java/WayofTime/bloodmagic/registry/ModArmourTrackers.java +++ b/src/main/java/WayofTime/bloodmagic/registry/ModArmourTrackers.java @@ -19,6 +19,7 @@ public class ModArmourTrackers LivingArmourHandler.registerStatTracker(StatTrackerArrowShot.class); LivingArmourHandler.registerStatTracker(StatTrackerGrimReaperSprint.class); LivingArmourHandler.registerStatTracker(StatTrackerSolarPowered.class); + LivingArmourHandler.registerStatTracker(StatTrackerExperience.class); LivingArmourHandler.registerArmourUpgrade(new LivingArmourUpgradeSpeed(0)); LivingArmourHandler.registerArmourUpgrade(new LivingArmourUpgradeDigging(0)); @@ -32,5 +33,6 @@ public class ModArmourTrackers LivingArmourHandler.registerArmourUpgrade(new LivingArmourUpgradeStepAssist(0)); LivingArmourHandler.registerArmourUpgrade(new LivingArmourUpgradeGrimReaperSprint(0)); LivingArmourHandler.registerArmourUpgrade(new LivingArmourUpgradeSolarPowered(0)); + LivingArmourHandler.registerArmourUpgrade(new LivingArmourUpgradeExperience(0)); } } diff --git a/src/main/java/WayofTime/bloodmagic/util/handler/EventHandler.java b/src/main/java/WayofTime/bloodmagic/util/handler/EventHandler.java index 28401a88..5164f8ae 100644 --- a/src/main/java/WayofTime/bloodmagic/util/handler/EventHandler.java +++ b/src/main/java/WayofTime/bloodmagic/util/handler/EventHandler.java @@ -41,6 +41,7 @@ import net.minecraftforge.event.entity.player.EntityItemPickupEvent; import net.minecraftforge.event.entity.player.FillBucketEvent; import net.minecraftforge.event.entity.player.PlayerEvent; import net.minecraftforge.event.entity.player.PlayerInteractEvent; +import net.minecraftforge.event.entity.player.PlayerPickupXpEvent; import net.minecraftforge.event.world.BlockEvent; import net.minecraftforge.event.world.ChunkDataEvent; import net.minecraftforge.fml.client.event.ConfigChangedEvent; @@ -85,6 +86,7 @@ import WayofTime.bloodmagic.item.gear.ItemPackSacrifice; import WayofTime.bloodmagic.livingArmour.LivingArmour; import WayofTime.bloodmagic.livingArmour.tracker.StatTrackerArrowShot; import WayofTime.bloodmagic.livingArmour.tracker.StatTrackerDigging; +import WayofTime.bloodmagic.livingArmour.tracker.StatTrackerExperience; import WayofTime.bloodmagic.livingArmour.tracker.StatTrackerGrimReaperSprint; import WayofTime.bloodmagic.livingArmour.tracker.StatTrackerHealthboost; import WayofTime.bloodmagic.livingArmour.tracker.StatTrackerMeleeDamage; @@ -93,6 +95,7 @@ import WayofTime.bloodmagic.livingArmour.tracker.StatTrackerSelfSacrifice; 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.LivingArmourUpgradeGrimReaperSprint; import WayofTime.bloodmagic.livingArmour.upgrade.LivingArmourUpgradeSelfSacrifice; import WayofTime.bloodmagic.livingArmour.upgrade.LivingArmourUpgradeSpeed; @@ -759,4 +762,30 @@ public class EventHandler } } } + + @SubscribeEvent + public void onExperiencePickup(PlayerPickupXpEvent event) + { + EntityPlayer player = event.getEntityPlayer(); + + if (LivingArmour.hasFullSet(player)) + { + ItemStack chestStack = player.getItemStackFromSlot(EntityEquipmentSlot.CHEST); + LivingArmour armour = ItemLivingArmour.armourMap.get(chestStack); + if (armour != null) + { + LivingArmourUpgrade upgrade = ItemLivingArmour.getUpgrade(Constants.Mod.MODID + ".upgrade.experienced", chestStack); + if (upgrade instanceof LivingArmourUpgradeExperience) + { + double modifier = ((LivingArmourUpgradeExperience) upgrade).getExperienceModifier(); + + double exp = event.getOrb().xpValue * (1 + modifier); + + event.getOrb().xpValue = (int) Math.floor(exp) + (Math.random() < exp % 1 ? 1 : 0); + } + + StatTrackerExperience.incrementCounter(armour, event.getOrb().xpValue); + } + } + } } diff --git a/src/main/resources/assets/bloodmagic/lang/en_US.lang b/src/main/resources/assets/bloodmagic/lang/en_US.lang index c281e858..7c7a4b2d 100644 --- a/src/main/resources/assets/bloodmagic/lang/en_US.lang +++ b/src/main/resources/assets/bloodmagic/lang/en_US.lang @@ -316,6 +316,7 @@ tooltip.BloodMagic.livingArmour.upgrade.grimReaper=Grim Reaper's Sprint tooltip.BloodMagic.livingArmour.upgrade.solarPowered=Solar Powered tooltip.BloodMagic.livingArmour.upgrade.thaumRunicShielding=Runic Shielding tooltip.BloodMagic.livingArmour.upgrade.revealing=Revealing +tooltip.BloodMagic.livingArmour.upgrade.experienced=Experienced tooltip.BloodMagic.livingArmour.upgrade.level=%s (Level %d) tooltip.BloodMagic.livingArmour.upgrade.points=&6Upgrade points: %s / %s