diff --git a/changelog.txt b/changelog.txt index 38b4827b..80cba06a 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,3 +1,8 @@ +------------------------------------------------------ +Version 2.0.0-6 +------------------------------------------------------ +- Fixed the LivingArmourTracker for defense so that it no longer ate up armour (om nom nom nom) + ------------------------------------------------------ Version 2.0.0-5 ------------------------------------------------------ diff --git a/src/main/java/WayofTime/bloodmagic/tile/routing/TileInputRoutingNode.java b/src/main/java/WayofTime/bloodmagic/tile/routing/TileInputRoutingNode.java index 2f4b3bbe..7642663c 100644 --- a/src/main/java/WayofTime/bloodmagic/tile/routing/TileInputRoutingNode.java +++ b/src/main/java/WayofTime/bloodmagic/tile/routing/TileInputRoutingNode.java @@ -50,10 +50,16 @@ public class TileInputRoutingNode extends TileFilteredRoutingNode implements IIn continue; } - filteredList.add(GhostItemHelper.getStackFromGhost(stack)); + ItemStack ghostResult = GhostItemHelper.getStackFromGhost(stack); +// if (ghostResult.stackSize == 0) +// { +// ghostResult.stackSize = Int.MaxValue(); +// } + + filteredList.add(ghostResult); } - testFilter.initializeFilter(filteredList, (IInventory) tile, side, false); + testFilter.initializeFilter(filteredList, (IInventory) tile, side.getOpposite(), false); return testFilter; } diff --git a/src/main/java/WayofTime/bloodmagic/tile/routing/TileMasterRoutingNode.java b/src/main/java/WayofTime/bloodmagic/tile/routing/TileMasterRoutingNode.java index d420eabc..e52705e3 100644 --- a/src/main/java/WayofTime/bloodmagic/tile/routing/TileMasterRoutingNode.java +++ b/src/main/java/WayofTime/bloodmagic/tile/routing/TileMasterRoutingNode.java @@ -52,7 +52,6 @@ public class TileMasterRoutingNode extends TileEntity implements IMasterRoutingN { if (!outputNode.isInventoryConnectedToSide(facing) || !outputNode.isOutput(facing)) { - System.out.println("Hello"); continue; } diff --git a/src/main/java/WayofTime/bloodmagic/tile/routing/TileOutputRoutingNode.java b/src/main/java/WayofTime/bloodmagic/tile/routing/TileOutputRoutingNode.java index 9452cd50..71d35f42 100644 --- a/src/main/java/WayofTime/bloodmagic/tile/routing/TileOutputRoutingNode.java +++ b/src/main/java/WayofTime/bloodmagic/tile/routing/TileOutputRoutingNode.java @@ -3,6 +3,7 @@ package WayofTime.bloodmagic.tile.routing; import java.util.LinkedList; import java.util.List; +import scala.Int; import net.minecraft.inventory.IInventory; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; @@ -50,10 +51,16 @@ public class TileOutputRoutingNode extends TileFilteredRoutingNode implements IO continue; } - filteredList.add(GhostItemHelper.getStackFromGhost(stack)); + ItemStack ghostStack = GhostItemHelper.getStackFromGhost(stack); + if (ghostStack.stackSize == 0) + { + ghostStack.stackSize = Int.MaxValue(); + } + + filteredList.add(ghostStack); } - testFilter.initializeFilter(filteredList, (IInventory) tile, side, true); + testFilter.initializeFilter(filteredList, (IInventory) tile, side.getOpposite(), true); return testFilter; } diff --git a/src/main/java/WayofTime/bloodmagic/util/Utils.java b/src/main/java/WayofTime/bloodmagic/util/Utils.java index e4dfde63..1501680a 100644 --- a/src/main/java/WayofTime/bloodmagic/util/Utils.java +++ b/src/main/java/WayofTime/bloodmagic/util/Utils.java @@ -1,5 +1,7 @@ package WayofTime.bloodmagic.util; +import java.util.ArrayList; + import net.minecraft.block.Block; import net.minecraft.enchantment.EnchantmentHelper; import net.minecraft.entity.EntityLivingBase; @@ -8,6 +10,7 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; import net.minecraft.inventory.IInventory; import net.minecraft.inventory.ISidedInventory; +import net.minecraft.item.ItemArmor; import net.minecraft.item.ItemStack; import net.minecraft.potion.Potion; import net.minecraft.util.DamageSource; @@ -15,6 +18,8 @@ import net.minecraft.util.EnumFacing; import WayofTime.bloodmagic.api.altar.EnumAltarComponent; import WayofTime.bloodmagic.registry.ModBlocks; import WayofTime.bloodmagic.tile.TileInventory; +import net.minecraftforge.common.ISpecialArmor; +import net.minecraftforge.common.ISpecialArmor.ArmorProperties; import net.minecraftforge.fluids.IFluidBlock; public class Utils @@ -126,7 +131,7 @@ public class Utils if (amount <= 0) return 0; - amount = net.minecraftforge.common.ISpecialArmor.ArmorProperties.applyArmor(attackedEntity, attackedEntity.getInventory(), source, amount); + amount = applyArmor(attackedEntity, attackedEntity.getInventory(), source, amount); if (amount <= 0) return 0; amount = applyPotionDamageCalculations(attackedEntity, source, amount); @@ -137,6 +142,55 @@ public class Utils return 0; } + public static float applyArmor(EntityLivingBase entity, ItemStack[] inventory, DamageSource source, double damage) + { + damage *= 25; + ArrayList dmgVals = new ArrayList(); + for (int x = 0; x < inventory.length; x++) + { + ItemStack stack = inventory[x]; + if (stack == null) + { + continue; + } + ArmorProperties prop = null; + if (stack.getItem() instanceof ISpecialArmor) + { + ISpecialArmor armor = (ISpecialArmor) stack.getItem(); + prop = armor.getProperties(entity, stack, source, damage / 25D, x).copy(); + } else if (stack.getItem() instanceof ItemArmor && !source.isUnblockable()) + { + ItemArmor armor = (ItemArmor) stack.getItem(); + prop = new ArmorProperties(0, armor.damageReduceAmount / 25D, Integer.MAX_VALUE); + } + if (prop != null) + { + prop.Slot = x; + dmgVals.add(prop); + } + } + if (dmgVals.size() > 0) + { + ArmorProperties[] props = dmgVals.toArray(new ArmorProperties[dmgVals.size()]); + int level = props[0].Priority; + double ratio = 0; + for (ArmorProperties prop : props) + { + if (level != prop.Priority) + { + damage -= (damage * ratio); + ratio = 0; + level = prop.Priority; + } + ratio += prop.AbsorbRatio; + + } + damage -= (damage * ratio); + } + + return (float) (damage / 25.0F); + } + public static float applyPotionDamageCalculations(EntityLivingBase attackedEntity, DamageSource source, float damage) { if (source.isDamageAbsolute()) diff --git a/src/main/java/WayofTime/bloodmagic/util/handler/EventHandler.java b/src/main/java/WayofTime/bloodmagic/util/handler/EventHandler.java index fa33d84e..bef097d1 100644 --- a/src/main/java/WayofTime/bloodmagic/util/handler/EventHandler.java +++ b/src/main/java/WayofTime/bloodmagic/util/handler/EventHandler.java @@ -255,10 +255,9 @@ public class EventHandler } } - float amount = Math.min(Utils.getModifiedDamage(attackedPlayer, event.source, event.ammount), attackedPlayer.getHealth()); - if (hasFullSet) { + float amount = Math.min(Utils.getModifiedDamage(attackedPlayer, event.source, event.ammount), attackedPlayer.getHealth()); ItemStack chestStack = attackedPlayer.getCurrentArmor(2); LivingArmour armour = ItemLivingArmour.getLivingArmour(chestStack); if (armour != null) @@ -295,10 +294,9 @@ public class EventHandler } } - float amount = Math.min(Utils.getModifiedDamage(attackedEntity, event.source, event.ammount), attackedEntity.getHealth()); - if (hasFullSet) { + float amount = Math.min(Utils.getModifiedDamage(attackedEntity, event.source, event.ammount), attackedEntity.getHealth()); ItemStack chestStack = player.getCurrentArmor(2); LivingArmour armour = ItemLivingArmour.getLivingArmour(chestStack); if (armour != null)