diff options
Diffstat (limited to 'EssentialsAntiCheat/src/com/earth2me/essentials/anticheat/debug')
-rw-r--r-- | EssentialsAntiCheat/src/com/earth2me/essentials/anticheat/debug/ActiveCheckPrinter.java | 66 | ||||
-rw-r--r-- | EssentialsAntiCheat/src/com/earth2me/essentials/anticheat/debug/LagMeasureTask.java | 99 |
2 files changed, 165 insertions, 0 deletions
diff --git a/EssentialsAntiCheat/src/com/earth2me/essentials/anticheat/debug/ActiveCheckPrinter.java b/EssentialsAntiCheat/src/com/earth2me/essentials/anticheat/debug/ActiveCheckPrinter.java new file mode 100644 index 000000000..295acb9ef --- /dev/null +++ b/EssentialsAntiCheat/src/com/earth2me/essentials/anticheat/debug/ActiveCheckPrinter.java @@ -0,0 +1,66 @@ +package com.earth2me.essentials.anticheat.debug; + +import com.earth2me.essentials.anticheat.EventManager; +import com.earth2me.essentials.anticheat.NoCheat; +import com.earth2me.essentials.anticheat.config.ConfigurationCacheStore; +import java.util.List; +import org.bukkit.World; + + +/** + * Prints the list of active checks per world on startup, if requested + * + */ +public class ActiveCheckPrinter +{ + public static void printActiveChecks(NoCheat plugin, List<EventManager> eventManagers) + { + + boolean introPrinted = false; + + // Print active checks for NoCheat, if needed. + for (World world : plugin.getServer().getWorlds()) + { + + StringBuilder line = new StringBuilder(" ").append(world.getName()).append(": "); + + int length = line.length(); + + ConfigurationCacheStore cc = plugin.getConfig(world); + + if (!cc.logging.showactivechecks) + { + continue; + } + + for (EventManager em : eventManagers) + { + if (em.getActiveChecks(cc).isEmpty()) + { + continue; + } + + for (String active : em.getActiveChecks(cc)) + { + line.append(active).append(' '); + } + + if (!introPrinted) + { + plugin.getLogger().info("Active Checks: "); + introPrinted = true; + } + + plugin.getServer().getLogger().info(line.toString()); + + line = new StringBuilder(length); + + for (int i = 0; i < length; i++) + { + line.append(' '); + } + } + + } + } +} diff --git a/EssentialsAntiCheat/src/com/earth2me/essentials/anticheat/debug/LagMeasureTask.java b/EssentialsAntiCheat/src/com/earth2me/essentials/anticheat/debug/LagMeasureTask.java new file mode 100644 index 000000000..4acb5a5f2 --- /dev/null +++ b/EssentialsAntiCheat/src/com/earth2me/essentials/anticheat/debug/LagMeasureTask.java @@ -0,0 +1,99 @@ +package com.earth2me.essentials.anticheat.debug; + +import com.earth2me.essentials.anticheat.NoCheat; +import org.bukkit.World; + + +/** + * A task running in the background that measures tick time vs. real time + * + */ +public class LagMeasureTask implements Runnable +{ + private int ingameseconds = 1; + private long lastIngamesecondTime = System.currentTimeMillis(); + private long lastIngamesecondDuration = 2000L; + private boolean skipCheck = false; + private int lagMeasureTaskId = -1; + private final NoCheat plugin; + + public LagMeasureTask(NoCheat plugin) + { + this.plugin = plugin; + } + + public void start() + { + // start measuring with a delay of 10 seconds + lagMeasureTaskId = plugin.getServer().getScheduler().scheduleSyncRepeatingTask(plugin, this, 20, 20); + } + + public void run() + { + try + { + boolean oldStatus = skipCheck; + // If the previous second took to long, skip checks during + // this second + skipCheck = lastIngamesecondDuration > 2000; + + if (plugin.getConfig((World)null).logging.debugmessages) + { + if (oldStatus != skipCheck && skipCheck) + { + plugin.getLogger().warning("detected server lag, some checks will not work."); + } + else if (oldStatus != skipCheck && !skipCheck) + { + plugin.getLogger().info("server lag seems to have stopped, reenabling checks."); + } + } + + long time = System.currentTimeMillis(); + lastIngamesecondDuration = time - lastIngamesecondTime; + if (lastIngamesecondDuration < 1000) + { + lastIngamesecondDuration = 1000; + } + else if (lastIngamesecondDuration > 3600000) + { + lastIngamesecondDuration = 3600000; // top limit of 1 + // hour per "second" + } + lastIngamesecondTime = time; + ingameseconds++; + + // Check if some data is outdated now and let it be removed + if (ingameseconds % 62 == 0) + { + plugin.cleanDataMap(); + } + } + catch (Exception e) + { + // Just prevent this thread from dying for whatever reason + } + + } + + public void cancel() + { + if (lagMeasureTaskId != -1) + { + try + { + plugin.getServer().getScheduler().cancelTask(lagMeasureTaskId); + } + catch (Exception e) + { + plugin.getLogger().warning("Couldn't cancel LagMeasureTask: " + e.getMessage()); + } + lagMeasureTaskId = -1; + } + } + + public boolean skipCheck() + { + return skipCheck; + } +} |