Skooldown/src/lt/govindas/skooldown/effects/EffStartCooldown.java

73 lines
2.4 KiB
Java

package lt.govindas.skooldown.effects;
import ch.njol.skript.lang.Effect;
import ch.njol.skript.lang.Expression;
import ch.njol.skript.lang.SkriptParser.ParseResult;
import ch.njol.skript.util.Timespan;
import ch.njol.util.Kleenean;
import lt.govindas.skooldown.Skooldown;
import lt.govindas.skooldown.events.CooldownEndEvent;
import org.bukkit.Bukkit;
import org.bukkit.event.Event;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class EffStartCooldown extends Effect {
private Expression<String> name;
private Expression<Timespan> time;
private Expression<String> data;
private boolean eventCooldown = false;
@SuppressWarnings("unchecked")
@Override
public boolean init(Expression<?>[] expr, int matchedPattern, Kleenean paramKleenean, ParseResult paramParseResult) {
name = (Expression<String>) expr[0];
int mark = paramParseResult.mark;
if (mark == 1) {
eventCooldown = true;
}
//TODO test if this is right, maybe expression IDs are solid
if (expr.length > 2) {
data = (Expression<String>) expr[1];
time = (Expression<Timespan>) expr[2];
} else {
time = (Expression<Timespan>) expr[1];
}
return true;
}
@Override
public String toString(@Nullable Event e, boolean debug) {
return "start cooldown " + name.getSingle(e);
}
@Override
protected void execute(Event e) {
String dataInput;
if (data == null) dataInput = "";
else dataInput = data.getSingle(e);
if (!eventCooldown) {
Skooldown.cooldowns.put(name.getSingle(e), System.currentTimeMillis() + time.getSingle(e).getMilliSeconds());
} else {
Timer timer = new Timer((int) time.getSingle(e).getMilliSeconds(), new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
Skooldown.eventCooldowns.remove(name.getSingle(e) + dataInput);
Bukkit.getServer().getPluginManager().callEvent(new CooldownEndEvent(name.getSingle(e), dataInput, time.getSingle(e).getMilliSeconds()));
}
});
timer.setRepeats(false);
timer.start();
Skooldown.eventCooldowns.put(name.getSingle(e) + dataInput, timer);
}
}
}