mirror of
https://github.com/NoCheatPlus/NoCheatPlus.git
synced 2025-04-01 08:55:41 +02:00
TickTask: add tick count, randomize method ordering.
This commit is contained in:
parent
933e308154
commit
4501169db1
@ -16,6 +16,9 @@ import fr.neatmonster.nocheatplus.checks.ViolationData;
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Task to run every tick, to update permissions and execute actions, and maybe later for extended lag measurement.
|
* Task to run every tick, to update permissions and execute actions, and maybe later for extended lag measurement.
|
||||||
|
*
|
||||||
|
* <hr>
|
||||||
|
* The permissions updates and actions execution is meant for use by the asynchronously run checks, not for normal use.
|
||||||
* @author mc_dev
|
* @author mc_dev
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
@ -51,22 +54,18 @@ public class TickTask implements Runnable {
|
|||||||
/** Task id of the running TickTask */
|
/** Task id of the running TickTask */
|
||||||
protected static int taskId = -1;
|
protected static int taskId = -1;
|
||||||
|
|
||||||
/**
|
protected static int tick = 0;
|
||||||
* Access method to request permisison updates.
|
|
||||||
* @param playerName
|
|
||||||
* @param checkType
|
|
||||||
*/
|
|
||||||
public static void requestPermissionUpdate(final String playerName, final CheckType checkType){
|
|
||||||
permissionUpdates.add(new PermissionUpdateEntry(playerName, checkType));
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void cancel(){
|
|
||||||
if (taskId == -1) return;
|
|
||||||
Bukkit.getScheduler().cancelTask(taskId);
|
|
||||||
taskId = -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void executeActions() {
|
|
||||||
|
//////////////////////////////////////////////////////////////
|
||||||
|
// Special static methods, usually not called from outside.
|
||||||
|
//////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Force executing actions.<br>
|
||||||
|
* Note: Only call from the main thread!
|
||||||
|
*/
|
||||||
|
public void executeActions() {
|
||||||
final List<ViolationData> copyActions = new LinkedList<ViolationData>();
|
final List<ViolationData> copyActions = new LinkedList<ViolationData>();
|
||||||
synchronized (delayedActions) {
|
synchronized (delayedActions) {
|
||||||
copyActions.addAll(delayedActions);
|
copyActions.addAll(delayedActions);
|
||||||
@ -77,25 +76,9 @@ public class TickTask implements Runnable {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void requestActionsExecution(final ViolationData actions) {
|
|
||||||
delayedActions.add(actions);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
// The isEmpty checks are faster than synchronizing fully always, the actions get delayed one tick at most.
|
|
||||||
if (!delayedActions.isEmpty()) executeActions();
|
|
||||||
if (!permissionUpdates.isEmpty()) updatePermissions();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static int start(final NoCheatPlus plugin){
|
|
||||||
cancel();
|
|
||||||
taskId = Bukkit.getScheduler().scheduleSyncRepeatingTask(plugin, new TickTask(), 1, 1);
|
|
||||||
return taskId;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Only call from the main thread!
|
* Force a permissions update.<br>
|
||||||
|
* Note: Only call from the main thread!
|
||||||
*/
|
*/
|
||||||
public static void updatePermissions() {
|
public static void updatePermissions() {
|
||||||
final List<PermissionUpdateEntry> copyPermissions = new LinkedList<PermissionUpdateEntry>();
|
final List<PermissionUpdateEntry> copyPermissions = new LinkedList<PermissionUpdateEntry>();
|
||||||
@ -115,5 +98,65 @@ public class TickTask implements Runnable {
|
|||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
///////////////////////////////////
|
||||||
|
// Public static access methods
|
||||||
|
///////////////////////////////////
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Access method to request permission updates.<br>
|
||||||
|
* NOTE: Thread safe.
|
||||||
|
* @param playerName
|
||||||
|
* @param checkType
|
||||||
|
*/
|
||||||
|
public static void requestPermissionUpdate(final String playerName, final CheckType checkType){
|
||||||
|
permissionUpdates.add(new PermissionUpdateEntry(playerName, checkType));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Request actions execution.<br>
|
||||||
|
* NOTE: Thread safe.
|
||||||
|
* @param actions
|
||||||
|
*/
|
||||||
|
public static void requestActionsExecution(final ViolationData actions) {
|
||||||
|
delayedActions.add(actions);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the tasks tick count. It is increased with every server tick.<br>
|
||||||
|
* NOTE: Can be called from other threads.
|
||||||
|
* @return The current tick count.
|
||||||
|
*/
|
||||||
|
public static final int getTick(){
|
||||||
|
return tick;
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////
|
||||||
|
// Public methods for internal use.
|
||||||
|
////////////////////////////////////////
|
||||||
|
|
||||||
|
public static int start(final NoCheatPlus plugin){
|
||||||
|
cancel();
|
||||||
|
taskId = Bukkit.getScheduler().scheduleSyncRepeatingTask(plugin, new TickTask(), 1, 1);
|
||||||
|
return taskId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void cancel(){
|
||||||
|
if (taskId == -1) return;
|
||||||
|
Bukkit.getScheduler().cancelTask(taskId);
|
||||||
|
taskId = -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
//////////////////////////
|
||||||
|
// Instance methods
|
||||||
|
//////////////////////////
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
tick ++;
|
||||||
|
// The isEmpty checks are faster than synchronizing fully always, the actions get delayed one tick at most.
|
||||||
|
if (!delayedActions.isEmpty()) executeActions();
|
||||||
|
if (!permissionUpdates.isEmpty()) updatePermissions();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user