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 name; private Expression time; private Expression data; private boolean eventCooldown = false; @SuppressWarnings("unchecked") @Override public boolean init(Expression[] expr, int matchedPattern, Kleenean paramKleenean, ParseResult paramParseResult) { name = (Expression) 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) expr[1]; time = (Expression) expr[2]; } else { time = (Expression) 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); } } }