Move the teleport timer to an async task.

This commit is contained in:
@ArkhamNetwork 2014-05-17 01:12:13 +01:00 committed by KHobbits
parent 18811122b3
commit 4672e51806
3 changed files with 67 additions and 44 deletions

View file

@ -803,6 +803,12 @@ public class Essentials extends JavaPlugin implements net.ess3.api.IEssentials
{
return this.getScheduler().runTaskLaterAsynchronously(this, run, delay);
}
@Override
public BukkitTask runTaskTimerAsynchronously(final Runnable run, final long delay, final long period)
{
return this.getScheduler().runTaskTimerAsynchronously(this, run, delay, period);
}
@Override
public int scheduleSyncDelayedTask(final Runnable run)

View file

@ -63,12 +63,14 @@ public interface IEssentials extends Plugin
BukkitTask runTaskAsynchronously(Runnable run);
BukkitTask runTaskLaterAsynchronously(Runnable run, long delay);
BukkitTask runTaskTimerAsynchronously(Runnable run, long delay, long period);
int scheduleSyncDelayedTask(Runnable run);
int scheduleSyncDelayedTask(Runnable run, long delay);
int scheduleSyncRepeatingTask(final Runnable run, long delay, long period);
int scheduleSyncRepeatingTask(Runnable run, long delay, long period);
TNTExplodeListener getTNTListener();
@ -76,7 +78,7 @@ public interface IEssentials extends Plugin
AlternativeCommandsHandler getAlternativeCommandsHandler();
void showError(final CommandSource sender, final Throwable exception, final String commandLabel);
void showError(CommandSource sender, Throwable exception, String commandLabel);
IItemDb getItemDb();

View file

@ -50,7 +50,7 @@ public class TimedTeleport implements Runnable
this.timer_respawn = respawn;
this.timer_canMove = user.isAuthorized("essentials.teleport.timer.move");
timer_task = ess.scheduleSyncRepeatingTask(this, 20, 20);
timer_task = ess.runTaskTimerAsynchronously(this, 20, 20).getTaskId();
}
@Override
@ -63,7 +63,7 @@ public class TimedTeleport implements Runnable
return;
}
IUser teleportUser = ess.getUser(this.timer_teleportee);
final IUser teleportUser = ess.getUser(this.timer_teleportee);
if (teleportUser == null || !teleportUser.getBase().isOnline())
{
@ -89,49 +89,64 @@ public class TimedTeleport implements Runnable
return;
}
timer_health = teleportUser.getBase().getHealth(); // in case user healed, then later gets injured
final long now = System.currentTimeMillis();
if (now > timer_started + timer_delay)
ess.scheduleSyncDelayedTask(new Runnable()
{
try
@Override
public void run()
{
teleport.cooldown(false);
}
catch (Exception ex)
{
teleportOwner.sendMessage(tl("cooldownWithMessage", ex.getMessage()));
if (teleportOwner != teleportUser)
{
teleportUser.sendMessage(tl("cooldownWithMessage", ex.getMessage()));
}
}
try
{
cancelTimer(false);
teleportUser.sendMessage(tl("teleportationCommencing"));
if (timer_chargeFor != null)
{
timer_chargeFor.isAffordableFor(teleportOwner);
}
if (timer_respawn)
{
teleport.respawnNow(teleportUser, timer_cause);
}
else
{
teleport.now(teleportUser, timer_teleportTarget, timer_cause);
}
if (timer_chargeFor != null)
{
timer_chargeFor.charge(teleportOwner);
}
}
catch (Exception ex)
{
ess.showError(teleportOwner.getSource(), ex, "\\ teleport");
}
}
timer_health = teleportUser.getBase().getHealth(); // in case user healed, then later gets injured
final long now = System.currentTimeMillis();
if (now > timer_started + timer_delay)
{
try
{
teleport.cooldown(false);
}
catch (Exception ex)
{
teleportOwner.sendMessage(tl("cooldownWithMessage", ex.getMessage()));
if (teleportOwner != teleportUser)
{
teleportUser.sendMessage(tl("cooldownWithMessage", ex.getMessage()));
}
}
try
{
cancelTimer(false);
teleportUser.sendMessage(tl("teleportationCommencing"));
try
{
if (timer_chargeFor != null)
{
timer_chargeFor.isAffordableFor(teleportOwner);
}
if (timer_respawn)
{
teleport.respawnNow(teleportUser, timer_cause);
}
else
{
teleport.now(teleportUser, timer_teleportTarget, timer_cause);
}
if (timer_chargeFor != null)
{
timer_chargeFor.charge(teleportOwner);
}
}
catch (Exception ex)
{
}
}
catch (Exception ex)
{
ess.showError(teleportOwner.getSource(), ex, "\\ teleport");
}
}
}
});
}
//If we need to cancelTimer a pending teleportPlayer call this method