From 9ea73846e48c83e1d763f312cbbe6590179ccfc7 Mon Sep 17 00:00:00 2001 From: Olof Larsson Date: Thu, 20 Feb 2014 12:05:25 +0100 Subject: [PATCH] Support async engine tasks and optimize MUtil.random a bit --- src/com/massivecraft/mcore/Engine.java | 6 ++++ .../massivecraft/mcore/EngineAbstract.java | 32 +++++++++++++++---- src/com/massivecraft/mcore/util/MUtil.java | 11 ++++++- 3 files changed, 42 insertions(+), 7 deletions(-) diff --git a/src/com/massivecraft/mcore/Engine.java b/src/com/massivecraft/mcore/Engine.java index 02b7a6e6..c5745881 100644 --- a/src/com/massivecraft/mcore/Engine.java +++ b/src/com/massivecraft/mcore/Engine.java @@ -2,6 +2,7 @@ package com.massivecraft.mcore; import org.bukkit.event.Listener; import org.bukkit.plugin.Plugin; +import org.bukkit.scheduler.BukkitTask; public interface Engine extends Listener, Runnable { @@ -12,5 +13,10 @@ public interface Engine extends Listener, Runnable public Long getDelay(); public Long getPeriod(); + public Integer getTaskId(); + + public BukkitTask getBukkitTask(); + public boolean isSync(); + } diff --git a/src/com/massivecraft/mcore/EngineAbstract.java b/src/com/massivecraft/mcore/EngineAbstract.java index d9a1c87a..7c34e3c8 100644 --- a/src/com/massivecraft/mcore/EngineAbstract.java +++ b/src/com/massivecraft/mcore/EngineAbstract.java @@ -2,6 +2,7 @@ package com.massivecraft.mcore; import org.bukkit.Bukkit; import org.bukkit.event.HandlerList; +import org.bukkit.scheduler.BukkitTask; public abstract class EngineAbstract implements Engine { @@ -9,8 +10,8 @@ public abstract class EngineAbstract implements Engine // FIELDS // -------------------------------------------- // - private Integer taskId; - @Override public Integer getTaskId() { return this.taskId; } + private BukkitTask task; + @Override public Integer getTaskId() { return this.task.getTaskId(); } // -------------------------------------------- // // OVERRIDE @@ -22,7 +23,14 @@ public abstract class EngineAbstract implements Engine Bukkit.getPluginManager().registerEvents(this, this.getPlugin()); if (this.getPeriod() != null) { - this.taskId = Bukkit.getScheduler().scheduleSyncRepeatingTask(this.getPlugin(), this, this.getDelay(), this.getPeriod()); + if (this.isSync()) + { + Bukkit.getScheduler().runTaskTimer(this.getPlugin(), this, this.getDelay(), this.getPeriod()); + } + else + { + Bukkit.getScheduler().runTaskTimerAsynchronously(this.getPlugin(), this, this.getDelay(), this.getPeriod()); + } } } @@ -30,10 +38,10 @@ public abstract class EngineAbstract implements Engine public void deactivate() { HandlerList.unregisterAll(this); - if (this.getTaskId() != null) + if (this.task != null) { - Bukkit.getScheduler().cancelTask(this.getTaskId()); - this.taskId = null; + this.task.cancel(); + this.task = null; } } @@ -55,4 +63,16 @@ public abstract class EngineAbstract implements Engine } + @Override + public BukkitTask getBukkitTask() + { + return this.task; + } + + @Override + public boolean isSync() + { + return true; + } + } diff --git a/src/com/massivecraft/mcore/util/MUtil.java b/src/com/massivecraft/mcore/util/MUtil.java index 67e77761..7cedc6fb 100644 --- a/src/com/massivecraft/mcore/util/MUtil.java +++ b/src/com/massivecraft/mcore/util/MUtil.java @@ -487,7 +487,16 @@ public class MUtil if (coll.size() == 0) return null; if (coll.size() == 1) return coll.iterator().next(); int index = MCore.random.nextInt(coll.size()); - return new ArrayList(coll).get(index); + List list = null; + if (coll instanceof List) + { + list = (List)coll; + } + else + { + list = new ArrayList(coll); + } + return list.get(index); } public static List random(Collection coll, int count)