package com.nisovin.magicspells.spelleffects;
import org.bukkit.Bukkit;
import org.bukkit.Effect;
import org.bukkit.Location;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.entity.Entity;
import com.nisovin.magicspells.MagicSpells;
class SmokeSwirlEffect extends SpellEffect {
int duration = 20;
@Override
public void loadFromString(String string) {
if (string != null && !string.isEmpty()) {
try {
duration = Integer.parseInt(string);
} catch (NumberFormatException e) {
}
}
}
@Override
public void loadFromConfig(ConfigurationSection config) {
}
private int[] x = {1,1,0,-1,-1,-1,0,1};
private int[] z = {0,1,1,1,0,-1,-1,-1};
private int[] v = {7,6,3,0,1,2,5,8};
@Override
public void playEffectLocation(Location location) {
new Animator(location, 1, duration);
}
@Override
public void playEffectEntity(Entity entity) {
new Animator(entity, 1, duration);
}
private class Animator implements Runnable {
private Entity entity;
private Location location;
private int interval;
private int duration;
private int iteration;
private int taskId;
public Animator(Location location, int interval, int duration) {
this(interval, duration);
this.location = location;
}
public Animator(Entity entity, int interval, int duration) {
this(interval, duration);
this.entity = entity;
}
public Animator(int interval, int duration) {
this.interval = interval;
this.duration = duration;
this.iteration = 0;
this.taskId = MagicSpells.scheduleRepeatingTask(this, 0, interval);
}
public void run() {
if (iteration * interval > duration) {
Bukkit.getScheduler().cancelTask(taskId);
} else {
int i = iteration % 8;
Location loc;
if (location != null) {
loc = location;
} else {
loc = entity.getLocation();
}
loc.getWorld().playEffect(loc.clone().add(x[i], 0, z[i]), Effect.SMOKE, v[i]);
iteration++;
}
}
}
}