diff --git a/changelog.txt b/changelog.txt index 3315a141..9efd4d2a 100644 --- a/changelog.txt +++ b/changelog.txt @@ -4,6 +4,7 @@ Version 2.0.0-3 - Fixed client-side issue when shift-clicking lava crystals into a furnace while on a server. - Added poison upgrade to Living Armour - Fixed digging upgrade +- Added self sacrifice upgrade to Living Armour (Tough Palms) ------------------------------------------------------ diff --git a/src/main/java/WayofTime/bloodmagic/api/event/SacrificeKnifeUsedEvent.java b/src/main/java/WayofTime/bloodmagic/api/event/SacrificeKnifeUsedEvent.java index e1db5173..49fd07f4 100644 --- a/src/main/java/WayofTime/bloodmagic/api/event/SacrificeKnifeUsedEvent.java +++ b/src/main/java/WayofTime/bloodmagic/api/event/SacrificeKnifeUsedEvent.java @@ -9,14 +9,16 @@ public class SacrificeKnifeUsedEvent extends Event { public final EntityPlayer player; public final int healthDrained; + public int lpAdded; public boolean shouldDrainHealth; public boolean shouldFillAltar; - public SacrificeKnifeUsedEvent(EntityPlayer player, boolean shouldDrainHealth, boolean shouldFillAltar, int hp) + public SacrificeKnifeUsedEvent(EntityPlayer player, boolean shouldDrainHealth, boolean shouldFillAltar, int hp, int lpAdded) { this.player = player; this.shouldDrainHealth = shouldDrainHealth; this.shouldFillAltar = shouldFillAltar; this.healthDrained = hp; + this.lpAdded = lpAdded; } } \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/item/ItemSacrificialDagger.java b/src/main/java/WayofTime/bloodmagic/item/ItemSacrificialDagger.java index 49a9a091..caac80de 100644 --- a/src/main/java/WayofTime/bloodmagic/item/ItemSacrificialDagger.java +++ b/src/main/java/WayofTime/bloodmagic/item/ItemSacrificialDagger.java @@ -1,33 +1,30 @@ package WayofTime.bloodmagic.item; -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.api.BloodMagicAPI; -import WayofTime.bloodmagic.api.Constants; -import WayofTime.bloodmagic.api.DamageSourceBloodMagic; -import WayofTime.bloodmagic.api.altar.IBloodAltar; -import WayofTime.bloodmagic.api.event.SacrificeKnifeUsedEvent; -import WayofTime.bloodmagic.api.util.helper.NBTHelper; -import WayofTime.bloodmagic.api.util.helper.PlayerHelper; -import WayofTime.bloodmagic.api.util.helper.PlayerSacrificeHelper; -import WayofTime.bloodmagic.util.helper.TextHelper; +import java.util.Arrays; +import java.util.List; + import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.EnumAction; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.BlockPos; import net.minecraft.util.EnumParticleTypes; -import net.minecraft.util.StatCollector; import net.minecraft.world.World; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; - -import java.util.Arrays; -import java.util.List; +import WayofTime.bloodmagic.BloodMagic; +import WayofTime.bloodmagic.api.BloodMagicAPI; +import WayofTime.bloodmagic.api.Constants; +import WayofTime.bloodmagic.api.altar.IBloodAltar; +import WayofTime.bloodmagic.api.event.SacrificeKnifeUsedEvent; +import WayofTime.bloodmagic.api.util.helper.NBTHelper; +import WayofTime.bloodmagic.api.util.helper.PlayerHelper; +import WayofTime.bloodmagic.api.util.helper.PlayerSacrificeHelper; +import WayofTime.bloodmagic.util.helper.TextHelper; public class ItemSacrificialDagger extends Item { @@ -94,9 +91,11 @@ public class ItemSacrificialDagger extends Item return stack; } + int lpAdded = 200; + if (!player.capabilities.isCreativeMode) { - SacrificeKnifeUsedEvent evt = new SacrificeKnifeUsedEvent(player, true, true, 2); + SacrificeKnifeUsedEvent evt = new SacrificeKnifeUsedEvent(player, true, true, 2, lpAdded); if (MinecraftForge.EVENT_BUS.post(evt)) return stack; @@ -108,6 +107,8 @@ public class ItemSacrificialDagger extends Item if (!evt.shouldFillAltar) return stack; + + lpAdded = evt.lpAdded; } double posX = player.posX; @@ -126,7 +127,7 @@ public class ItemSacrificialDagger extends Item return stack; // TODO - Check if SoulFray is active - findAndFillAltar(world, player, 200); + findAndFillAltar(world, player, lpAdded); return stack; } diff --git a/src/main/java/WayofTime/bloodmagic/item/armour/ItemLivingArmour.java b/src/main/java/WayofTime/bloodmagic/item/armour/ItemLivingArmour.java index eff7eb02..7c546354 100644 --- a/src/main/java/WayofTime/bloodmagic/item/armour/ItemLivingArmour.java +++ b/src/main/java/WayofTime/bloodmagic/item/armour/ItemLivingArmour.java @@ -44,7 +44,7 @@ public class ItemLivingArmour extends ItemArmor { if (this == ModItems.livingArmourChest) { - LivingArmour armour = this.getLivingArmour(stack); + LivingArmour armour = getLivingArmour(stack); for (Entry entry : armour.upgradeMap.entrySet()) { LivingArmourUpgrade upgrade = entry.getValue(); @@ -117,7 +117,7 @@ public class ItemLivingArmour extends ItemArmor return super.getUnlocalizedName(stack) + names[armorType]; } - public LivingArmour getLivingArmour(ItemStack stack) + public static LivingArmour getLivingArmour(ItemStack stack) { NBTTagCompound livingTag = getArmourTag(stack); @@ -143,7 +143,7 @@ public class ItemLivingArmour extends ItemArmor setArmourTag(stack, livingTag); } - public NBTTagCompound getArmourTag(ItemStack stack) + public static NBTTagCompound getArmourTag(ItemStack stack) { if (!stack.hasTagCompound()) { @@ -166,7 +166,7 @@ public class ItemLivingArmour extends ItemArmor tag.setTag(Constants.NBT.LIVING_ARMOUR, livingTag); } - public LivingArmourUpgrade getUpgrade(String uniqueIdentifier, ItemStack stack) + public static LivingArmourUpgrade getUpgrade(String uniqueIdentifier, ItemStack stack) { if (!armourMap.containsKey(stack)) { diff --git a/src/main/java/WayofTime/bloodmagic/livingArmour/LivingArmourUpgradeSelfSacrifice.java b/src/main/java/WayofTime/bloodmagic/livingArmour/LivingArmourUpgradeSelfSacrifice.java new file mode 100644 index 00000000..137632d8 --- /dev/null +++ b/src/main/java/WayofTime/bloodmagic/livingArmour/LivingArmourUpgradeSelfSacrifice.java @@ -0,0 +1,57 @@ +package WayofTime.bloodmagic.livingArmour; + +import net.minecraft.nbt.NBTTagCompound; +import WayofTime.bloodmagic.api.Constants; +import WayofTime.bloodmagic.api.livingArmour.LivingArmourUpgrade; + +public class LivingArmourUpgradeSelfSacrifice extends LivingArmourUpgrade +{ + public static final int[] costs = new int[] { 10, 25, 50, 80, 120 }; + public static final double[] sacrificeModifier = new double[] { 0.2, 0.4, 0.6, 0.8, 1.0 }; + + public LivingArmourUpgradeSelfSacrifice(int level) + { + super(level); + } + + public double getSacrificeModifier() + { + return sacrificeModifier[this.level]; + } + + @Override + public String getUniqueIdentifier() + { + return Constants.Mod.MODID + ".upgrade.selfSacrifice"; + } + + @Override + public int getMaxTier() + { + return 5; // 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 + "selfSacrifice"; + } +} diff --git a/src/main/java/WayofTime/bloodmagic/livingArmour/StatTrackerSelfSacrifice.java b/src/main/java/WayofTime/bloodmagic/livingArmour/StatTrackerSelfSacrifice.java new file mode 100644 index 00000000..f17aadd0 --- /dev/null +++ b/src/main/java/WayofTime/bloodmagic/livingArmour/StatTrackerSelfSacrifice.java @@ -0,0 +1,88 @@ +package WayofTime.bloodmagic.livingArmour; + +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; + +public class StatTrackerSelfSacrifice extends StatTracker +{ + public static HashMap changeMap = new HashMap(); + public static int[] sacrificesRequired = new int[] { 50, 200, 400, 600, 800 }; //testing + + public int totalSacrifices = 0; + + public static void incrementCounter(LivingArmour armour) + { + changeMap.put(armour, changeMap.containsKey(armour) ? changeMap.get(armour) + 1 : 1); + } + + @Override + public String getUniqueIdentifier() + { + return Constants.Mod.MODID + ".tracker.selfSacrifice"; + } + + @Override + public void resetTracker() + { + this.totalSacrifices = 0; + } + + @Override + public void readFromNBT(NBTTagCompound tag) + { + totalSacrifices = tag.getInteger(Constants.Mod.MODID + ".tracker.selfSacrifice"); + } + + @Override + public void writeToNBT(NBTTagCompound tag) + { + tag.setInteger(Constants.Mod.MODID + ".tracker.selfSacrifice", totalSacrifices); + + } + + @Override + public boolean onTick(World world, EntityPlayer player, LivingArmour livingArmour) + { + if (changeMap.containsKey(livingArmour)) + { + int change = Math.abs(changeMap.get(livingArmour)); + if (change > 0) + { + totalSacrifices += Math.abs(changeMap.get(livingArmour)); + + changeMap.put(livingArmour, 0); + + this.markDirty(); + + return true; + } + } + + return false; + } + + @Override + public List getUpgrades() + { + // TODO Auto-generated method stub + List upgradeList = new ArrayList(); + + for (int i = 0; i < 5; i++) + { + if (totalSacrifices > sacrificesRequired[i]) + { + upgradeList.add(new LivingArmourUpgradeSelfSacrifice(i)); + } + } + + return upgradeList; + } +} diff --git a/src/main/java/WayofTime/bloodmagic/registry/ModArmourTrackers.java b/src/main/java/WayofTime/bloodmagic/registry/ModArmourTrackers.java index d4ba4b60..3e37e062 100644 --- a/src/main/java/WayofTime/bloodmagic/registry/ModArmourTrackers.java +++ b/src/main/java/WayofTime/bloodmagic/registry/ModArmourTrackers.java @@ -3,10 +3,12 @@ package WayofTime.bloodmagic.registry; import WayofTime.bloodmagic.api.livingArmour.LivingArmourHandler; import WayofTime.bloodmagic.livingArmour.LivingArmourUpgradeDigging; import WayofTime.bloodmagic.livingArmour.LivingArmourUpgradePoisonResist; +import WayofTime.bloodmagic.livingArmour.LivingArmourUpgradeSelfSacrifice; import WayofTime.bloodmagic.livingArmour.LivingArmourUpgradeSpeed; import WayofTime.bloodmagic.livingArmour.StatTrackerDigging; import WayofTime.bloodmagic.livingArmour.StatTrackerMovement; import WayofTime.bloodmagic.livingArmour.StatTrackerPoison; +import WayofTime.bloodmagic.livingArmour.StatTrackerSelfSacrifice; public class ModArmourTrackers { @@ -15,9 +17,11 @@ public class ModArmourTrackers LivingArmourHandler.registerStatTracker(StatTrackerMovement.class); LivingArmourHandler.registerStatTracker(StatTrackerDigging.class); LivingArmourHandler.registerStatTracker(StatTrackerPoison.class); + LivingArmourHandler.registerStatTracker(StatTrackerSelfSacrifice.class); - LivingArmourHandler.registerArmourUpgrade(new LivingArmourUpgradeSpeed(1)); + LivingArmourHandler.registerArmourUpgrade(new LivingArmourUpgradeSpeed(0)); LivingArmourHandler.registerArmourUpgrade(new LivingArmourUpgradeDigging(0)); LivingArmourHandler.registerArmourUpgrade(new LivingArmourUpgradePoisonResist(0)); + LivingArmourHandler.registerArmourUpgrade(new LivingArmourUpgradeSelfSacrifice(0)); } } diff --git a/src/main/java/WayofTime/bloodmagic/util/handler/EventHandler.java b/src/main/java/WayofTime/bloodmagic/util/handler/EventHandler.java index c6e79976..0c926dfb 100644 --- a/src/main/java/WayofTime/bloodmagic/util/handler/EventHandler.java +++ b/src/main/java/WayofTime/bloodmagic/util/handler/EventHandler.java @@ -16,7 +16,9 @@ import WayofTime.bloodmagic.ConfigHandler; import WayofTime.bloodmagic.api.BlockStack; import WayofTime.bloodmagic.api.BloodMagicAPI; import WayofTime.bloodmagic.api.Constants; +import WayofTime.bloodmagic.api.event.SacrificeKnifeUsedEvent; import WayofTime.bloodmagic.api.event.TeleposeEvent; +import WayofTime.bloodmagic.api.livingArmour.LivingArmourUpgrade; import WayofTime.bloodmagic.api.util.helper.PlayerHelper; import WayofTime.bloodmagic.block.BlockAltar; import WayofTime.bloodmagic.item.ItemAltarMaker; @@ -24,7 +26,9 @@ import WayofTime.bloodmagic.item.armour.ItemLivingArmour; import WayofTime.bloodmagic.item.gear.ItemPackSacrifice; import WayofTime.bloodmagic.livingArmour.LivingArmour; import WayofTime.bloodmagic.livingArmour.LivingArmourUpgradeDigging; +import WayofTime.bloodmagic.livingArmour.LivingArmourUpgradeSelfSacrifice; import WayofTime.bloodmagic.livingArmour.StatTrackerDigging; +import WayofTime.bloodmagic.livingArmour.StatTrackerSelfSacrifice; import WayofTime.bloodmagic.registry.ModBlocks; import WayofTime.bloodmagic.registry.ModItems; import WayofTime.bloodmagic.util.ChatUtil; @@ -113,6 +117,15 @@ public class EventHandler EntityPlayer player = event.getPlayer(); if (player != null) { + for (int i = 0; i < 4; i++) + { + ItemStack stack = player.getCurrentArmor(i); + if (stack == null || !(stack.getItem() instanceof ItemLivingArmour)) + { + return; + } + } + ItemStack chestStack = player.getCurrentArmor(2); if (chestStack != null && chestStack.getItem() instanceof ItemLivingArmour) { @@ -126,4 +139,34 @@ public class EventHandler } } } + + @SubscribeEvent + public void selfSacrificeEvent(SacrificeKnifeUsedEvent event) + { + EntityPlayer player = event.player; + + for (int i = 0; i < 4; i++) + { + ItemStack stack = player.getCurrentArmor(i); + if (stack == null || !(stack.getItem() instanceof ItemLivingArmour)) + { + return; + } + } + + ItemStack chestStack = player.getCurrentArmor(2); + LivingArmour armour = ItemLivingArmour.armourMap.get(chestStack); + if (armour != null) + { + StatTrackerSelfSacrifice.incrementCounter(armour); + LivingArmourUpgrade upgrade = ItemLivingArmour.getUpgrade(Constants.Mod.MODID + ".upgrade.selfSacrifice", chestStack); + + if (upgrade instanceof LivingArmourUpgradeSelfSacrifice) + { + double modifier = ((LivingArmourUpgradeSelfSacrifice) upgrade).getSacrificeModifier(); + + event.lpAdded = (int) (event.lpAdded * (1 + modifier)); + } + } + } } diff --git a/src/main/resources/assets/bloodmagic/lang/en_US.lang b/src/main/resources/assets/bloodmagic/lang/en_US.lang index fc2cce2d..2dfe33f2 100644 --- a/src/main/resources/assets/bloodmagic/lang/en_US.lang +++ b/src/main/resources/assets/bloodmagic/lang/en_US.lang @@ -226,6 +226,7 @@ tooltip.BloodMagic.telepositionFocus.demonic=Used to move blocks in the world tooltip.BloodMagic.livingArmour.upgrade.speed=Quick Feet tooltip.BloodMagic.livingArmour.upgrade.digging=Dwarven Might tooltip.BloodMagic.livingArmour.upgrade.poisonResist=Poison Resistance +tooltip.BloodMagic.livingArmour.upgrade.selfSacrifice=Tough Palms tooltip.BloodMagic.livingArmour.upgrade.level=(Level %d) # Ritual