Fix scrolls not triggering spell casting finish method and event

This commit is contained in:
Electroblob77
2020-05-17 00:35:56 +01:00
parent 4739d9f9fc
commit ebde514c98
@@ -203,25 +203,29 @@ public class ItemScroll extends Item implements ISpellCastingItem, IWorkbenchIte
@Override @Override
public void onPlayerStoppedUsing(ItemStack stack, World world, EntityLivingBase user, int timeLeft){ 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. // Casting has stopped before the full time has elapsed
finishCasting(stack, user); finishCasting(stack, user, timeLeft);
} }
@Override @Override
public ItemStack onItemUseFinish(ItemStack stack, World world, EntityLivingBase user){ 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. // Full casting time has elapsed
finishCasting(stack, user); finishCasting(stack, user, 0);
return stack; return stack;
} }
private void finishCasting(ItemStack stack, EntityLivingBase user){ private void finishCasting(ItemStack stack, EntityLivingBase user, int timeLeft){
if(Spell.byMetadata(stack.getItemDamage()).isContinuous if(Spell.byMetadata(stack.getItemDamage()).isContinuous){
&& (!(user instanceof EntityPlayer) || !((EntityPlayer)user).isCreative())){ // Consume scrolls in survival mode
if(!(user instanceof EntityPlayer) || !((EntityPlayer)user).isCreative()) stack.shrink(1);
stack.shrink(1);
Spell spell = Spell.byMetadata(stack.getItemDamage()); 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){ if(user instanceof EntityPlayer){
((EntityPlayer)user).getCooldownTracker().setCooldown(this, spell.getCooldown()); ((EntityPlayer)user).getCooldownTracker().setCooldown(this, spell.getCooldown());