From eb5becbbd4471a76d647821c91441bce77cdc25e Mon Sep 17 00:00:00 2001 From: WinDanesz <31292708+WinDanesz@users.noreply.github.com> Date: Fri, 8 Jul 2022 19:41:25 +0200 Subject: [PATCH] fix: Fixed some addon crystals restoring more mana than they should Fixes #816 --- src/main/java/electroblob/wizardry/item/ItemWand.java | 7 ++++++- .../java/electroblob/wizardry/item/ItemWizardArmour.java | 7 ++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/main/java/electroblob/wizardry/item/ItemWand.java b/src/main/java/electroblob/wizardry/item/ItemWand.java index 234ed0a4..343be7eb 100644 --- a/src/main/java/electroblob/wizardry/item/ItemWand.java +++ b/src/main/java/electroblob/wizardry/item/ItemWand.java @@ -849,7 +849,12 @@ public class ItemWand extends Item implements IWorkbenchItem, ISpellCastingItem, int chargeDepleted = this.getManaCapacity(centre.getStack()) - this.getMana(centre.getStack()); - int manaPerItem = Constants.MANA_PER_CRYSTAL; + // Not too pretty but allows addons implementing the IManaStoringItem interface to provide their mana amount for custom crystals, + // previously this was defaulted to the regular crystal's amount, allowing players to exploit it if a crystal was worth less mana than that. + int manaPerItem = crystals.getStack().getItem() instanceof IManaStoringItem ? + ((IManaStoringItem) crystals.getStack().getItem()).getMana(crystals.getStack()) : + crystals.getStack().getItem() instanceof ItemCrystal ? Constants.MANA_PER_CRYSTAL : Constants.MANA_PER_SHARD; + if(crystals.getStack().getItem() == WizardryItems.crystal_shard) manaPerItem = Constants.MANA_PER_SHARD; if(crystals.getStack().getItem() == WizardryItems.grand_crystal) manaPerItem = Constants.GRAND_CRYSTAL_MANA; diff --git a/src/main/java/electroblob/wizardry/item/ItemWizardArmour.java b/src/main/java/electroblob/wizardry/item/ItemWizardArmour.java index 9296482c..4e621920 100644 --- a/src/main/java/electroblob/wizardry/item/ItemWizardArmour.java +++ b/src/main/java/electroblob/wizardry/item/ItemWizardArmour.java @@ -334,7 +334,12 @@ public class ItemWizardArmour extends ItemArmor implements IWorkbenchItem, IMana int chargeDepleted = this.getManaCapacity(centre.getStack()) - this.getMana(centre.getStack()); - int manaPerItem = Constants.MANA_PER_CRYSTAL; + // Not too pretty but allows addons implementing the IManaStoringItem interface to provide their mana amount for custom crystals, + // previously this was defaulted to the regular crystal's amount, allowing players to exploit it if a crystal was worth less mana than that. + int manaPerItem = crystals.getStack().getItem() instanceof IManaStoringItem ? + ((IManaStoringItem) crystals.getStack().getItem()).getMana(crystals.getStack()) : + crystals.getStack().getItem() instanceof ItemCrystal ? Constants.MANA_PER_CRYSTAL : Constants.MANA_PER_SHARD; + if(crystals.getStack().getItem() == WizardryItems.crystal_shard) manaPerItem = Constants.MANA_PER_SHARD; if(crystals.getStack().getItem() == WizardryItems.grand_crystal) manaPerItem = Constants.GRAND_CRYSTAL_MANA;