From ebde514c9861d5d86b4570e9f9df6ac2b8b85fe5 Mon Sep 17 00:00:00 2001 From: Electroblob77 <35599699+Electroblob77@users.noreply.github.com> Date: Sun, 17 May 2020 00:35:56 +0100 Subject: [PATCH] Fix scrolls not triggering spell casting finish method and event --- .../electroblob/wizardry/item/ItemScroll.java | 22 +++++++++++-------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/src/main/java/electroblob/wizardry/item/ItemScroll.java b/src/main/java/electroblob/wizardry/item/ItemScroll.java index 89d24c4d..f1426bd2 100644 --- a/src/main/java/electroblob/wizardry/item/ItemScroll.java +++ b/src/main/java/electroblob/wizardry/item/ItemScroll.java @@ -203,25 +203,29 @@ public class ItemScroll extends Item implements ISpellCastingItem, IWorkbenchIte @Override public void onPlayerStoppedUsing(ItemStack stack, World world, EntityLivingBase user, int timeLeft){ - // Consumes a continuous spell scroll when a player in survival mode stops using it. - finishCasting(stack, user); + // Casting has stopped before the full time has elapsed + finishCasting(stack, user, timeLeft); } @Override public ItemStack onItemUseFinish(ItemStack stack, World world, EntityLivingBase user){ - // Consumes a continuous spell scroll when the casting elapses whilst in use by a player in survival mode. - finishCasting(stack, user); + // Full casting time has elapsed + finishCasting(stack, user, 0); return stack; } - private void finishCasting(ItemStack stack, EntityLivingBase user){ + private void finishCasting(ItemStack stack, EntityLivingBase user, int timeLeft){ - if(Spell.byMetadata(stack.getItemDamage()).isContinuous - && (!(user instanceof EntityPlayer) || !((EntityPlayer)user).isCreative())){ - - stack.shrink(1); + if(Spell.byMetadata(stack.getItemDamage()).isContinuous){ + // Consume scrolls in survival mode + if(!(user instanceof EntityPlayer) || !((EntityPlayer)user).isCreative()) stack.shrink(1); Spell spell = Spell.byMetadata(stack.getItemDamage()); + SpellModifiers modifiers = new SpellModifiers(); + int castingTick = stack.getMaxItemUseDuration() - timeLeft; + + MinecraftForge.EVENT_BUS.post(new SpellCastEvent.Finish(Source.SCROLL, spell, user, modifiers, castingTick)); + spell.finishCasting(user.world, user, Double.NaN, Double.NaN, Double.NaN, null, castingTick, modifiers); if(user instanceof EntityPlayer){ ((EntityPlayer)user).getCooldownTracker().setCooldown(this, spell.getCooldown());