package com.nisovin.magicspells.spells.buff; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Set; 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 EmpowerSpell extends BuffSpell { private float extraPower; private float maxPower; private Set<String> spells; private HashMap<String, Float> empowered; public EmpowerSpell(MagicConfig config, String spellName) { super(config, spellName); extraPower = getConfigFloat("power-multiplier", 1.5F); maxPower = getConfigFloat("max-power-multiplier", 1.5F); List<String> list = getConfigStringList("spells", null); if (list != null && list.size() > 0) { spells = new HashSet<String>(list); } empowered = new HashMap<String, Float>(); } @Override public boolean castBuff(Player player, float power, String[] args) { float p = power * extraPower; if (p > maxPower) p = maxPower; empowered.put(player.getName(), p); return true; } @Override public boolean recastBuff(Player player, float power, String[] args) { if (maxPower > extraPower) { float p = empowered.get(player.getName()); p += power * extraPower; if (p > maxPower) p = maxPower; empowered.put(player.getName(), p); } return true; } @EventHandler(priority=EventPriority.HIGHEST) public void onSpellCast(SpellCastEvent event) { Player player = event.getCaster(); if (player != null && empowered.containsKey(player.getName()) && (spells == null || spells.contains(event.getSpell().getInternalName()))) { event.increasePower(empowered.get(player.getName())); addUseAndChargeCost(player); } } @Override public void turnOffBuff(Player player) { empowered.remove(player.getName()); } @Override protected void turnOff() { empowered.clear(); } @Override public boolean isActive(Player player) { return empowered.containsKey(player.getName()); } }