Make the recurring tasks non-tps-dependent.
This commit is contained in:
parent
1c5c5557b0
commit
af094b6647
@ -122,22 +122,26 @@ public class FPlayerColl extends SenderColl<FPlayer>
|
|||||||
Long lastPlayed = Mixin.getLastPlayed(fplayer.getId());
|
Long lastPlayed = Mixin.getLastPlayed(fplayer.getId());
|
||||||
if (lastPlayed == null) continue;
|
if (lastPlayed == null) continue;
|
||||||
|
|
||||||
if (fplayer.isOffline() && now - lastPlayed > toleranceMillis)
|
if (fplayer.isOnline()) continue;
|
||||||
|
if (now - lastPlayed <= toleranceMillis) continue;
|
||||||
|
|
||||||
|
if (ConfServer.logFactionLeave || ConfServer.logFactionKick)
|
||||||
{
|
{
|
||||||
if (ConfServer.logFactionLeave || ConfServer.logFactionKick)
|
Factions.get().log("Player "+fplayer.getName()+" was auto-removed due to inactivity.");
|
||||||
Factions.get().log("Player "+fplayer.getName()+" was auto-removed due to inactivity.");
|
|
||||||
|
|
||||||
// if player is faction leader, sort out the faction since he's going away
|
|
||||||
if (fplayer.getRole() == Rel.LEADER)
|
|
||||||
{
|
|
||||||
Faction faction = fplayer.getFaction();
|
|
||||||
if (faction != null)
|
|
||||||
fplayer.getFaction().promoteNewLeader();
|
|
||||||
}
|
|
||||||
|
|
||||||
fplayer.leave(false);
|
|
||||||
fplayer.detach();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// if player is faction leader, sort out the faction since he's going away
|
||||||
|
if (fplayer.getRole() == Rel.LEADER)
|
||||||
|
{
|
||||||
|
Faction faction = fplayer.getFaction();
|
||||||
|
if (faction != null)
|
||||||
|
{
|
||||||
|
fplayer.getFaction().promoteNewLeader();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fplayer.leave(false);
|
||||||
|
fplayer.detach();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -189,7 +189,8 @@ public class FactionColl extends Coll<Faction>
|
|||||||
|
|
||||||
public void econLandRewardRoutine()
|
public void econLandRewardRoutine()
|
||||||
{
|
{
|
||||||
if ( ! Econ.shouldBeUsed()) return;
|
if (!Econ.shouldBeUsed()) return;
|
||||||
|
if (ConfServer.econLandReward == 0.0) return;
|
||||||
|
|
||||||
Factions.get().log("Running econLandRewardRoutine...");
|
Factions.get().log("Running econLandRewardRoutine...");
|
||||||
for (Faction faction : this.getAll())
|
for (Faction faction : this.getAll())
|
||||||
|
@ -47,10 +47,6 @@ public class Factions extends MPlugin
|
|||||||
public FactionsEntityListener entityListener;
|
public FactionsEntityListener entityListener;
|
||||||
public FactionsExploitListener exploitListener;
|
public FactionsExploitListener exploitListener;
|
||||||
|
|
||||||
// Task Ids
|
|
||||||
private Integer AutoLeaveTask = null;
|
|
||||||
private Integer econLandRewardTaskID = null;
|
|
||||||
|
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
// OVERRIDE
|
// OVERRIDE
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
@ -82,11 +78,9 @@ public class Factions extends MPlugin
|
|||||||
Worldguard.init(this);
|
Worldguard.init(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
// start up task which runs the autoLeaveAfterDaysOfInactivity routine
|
// Schedule recurring non-tps-dependent tasks
|
||||||
startAutoLeaveTask(false);
|
AutoLeaveTask.get().schedule(this);
|
||||||
|
EconLandRewardTask.get().schedule(this);
|
||||||
// start up task which runs the econLandRewardRoutine
|
|
||||||
startEconLandRewardTask(false);
|
|
||||||
|
|
||||||
// Register Event Handlers
|
// Register Event Handlers
|
||||||
MainListener.get().setup();
|
MainListener.get().setup();
|
||||||
@ -119,54 +113,6 @@ public class Factions extends MPlugin
|
|||||||
;
|
;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onDisable()
|
|
||||||
{
|
|
||||||
if (AutoLeaveTask != null)
|
|
||||||
{
|
|
||||||
this.getServer().getScheduler().cancelTask(AutoLeaveTask);
|
|
||||||
AutoLeaveTask = null;
|
|
||||||
}
|
|
||||||
super.onDisable();
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
|
|
||||||
public void startAutoLeaveTask(boolean restartIfRunning)
|
|
||||||
{
|
|
||||||
if (AutoLeaveTask != null)
|
|
||||||
{
|
|
||||||
if ( ! restartIfRunning) return;
|
|
||||||
this.getServer().getScheduler().cancelTask(AutoLeaveTask);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ConfServer.autoLeaveRoutineRunsEveryXMinutes > 0.0)
|
|
||||||
{
|
|
||||||
long ticks = (long)(20 * 60 * ConfServer.autoLeaveRoutineRunsEveryXMinutes);
|
|
||||||
AutoLeaveTask = getServer().getScheduler().scheduleSyncRepeatingTask(this, new AutoLeaveTask(), ticks, ticks);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void startEconLandRewardTask(boolean restartIfRunning)
|
|
||||||
{
|
|
||||||
if (econLandRewardTaskID != null)
|
|
||||||
{
|
|
||||||
if (!restartIfRunning) return;
|
|
||||||
this.getServer().getScheduler().cancelTask(econLandRewardTaskID);
|
|
||||||
}
|
|
||||||
|
|
||||||
if
|
|
||||||
(
|
|
||||||
ConfServer.econEnabled &&
|
|
||||||
ConfServer.econLandRewardTaskRunsEveryXMinutes > 0.0 &&
|
|
||||||
ConfServer.econLandReward > 0.0
|
|
||||||
)
|
|
||||||
{
|
|
||||||
long ticks = (long)(20 * 60 * ConfServer.econLandRewardTaskRunsEveryXMinutes);
|
|
||||||
econLandRewardTaskID = getServer().getScheduler().scheduleSyncRepeatingTask(this, new EconLandRewardTask(), ticks, ticks);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
// Functions for other plugins to hook into
|
// Functions for other plugins to hook into
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
|
@ -2,24 +2,38 @@ package com.massivecraft.factions.task;
|
|||||||
|
|
||||||
import com.massivecraft.factions.ConfServer;
|
import com.massivecraft.factions.ConfServer;
|
||||||
import com.massivecraft.factions.FPlayerColl;
|
import com.massivecraft.factions.FPlayerColl;
|
||||||
import com.massivecraft.factions.Factions;
|
import com.massivecraft.mcore.ModuloRepeatTask;
|
||||||
|
import com.massivecraft.mcore.util.TimeUnit;
|
||||||
|
|
||||||
public class AutoLeaveTask implements Runnable
|
public class AutoLeaveTask extends ModuloRepeatTask
|
||||||
{
|
{
|
||||||
double rate;
|
// -------------------------------------------- //
|
||||||
|
// INSTANCE & CONSTRUCT
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
public AutoLeaveTask()
|
private static AutoLeaveTask i = new AutoLeaveTask();
|
||||||
|
public static AutoLeaveTask get() { return i; }
|
||||||
|
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// OVERRIDE: MODULO REPEAT TASK
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public long getDelayMillis()
|
||||||
{
|
{
|
||||||
this.rate = ConfServer.autoLeaveRoutineRunsEveryXMinutes;
|
return (long) (ConfServer.autoLeaveRoutineRunsEveryXMinutes * TimeUnit.MILLIS_PER_MINUTE);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void run()
|
@Override
|
||||||
|
public void setDelayMillis(long delayMillis)
|
||||||
|
{
|
||||||
|
throw new RuntimeException("operation not supported");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void invoke()
|
||||||
{
|
{
|
||||||
FPlayerColl.get().autoLeaveOnInactivityRoutine();
|
FPlayerColl.get().autoLeaveOnInactivityRoutine();
|
||||||
|
|
||||||
// TODO: Make it a polling and non-tps-dependent system instead.
|
|
||||||
// maybe setting has been changed? if so, restart task at new rate
|
|
||||||
if (this.rate != ConfServer.autoLeaveRoutineRunsEveryXMinutes)
|
|
||||||
Factions.get().startAutoLeaveTask(true);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -2,30 +2,38 @@ package com.massivecraft.factions.task;
|
|||||||
|
|
||||||
import com.massivecraft.factions.ConfServer;
|
import com.massivecraft.factions.ConfServer;
|
||||||
import com.massivecraft.factions.FactionColl;
|
import com.massivecraft.factions.FactionColl;
|
||||||
import com.massivecraft.factions.Factions;
|
import com.massivecraft.mcore.ModuloRepeatTask;
|
||||||
|
import com.massivecraft.mcore.util.TimeUnit;
|
||||||
|
|
||||||
public class EconLandRewardTask implements Runnable
|
public class EconLandRewardTask extends ModuloRepeatTask
|
||||||
{
|
{
|
||||||
double rate;
|
// -------------------------------------------- //
|
||||||
|
// INSTANCE & CONSTRUCT
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
public EconLandRewardTask()
|
private static EconLandRewardTask i = new EconLandRewardTask();
|
||||||
|
public static EconLandRewardTask get() { return i; }
|
||||||
|
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// OVERRIDE: MODULO REPEAT TASK
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public long getDelayMillis()
|
||||||
{
|
{
|
||||||
this.rate = ConfServer.econLandRewardTaskRunsEveryXMinutes;
|
return (long) (ConfServer.econLandRewardTaskRunsEveryXMinutes * TimeUnit.MILLIS_PER_MINUTE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void run()
|
public void setDelayMillis(long delayMillis)
|
||||||
|
{
|
||||||
|
throw new RuntimeException("operation not supported");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void invoke()
|
||||||
{
|
{
|
||||||
FactionColl.get().econLandRewardRoutine();
|
FactionColl.get().econLandRewardRoutine();
|
||||||
|
|
||||||
// TODO: This technique is TPS dependent and wrong.
|
|
||||||
// Instead of restarting a TPS dependent task the task should poll every once in a while for the system millis.
|
|
||||||
// With such a setup the need for restarts are gone.
|
|
||||||
|
|
||||||
// maybe setting has been changed? if so, restart task at new rate
|
|
||||||
if (this.rate != ConfServer.econLandRewardTaskRunsEveryXMinutes)
|
|
||||||
{
|
|
||||||
Factions.get().startEconLandRewardTask(true);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user