From 4739d9f9fca181726587ef96cc607a811c10a1b4 Mon Sep 17 00:00:00 2001 From: Electroblob77 <35599699+Electroblob77@users.noreply.github.com> Date: Sun, 17 May 2020 00:32:02 +0100 Subject: [PATCH] Add cooldowns (using the vanilla mechanic) to various consumable items --- .../wizardry/item/ItemFirebomb.java | 2 ++ .../wizardry/item/ItemManaFlask.java | 1 + .../wizardry/item/ItemPoisonBomb.java | 2 ++ .../electroblob/wizardry/item/ItemScroll.java | 25 +++++++++++++------ .../wizardry/item/ItemSmokeBomb.java | 2 ++ .../wizardry/item/ItemSparkBomb.java | 2 ++ 6 files changed, 27 insertions(+), 7 deletions(-) diff --git a/src/main/java/electroblob/wizardry/item/ItemFirebomb.java b/src/main/java/electroblob/wizardry/item/ItemFirebomb.java index c3404136..d08ac5dc 100644 --- a/src/main/java/electroblob/wizardry/item/ItemFirebomb.java +++ b/src/main/java/electroblob/wizardry/item/ItemFirebomb.java @@ -29,6 +29,8 @@ public class ItemFirebomb extends Item { player.playSound(WizardrySounds.ENTITY_FIREBOMB_THROW, 0.5F, 0.4F / (itemRand.nextFloat() * 0.4F + 0.8F)); + player.getCooldownTracker().setCooldown(this, 20); + if(!world.isRemote){ EntityFirebomb firebomb = new EntityFirebomb(world); firebomb.aim(player, 1); diff --git a/src/main/java/electroblob/wizardry/item/ItemManaFlask.java b/src/main/java/electroblob/wizardry/item/ItemManaFlask.java index 4b8ee67a..8ecad4a1 100644 --- a/src/main/java/electroblob/wizardry/item/ItemManaFlask.java +++ b/src/main/java/electroblob/wizardry/item/ItemManaFlask.java @@ -77,6 +77,7 @@ public class ItemManaFlask extends Item { WizardryUtilities.playSoundAtPlayer(player, WizardrySounds.ITEM_MANA_FLASK_RECHARGE, 0.7f, 1.1f); if(!player.isCreative()) flask.shrink(1); + player.getCooldownTracker().setCooldown(this, 20); return new ActionResult<>(EnumActionResult.SUCCESS, flask); diff --git a/src/main/java/electroblob/wizardry/item/ItemPoisonBomb.java b/src/main/java/electroblob/wizardry/item/ItemPoisonBomb.java index a68c8aa4..742cdfb1 100644 --- a/src/main/java/electroblob/wizardry/item/ItemPoisonBomb.java +++ b/src/main/java/electroblob/wizardry/item/ItemPoisonBomb.java @@ -29,6 +29,8 @@ public class ItemPoisonBomb extends Item { player.playSound(WizardrySounds.ENTITY_POISON_BOMB_THROW, 0.5F, 0.4F / (itemRand.nextFloat() * 0.4F + 0.8F)); + player.getCooldownTracker().setCooldown(this, 20); + if(!world.isRemote){ EntityPoisonBomb poisonbomb = new EntityPoisonBomb(world); poisonbomb.aim(player, 1); diff --git a/src/main/java/electroblob/wizardry/item/ItemScroll.java b/src/main/java/electroblob/wizardry/item/ItemScroll.java index 6c061f5d..89d24c4d 100644 --- a/src/main/java/electroblob/wizardry/item/ItemScroll.java +++ b/src/main/java/electroblob/wizardry/item/ItemScroll.java @@ -190,6 +190,9 @@ public class ItemScroll extends Item implements ISpellCastingItem, IWorkbenchIte // Scrolls are consumed upon successful use in survival mode if(!spell.isContinuous && !caster.isCreative()) stack.shrink(1); + + // Now uses the vanilla cooldown mechanic to prevent spamming of spells + if(!spell.isContinuous) caster.getCooldownTracker().setCooldown(this, spell.getCooldown()); } return true; @@ -201,21 +204,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. - if(Spell.byMetadata(stack.getItemDamage()).isContinuous - && (!(user instanceof EntityPlayer) || !((EntityPlayer)user).isCreative())){ - stack.shrink(1); - } + finishCasting(stack, user); } - + @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); + return stack; + } + + private void finishCasting(ItemStack stack, EntityLivingBase user){ + if(Spell.byMetadata(stack.getItemDamage()).isContinuous && (!(user instanceof EntityPlayer) || !((EntityPlayer)user).isCreative())){ + stack.shrink(1); + + Spell spell = Spell.byMetadata(stack.getItemDamage()); + + if(user instanceof EntityPlayer){ + ((EntityPlayer)user).getCooldownTracker().setCooldown(this, spell.getCooldown()); + } } - - return stack; } @Override diff --git a/src/main/java/electroblob/wizardry/item/ItemSmokeBomb.java b/src/main/java/electroblob/wizardry/item/ItemSmokeBomb.java index a62a1179..22a47cf2 100644 --- a/src/main/java/electroblob/wizardry/item/ItemSmokeBomb.java +++ b/src/main/java/electroblob/wizardry/item/ItemSmokeBomb.java @@ -29,6 +29,8 @@ public class ItemSmokeBomb extends Item { player.playSound(WizardrySounds.ENTITY_SMOKE_BOMB_THROW, 0.5F, 0.4F / (itemRand.nextFloat() * 0.4F + 0.8F)); + player.getCooldownTracker().setCooldown(this, 20); + if(!world.isRemote){ EntitySmokeBomb smokebomb = new EntitySmokeBomb(world); smokebomb.aim(player, 1); diff --git a/src/main/java/electroblob/wizardry/item/ItemSparkBomb.java b/src/main/java/electroblob/wizardry/item/ItemSparkBomb.java index 319b3dae..4378f417 100644 --- a/src/main/java/electroblob/wizardry/item/ItemSparkBomb.java +++ b/src/main/java/electroblob/wizardry/item/ItemSparkBomb.java @@ -29,6 +29,8 @@ public class ItemSparkBomb extends Item { player.playSound(WizardrySounds.ENTITY_SPARK_BOMB_THROW, 0.5F, 0.4F / (itemRand.nextFloat() * 0.4F + 0.8F)); + player.getCooldownTracker().setCooldown(this, 20); + if(!world.isRemote){ EntitySparkBomb sparkBomb = new EntitySparkBomb(world); sparkBomb.aim(player, 1);