Newer
Older
ultramine_bukkit / src / main / java / org / bukkit / craftbukkit / scheduler / CraftTask.java
@vlad20012 vlad20012 on 24 Feb 2017 2 KB initial
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
}