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.
This commit is contained in:
WayofTime 2016-04-02 10:10:49 -04:00
parent cc7c594c52
commit 39df6d5bb0
19 changed files with 297 additions and 8 deletions

View file

@ -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

View file

@ -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<LivingArmourUpgrade> getUpgrades();
public final boolean isDirty()

View file

@ -165,6 +165,7 @@ public class LivingArmour implements ILivingArmour
if (!allowed)
{
tracker.onDeactivatedTick(world, player, this);
continue;
}
}

View file

@ -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<LivingArmourUpgrade> getUpgrades()
{

View file

@ -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<LivingArmourUpgrade> getUpgrades()
{

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.LivingArmourUpgradeExperience;
public class StatTrackerExperience extends StatTracker
{
public double totalExperienceGained = 0;
public static HashMap<LivingArmour, Integer> changeMap = new HashMap<LivingArmour, Integer>();
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<LivingArmourUpgrade> getUpgrades()
{
List<LivingArmourUpgrade> upgradeList = new ArrayList<LivingArmourUpgrade>();
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");
}
}

View file

@ -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<LivingArmourUpgrade> getUpgrades()
{

View file

@ -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<LivingArmourUpgrade> getUpgrades()
{

View file

@ -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<LivingArmourUpgrade> getUpgrades()
{

View file

@ -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<LivingArmourUpgrade> getUpgrades()
{

View file

@ -83,6 +83,12 @@ public class StatTrackerMovement extends StatTracker
return false;
}
@Override
public void onDeactivatedTick(World world, EntityPlayer player, LivingArmour livingArmour)
{
}
@Override
public List<LivingArmourUpgrade> getUpgrades()
{

View file

@ -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<LivingArmourUpgrade> getUpgrades()
{

View file

@ -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<LivingArmourUpgrade> getUpgrades()
{

View file

@ -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<LivingArmourUpgrade> getUpgrades()
{

View file

@ -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<LivingArmourUpgrade> getUpgrades()
{

View file

@ -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";
}
}

View file

@ -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));
}
}

View file

@ -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);
}
}
}
}

View file

@ -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