package com.nisovin.magicspells.spelleffects; import java.util.Random; import org.bukkit.Location; import org.bukkit.configuration.ConfigurationSection; import org.bukkit.entity.Item; import org.bukkit.util.Vector; import com.nisovin.magicspells.MagicSpells; import com.nisovin.magicspells.materials.MagicMaterial; import com.nisovin.magicspells.materials.MagicUnknownMaterial; class ItemSprayEffect extends SpellEffect { MagicMaterial mat; int num = 15; int duration = 10; float force = 1.0F; @Override public void loadFromString(String string) { if (string != null) { String[] data = string.split(" "); int type = 331; short dura = 0; if (data.length >= 1) { if (data[0].contains(":")) { try { String[] typeData = data[0].split(":"); type = Integer.parseInt(typeData[0]); dura = Short.parseShort(typeData[1]); } catch (NumberFormatException e) { } } else { try { type = Integer.parseInt(data[0]); } catch (NumberFormatException e) { } } } mat = new MagicUnknownMaterial(type, dura); if (data.length >= 2) { try { num = Integer.parseInt(data[1]); } catch (NumberFormatException e) { } } if (data.length >= 3) { try { duration = Integer.parseInt(data[2]); } catch (NumberFormatException e) { } } if (data.length >= 4) { try { force = Float.parseFloat(data[3]); } catch (NumberFormatException e) { } } } } @Override public void loadFromConfig(ConfigurationSection config) { mat = MagicSpells.getItemNameResolver().resolveItem(config.getString("type", "redstone")); num = config.getInt("quantity", num); duration = config.getInt("duration", duration); force = (float)config.getDouble("force", force); } @Override public void playEffectLocation(Location location) { if (mat == null) return; // spawn items Random rand = new Random(); Location loc = location.clone().add(0, 1, 0); final Item[] items = new Item[num]; for (int i = 0; i < num; i++) { items[i] = loc.getWorld().dropItem(loc, mat.toItemStack(0)); items[i].setVelocity(new Vector((rand.nextDouble()-.5) * force, (rand.nextDouble()-.5) * force, (rand.nextDouble()-.5) * force)); items[i].setPickupDelay(duration * 2); } // schedule item deletion MagicSpells.scheduleDelayedTask(new Runnable() { public void run() { for (int i = 0; i < items.length; i++) { items[i].remove(); } } }, duration); } }