package com.nisovin.magicspells.spells; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import com.nisovin.magicspells.MagicSpells; import com.nisovin.magicspells.Spell; import com.nisovin.magicspells.util.MagicConfig; import com.nisovin.magicspells.util.Util; public class OffhandCooldownSpell extends InstantSpell { String spellToCheck; Spell spell; ItemStack item; List<Player> players = new ArrayList<Player>(); public OffhandCooldownSpell(MagicConfig config, String spellName) { super(config, spellName); spellToCheck = getConfigString("spell", ""); if (isConfigString("item")) { item = Util.getItemStackFromString(getConfigString("item", "stone")); } else if (isConfigSection("item")) { item = Util.getItemStackFromConfig(getConfigSection("item")); } } @Override public void initialize() { super.initialize(); spell = MagicSpells.getSpellByInternalName(spellToCheck); if (spell != null && item != null) { MagicSpells.scheduleRepeatingTask(new Runnable() { public void run() { Iterator<Player> iter = players.iterator(); while (iter.hasNext()) { Player p = iter.next(); if (!p.isValid()) { iter.remove(); } else { float cd = spell.getCooldown(p); int amt = 1; if (cd > 0) { amt = -(int)Math.ceil(cd); } ItemStack off = p.getInventory().getItemInOffHand(); if (off == null || !off.isSimilar(item)) { p.getInventory().setItemInOffHand(item.clone()); } p.getInventory().getItemInOffHand().setAmount(amt); } } } }, 20, 20); } } @Override public PostCastAction castSpell(Player player, SpellCastState state, float power, String[] args) { if (state == SpellCastState.NORMAL) { players.add(player); } return PostCastAction.HANDLE_NORMALLY; } }