package org.bukkit.craftbukkit.scheduler;
import org.bukkit.Bukkit;
import org.bukkit.plugin.Plugin;
import org.bukkit.scheduler.BukkitTask;
public class CraftTask implements BukkitTask, Runnable
{ // Spigot
private volatile CraftTask next = null;
/**
* -1 means no repeating <br>
* -2 means cancel <br>
* -3 means processing for Future <br>
* -4 means done for Future <br>
* Never 0 <br>
* >0 means number of ticks to wait between each execution
*/
private volatile long period;
private long nextRun;
private final Runnable task;
private final Plugin plugin;
private final int id;
CraftTask()
{
this(null, null, -1, -1);
}
CraftTask(final Runnable task)
{
this(null, task, -1, -1);
}
// Spigot start
public String timingName = null;
CraftTask(String timingName)
{
this(timingName, null, null, -1, -1);
}
CraftTask(String timingName, final Runnable task)
{
this(timingName, null, task, -1, -1);
}
CraftTask(String timingName, final Plugin plugin, final Runnable task, final int id, final long period)
{
this.plugin = plugin;
this.task = task;
this.id = id;
this.period = period;
this.timingName = timingName == null && task == null ? "Unknown" : timingName;
}
CraftTask(final Plugin plugin, final Runnable task, final int id, final long period)
{
this(null, plugin, task, id, period);
// Spigot end
}
public final int getTaskId()
{
return id;
}
public final Plugin getOwner()
{
return plugin;
}
public boolean isSync()
{
return true;
}
public void run()
{
task.run();
}
long getPeriod()
{
return period;
}
void setPeriod(long period)
{
this.period = period;
}
long getNextRun()
{
return nextRun;
}
void setNextRun(long nextRun)
{
this.nextRun = nextRun;
}
CraftTask getNext()
{
return next;
}
void setNext(CraftTask next)
{
this.next = next;
}
Class<? extends Runnable> getTaskClass()
{
return task.getClass();
}
public void cancel()
{
Bukkit.getScheduler().cancelTask(id);
}
/**
* This method properly sets the status to cancelled, synchronizing when required.
*
* @return false if it is a craft future task that has already begun execution, true otherwise
*/
boolean cancel0()
{
setPeriod(-2l);
return true;
}
// Spigot start
public String getTaskName()
{
if(timingName != null)
{
return timingName;
}
return task.getClass().getName();
}
// Spigot end
}