package com.nisovin.magicspells.spells; import org.bukkit.Location; import org.bukkit.entity.Player; import com.nisovin.magicspells.MagicSpells; import com.nisovin.magicspells.Subspell; import com.nisovin.magicspells.util.MagicConfig; import com.nisovin.magicspells.util.MagicLocation; public class LocationSpell extends InstantSpell { MagicLocation location; Subspell spell; public LocationSpell(MagicConfig config, String spellName) { super(config, spellName); String s = getConfigString("location", "world,0,0,0"); try { String[] split = s.split(","); String world = split[0]; double x = Double.parseDouble(split[1]); double y = Double.parseDouble(split[2]); double z = Double.parseDouble(split[3]); float yaw = 0; float pitch = 0; if (split.length > 4) { yaw = Float.parseFloat(split[4]); } if (split.length > 5) { pitch = Float.parseFloat(split[5]); } location = new MagicLocation(world, x, y, z, yaw, pitch); } catch (Exception e) { MagicSpells.error("Invalid location on LocationSpell '" + spellName + "'"); } spell = new Subspell(getConfigString("spell", "")); if (spell == null) { MagicSpells.error("Invalid spell on LocationSpell '" + spellName + "'"); } } @Override public void initialize() { super.initialize(); if (spell != null) { boolean ok = spell.process(); if (!ok || !spell.isTargetedLocationSpell()) { MagicSpells.error("Invalid spell on LocationSpell '" + name + "'"); } } } @Override public PostCastAction castSpell(Player player, SpellCastState state, float power, String[] args) { if (state == SpellCastState.NORMAL) { Location loc = location.getLocation(); if (loc != null) { spell.castAtLocation(player, loc, power); playSpellEffects(player, loc); } else { return PostCastAction.ALREADY_HANDLED; } } return PostCastAction.HANDLE_NORMALLY; } }