From 747e5bcdce23afbd7be0ee87ad6a05b2e314c348 Mon Sep 17 00:00:00 2001 From: Evenprime Date: Mon, 10 Oct 2011 19:27:45 +0200 Subject: [PATCH] Another round of code cleaning, simplification Fixed nocheat reload command to give feedback and clear critical data Remove stored data when a player disconnects --- plugin.yml | 2 +- .../co/evenprime/bukkit/nocheat/NoCheat.java | 28 ++--- .../bukkit/nocheat/actions/ActionManager.java | 7 +- .../nocheat/actions/ConsoleCommandSender.java | 2 +- .../actions/history/ActionHistory.java | 4 +- .../actions/types/ActionWithParameters.java | 90 ++++++++-------- .../checks/blockbreak/DirectionCheck.java | 2 +- .../nocheat/checks/blockbreak/ReachCheck.java | 2 +- .../checks/blockplace/OnLiquidCheck.java | 4 +- .../nocheat/checks/blockplace/ReachCheck.java | 2 +- .../bukkit/nocheat/checks/chat/ChatCheck.java | 2 +- .../nocheat/checks/moving/FlyingCheck.java | 2 +- .../checks/moving/MorePacketsCheck.java | 6 +- .../checks/moving/MovingEventHelper.java | 6 +- .../nocheat/checks/moving/NoFallCheck.java | 2 +- .../nocheat/checks/moving/RunFlyCheck.java | 2 - .../nocheat/checks/moving/RunningCheck.java | 2 +- .../bukkit/nocheat/config/Configuration.java | 26 ++--- .../nocheat/config/ConfigurationManager.java | 41 +++---- .../nocheat/config/FlatFileConfiguration.java | 10 +- .../bukkit/nocheat/config/OptionNode.java | 2 +- .../bukkit/nocheat/data/BaseData.java | 37 +++++++ .../bukkit/nocheat/data/BlockBreakData.java | 8 +- .../bukkit/nocheat/data/BlockPlaceData.java | 6 +- .../bukkit/nocheat/data/ChatData.java | 6 +- .../evenprime/bukkit/nocheat/data/Data.java | 21 ++++ .../bukkit/nocheat/data/DataManager.java | 101 +++++------------- .../bukkit/nocheat/data/LogData.java | 32 +++--- .../bukkit/nocheat/data/MovingData.java | 58 ++++++---- .../events/BlockBreakEventManager.java | 12 +-- .../events/BlockPlaceEventManager.java | 8 +- .../bukkit/nocheat/events/EventManager.java | 1 + .../events/PlayerChatEventManager.java | 8 +- .../events/PlayerMoveEventManager.java | 8 +- .../events/PlayerQuitEventManager.java | 42 ++++++++ .../events/PlayerTeleportEventManager.java | 30 ++---- .../bukkit/nocheat/log/LogManager.java | 4 +- 37 files changed, 330 insertions(+), 296 deletions(-) create mode 100644 src/cc/co/evenprime/bukkit/nocheat/data/BaseData.java create mode 100644 src/cc/co/evenprime/bukkit/nocheat/data/Data.java create mode 100644 src/cc/co/evenprime/bukkit/nocheat/events/PlayerQuitEventManager.java diff --git a/plugin.yml b/plugin.yml index a9a0a637..56de0b09 100644 --- a/plugin.yml +++ b/plugin.yml @@ -3,7 +3,7 @@ name: NoCheat author: Evenprime main: cc.co.evenprime.bukkit.nocheat.NoCheat -version: 2.09 +version: 2.09a commands: nocheat: diff --git a/src/cc/co/evenprime/bukkit/nocheat/NoCheat.java b/src/cc/co/evenprime/bukkit/nocheat/NoCheat.java index 6a28a385..6a66d90a 100644 --- a/src/cc/co/evenprime/bukkit/nocheat/NoCheat.java +++ b/src/cc/co/evenprime/bukkit/nocheat/NoCheat.java @@ -21,6 +21,7 @@ import cc.co.evenprime.bukkit.nocheat.events.BlockPlaceEventManager; import cc.co.evenprime.bukkit.nocheat.events.BlockBreakEventManager; import cc.co.evenprime.bukkit.nocheat.events.EventManager; import cc.co.evenprime.bukkit.nocheat.events.PlayerChatEventManager; +import cc.co.evenprime.bukkit.nocheat.events.PlayerQuitEventManager; import cc.co.evenprime.bukkit.nocheat.events.PlayerMoveEventManager; import cc.co.evenprime.bukkit.nocheat.events.PlayerTeleportEventManager; import cc.co.evenprime.bukkit.nocheat.log.LogLevel; @@ -37,17 +38,17 @@ import cc.co.evenprime.bukkit.nocheat.log.LogManager; */ public class NoCheat extends JavaPlugin { - private ConfigurationManager conf; - private LogManager log; - private DataManager data; + private ConfigurationManager conf; + private LogManager log; + private DataManager data; - private List eventManagers = new LinkedList(); + private final List eventManagers = new LinkedList(); - private int taskId = -1; - private int ingameseconds = 0; - private long lastIngamesecondTime = 0L; - private long lastIngamesecondDuration = 0L; - private boolean skipCheck = false; + private int taskId = -1; + private int ingameseconds = 0; + private long lastIngamesecondTime = 0L; + private long lastIngamesecondDuration = 0L; + private boolean skipCheck = false; public NoCheat() { @@ -75,7 +76,7 @@ public class NoCheat extends JavaPlugin { log.logToConsole(LogLevel.LOW, "[NoCheat] This version is for CB #1240. It may break at any time and for any other version."); this.data = new DataManager(); - + // parse the nocheat.yml config file this.conf = new ConfigurationManager(this.getDataFolder().getPath()); @@ -84,13 +85,13 @@ public class NoCheat extends JavaPlugin { eventManagers.add(new PlayerChatEventManager(this)); eventManagers.add(new BlockBreakEventManager(this)); eventManagers.add(new BlockPlaceEventManager(this)); + eventManagers.add(new PlayerQuitEventManager(this)); PluginDescriptionFile pdfFile = this.getDescription(); if(taskId == -1) { taskId = this.getServer().getScheduler().scheduleSyncRepeatingTask(this, new Runnable() { - @Override public void run() { // If the previous second took to long, skip checks during @@ -224,10 +225,9 @@ public class NoCheat extends JavaPlugin { sender.sendMessage("[NoCheat] Reloading configuration"); this.conf.cleanup(); - DataManager newData = new DataManager(); this.conf = new ConfigurationManager(this.getDataFolder().getPath()); - this.data = newData; - + this.data.resetAllCriticalData(); + sender.sendMessage("[NoCheat] Configuration loaded"); return true; diff --git a/src/cc/co/evenprime/bukkit/nocheat/actions/ActionManager.java b/src/cc/co/evenprime/bukkit/nocheat/actions/ActionManager.java index 5405d1c2..884f240b 100644 --- a/src/cc/co/evenprime/bukkit/nocheat/actions/ActionManager.java +++ b/src/cc/co/evenprime/bukkit/nocheat/actions/ActionManager.java @@ -22,16 +22,11 @@ public class ActionManager { this.actions.put(action.name.toLowerCase(), action); } - public Action getAction(String actionName) { - - return this.actions.get(actionName.toLowerCase()); - } - public Action[] getActions(String[] actionNames) { Action[] result = new Action[actionNames.length]; for(int i = 0; i < actionNames.length; i++) { - result[i] = getAction(actionNames[i]); + result[i] = this.actions.get(actionNames[i].toLowerCase()); } return result; diff --git a/src/cc/co/evenprime/bukkit/nocheat/actions/ConsoleCommandSender.java b/src/cc/co/evenprime/bukkit/nocheat/actions/ConsoleCommandSender.java index 245e1e2c..8966276d 100644 --- a/src/cc/co/evenprime/bukkit/nocheat/actions/ConsoleCommandSender.java +++ b/src/cc/co/evenprime/bukkit/nocheat/actions/ConsoleCommandSender.java @@ -96,10 +96,10 @@ public class ConsoleCommandSender implements CommandSender { server.dispatchCommand(this, command); } catch(Exception e) { // TODO: Better error handling + System.out.println("[NoCheat] failed to execute the command '"+command + "', please check if everything is setup correct."); } } - @Override public String getName() { return "NoCheat"; } diff --git a/src/cc/co/evenprime/bukkit/nocheat/actions/history/ActionHistory.java b/src/cc/co/evenprime/bukkit/nocheat/actions/history/ActionHistory.java index b7e5c847..355f4ead 100644 --- a/src/cc/co/evenprime/bukkit/nocheat/actions/history/ActionHistory.java +++ b/src/cc/co/evenprime/bukkit/nocheat/actions/history/ActionHistory.java @@ -20,14 +20,14 @@ public class ActionHistory { private int totalEntries = 0; private long lastClearedTime = 0; - public ExecutionHistoryEntry(int monitoredTimeFrame) { + private ExecutionHistoryEntry(int monitoredTimeFrame) { this.executionTimes = new int[monitoredTimeFrame]; } /** * Remember an execution at the specific time */ - public void addCounter(long time) { + private void addCounter(long time) { // clear out now outdated values from the array if(time - lastClearedTime > 0) { // Clear the next few fields of the array diff --git a/src/cc/co/evenprime/bukkit/nocheat/actions/types/ActionWithParameters.java b/src/cc/co/evenprime/bukkit/nocheat/actions/types/ActionWithParameters.java index c7e41018..be3cdaca 100644 --- a/src/cc/co/evenprime/bukkit/nocheat/actions/types/ActionWithParameters.java +++ b/src/cc/co/evenprime/bukkit/nocheat/actions/types/ActionWithParameters.java @@ -10,39 +10,39 @@ import cc.co.evenprime.bukkit.nocheat.data.LogData; public abstract class ActionWithParameters extends Action { - protected enum WildCard { - PLAYER("player"), LOCATION("location"), WORLD("world"), VIOLATIONS("violations"), MOVEDISTANCE("movedistance"), REACHDISTANCE("reachdistance"), FALLDISTANCE("falldistance"), LOCATION_TO("locationto"), CHECK("check"), PACKETS("packets"), TEXT("text"), PLACE_LOCATION("placelocation"), PLACE_AGAINST("placeagainst"), BLOCK_TYPE("blocktype"); - - private final String s; - - private WildCard(String s) { - this.s = s; - } - - private static final WildCard get(String s) { - for(WildCard c : WildCard.values()) { - if(c.s.equals(s)) { - return c; - } - } - - return null; - } + private enum WildCard { + PLAYER("player"), LOCATION("location"), WORLD("world"), VIOLATIONS("violations"), MOVEDISTANCE("movedistance"), REACHDISTANCE("reachdistance"), FALLDISTANCE("falldistance"), LOCATION_TO("locationto"), CHECK("check"), PACKETS("packets"), TEXT("text"), PLACE_LOCATION("placelocation"), PLACE_AGAINST("placeagainst"), BLOCK_TYPE("blocktype"); + + private final String s; + + private WildCard(String s) { + this.s = s; } - protected final ArrayList messageParts; + private static final WildCard get(String s) { + for(WildCard c : WildCard.values()) { + if(c.s.equals(s)) { + return c; + } + } + + return null; + } + } + + private final ArrayList messageParts; public ActionWithParameters(String name, int delay, int repeat, String message) { super(name, delay, repeat); - + messageParts = new ArrayList(); - + parseMessage(message); } - protected void parseMessage(String message) { + private void parseMessage(String message) { String parts[] = message.split("\\[", 2); - + // No opening braces left if(parts.length != 2) { messageParts.add(message); @@ -50,7 +50,7 @@ public abstract class ActionWithParameters extends Action { // Found an opening brace else { String parts2[] = parts[1].split("\\]", 2); - + // Found no matching closing brace if(parts2.length != 2) { messageParts.add(message); @@ -58,12 +58,12 @@ public abstract class ActionWithParameters extends Action { // Found a matching closing brace else { WildCard w = WildCard.get(parts2[0]); - + if(w != null) { // Found an existing wildcard inbetween the braces messageParts.add(parts[0]); messageParts.add(w); - + // Go further down recursive parseMessage(parts2[1]); } else { @@ -82,7 +82,7 @@ public abstract class ActionWithParameters extends Action { public String getMessage(LogData data) { StringBuilder log = new StringBuilder(100); // Should be big enough most // of the time - + for(Object part : messageParts) { if(part instanceof String) { log.append((String) part); @@ -90,7 +90,7 @@ public abstract class ActionWithParameters extends Action { log.append(getParameter((WildCard) part, data)); } } - + return log.toString(); } @@ -100,20 +100,20 @@ public abstract class ActionWithParameters extends Action { switch (wildcard) { case PLAYER: return data.player.getName(); - + case CHECK: return data.check; - + case LOCATION: Location l = data.player.getLocation(); return String.format(Locale.US, "%.2f,%.2f,%.2f", l.getX(), l.getY(), l.getZ()); - + case WORLD: return data.player.getWorld().getName(); - + case VIOLATIONS: - return String.format(Locale.US, "%.2f", data.violationLevel); - + return String.format(Locale.US, "%d", data.violationLevel); + case MOVEDISTANCE: Location l2 = data.player.getLocation(); Location t = data.toLocation; @@ -124,20 +124,20 @@ public abstract class ActionWithParameters extends Action { } case REACHDISTANCE: return String.format(Locale.US, "%.2f", data.reachdistance); - + case FALLDISTANCE: return String.format(Locale.US, "%.2f", data.falldistance); - + case LOCATION_TO: Location to = data.toLocation; return String.format(Locale.US, "%.2f,%.2f,%.2f", to.getX(), to.getY(), to.getZ()); - + case PACKETS: return String.valueOf(data.packets); - + case TEXT: return data.text; - + case PLACE_LOCATION: Block block = data.placed; if(block != null) { @@ -145,17 +145,21 @@ public abstract class ActionWithParameters extends Action { } else { return "null"; } - + case PLACE_AGAINST: Block blocka = data.placedAgainst; if(blocka == null) { return "null"; } return String.format(Locale.US, "%d %d %d", blocka.getX(), blocka.getY(), blocka.getZ()); - + case BLOCK_TYPE: - return data.placedMaterial.toString(); - + Block blockb = data.placed; + if(blockb == null) { + return "null"; + } + return blockb.getType().toString(); + default: return "Evenprime was lazy and forgot to define " + wildcard + "."; } diff --git a/src/cc/co/evenprime/bukkit/nocheat/checks/blockbreak/DirectionCheck.java b/src/cc/co/evenprime/bukkit/nocheat/checks/blockbreak/DirectionCheck.java index 56257d6d..9500cc4f 100644 --- a/src/cc/co/evenprime/bukkit/nocheat/checks/blockbreak/DirectionCheck.java +++ b/src/cc/co/evenprime/bukkit/nocheat/checks/blockbreak/DirectionCheck.java @@ -50,7 +50,7 @@ public class DirectionCheck { data.directionViolationLevel += 1; // Prepare some event-specific values for logging and custom actions - LogData ldata = plugin.getDataManager().getLogData(player); + LogData ldata = plugin.getDataManager().getData( player).log; ldata.check = "blockbreak.direction"; cancel = action.executeActions(player, cc.blockbreak.directionActions, (int) data.directionViolationLevel, ldata, cc); diff --git a/src/cc/co/evenprime/bukkit/nocheat/checks/blockbreak/ReachCheck.java b/src/cc/co/evenprime/bukkit/nocheat/checks/blockbreak/ReachCheck.java index 15a6e455..1f205fa1 100644 --- a/src/cc/co/evenprime/bukkit/nocheat/checks/blockbreak/ReachCheck.java +++ b/src/cc/co/evenprime/bukkit/nocheat/checks/blockbreak/ReachCheck.java @@ -37,7 +37,7 @@ public class ReachCheck { // Increment violation counter data.reachViolationLevel += 1; - LogData ldata = plugin.getDataManager().getLogData(player); + LogData ldata = plugin.getDataManager().getData(player).log; ldata.check = "blockbreak.reach"; ldata.reachdistance = distance; diff --git a/src/cc/co/evenprime/bukkit/nocheat/checks/blockplace/OnLiquidCheck.java b/src/cc/co/evenprime/bukkit/nocheat/checks/blockplace/OnLiquidCheck.java index 728c9f17..725eb9c8 100644 --- a/src/cc/co/evenprime/bukkit/nocheat/checks/blockplace/OnLiquidCheck.java +++ b/src/cc/co/evenprime/bukkit/nocheat/checks/blockplace/OnLiquidCheck.java @@ -38,7 +38,7 @@ public class OnLiquidCheck { // all ok } else { data.onliquidViolationLevel += 1; - LogData ldata = plugin.getDataManager().getLogData(player); + LogData ldata = plugin.getDataManager().getData(player).log; ldata.check = "blockplace.onliquid"; ldata.placed = blockPlaced; ldata.placedAgainst = blockPlacedAgainst; @@ -51,7 +51,7 @@ public class OnLiquidCheck { return cancel; } - public boolean isSolid(Block block) { + private boolean isSolid(Block block) { Material m = block.getType(); return !(m == Material.AIR) || (m == Material.WATER) || (m == Material.STATIONARY_WATER) || (m == Material.LAVA) || (m == Material.STATIONARY_LAVA); } diff --git a/src/cc/co/evenprime/bukkit/nocheat/checks/blockplace/ReachCheck.java b/src/cc/co/evenprime/bukkit/nocheat/checks/blockplace/ReachCheck.java index 1fddf924..aead2118 100644 --- a/src/cc/co/evenprime/bukkit/nocheat/checks/blockplace/ReachCheck.java +++ b/src/cc/co/evenprime/bukkit/nocheat/checks/blockplace/ReachCheck.java @@ -47,7 +47,7 @@ public class ReachCheck { data.reachViolationLevel += 1; // Prepare some event-specific values for logging and custom actions - LogData ldata = plugin.getDataManager().getLogData(player); + LogData ldata = plugin.getDataManager().getData(player).log; ldata.check = "blockplace.reach"; ldata.reachdistance = distance; diff --git a/src/cc/co/evenprime/bukkit/nocheat/checks/chat/ChatCheck.java b/src/cc/co/evenprime/bukkit/nocheat/checks/chat/ChatCheck.java index 034f18db..5f24be03 100644 --- a/src/cc/co/evenprime/bukkit/nocheat/checks/chat/ChatCheck.java +++ b/src/cc/co/evenprime/bukkit/nocheat/checks/chat/ChatCheck.java @@ -46,7 +46,7 @@ public class ChatCheck { // Prepare some event-specific values for logging and custom // actions - LogData ldata = plugin.getDataManager().getLogData(player); + LogData ldata = plugin.getDataManager().getData(player).log; ldata.check = "chat.spam"; ldata.text = message; diff --git a/src/cc/co/evenprime/bukkit/nocheat/checks/moving/FlyingCheck.java b/src/cc/co/evenprime/bukkit/nocheat/checks/moving/FlyingCheck.java index de02a90f..9007346c 100644 --- a/src/cc/co/evenprime/bukkit/nocheat/checks/moving/FlyingCheck.java +++ b/src/cc/co/evenprime/bukkit/nocheat/checks/moving/FlyingCheck.java @@ -83,7 +83,7 @@ public class FlyingCheck { data.runflyViolationLevel += result; // Prepare some event-specific values for logging and custom actions - LogData ldata = plugin.getDataManager().getLogData(player); + LogData ldata = plugin.getDataManager().getData(player).log; ldata.toLocation = to; ldata.check = "flying/toofast"; diff --git a/src/cc/co/evenprime/bukkit/nocheat/checks/moving/MorePacketsCheck.java b/src/cc/co/evenprime/bukkit/nocheat/checks/moving/MorePacketsCheck.java index e336b6a4..4c99b0d6 100644 --- a/src/cc/co/evenprime/bukkit/nocheat/checks/moving/MorePacketsCheck.java +++ b/src/cc/co/evenprime/bukkit/nocheat/checks/moving/MorePacketsCheck.java @@ -25,8 +25,8 @@ public class MorePacketsCheck { private final ActionExecutor action; - private final int packetsPerTimeframe = 22; - private final int bufferLimit = 30; + private final static int packetsPerTimeframe = 22; + private final static int bufferLimit = 30; private final NoCheat plugin; public MorePacketsCheck(NoCheat plugin) { @@ -122,7 +122,7 @@ public class MorePacketsCheck { if(!plugin.skipCheck() && packetsAboveLimit > 0) { data.morePacketsViolationLevel += packetsAboveLimit; - LogData ldata = plugin.getDataManager().getLogData(player); + LogData ldata = plugin.getDataManager().getData(player).log; // Packets above limit ldata.packets = data.morePacketsCounter - limit; ldata.check = "moving/morepackets"; diff --git a/src/cc/co/evenprime/bukkit/nocheat/checks/moving/MovingEventHelper.java b/src/cc/co/evenprime/bukkit/nocheat/checks/moving/MovingEventHelper.java index f3d0285d..6765d7ca 100644 --- a/src/cc/co/evenprime/bukkit/nocheat/checks/moving/MovingEventHelper.java +++ b/src/cc/co/evenprime/bukkit/nocheat/checks/moving/MovingEventHelper.java @@ -15,8 +15,8 @@ import org.bukkit.World; */ public class MovingEventHelper { - private final double magic = 0.45D; - private final double magic2 = 0.55D; + private final static double magic = 0.45D; + private final static double magic2 = 0.55D; // Block types that may need to be treated specially private static final int NONSOLID = 1; // 0x00000001 @@ -159,7 +159,7 @@ public class MovingEventHelper { return (value & LIQUID) == LIQUID; } - final boolean isNonSolid(int value) { + private final boolean isNonSolid(int value) { return((value & NONSOLID) == NONSOLID); } diff --git a/src/cc/co/evenprime/bukkit/nocheat/checks/moving/NoFallCheck.java b/src/cc/co/evenprime/bukkit/nocheat/checks/moving/NoFallCheck.java index 0f1e929d..e3728647 100644 --- a/src/cc/co/evenprime/bukkit/nocheat/checks/moving/NoFallCheck.java +++ b/src/cc/co/evenprime/bukkit/nocheat/checks/moving/NoFallCheck.java @@ -56,7 +56,7 @@ public class NoFallCheck { data.nofallViolationLevel += difference; // Prepare some event-specific values for logging and custom actions - LogData ldata = plugin.getDataManager().getLogData(player); + LogData ldata = plugin.getDataManager().getData(player).log; ldata.falldistance = data.fallDistance; ldata.check = "moving/nofall"; diff --git a/src/cc/co/evenprime/bukkit/nocheat/checks/moving/RunFlyCheck.java b/src/cc/co/evenprime/bukkit/nocheat/checks/moving/RunFlyCheck.java index c04c7ec8..1a5d49b5 100644 --- a/src/cc/co/evenprime/bukkit/nocheat/checks/moving/RunFlyCheck.java +++ b/src/cc/co/evenprime/bukkit/nocheat/checks/moving/RunFlyCheck.java @@ -97,8 +97,6 @@ public class RunFlyCheck { * This is a workaround for people placing blocks below them causing false positives * with the move check(s). * - * TODO: Check if still needed, maybe this got fixed in 1.8.1 - * * @param player * @param data * @param blockPlaced diff --git a/src/cc/co/evenprime/bukkit/nocheat/checks/moving/RunningCheck.java b/src/cc/co/evenprime/bukkit/nocheat/checks/moving/RunningCheck.java index 63d90e49..a7a7fc84 100644 --- a/src/cc/co/evenprime/bukkit/nocheat/checks/moving/RunningCheck.java +++ b/src/cc/co/evenprime/bukkit/nocheat/checks/moving/RunningCheck.java @@ -77,7 +77,7 @@ public class RunningCheck { data.runflyViolationLevel += result; // Prepare some event-specific values for logging and custom actions - LogData ldata = plugin.getDataManager().getLogData(player); + LogData ldata = plugin.getDataManager().getData(player).log; ldata.toLocation = to; if(resultHoriz > 0 && resultVert > 0) ldata.check = "runfly/both"; diff --git a/src/cc/co/evenprime/bukkit/nocheat/config/Configuration.java b/src/cc/co/evenprime/bukkit/nocheat/config/Configuration.java index 99f56730..ae155846 100644 --- a/src/cc/co/evenprime/bukkit/nocheat/config/Configuration.java +++ b/src/cc/co/evenprime/bukkit/nocheat/config/Configuration.java @@ -21,21 +21,21 @@ public abstract class Configuration { public final static OptionNode ROOT = new OptionNode(null, null, DataType.PARENT); - public final static OptionNode LOGGING = new OptionNode("logging", ROOT, DataType.PARENT); + private final static OptionNode LOGGING = new OptionNode("logging", ROOT, DataType.PARENT); public final static OptionNode LOGGING_ACTIVE = new OptionNode("active", LOGGING, DataType.BOOLEAN); public final static OptionNode LOGGING_FILENAME = new OptionNode("filename", LOGGING, DataType.STRING); public final static OptionNode LOGGING_FILELEVEL = new OptionNode("filelevel", LOGGING, DataType.LOGLEVEL); public final static OptionNode LOGGING_CONSOLELEVEL = new OptionNode("consolelevel", LOGGING, DataType.LOGLEVEL); public final static OptionNode LOGGING_CHATLEVEL = new OptionNode("chatlevel", LOGGING, DataType.LOGLEVEL); - public final static OptionNode DEBUG = new OptionNode("debug", ROOT, DataType.PARENT); + private final static OptionNode DEBUG = new OptionNode("debug", ROOT, DataType.PARENT); public final static OptionNode DEBUG_SHOWACTIVECHECKS = new OptionNode("showactivechecks", DEBUG, DataType.BOOLEAN); - public final static OptionNode MOVING = new OptionNode("moving", ROOT, DataType.PARENT); + private final static OptionNode MOVING = new OptionNode("moving", ROOT, DataType.PARENT); public final static OptionNode MOVING_CHECK = new OptionNode("check", MOVING, DataType.BOOLEAN); public final static OptionNode MOVING_IDENTIFYCREATIVEMODE = new OptionNode("identifycreativemode", MOVING, DataType.BOOLEAN); - public final static OptionNode MOVING_RUNFLY = new OptionNode("runfly", MOVING, DataType.PARENT); + private final static OptionNode MOVING_RUNFLY = new OptionNode("runfly", MOVING, DataType.PARENT); public final static OptionNode MOVING_RUNFLY_CHECK = new OptionNode("check", MOVING_RUNFLY, DataType.BOOLEAN); public final static OptionNode MOVING_RUNFLY_WALKINGSPEEDLIMIT = new OptionNode("alkingspeedlimit", MOVING_RUNFLY, DataType.INTEGER); public final static OptionNode MOVING_RUNFLY_SPRINTINGSPEEDLIMIT = new OptionNode("sprintingspeedlimit", MOVING_RUNFLY, DataType.INTEGER); @@ -53,39 +53,39 @@ public abstract class Configuration { public final static OptionNode MOVING_RUNFLY_FLYINGSPEEDLIMITHORIZONTAL = new OptionNode("flyingspeedlimithorizontal", MOVING_RUNFLY, DataType.INTEGER); public final static OptionNode MOVING_RUNFLY_FLYINGACTIONS = new OptionNode("flyingactions", MOVING_RUNFLY, DataType.ACTIONLIST); - public final static OptionNode MOVING_MOREPACKETS = new OptionNode("morepackets", MOVING, DataType.PARENT); + private final static OptionNode MOVING_MOREPACKETS = new OptionNode("morepackets", MOVING, DataType.PARENT); public final static OptionNode MOVING_MOREPACKETS_CHECK = new OptionNode("check", MOVING_MOREPACKETS, DataType.BOOLEAN); public final static OptionNode MOVING_MOREPACKETS_ACTIONS = new OptionNode("actions", MOVING_MOREPACKETS, DataType.ACTIONLIST); - public final static OptionNode BLOCKBREAK = new OptionNode("blockbreak", ROOT, DataType.PARENT); + private final static OptionNode BLOCKBREAK = new OptionNode("blockbreak", ROOT, DataType.PARENT); public final static OptionNode BLOCKBREAK_CHECK = new OptionNode("check", BLOCKBREAK, DataType.BOOLEAN); - public final static OptionNode BLOCKBREAK_REACH = new OptionNode("reach", BLOCKBREAK, DataType.PARENT); + private final static OptionNode BLOCKBREAK_REACH = new OptionNode("reach", BLOCKBREAK, DataType.PARENT); public final static OptionNode BLOCKBREAK_REACH_CHECK = new OptionNode("check", BLOCKBREAK_REACH, DataType.BOOLEAN); public final static OptionNode BLOCKBREAK_REACH_LIMIT = new OptionNode("limit", BLOCKBREAK_REACH, DataType.INTEGER); public final static OptionNode BLOCKBREAK_REACH_ACTIONS = new OptionNode("actions", BLOCKBREAK_REACH, DataType.ACTIONLIST); - public final static OptionNode BLOCKBREAK_DIRECTION = new OptionNode("direction", BLOCKBREAK, DataType.PARENT); + private final static OptionNode BLOCKBREAK_DIRECTION = new OptionNode("direction", BLOCKBREAK, DataType.PARENT); public final static OptionNode BLOCKBREAK_DIRECTION_CHECK = new OptionNode("check", BLOCKBREAK_DIRECTION, DataType.BOOLEAN); public static final OptionNode BLOCKBREAK_DIRECTION_CHECKINSTABREAKBLOCKS = new OptionNode("checkinstabreakblocks", BLOCKBREAK_DIRECTION, DataType.BOOLEAN); public final static OptionNode BLOCKBREAK_DIRECTION_ACTIONS = new OptionNode("actions", BLOCKBREAK_DIRECTION, DataType.ACTIONLIST); - public final static OptionNode BLOCKPLACE = new OptionNode("blockplace", ROOT, DataType.PARENT); + private final static OptionNode BLOCKPLACE = new OptionNode("blockplace", ROOT, DataType.PARENT); public final static OptionNode BLOCKPLACE_CHECK = new OptionNode("check", BLOCKPLACE, DataType.BOOLEAN); - public final static OptionNode BLOCKPLACE_REACH = new OptionNode("reach", BLOCKPLACE, DataType.PARENT); + private final static OptionNode BLOCKPLACE_REACH = new OptionNode("reach", BLOCKPLACE, DataType.PARENT); public final static OptionNode BLOCKPLACE_REACH_CHECK = new OptionNode("check", BLOCKPLACE_REACH, DataType.BOOLEAN); public final static OptionNode BLOCKPLACE_REACH_LIMIT = new OptionNode("limit", BLOCKPLACE_REACH, DataType.INTEGER); public final static OptionNode BLOCKPLACE_REACH_ACTIONS = new OptionNode("actions", BLOCKPLACE_REACH, DataType.ACTIONLIST); - public final static OptionNode BLOCKPLACE_ONLIQUID = new OptionNode("onliquid", BLOCKPLACE, DataType.PARENT); + private final static OptionNode BLOCKPLACE_ONLIQUID = new OptionNode("onliquid", BLOCKPLACE, DataType.PARENT); public final static OptionNode BLOCKPLACE_ONLIQUID_CHECK = new OptionNode("check", BLOCKPLACE_ONLIQUID, DataType.BOOLEAN); public final static OptionNode BLOCKPLACE_ONLIQUID_ACTIONS = new OptionNode("actions", BLOCKPLACE_ONLIQUID, DataType.ACTIONLIST); - public final static OptionNode CHAT = new OptionNode("chat", ROOT, DataType.PARENT); + private final static OptionNode CHAT = new OptionNode("chat", ROOT, DataType.PARENT); public final static OptionNode CHAT_CHECK = new OptionNode("check", CHAT, DataType.BOOLEAN); - public final static OptionNode CHAT_SPAM = new OptionNode("spam", CHAT, DataType.PARENT); + private final static OptionNode CHAT_SPAM = new OptionNode("spam", CHAT, DataType.PARENT); public final static OptionNode CHAT_SPAM_CHECK = new OptionNode("check", CHAT_SPAM, DataType.BOOLEAN); public final static OptionNode CHAT_SPAM_TIMEFRAME = new OptionNode("timeframe", CHAT_SPAM, DataType.INTEGER); public final static OptionNode CHAT_SPAM_LIMIT = new OptionNode("limit", CHAT_SPAM, DataType.INTEGER); diff --git a/src/cc/co/evenprime/bukkit/nocheat/config/ConfigurationManager.java b/src/cc/co/evenprime/bukkit/nocheat/config/ConfigurationManager.java index 6ac2e6fc..f349f95a 100644 --- a/src/cc/co/evenprime/bukkit/nocheat/config/ConfigurationManager.java +++ b/src/cc/co/evenprime/bukkit/nocheat/config/ConfigurationManager.java @@ -30,7 +30,6 @@ public class ConfigurationManager { private final static String configFileName = "config.txt"; private final static String actionFileName = "actions.txt"; private final static String defaultActionFileName = "default_actions.txt"; - private final static String descriptionsFileName = "descriptions.txt"; private final Map worldnameToConfigCacheMap = new HashMap(); @@ -80,9 +79,9 @@ public class ConfigurationManager { // Parse actions file // MOVE TO ACTIONMANAGER PARSER OR SOMETHING initializeActions(rootConfigFolder, actionManager); - + defaultConfig = new DefaultConfiguration(actionManager); - + // Setup the configuration tree initializeConfig(rootConfigFolder, actionManager); @@ -175,14 +174,14 @@ public class ConfigurationManager { } - public static File getGlobalConfigFile(String rootFolder) { + private static File getGlobalConfigFile(String rootFolder) { File globalConfig = new File(rootFolder, configFileName); return globalConfig; } - public static Map getWorldSpecificConfigFiles(String rootConfigFolder) { + private static Map getWorldSpecificConfigFiles(String rootConfigFolder) { HashMap files = new HashMap(); @@ -206,6 +205,14 @@ public class ConfigurationManager { FileHandler fh = fileToFileHandlerMap.get(logfile); + // this logger will be used ONLY for logging to a single log-file and + // only + // in this plugin, therefore it doesn't need any namespace + Logger l = Logger.getAnonymousLogger(); + l.setLevel(Level.INFO); + // Ignore parent's settings + l.setUseParentHandlers(false); + if(fh == null) { try { try { @@ -221,6 +228,8 @@ public class ConfigurationManager { fh.setFormatter(new LogFileFormatter()); fileToFileHandlerMap.put(logfile, fh); + l.addHandler(fh); + } catch(SecurityException e) { e.printStackTrace(); } catch(IOException e) { @@ -228,15 +237,6 @@ public class ConfigurationManager { } } - // this logger will be used ONLY for logging to a single log-file and - // only - // in this plugin, therefore it doesn't need any namespace - Logger l = Logger.getAnonymousLogger(); - l.setLevel(Level.INFO); - // Ignore parent's settings - l.setUseParentHandlers(false); - l.addHandler(fh); - return l; } @@ -282,17 +282,4 @@ public class ConfigurationManager { return cache; } } - - public static File getDescriptionFile(String rootConfigFolder) { - - return new File(rootConfigFolder, descriptionsFileName); - } - - public static File getDefaultActionFile(String rootConfigFolder) { - return new File(rootConfigFolder, defaultActionFileName); - } - - public static File getActionFile(String rootConfigFolder) { - return new File(rootConfigFolder, actionFileName); - } } diff --git a/src/cc/co/evenprime/bukkit/nocheat/config/FlatFileConfiguration.java b/src/cc/co/evenprime/bukkit/nocheat/config/FlatFileConfiguration.java index 4460f81e..8b09fab9 100644 --- a/src/cc/co/evenprime/bukkit/nocheat/config/FlatFileConfiguration.java +++ b/src/cc/co/evenprime/bukkit/nocheat/config/FlatFileConfiguration.java @@ -221,11 +221,11 @@ public class FlatFileConfiguration extends Configuration { private void saveActionList(BufferedWriter w, String id, ActionList actionList) throws IOException { for(Integer treshold : actionList.getTresholds()) { - String s = ""; + StringBuilder s = new StringBuilder(""); for(Action s2 : actionList.getActions(treshold)) { - s = s + " " + s2.name; + s.append(" ").append(s2.name); } - saveValue(w, id + "." + treshold, s.trim()); + saveValue(w, id + "." + treshold, s.toString().trim()); } } @@ -238,7 +238,7 @@ public class FlatFileConfiguration extends Configuration { w.write(id + " = " + value + "\r\n"); } - protected String removeQuotationMarks(String s) { + private String removeQuotationMarks(String s) { s = s.trim(); @@ -251,7 +251,7 @@ public class FlatFileConfiguration extends Configuration { return s; } - protected String addQuotationMarks(String s) { + private String addQuotationMarks(String s) { return "\"" + s + "\""; } diff --git a/src/cc/co/evenprime/bukkit/nocheat/config/OptionNode.java b/src/cc/co/evenprime/bukkit/nocheat/config/OptionNode.java index ed81a6ed..5ba47ce3 100644 --- a/src/cc/co/evenprime/bukkit/nocheat/config/OptionNode.java +++ b/src/cc/co/evenprime/bukkit/nocheat/config/OptionNode.java @@ -30,7 +30,7 @@ public class OptionNode { this.type = type; } - public void addChild(OptionNode node) { + private void addChild(OptionNode node) { if(this.type != DataType.PARENT) { throw new IllegalArgumentException("Can't a child to a leaf node."); } diff --git a/src/cc/co/evenprime/bukkit/nocheat/data/BaseData.java b/src/cc/co/evenprime/bukkit/nocheat/data/BaseData.java new file mode 100644 index 00000000..deb8f250 --- /dev/null +++ b/src/cc/co/evenprime/bukkit/nocheat/data/BaseData.java @@ -0,0 +1,37 @@ +package cc.co.evenprime.bukkit.nocheat.data; + +import org.bukkit.entity.Player; + + +public class BaseData { + + public final BlockBreakData blockbreak; + public final BlockPlaceData blockplace; + public final ChatData chat; + public final LogData log; + public final MovingData moving; + + private final Data[] data; + + public BaseData() { + this.blockbreak = new BlockBreakData(); + this.blockplace = new BlockPlaceData(); + this.chat = new ChatData(); + this.log = new LogData(); + this.moving = new MovingData(); + + data = new Data[] { this.blockbreak, this.blockplace, this.chat, this.log, this.moving }; + } + + public void clearCriticalData() { + for(Data d : data) { + d.clearCriticalData(); + } + } + + public void initialize(Player player) { + for(Data d : data) { + d.initialize(player); + } + } +} diff --git a/src/cc/co/evenprime/bukkit/nocheat/data/BlockBreakData.java b/src/cc/co/evenprime/bukkit/nocheat/data/BlockBreakData.java index cebe5189..f7a490c8 100644 --- a/src/cc/co/evenprime/bukkit/nocheat/data/BlockBreakData.java +++ b/src/cc/co/evenprime/bukkit/nocheat/data/BlockBreakData.java @@ -8,11 +8,11 @@ import org.bukkit.Location; * @author Evenprime * */ -public class BlockBreakData { +public class BlockBreakData extends Data { - public double reachViolationLevel = 0.0D; - - public double directionViolationLevel = 0.0D; + public double reachViolationLevel = 0.0D; + public double directionViolationLevel = 0.0D; public Location instaBrokeBlockLocation = null; + } diff --git a/src/cc/co/evenprime/bukkit/nocheat/data/BlockPlaceData.java b/src/cc/co/evenprime/bukkit/nocheat/data/BlockPlaceData.java index 35fda493..959a2758 100644 --- a/src/cc/co/evenprime/bukkit/nocheat/data/BlockPlaceData.java +++ b/src/cc/co/evenprime/bukkit/nocheat/data/BlockPlaceData.java @@ -3,10 +3,10 @@ package cc.co.evenprime.bukkit.nocheat.data; /** * * @author Evenprime - * + * */ -public class BlockPlaceData { +public class BlockPlaceData extends Data { public double onliquidViolationLevel = 0.0D; - public double reachViolationLevel = 0.0D; + public double reachViolationLevel = 0.0D; } diff --git a/src/cc/co/evenprime/bukkit/nocheat/data/ChatData.java b/src/cc/co/evenprime/bukkit/nocheat/data/ChatData.java index c6cbb310..f5fad896 100644 --- a/src/cc/co/evenprime/bukkit/nocheat/data/ChatData.java +++ b/src/cc/co/evenprime/bukkit/nocheat/data/ChatData.java @@ -3,11 +3,11 @@ package cc.co.evenprime.bukkit.nocheat.data; /** * * @author Evenprime - * + * */ -public class ChatData { +public class ChatData extends Data { public int messageCount = 0; public int spamLasttime = 0; - + } diff --git a/src/cc/co/evenprime/bukkit/nocheat/data/Data.java b/src/cc/co/evenprime/bukkit/nocheat/data/Data.java new file mode 100644 index 00000000..8461cff2 --- /dev/null +++ b/src/cc/co/evenprime/bukkit/nocheat/data/Data.java @@ -0,0 +1,21 @@ +package cc.co.evenprime.bukkit.nocheat.data; + +import org.bukkit.entity.Player; + +/** + * + * Every class that is extending this has to implement an empty Constructor() + * + * @author Evenprime + * + */ +public abstract class Data { + + public void initialize(Player player) { + + } + + public void clearCriticalData() { + + } +} diff --git a/src/cc/co/evenprime/bukkit/nocheat/data/DataManager.java b/src/cc/co/evenprime/bukkit/nocheat/data/DataManager.java index c9f84cfa..fb123495 100644 --- a/src/cc/co/evenprime/bukkit/nocheat/data/DataManager.java +++ b/src/cc/co/evenprime/bukkit/nocheat/data/DataManager.java @@ -7,100 +7,55 @@ import org.bukkit.entity.Player; /** * Provide secure access to player-specific data objects for various checks or - * check groups - * - * @author Evenprime - * + * check groups. */ public class DataManager { // Store data between Events - private final Map movingData = new HashMap(); - private final Map blockbreakData = new HashMap(); - private final Map blockPlaceData = new HashMap(); - private final Map chatData = new HashMap(); - private final Map logData = new HashMap(); + private final Map map; public DataManager() { - + this.map = new HashMap(); } - public MovingData getMovingData(Player player) { + /** + * Get a data object of the specified class. If none is stored yet, create + * one. + */ + public BaseData getData(Player player) { - MovingData data; - - // intentionally not thread-safe, because bukkit events are handled - // in sequence anyway, so zero chance of two move events of the same - // player being handled at the same time - data = movingData.get(player); - if(data == null) { - data = new MovingData(); - movingData.put(player, data); - } - - return data; - } - - public BlockBreakData getBlockBreakData(Player player) { - - BlockBreakData data; - - // intentionally not thread-safe, because bukkit events are handled - // in sequence anyway, so zero chance of two move events of the same - // player being handled at the same time - data = blockbreakData.get(player); - if(data == null) { - data = new BlockBreakData(); - blockbreakData.put(player, data); - } - - return data; - } - - public BlockPlaceData getBlockPlaceData(Player player) { - BlockPlaceData data; + BaseData data = this.map.get(player); // intentionally not thread-safe, because bukkit events are handled // in sequence anyway, so zero chance of two events of the same // player being handled at the same time - data = blockPlaceData.get(player); + // And if it still happens by accident, it's no real loss anyway, as + // losing data of one instance doesn't really hurt at all if(data == null) { - data = new BlockPlaceData(); - blockPlaceData.put(player, data); + data = new BaseData(); + data.initialize(player); + this.map.put(player, data); } return data; } - public ChatData getChatData(Player player) { - ChatData data; - - // intentionally not thread-safe, because bukkit events are handled - // in sequence anyway, so zero chance of two events of the same - // player being handled at the same time - // And if it still happens by accident, it's no real loss anyway - data = chatData.get(player); - if(data == null) { - data = new ChatData(); - chatData.put(player, data); - } - - return data; + /** + * Remove all data Objects of a specific player + * + * @param player + */ + public void removeDataForPlayer(Player player) { + this.map.remove(player); } - public LogData getLogData(Player player) { - LogData data; - - // intentionally not thread-safe, because bukkit events are handled - // in sequence anyway, so zero chance of two events of the same - // player being handled at the same time - // And if it still happens by accident, it's no real loss anyway - data = logData.get(player); - if(data == null) { - data = new LogData(player); - logData.put(player, data); + /** + * Reset data that may cause problems after e.g. changing the config + * + */ + public void resetAllCriticalData() { + for(BaseData b : this.map.values()) { + b.clearCriticalData(); } - - return data; } } diff --git a/src/cc/co/evenprime/bukkit/nocheat/data/LogData.java b/src/cc/co/evenprime/bukkit/nocheat/data/LogData.java index 96f06437..ebf25fde 100644 --- a/src/cc/co/evenprime/bukkit/nocheat/data/LogData.java +++ b/src/cc/co/evenprime/bukkit/nocheat/data/LogData.java @@ -1,32 +1,28 @@ package cc.co.evenprime.bukkit.nocheat.data; import org.bukkit.Location; -import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.entity.Player; /** * Everything that could be relevant for logging or consolecommand actions - * - * @author Evenprime - * */ -public class LogData { +public class LogData extends Data { - // The player never changes - public final Player player; - public String check; - public int violationLevel; + public Player player; + public String check; + public int violationLevel; public Location toLocation; - public int packets; - public String text; - public Material placedMaterial; - public Block placed; - public Block placedAgainst; - public double reachdistance; - public float falldistance; - - public LogData(Player player) { + public int packets; + public String text; + public Block placed; + public Block placedAgainst; + public double reachdistance; + public float falldistance; + + public void initialize(Player player) { this.player = player; + check = ""; + toLocation = player.getLocation(); } } diff --git a/src/cc/co/evenprime/bukkit/nocheat/data/MovingData.java b/src/cc/co/evenprime/bukkit/nocheat/data/MovingData.java index 7058d34e..9a296fe5 100644 --- a/src/cc/co/evenprime/bukkit/nocheat/data/MovingData.java +++ b/src/cc/co/evenprime/bukkit/nocheat/data/MovingData.java @@ -1,41 +1,59 @@ package cc.co.evenprime.bukkit.nocheat.data; import org.bukkit.Location; +import org.bukkit.entity.Player; /** - * Playerspecific data for the moving check group - * - * @author Evenprime - * + * Player specific data for the moving check group */ -public class MovingData { +public class MovingData extends Data { - public int jumpPhase = 0; + public int jumpPhase; - public Location runflySetBackPoint = null; + public Location runflySetBackPoint; - public double runflyViolationLevel = 0.0D; + public double runflyViolationLevel; - public double vertFreedom = 0.0D; - public double vertVelocity = 0.0D; - public int vertVelocityCounter = 0; - public double horizFreedom = 0.0D; - public int horizVelocityCounter = 0; + public double vertFreedom; + public double vertVelocity; + public int vertVelocityCounter; + public double horizFreedom; + public int horizVelocityCounter; - public double nofallViolationLevel = 0.0D; - public float fallDistance = 0.0F; - public float lastAddedFallDistance = 0.0F; + public double nofallViolationLevel; + public float fallDistance; + public float lastAddedFallDistance; public double horizontalBuffer; - public int bunnyhopdelay = 0; + public int bunnyhopdelay; public int morePacketsCounter; - public int morePacketsBuffer = 50; + public int morePacketsBuffer; public Location morePacketsSetbackPoint; - public double morePacketsViolationLevel = 0; + public double morePacketsViolationLevel; public Location teleportTo; - public int lastElapsedIngameSeconds = 0; + public int lastElapsedIngameSeconds; + @Override + public void initialize(Player player) { + runflySetBackPoint = player.getLocation(); + morePacketsBuffer = 50; + morePacketsSetbackPoint = player.getLocation(); + } + + @Override + public void clearCriticalData() { + teleportTo = null; + jumpPhase = 0; + runflySetBackPoint = null; + fallDistance = 0; + lastAddedFallDistance = 0; + bunnyhopdelay = 0; + morePacketsBuffer = 50; + morePacketsSetbackPoint = null; + lastElapsedIngameSeconds = 0; + morePacketsCounter = 0; + } } diff --git a/src/cc/co/evenprime/bukkit/nocheat/events/BlockBreakEventManager.java b/src/cc/co/evenprime/bukkit/nocheat/events/BlockBreakEventManager.java index 79ab9978..266fb4f2 100644 --- a/src/cc/co/evenprime/bukkit/nocheat/events/BlockBreakEventManager.java +++ b/src/cc/co/evenprime/bukkit/nocheat/events/BlockBreakEventManager.java @@ -27,8 +27,8 @@ import cc.co.evenprime.bukkit.nocheat.data.BlockBreakData; */ public class BlockBreakEventManager extends BlockListener implements EventManager { - private final BlockBreakCheck blockBreakCheck; - private final NoCheat plugin; + private final BlockBreakCheck blockBreakCheck; + private final NoCheat plugin; public BlockBreakEventManager(NoCheat plugin) { @@ -57,7 +57,7 @@ public class BlockBreakEventManager extends BlockListener implements EventManage boolean cancel = false; // Get the player-specific stored data that applies here - final BlockBreakData data = plugin.getDataManager().getBlockBreakData(player); + final BlockBreakData data = plugin.getDataManager().getData(player).blockbreak; cancel = blockBreakCheck.check(player, event.getBlock(), data, cc); @@ -77,14 +77,13 @@ public class BlockBreakEventManager extends BlockListener implements EventManage final Player player = event.getPlayer(); // Get the player-specific stored data that applies here - final BlockBreakData data = plugin.getDataManager().getBlockBreakData(player); + final BlockBreakData data = plugin.getDataManager().getData(player).blockbreak; // Remember this location. We ignore block breaks in the block-break // direction check that are insta-breaks data.instaBrokeBlockLocation = event.getBlock().getLocation(); } - @Override public List getActiveChecks(ConfigurationCache cc) { LinkedList s = new LinkedList(); @@ -96,10 +95,9 @@ public class BlockBreakEventManager extends BlockListener implements EventManage return s; } - @Override public List getInactiveChecks(ConfigurationCache cc) { LinkedList s = new LinkedList(); - + if(!(cc.blockbreak.check && cc.blockbreak.directionCheck)) s.add("blockbreak.direction"); if(!(cc.blockbreak.check && cc.blockbreak.reachCheck)) diff --git a/src/cc/co/evenprime/bukkit/nocheat/events/BlockPlaceEventManager.java b/src/cc/co/evenprime/bukkit/nocheat/events/BlockPlaceEventManager.java index d1a9afc3..c8da7591 100644 --- a/src/cc/co/evenprime/bukkit/nocheat/events/BlockPlaceEventManager.java +++ b/src/cc/co/evenprime/bukkit/nocheat/events/BlockPlaceEventManager.java @@ -33,7 +33,7 @@ public class BlockPlaceEventManager extends BlockListener implements EventManage public BlockPlaceEventManager(NoCheat p) { this.plugin = p; - + this.movingCheck = new RunFlyCheck(plugin); this.blockPlaceCheck = new BlockPlaceCheck(plugin); @@ -49,7 +49,7 @@ public class BlockPlaceEventManager extends BlockListener implements EventManage if(!event.isCancelled()) { final Player player = event.getPlayer(); // Get the player-specific stored data that applies here - movingCheck.blockPlaced(player, plugin.getDataManager().getMovingData(player), event.getBlockPlaced()); + movingCheck.blockPlaced(player, plugin.getDataManager().getData(player).moving, event.getBlockPlaced()); } } }, Priority.Monitor, plugin); @@ -67,7 +67,7 @@ public class BlockPlaceEventManager extends BlockListener implements EventManage // Find out if checks need to be done for that player if(cc.blockplace.check && !player.hasPermission(Permissions.BLOCKPLACE)) { - cancel = blockPlaceCheck.check(player, event.getBlockPlaced(), event.getBlockAgainst(), plugin.getDataManager().getBlockPlaceData(player), cc); + cancel = blockPlaceCheck.check(player, event.getBlockPlaced(), event.getBlockAgainst(), plugin.getDataManager().getData(player).blockplace, cc); } if(cancel) { @@ -76,7 +76,6 @@ public class BlockPlaceEventManager extends BlockListener implements EventManage } } - @Override public List getActiveChecks(ConfigurationCache cc) { LinkedList s = new LinkedList(); @@ -88,7 +87,6 @@ public class BlockPlaceEventManager extends BlockListener implements EventManage return s; } - @Override public List getInactiveChecks(ConfigurationCache cc) { LinkedList s = new LinkedList(); diff --git a/src/cc/co/evenprime/bukkit/nocheat/events/EventManager.java b/src/cc/co/evenprime/bukkit/nocheat/events/EventManager.java index 035a0399..b4280903 100644 --- a/src/cc/co/evenprime/bukkit/nocheat/events/EventManager.java +++ b/src/cc/co/evenprime/bukkit/nocheat/events/EventManager.java @@ -8,5 +8,6 @@ import cc.co.evenprime.bukkit.nocheat.config.cache.ConfigurationCache; public interface EventManager { public List getActiveChecks(ConfigurationCache cc); + public List getInactiveChecks(ConfigurationCache cc); } diff --git a/src/cc/co/evenprime/bukkit/nocheat/events/PlayerChatEventManager.java b/src/cc/co/evenprime/bukkit/nocheat/events/PlayerChatEventManager.java index 0e0c441e..49fa9a02 100644 --- a/src/cc/co/evenprime/bukkit/nocheat/events/PlayerChatEventManager.java +++ b/src/cc/co/evenprime/bukkit/nocheat/events/PlayerChatEventManager.java @@ -16,7 +16,6 @@ import cc.co.evenprime.bukkit.nocheat.NoCheat; import cc.co.evenprime.bukkit.nocheat.checks.chat.ChatCheck; import cc.co.evenprime.bukkit.nocheat.config.Permissions; import cc.co.evenprime.bukkit.nocheat.config.cache.ConfigurationCache; -import cc.co.evenprime.bukkit.nocheat.data.ChatData; /** * @@ -54,10 +53,7 @@ public class PlayerChatEventManager extends PlayerListener implements EventManag boolean cancel = false; - // Get the player-specific stored data that applies here - final ChatData data = plugin.getDataManager().getChatData(player); - - cancel = chatCheck.check(player, event.getMessage(), data, cc); + cancel = chatCheck.check(player, event.getMessage(), plugin.getDataManager().getData(player).chat, cc); if(cancel) { event.setCancelled(true); @@ -70,7 +66,6 @@ public class PlayerChatEventManager extends PlayerListener implements EventManag onPlayerChat(event); } - @Override public List getActiveChecks(ConfigurationCache cc) { LinkedList s = new LinkedList(); @@ -79,7 +74,6 @@ public class PlayerChatEventManager extends PlayerListener implements EventManag return s; } - @Override public List getInactiveChecks(ConfigurationCache cc) { LinkedList s = new LinkedList(); diff --git a/src/cc/co/evenprime/bukkit/nocheat/events/PlayerMoveEventManager.java b/src/cc/co/evenprime/bukkit/nocheat/events/PlayerMoveEventManager.java index 5b47dc2d..5482536f 100644 --- a/src/cc/co/evenprime/bukkit/nocheat/events/PlayerMoveEventManager.java +++ b/src/cc/co/evenprime/bukkit/nocheat/events/PlayerMoveEventManager.java @@ -60,7 +60,7 @@ public class PlayerMoveEventManager extends PlayerListener implements EventManag if(cc.moving.check && !player.hasPermission(Permissions.MOVE)) { // Get the player-specific stored data that applies here - final MovingData data = plugin.getDataManager().getMovingData(player); + final MovingData data = plugin.getDataManager().getData(player).moving; // Get some data that's needed from this event, to avoid passing the // event itself on to the checks (and risk to @@ -96,7 +96,7 @@ public class PlayerMoveEventManager extends PlayerListener implements EventManag if(!event.isCancelled()) { Player player = event.getPlayer(); - MovingData mdata = plugin.getDataManager().getMovingData(player); + MovingData mdata = plugin.getDataManager().getData(player).moving; Vector v = event.getVelocity(); @@ -106,7 +106,7 @@ public class PlayerMoveEventManager extends PlayerListener implements EventManag mdata.vertFreedom += mdata.vertVelocity; } - mdata.vertVelocityCounter = 50; + mdata.vertVelocityCounter = 50; newVal = Math.sqrt(Math.pow(v.getX(), 2) + Math.pow(v.getZ(), 2)); if(newVal > 0.0D) { @@ -116,7 +116,6 @@ public class PlayerMoveEventManager extends PlayerListener implements EventManag } } - @Override public List getActiveChecks(ConfigurationCache cc) { LinkedList s = new LinkedList(); @@ -136,7 +135,6 @@ public class PlayerMoveEventManager extends PlayerListener implements EventManag return s; } - @Override public List getInactiveChecks(ConfigurationCache cc) { LinkedList s = new LinkedList(); diff --git a/src/cc/co/evenprime/bukkit/nocheat/events/PlayerQuitEventManager.java b/src/cc/co/evenprime/bukkit/nocheat/events/PlayerQuitEventManager.java new file mode 100644 index 00000000..a052041f --- /dev/null +++ b/src/cc/co/evenprime/bukkit/nocheat/events/PlayerQuitEventManager.java @@ -0,0 +1,42 @@ +package cc.co.evenprime.bukkit.nocheat.events; + +import java.util.Collections; +import java.util.List; + +import org.bukkit.Bukkit; +import org.bukkit.event.Event; +import org.bukkit.event.Event.Priority; +import org.bukkit.event.player.PlayerListener; +import org.bukkit.event.player.PlayerQuitEvent; +import org.bukkit.plugin.PluginManager; + +import cc.co.evenprime.bukkit.nocheat.NoCheat; +import cc.co.evenprime.bukkit.nocheat.config.cache.ConfigurationCache; + +public class PlayerQuitEventManager extends PlayerListener implements EventManager { + + private final NoCheat plugin; + public PlayerQuitEventManager(NoCheat plugin) { + this.plugin = plugin; + + PluginManager pm = Bukkit.getServer().getPluginManager(); + + pm.registerEvent(Event.Type.PLAYER_QUIT, this, Priority.Monitor, plugin); + } + + @Override + public void onPlayerQuit(PlayerQuitEvent event) { + // Get rid of the players stored data when disconnecting him + plugin.getDataManager().removeDataForPlayer(event.getPlayer()); + } + + + public List getActiveChecks(ConfigurationCache cc) { + return Collections.emptyList(); + } + + public List getInactiveChecks(ConfigurationCache cc) { + return Collections.emptyList(); + } + +} diff --git a/src/cc/co/evenprime/bukkit/nocheat/events/PlayerTeleportEventManager.java b/src/cc/co/evenprime/bukkit/nocheat/events/PlayerTeleportEventManager.java index 9b9d490a..15a6e96e 100644 --- a/src/cc/co/evenprime/bukkit/nocheat/events/PlayerTeleportEventManager.java +++ b/src/cc/co/evenprime/bukkit/nocheat/events/PlayerTeleportEventManager.java @@ -29,7 +29,7 @@ import cc.co.evenprime.bukkit.nocheat.data.MovingData; public class PlayerTeleportEventManager extends PlayerListener implements EventManager { private final NoCheat plugin; - + public PlayerTeleportEventManager(NoCheat p) { this.plugin = p; @@ -48,9 +48,9 @@ public class PlayerTeleportEventManager extends PlayerListener implements EventM @Override public void onPlayerTeleport(PlayerTeleportEvent event) { - final MovingData data2 = plugin.getDataManager().getMovingData(event.getPlayer()); + final MovingData data = plugin.getDataManager().getData(event.getPlayer()).moving; if(event.isCancelled()) { - if(data2.teleportTo != null && data2.teleportTo.equals(event.getTo())) { + if(data.teleportTo != null && data.teleportTo.equals(event.getTo())) { event.setCancelled(false); } } @@ -60,13 +60,15 @@ public class PlayerTeleportEventManager extends PlayerListener implements EventM @Override public void onPlayerTeleport(PlayerTeleportEvent event) { - // Intentionally not check for cancelled state, may help with problems with other plugins... - handleTeleportation(event.getPlayer(), event.getTo()); + if(!event.isCancelled()) { + handleTeleportation(event.getPlayer(), event.getTo()); + } } public void onPlayerPortal(PlayerPortalEvent event) { - // Intentionally not check for cancelled state, may help with problems with other plugins... - handleTeleportation(event.getPlayer(), event.getTo()); + if(!event.isCancelled()) { + handleTeleportation(event.getPlayer(), event.getTo()); + } } public void onPlayerRespawn(PlayerRespawnEvent event) { @@ -79,26 +81,16 @@ public class PlayerTeleportEventManager extends PlayerListener implements EventM handleTeleportation(event.getPlayer(), event.getFrom()); } } - + private void handleTeleportation(Player player, Location newLocation) { - /********* Moving check ************/ - final MovingData data = plugin.getDataManager().getMovingData(player); - - data.runflySetBackPoint = null; - data.morePacketsCounter = 0; - data.morePacketsSetbackPoint = null; - data.jumpPhase = 0; - data.fallDistance = 0F; - data.lastAddedFallDistance = 0F; + plugin.getDataManager().getData(player).clearCriticalData(); } - @Override public List getActiveChecks(ConfigurationCache cc) { return Collections.emptyList(); } - @Override public List getInactiveChecks(ConfigurationCache cc) { return Collections.emptyList(); } diff --git a/src/cc/co/evenprime/bukkit/nocheat/log/LogManager.java b/src/cc/co/evenprime/bukkit/nocheat/log/LogManager.java index d067e8eb..c8760250 100644 --- a/src/cc/co/evenprime/bukkit/nocheat/log/LogManager.java +++ b/src/cc/co/evenprime/bukkit/nocheat/log/LogManager.java @@ -66,7 +66,7 @@ public class LogManager { * @param level * @param message */ - public void logToChat(LogLevel level, String message) { + private void logToChat(LogLevel level, String message) { for(Player player : Bukkit.getServer().getOnlinePlayers()) { if(player.hasPermission(Permissions.ADMIN_CHATLOG)) { player.sendMessage(message); @@ -81,7 +81,7 @@ public class LogManager { * @param message * @param fileLogger */ - public void logToFile(LogLevel level, String message, Logger fileLogger) { + private void logToFile(LogLevel level, String message, Logger fileLogger) { fileLogger.log(level.level, message); } }