package com.nisovin.magicspells.spells.buff;
import java.util.HashMap;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import com.nisovin.magicspells.events.SpellCastEvent;
import com.nisovin.magicspells.spells.BuffSpell;
import com.nisovin.magicspells.util.MagicConfig;
public class SpellHasteSpell extends BuffSpell {
private float castTimeModAmt;
private float cooldownModAmt;
private HashMap<String, Float> spellTimersModified;
public SpellHasteSpell(MagicConfig config, String spellname) {
super(config, spellname);
castTimeModAmt = getConfigInt("cast-time-mod-amt", -25) / 100F;
cooldownModAmt = getConfigInt("cooldown-mod-amt", -25) / 100F;
spellTimersModified = new HashMap<String, Float>();
}
@Override
public boolean castBuff(Player player, float power, String[] args) {
spellTimersModified.put(player.getName(), power);
return true;
}
@EventHandler (priority=EventPriority.MONITOR)
public void onSpellSpeedCast(SpellCastEvent event) {
Float power = spellTimersModified.get(event.getCaster().getName());
if (power != null) {
// modify cast time
if (castTimeModAmt != 0) {
int ct = event.getCastTime();
float newCT = ct + (castTimeModAmt * power * ct);
if (newCT < 0) newCT = 0;
event.setCastTime(Math.round(newCT));
}
// modify cooldown
if (cooldownModAmt != 0) {
float cd = event.getCooldown();
float newCD = cd + (cooldownModAmt * power * cd);
if (newCD < 0) newCD = 0;
event.setCooldown(newCD);
}
}
}
@Override
public boolean isActive(Player player) {
return spellTimersModified.containsKey(player.getName());
}
@Override
public void turnOffBuff(Player player) {
spellTimersModified.remove(player.getName());
}
@Override
protected void turnOff() {
spellTimersModified.clear();
}
}