mirror of
https://github.com/NoCheatPlus/NoCheatPlus.git
synced 2025-02-05 06:11:22 +01:00
Expanded the idea of having timeouts to the blockbreak direction
check.
This commit is contained in:
parent
2c27063b75
commit
c87f99262e
@ -12,8 +12,6 @@ import cc.co.evenprime.bukkit.nocheat.data.BaseData;
|
||||
* The DirectionCheck will find out if a player tried to interact with something
|
||||
* that's not in his field of view.
|
||||
*
|
||||
* @author Evenprime
|
||||
*
|
||||
*/
|
||||
public class DirectionCheck {
|
||||
|
||||
@ -26,15 +24,17 @@ public class DirectionCheck {
|
||||
public boolean check(Player player, Block brokenBlock, ConfigurationCache cc) {
|
||||
|
||||
BaseData data = plugin.getPlayerData(player);
|
||||
|
||||
|
||||
// If the block is instabreak and we don't check instabreak, return
|
||||
if(!cc.blockbreak.checkinstabreakblocks && brokenBlock.getLocation().equals(data.blockbreak.instaBrokeBlockLocation)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
boolean cancel = false;
|
||||
|
||||
double off = CheckUtil.directionCheck(player, brokenBlock.getX() + 0.5D, brokenBlock.getY() + 0.5D, brokenBlock.getZ() + 0.5D, 1D, 1D, 0.5D);
|
||||
|
||||
double off = CheckUtil.directionCheck(player, brokenBlock.getX() + 0.5D, brokenBlock.getY() + 0.5D, brokenBlock.getZ() + 0.5D, 1D, 1D, cc.blockbreak.directionPrecision);
|
||||
|
||||
long time = System.currentTimeMillis();
|
||||
|
||||
if(off < 0.1D) {
|
||||
// Player did nothing wrong
|
||||
@ -49,6 +49,16 @@ public class DirectionCheck {
|
||||
data.log.check = "blockbreak.direction";
|
||||
|
||||
cancel = plugin.getActionManager().executeActions(player, cc.blockbreak.directionActions, (int) data.blockbreak.directionViolationLevel, data.blockbreak.history, cc);
|
||||
|
||||
if(cancel) {
|
||||
// Needed to calculate penalty times
|
||||
data.fight.directionLastViolationTime = time;
|
||||
}
|
||||
}
|
||||
|
||||
// If the player is still in penalty time, cancel the event anyway
|
||||
if(data.blockbreak.directionLastViolationTime + cc.blockbreak.directionPenaltyTime >= time) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return cancel;
|
||||
|
@ -15,8 +15,6 @@ import cc.co.evenprime.bukkit.nocheat.log.LogLevel;
|
||||
* methods
|
||||
* to retrieve and store more complex datatypes based on strings.
|
||||
*
|
||||
* @author Evenprime
|
||||
*
|
||||
*/
|
||||
public abstract class Configuration {
|
||||
|
||||
@ -68,7 +66,9 @@ public abstract class Configuration {
|
||||
|
||||
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_CHECKINSTABREAKBLOCKS = new OptionNode("checkinstabreakblocks", BLOCKBREAK_DIRECTION, DataType.BOOLEAN);
|
||||
public final static OptionNode BLOCKBREAK_DIRECTION_PRECISION = new OptionNode("precision", BLOCKBREAK_DIRECTION, DataType.INTEGER);
|
||||
public final static OptionNode BLOCKBREAK_DIRECTION_PENALTYTIME = new OptionNode("penaltytime", BLOCKBREAK_DIRECTION, DataType.INTEGER); ;
|
||||
public final static OptionNode BLOCKBREAK_DIRECTION_ACTIONS = new OptionNode("actions", BLOCKBREAK_DIRECTION, DataType.ACTIONLIST);
|
||||
|
||||
private final static OptionNode BLOCKPLACE = new OptionNode("blockplace", ROOT, DataType.PARENT);
|
||||
@ -93,12 +93,12 @@ public abstract class Configuration {
|
||||
public final static OptionNode CHAT_SPAM_ACTIONS = new OptionNode("actions", CHAT_SPAM, DataType.ACTIONLIST);
|
||||
|
||||
private final static OptionNode FIGHT = new OptionNode("fight", ROOT, DataType.PARENT);
|
||||
public static final OptionNode FIGHT_CHECK = new OptionNode("check", FIGHT, DataType.BOOLEAN);
|
||||
public final static OptionNode FIGHT_CHECK = new OptionNode("check", FIGHT, DataType.BOOLEAN);
|
||||
|
||||
private final static OptionNode FIGHT_DIRECTION = new OptionNode("direction", FIGHT, DataType.PARENT);
|
||||
public final static OptionNode FIGHT_DIRECTION_CHECK = new OptionNode("check", FIGHT_DIRECTION, DataType.BOOLEAN);
|
||||
public static final OptionNode FIGHT_DIRECTION_PRECISION = new OptionNode("precision", FIGHT_DIRECTION, DataType.INTEGER);
|
||||
public static final OptionNode FIGHT_DIRECTION_PENALTYTIME = new OptionNode("penaltytime", FIGHT_DIRECTION, DataType.INTEGER);
|
||||
public final static OptionNode FIGHT_DIRECTION_PRECISION = new OptionNode("precision", FIGHT_DIRECTION, DataType.INTEGER);
|
||||
public final static OptionNode FIGHT_DIRECTION_PENALTYTIME = new OptionNode("penaltytime", FIGHT_DIRECTION, DataType.INTEGER);
|
||||
public final static OptionNode FIGHT_DIRECTION_ACTIONS = new OptionNode("actions", FIGHT_DIRECTION, DataType.ACTIONLIST);
|
||||
|
||||
private final Map<OptionNode, Object> values;
|
||||
|
@ -13,8 +13,6 @@ import cc.co.evenprime.bukkit.nocheat.log.LogLevel;
|
||||
* The place where the structure of the configuration tree is defined, the
|
||||
* default settings are defined, the default files are defined.
|
||||
*
|
||||
* @author Evenprime
|
||||
*
|
||||
*/
|
||||
public class DefaultConfiguration extends Configuration {
|
||||
|
||||
@ -99,6 +97,8 @@ public class DefaultConfiguration extends Configuration {
|
||||
setValue(BLOCKBREAK_DIRECTION_CHECK, true);
|
||||
|
||||
setValue(BLOCKBREAK_DIRECTION_CHECKINSTABREAKBLOCKS, false);
|
||||
setValue(BLOCKBREAK_DIRECTION_PRECISION, 50);
|
||||
setValue(BLOCKBREAK_DIRECTION_PENALTYTIME, 300);
|
||||
|
||||
ActionList directionActionList = new ActionList();
|
||||
directionActionList.setActions(0, action.getActions("directionLog blockbreakCancel".split(" ")));
|
||||
|
@ -9,8 +9,6 @@ import cc.co.evenprime.bukkit.nocheat.config.util.OptionNode;
|
||||
* Textual explainations of options, will be displayed in the gui tool and the
|
||||
* descriptions.txt file.
|
||||
*
|
||||
* @author Evenprime
|
||||
*
|
||||
*/
|
||||
public class Explainations {
|
||||
|
||||
@ -60,6 +58,8 @@ public class Explainations {
|
||||
|
||||
set(Configuration.BLOCKBREAK_DIRECTION_CHECK, "If true, check if a player is looking at the block that he's breaking.");
|
||||
set(Configuration.BLOCKBREAK_DIRECTION_CHECKINSTABREAKBLOCKS, "If true, NoCheat will also check for direction for Instant-Breaking blocks.\nTHIS WILL CAUSE FALSE POSITIVES, when a player keeps his mouse button pressed and moves the mouse fast over the screen.");
|
||||
set(Configuration.BLOCKBREAK_DIRECTION_PRECISION, "Define how precise a player has to hit blocks when mining. Lower values mean more precision, higher values less precision.");
|
||||
set(Configuration.BLOCKBREAK_DIRECTION_PENALTYTIME, "Define how long after a failed attempt to dig a player will be disallowed to break another block. \nUnit is milliseconds, default is 300.");
|
||||
set(Configuration.BLOCKBREAK_DIRECTION_ACTIONS, "What should be done if a player is breaking blocks that are not in his line of sight.\nUnit is number of break(attempt)s outside the line of sight.");
|
||||
|
||||
set(Configuration.BLOCKPLACE_CHECK, "If true, do various checks on BlockPlace events.");
|
||||
|
@ -7,8 +7,6 @@ import cc.co.evenprime.bukkit.nocheat.config.util.ActionList;
|
||||
* Configurations specific for the "BlockBreak" checks
|
||||
* Every world gets one of these assigned to it.
|
||||
*
|
||||
* @author Evenprime
|
||||
*
|
||||
*/
|
||||
public class CCBlockBreak {
|
||||
|
||||
@ -19,6 +17,8 @@ public class CCBlockBreak {
|
||||
public final ActionList reachActions;
|
||||
public final boolean directionCheck;
|
||||
public final ActionList directionActions;
|
||||
public final double directionPrecision;
|
||||
public final long directionPenaltyTime;
|
||||
|
||||
public CCBlockBreak(Configuration data) {
|
||||
|
||||
@ -26,8 +26,11 @@ public class CCBlockBreak {
|
||||
reachCheck = data.getBoolean(Configuration.BLOCKBREAK_REACH_CHECK);
|
||||
reachDistance = ((double) data.getInteger(Configuration.BLOCKBREAK_REACH_LIMIT)) / 100D;
|
||||
reachActions = data.getActionList(Configuration.BLOCKBREAK_REACH_ACTIONS);
|
||||
checkinstabreakblocks = data.getBoolean(Configuration.BLOCKBREAK_DIRECTION_CHECKINSTABREAKBLOCKS);
|
||||
checkinstabreakblocks = data.getBoolean(Configuration.BLOCKBREAK_DIRECTION_CHECKINSTABREAKBLOCKS);
|
||||
directionCheck = data.getBoolean(Configuration.BLOCKBREAK_DIRECTION_CHECK);
|
||||
directionActions = data.getActionList(Configuration.BLOCKBREAK_DIRECTION_ACTIONS);
|
||||
directionPrecision = ((double) data.getInteger(Configuration.BLOCKBREAK_DIRECTION_PRECISION)) / 100D;
|
||||
directionPenaltyTime = data.getInteger(Configuration.BLOCKBREAK_DIRECTION_PENALTYTIME);
|
||||
directionActions = data.getActionList(Configuration.BLOCKBREAK_DIRECTION_ACTIONS);
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -2,19 +2,17 @@ package cc.co.evenprime.bukkit.nocheat.data;
|
||||
|
||||
import org.bukkit.Location;
|
||||
|
||||
|
||||
/**
|
||||
* Playerspecific data for the blockbreak check group
|
||||
*
|
||||
* @author Evenprime
|
||||
*
|
||||
*/
|
||||
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;
|
||||
public final ExecutionHistory history = new ExecutionHistory();
|
||||
public long directionLastViolationTime = 0;
|
||||
public Location instaBrokeBlockLocation = null;
|
||||
public final ExecutionHistory history = new ExecutionHistory();
|
||||
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user