diff --git a/plugin.yml b/plugin.yml index 467dbb3b..fd258768 100644 --- a/plugin.yml +++ b/plugin.yml @@ -3,7 +3,7 @@ name: NoCheat author: Evenprime main: cc.co.evenprime.bukkit.nocheat.NoCheat -version: 2.14a +version: 2.15 commands: nocheat: diff --git a/src/cc/co/evenprime/bukkit/nocheat/NoCheat.java b/src/cc/co/evenprime/bukkit/nocheat/NoCheat.java index f9242691..6f53784b 100644 --- a/src/cc/co/evenprime/bukkit/nocheat/NoCheat.java +++ b/src/cc/co/evenprime/bukkit/nocheat/NoCheat.java @@ -115,6 +115,7 @@ public class NoCheat extends JavaPlugin { eventManagers.add(new EntityDamageEventManager(this)); eventManagers.add(new SwingEventManager(this)); TimedEventManager m = new TimedEventManager(this); + taskId = m.taskId; // There's a bukkit task, remember its id eventManagers.add(m); // Then set up a task to monitor server lag @@ -150,10 +151,6 @@ public class NoCheat extends JavaPlugin { data.clearCriticalData(playerName); } - public void playerJoined(String playerName) { - clearCriticalData(playerName); - } - public Performance getPerformance(Type type) { return performance.get(type); } @@ -192,10 +189,9 @@ public class NoCheat extends JavaPlugin { if(log != null) { log.logToConsole(low, message); } - } - public void reloadConfig() { + public void reloadConfiguration() { conf.cleanup(); this.conf = new ConfigurationManager(this.getDataFolder().getPath()); data.cleanDataMap(); diff --git a/src/cc/co/evenprime/bukkit/nocheat/actions/ActionManager.java b/src/cc/co/evenprime/bukkit/nocheat/actions/ActionManager.java index 6380f648..d35e702a 100644 --- a/src/cc/co/evenprime/bukkit/nocheat/actions/ActionManager.java +++ b/src/cc/co/evenprime/bukkit/nocheat/actions/ActionManager.java @@ -11,7 +11,6 @@ import cc.co.evenprime.bukkit.nocheat.config.cache.ConfigurationCache; import cc.co.evenprime.bukkit.nocheat.config.util.ActionList; import cc.co.evenprime.bukkit.nocheat.data.BaseData; import cc.co.evenprime.bukkit.nocheat.data.ExecutionHistory; -import cc.co.evenprime.bukkit.nocheat.data.LogData; /** * Will trace the history of action executions to decide if an action 'really' @@ -40,11 +39,11 @@ public class ActionManager { if(history.executeAction(ac, time)) { if(ac instanceof LogAction) { - executeLogAction((LogAction) ac, data.log, cc); + executeLogAction((LogAction) ac, data, cc); } else if(ac instanceof SpecialAction) { special = true; } else if(ac instanceof ConsolecommandAction) { - executeConsoleCommand((ConsolecommandAction) ac, data.log); + executeConsoleCommand((ConsolecommandAction) ac, data); } } } @@ -52,11 +51,11 @@ public class ActionManager { return special; } - private void executeLogAction(LogAction l, LogData data, ConfigurationCache cc) { + private void executeLogAction(LogAction l, BaseData data, ConfigurationCache cc) { plugin.log(l.level, cc.logging.prefix + l.getLogMessage(data), cc); } - private void executeConsoleCommand(ConsolecommandAction action, LogData data) { + private void executeConsoleCommand(ConsolecommandAction action, BaseData data) { String command = action.getCommand(data); try { plugin.getServer().dispatchCommand(plugin.getServer().getConsoleSender(), command); 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 0649f5b0..bb5daf81 100644 --- a/src/cc/co/evenprime/bukkit/nocheat/actions/types/ActionWithParameters.java +++ b/src/cc/co/evenprime/bukkit/nocheat/actions/types/ActionWithParameters.java @@ -8,6 +8,7 @@ import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.entity.Player; +import cc.co.evenprime.bukkit.nocheat.data.BaseData; import cc.co.evenprime.bukkit.nocheat.data.LogData; import cc.co.evenprime.bukkit.nocheat.data.PreciseLocation; import cc.co.evenprime.bukkit.nocheat.data.SimpleLocation; @@ -83,7 +84,7 @@ public abstract class ActionWithParameters extends Action { * @param data * @return */ - protected String getMessage(final LogData data) { + protected String getMessage(final BaseData data) { StringBuilder log = new StringBuilder(100); // Should be big enough most // of the time @@ -98,9 +99,11 @@ public abstract class ActionWithParameters extends Action { return log.toString(); } - private String getParameter(WildCard wildcard, LogData data) { + private String getParameter(WildCard wildcard, BaseData bdata) { // The == is correct here, as these really are identical objects, not // only equal + final LogData data = bdata.log; + switch (wildcard) { case PLAYER: @@ -163,7 +166,7 @@ public abstract class ActionWithParameters extends Action { return data.text; case PLACE_LOCATION: { - SimpleLocation l = data.placedLocation; + SimpleLocation l = bdata.blockplace.blockPlaced; if(l.isSet()) { return String.format(Locale.US, "%d %d %d", l.x, l.y, l.z); } else { @@ -172,7 +175,7 @@ public abstract class ActionWithParameters extends Action { } case PLACE_AGAINST: { - SimpleLocation l = data.placedAgainstLocation; + SimpleLocation l = bdata.blockplace.blockPlacedAgainst; if(l.isSet()) { return String.format(Locale.US, "%d %d %d", l.x, l.y, l.z); } else { @@ -181,7 +184,7 @@ public abstract class ActionWithParameters extends Action { } case BLOCK_TYPE: { - Material type = data.placedType; + Material type = bdata.blockplace.placedType; if(type == null) { return "null"; } diff --git a/src/cc/co/evenprime/bukkit/nocheat/actions/types/ConsolecommandAction.java b/src/cc/co/evenprime/bukkit/nocheat/actions/types/ConsolecommandAction.java index 0c5a9e15..e9d7fccf 100644 --- a/src/cc/co/evenprime/bukkit/nocheat/actions/types/ConsolecommandAction.java +++ b/src/cc/co/evenprime/bukkit/nocheat/actions/types/ConsolecommandAction.java @@ -1,6 +1,6 @@ package cc.co.evenprime.bukkit.nocheat.actions.types; -import cc.co.evenprime.bukkit.nocheat.data.LogData; +import cc.co.evenprime.bukkit.nocheat.data.BaseData; /** * Execute a command by imitating an admin typing the command directly into the @@ -14,8 +14,8 @@ public class ConsolecommandAction extends ActionWithParameters { } - public String getCommand(LogData ldata) { + public String getCommand(BaseData data) { - return super.getMessage(ldata); + return super.getMessage(data); } } diff --git a/src/cc/co/evenprime/bukkit/nocheat/actions/types/LogAction.java b/src/cc/co/evenprime/bukkit/nocheat/actions/types/LogAction.java index 8e6034c7..3fff5891 100644 --- a/src/cc/co/evenprime/bukkit/nocheat/actions/types/LogAction.java +++ b/src/cc/co/evenprime/bukkit/nocheat/actions/types/LogAction.java @@ -1,6 +1,6 @@ package cc.co.evenprime.bukkit.nocheat.actions.types; -import cc.co.evenprime.bukkit.nocheat.data.LogData; +import cc.co.evenprime.bukkit.nocheat.data.BaseData; import cc.co.evenprime.bukkit.nocheat.log.Colors; import cc.co.evenprime.bukkit.nocheat.log.LogLevel; @@ -19,7 +19,7 @@ public class LogAction extends ActionWithParameters { this.level = level; } - public String getLogMessage(final LogData ldata) { - return super.getMessage(ldata); + public String getLogMessage(final BaseData data) { + return super.getMessage(data); } } diff --git a/src/cc/co/evenprime/bukkit/nocheat/checks/blockplace/BlockPlaceCheck.java b/src/cc/co/evenprime/bukkit/nocheat/checks/blockplace/BlockPlaceCheck.java index 9dd8344a..72982f99 100644 --- a/src/cc/co/evenprime/bukkit/nocheat/checks/blockplace/BlockPlaceCheck.java +++ b/src/cc/co/evenprime/bukkit/nocheat/checks/blockplace/BlockPlaceCheck.java @@ -41,6 +41,7 @@ public class BlockPlaceCheck { if(blockPlaced != null && blockPlacedAgainst != null) { data.blockplace.blockPlaced.set(blockPlaced); data.blockplace.blockPlacedAgainst.set(blockPlacedAgainst); + data.blockplace.placedType = blockPlaced.getType(); if(!cancel && direction) { cancel = directionCheck.check(player, data, cc); @@ -49,10 +50,10 @@ public class BlockPlaceCheck { if(!cancel && reach) { cancel = reachCheck.check(player, data, cc); } - } - if(!cancel && onliquid) { - cancel = onLiquidCheck.check(player, data, blockPlaced, blockPlacedAgainst, cc); + if(!cancel && onliquid) { + cancel = onLiquidCheck.check(player, data, cc); + } } return cancel; 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 f524386d..6a17f828 100644 --- a/src/cc/co/evenprime/bukkit/nocheat/checks/blockplace/OnLiquidCheck.java +++ b/src/cc/co/evenprime/bukkit/nocheat/checks/blockplace/OnLiquidCheck.java @@ -2,7 +2,6 @@ package cc.co.evenprime.bukkit.nocheat.checks.blockplace; import org.bukkit.Material; import org.bukkit.World; -import org.bukkit.block.Block; import org.bukkit.entity.Player; import cc.co.evenprime.bukkit.nocheat.NoCheat; @@ -10,6 +9,7 @@ import cc.co.evenprime.bukkit.nocheat.config.cache.ConfigurationCache; import cc.co.evenprime.bukkit.nocheat.data.BaseData; import cc.co.evenprime.bukkit.nocheat.data.BlockPlaceData; import cc.co.evenprime.bukkit.nocheat.data.LogData; +import cc.co.evenprime.bukkit.nocheat.data.SimpleLocation; /** * @@ -22,29 +22,27 @@ public class OnLiquidCheck { this.plugin = plugin; } - public boolean check(final Player player, final BaseData data, final Block blockPlaced, final Block blockPlacedAgainst, final ConfigurationCache cc) { + public boolean check(final Player player, final BaseData data, final ConfigurationCache cc) { boolean cancel = false; final BlockPlaceData blockplace = data.blockplace; + final SimpleLocation blockplaced = blockplace.blockPlaced; final LogData log = data.log; - - if(blockPlaced == null || blockPlaced.isEmpty() || (blockPlacedAgainst != null && isSolid(blockPlacedAgainst.getTypeId()))) { + + if(isSolid(blockplace.placedType.getId())) { // all ok - } else if(nextToSolid(blockPlaced.getWorld(), blockPlaced.getX(), blockPlaced.getY(), blockPlaced.getZ())) { + } else if(nextToSolid(player.getWorld(), blockplaced.x, blockplaced.y, blockplaced.z)) { // all ok } else { blockplace.onliquidViolationLevel += 1; log.check = "blockplace.onliquid"; - log.placedLocation.set(blockPlaced); - log.placedType = blockPlaced.getType(); - log.placedAgainstLocation.set(blockPlacedAgainst); cancel = plugin.execute(player, cc.blockplace.onliquidActions, (int) blockplace.onliquidViolationLevel, blockplace.history, cc); } blockplace.onliquidViolationLevel *= 0.95D; // Reduce level over - // time + // time return cancel; } diff --git a/src/cc/co/evenprime/bukkit/nocheat/checks/timed/TimedCheck.java b/src/cc/co/evenprime/bukkit/nocheat/checks/timed/TimedCheck.java index abf90a55..5dd4a4a1 100644 --- a/src/cc/co/evenprime/bukkit/nocheat/checks/timed/TimedCheck.java +++ b/src/cc/co/evenprime/bukkit/nocheat/checks/timed/TimedCheck.java @@ -70,7 +70,6 @@ public class TimedCheck { // Enough is enough data.log.check = "timed.godmode"; - data.log.godmodeTicksBehind = data.timed.ticksBehind; cancel = plugin.execute(player, cc.timed.godmodeActions, (int) data.timed.godmodeVL, data.timed.history, cc); diff --git a/src/cc/co/evenprime/bukkit/nocheat/command/CommandHandler.java b/src/cc/co/evenprime/bukkit/nocheat/command/CommandHandler.java index dcd698c4..c81b89a6 100644 --- a/src/cc/co/evenprime/bukkit/nocheat/command/CommandHandler.java +++ b/src/cc/co/evenprime/bukkit/nocheat/command/CommandHandler.java @@ -104,7 +104,7 @@ public class CommandHandler { } sender.sendMessage("[NoCheat] Reloading configuration"); - plugin.reloadConfig(); + plugin.reloadConfiguration(); sender.sendMessage("[NoCheat] Configuration reloaded"); return true; diff --git a/src/cc/co/evenprime/bukkit/nocheat/data/BaseData.java b/src/cc/co/evenprime/bukkit/nocheat/data/BaseData.java index e2466a39..ed440ef2 100644 --- a/src/cc/co/evenprime/bukkit/nocheat/data/BaseData.java +++ b/src/cc/co/evenprime/bukkit/nocheat/data/BaseData.java @@ -12,7 +12,7 @@ public class BaseData extends Data { private final Data[] data; // for convenience - public long lastUsedTime; + protected long lastUsedTime; public boolean armswung; diff --git a/src/cc/co/evenprime/bukkit/nocheat/data/BlockPlaceData.java b/src/cc/co/evenprime/bukkit/nocheat/data/BlockPlaceData.java index 9e0962c9..f127931b 100644 --- a/src/cc/co/evenprime/bukkit/nocheat/data/BlockPlaceData.java +++ b/src/cc/co/evenprime/bukkit/nocheat/data/BlockPlaceData.java @@ -1,5 +1,7 @@ package cc.co.evenprime.bukkit.nocheat.data; +import org.bukkit.Material; + /** * */ @@ -8,10 +10,16 @@ public class BlockPlaceData extends Data { public double onliquidViolationLevel = 0.0D; public double reachViolationLevel = 0.0D; public final ExecutionHistory history = new ExecutionHistory(); - public double noswingVL = 0.0D; public double directionViolationLevel = 0.0D; public long directionLastViolationTime = 0; public final SimpleLocation blockPlacedAgainst = new SimpleLocation(); public final SimpleLocation blockPlaced = new SimpleLocation(); + public Material placedType; + + public void clearCriticalData() { + blockPlacedAgainst.reset(); + blockPlaced.reset(); + placedType = null; + } } diff --git a/src/cc/co/evenprime/bukkit/nocheat/data/LogData.java b/src/cc/co/evenprime/bukkit/nocheat/data/LogData.java index d0430dc2..959907f6 100644 --- a/src/cc/co/evenprime/bukkit/nocheat/data/LogData.java +++ b/src/cc/co/evenprime/bukkit/nocheat/data/LogData.java @@ -1,7 +1,5 @@ package cc.co.evenprime.bukkit.nocheat.data; -import org.bukkit.Material; - /** * Everything that could be relevant for logging or consolecommand actions */ @@ -9,15 +7,10 @@ public class LogData extends Data { public String check; public int violationLevel; - public final PreciseLocation toLocation = new PreciseLocation(); + public final PreciseLocation toLocation = new PreciseLocation(); public int packets; public String text; - public final SimpleLocation placedLocation = new SimpleLocation(); - public Material placedType; - public final SimpleLocation placedAgainstLocation = new SimpleLocation(); public double reachdistance; public float falldistance; public String playerName; - public int godmodeTicksBehind; - } diff --git a/src/cc/co/evenprime/bukkit/nocheat/data/SimpleLocation.java b/src/cc/co/evenprime/bukkit/nocheat/data/SimpleLocation.java index 24c4c7a5..71cec858 100644 --- a/src/cc/co/evenprime/bukkit/nocheat/data/SimpleLocation.java +++ b/src/cc/co/evenprime/bukkit/nocheat/data/SimpleLocation.java @@ -14,7 +14,7 @@ public final class SimpleLocation { public int x; public int y; public int z; - + public SimpleLocation() { reset(); } @@ -34,10 +34,11 @@ public final class SimpleLocation { y = location.getBlockY(); z = location.getBlockZ(); } - + public final boolean isSet() { return x != Integer.MAX_VALUE; } + public final void reset() { x = Integer.MAX_VALUE; y = Integer.MAX_VALUE; diff --git a/src/cc/co/evenprime/bukkit/nocheat/events/TimedEventManager.java b/src/cc/co/evenprime/bukkit/nocheat/events/TimedEventManager.java index dcbd5d0a..21fc279d 100644 --- a/src/cc/co/evenprime/bukkit/nocheat/events/TimedEventManager.java +++ b/src/cc/co/evenprime/bukkit/nocheat/events/TimedEventManager.java @@ -26,7 +26,7 @@ public class TimedEventManager implements EventManager { private final Performance timedPerformance; - public int taskId = -1; + public final int taskId; public TimedEventManager(final NoCheat plugin) { this.plugin = plugin; @@ -36,7 +36,7 @@ public class TimedEventManager implements EventManager { this.timedPerformance = plugin.getPerformance(Type.TIMED); // "register a listener" for passed time - taskId = plugin.getServer().getScheduler().scheduleSyncRepeatingTask(plugin, new Runnable() { + this.taskId = plugin.getServer().getScheduler().scheduleSyncRepeatingTask(plugin, new Runnable() { private int executions = 0; private int loopsize = 10; @@ -83,7 +83,7 @@ public class TimedEventManager implements EventManager { }, 0, 1); } - public void onTimedEvent(Player player, int elapsedTicks) { + private void onTimedEvent(Player player, int elapsedTicks) { // Performance counter setup long nanoTimeStart = 0;