diff --git a/src/main/java/WayofTime/bloodmagic/api/soul/IDemonWillGem.java b/src/main/java/WayofTime/bloodmagic/api/soul/IDemonWillGem.java index 206a8847..d88258f6 100644 --- a/src/main/java/WayofTime/bloodmagic/api/soul/IDemonWillGem.java +++ b/src/main/java/WayofTime/bloodmagic/api/soul/IDemonWillGem.java @@ -27,4 +27,6 @@ public interface IDemonWillGem public int getMaxWill(EnumDemonWillType type, ItemStack willGemStack); public double drainWill(EnumDemonWillType type, ItemStack stack, double drainAmount); + + public double fillWill(EnumDemonWillType type, ItemStack stack, double fillAmount); } diff --git a/src/main/java/WayofTime/bloodmagic/api/soul/PlayerDemonWillHandler.java b/src/main/java/WayofTime/bloodmagic/api/soul/PlayerDemonWillHandler.java index c30b9ed2..29492ec5 100644 --- a/src/main/java/WayofTime/bloodmagic/api/soul/PlayerDemonWillHandler.java +++ b/src/main/java/WayofTime/bloodmagic/api/soul/PlayerDemonWillHandler.java @@ -154,10 +154,7 @@ public class PlayerDemonWillHandler { if (stack.getItem() instanceof IDemonWillGem) { - double souls = ((IDemonWillGem) stack.getItem()).getWill(type, stack); - double fill = Math.min(((IDemonWillGem) stack.getItem()).getMaxWill(type, stack) - souls, remaining); - ((IDemonWillGem) stack.getItem()).setWill(type, stack, fill + souls); - remaining -= fill; + remaining -= ((IDemonWillGem) stack.getItem()).fillWill(type, stack, remaining); if (remaining <= 0) { @@ -182,10 +179,7 @@ public class PlayerDemonWillHandler { if (stack.getItem() instanceof IDemonWillGem) { - double souls = ((IDemonWillGem) stack.getItem()).getWill(type, stack); - double fill = Math.min(((IDemonWillGem) stack.getItem()).getMaxWill(type, stack) - souls, remaining); - ((IDemonWillGem) stack.getItem()).setWill(type, stack, fill + souls); - remaining -= fill; + remaining -= ((IDemonWillGem) stack.getItem()).fillWill(type, stack, remaining); if (remaining <= 0) { diff --git a/src/main/java/WayofTime/bloodmagic/item/soul/ItemSoulGem.java b/src/main/java/WayofTime/bloodmagic/item/soul/ItemSoulGem.java index 211a3545..114d1ed5 100644 --- a/src/main/java/WayofTime/bloodmagic/item/soul/ItemSoulGem.java +++ b/src/main/java/WayofTime/bloodmagic/item/soul/ItemSoulGem.java @@ -200,4 +200,26 @@ public class ItemSoulGem extends Item implements IDemonWillGem tag.setString(Constants.NBT.WILL_TYPE, type.toString()); } + + @Override + public double fillWill(EnumDemonWillType type, ItemStack stack, double fillAmount) + { + if (!type.equals(getCurrentType(stack))) + { + return 0; + } + + double current = this.getWill(type, stack); + double maxWill = this.getMaxWill(type, stack); + + double filled = Math.min(fillAmount, maxWill - current); + + if (filled > 0) + { + this.setWill(type, stack, filled + current); + return filled; + } + + return 0; + } } diff --git a/src/main/java/WayofTime/bloodmagic/tile/TileDemonCrucible.java b/src/main/java/WayofTime/bloodmagic/tile/TileDemonCrucible.java index 37b5fb4e..75ab5368 100644 --- a/src/main/java/WayofTime/bloodmagic/tile/TileDemonCrucible.java +++ b/src/main/java/WayofTime/bloodmagic/tile/TileDemonCrucible.java @@ -81,10 +81,10 @@ public class TileDemonCrucible extends TileInventory implements ITickable, IDemo if (willMap.containsKey(type)) { double current = willMap.get(type); - double fillAmount = Math.min(gemDrainRate, Math.min(current, gemItem.getMaxWill(type, stack) - gemItem.getWill(type, stack))); + double fillAmount = Math.min(gemDrainRate, current); if (fillAmount > 0) { - gemItem.setWill(type, stack, fillAmount + gemItem.getWill(type, stack)); + fillAmount = gemItem.fillWill(type, stack, fillAmount); if (willMap.get(type) - fillAmount <= 0) { willMap.remove(type); diff --git a/src/main/java/WayofTime/bloodmagic/tile/TileSoulForge.java b/src/main/java/WayofTime/bloodmagic/tile/TileSoulForge.java index 44cacf7e..e2896d88 100644 --- a/src/main/java/WayofTime/bloodmagic/tile/TileSoulForge.java +++ b/src/main/java/WayofTime/bloodmagic/tile/TileSoulForge.java @@ -266,16 +266,7 @@ public class TileSoulForge extends TileInventory implements ITickable, IDemonWil return Math.min(maxWill - current, amount); } - double filled = maxWill - current; - - if (amount < filled) - { - willGem.setWill(type, stack, current + amount); - filled = amount; - } else - { - willGem.setWill(type, stack, maxWill); - } + double filled = willGem.fillWill(type, stack, amount); return filled; }