diff --git a/pom.xml b/pom.xml
index e97aecbc..7a99eb48 100644
--- a/pom.xml
+++ b/pom.xml
@@ -3,7 +3,7 @@
4.0.0
cc.co.evenprime.bukkit
NoCheat
- 2.23
+ 2.24
jar
NoCheat
diff --git a/src/cc/co/evenprime/bukkit/nocheat/checks/inventory/CCInventory.java b/src/cc/co/evenprime/bukkit/nocheat/checks/inventory/CCInventory.java
index 78c72be0..d4d7b295 100644
--- a/src/cc/co/evenprime/bukkit/nocheat/checks/inventory/CCInventory.java
+++ b/src/cc/co/evenprime/bukkit/nocheat/checks/inventory/CCInventory.java
@@ -16,20 +16,11 @@ public class CCInventory implements ConfigItem {
public CCInventory(Configuration data) {
- /*
- * check = data.getBoolean(Configuration.INVENTORY_CHECK);
- * dropCheck = data.getBoolean(Configuration.INVENTORY_DROP_CHECK);
- * dropTimeFrame =
- * data.getInteger(Configuration.INVENTORY_DROP_TIMEFRAME);
- * dropLimit = data.getInteger(Configuration.INVENTORY_DROP_LIMIT);
- * dropActions =
- * data.getActionList(Configuration.INVENTORY_DROP_ACTIONS);
- */
- check = false;
- dropCheck = false;
- dropTimeFrame = 0;
- dropLimit = 0;
- dropActions = null;
+ check = data.getBoolean(Configuration.INVENTORY_CHECK);
+ dropCheck = data.getBoolean(Configuration.INVENTORY_DROP_CHECK);
+ dropTimeFrame = data.getInteger(Configuration.INVENTORY_DROP_TIMEFRAME);
+ dropLimit = data.getInteger(Configuration.INVENTORY_DROP_LIMIT);
+ dropActions = data.getActionList(Configuration.INVENTORY_DROP_ACTIONS);
closebeforeteleports = data.getBoolean(Configuration.INVENTORY_PREVENTITEMDUPE);
}
diff --git a/src/cc/co/evenprime/bukkit/nocheat/checks/inventory/InventoryEventManager.java b/src/cc/co/evenprime/bukkit/nocheat/checks/inventory/InventoryEventManager.java
index 8d323de5..6b662ae9 100644
--- a/src/cc/co/evenprime/bukkit/nocheat/checks/inventory/InventoryEventManager.java
+++ b/src/cc/co/evenprime/bukkit/nocheat/checks/inventory/InventoryEventManager.java
@@ -13,6 +13,7 @@ import cc.co.evenprime.bukkit.nocheat.NoCheat;
import cc.co.evenprime.bukkit.nocheat.NoCheatPlayer;
import cc.co.evenprime.bukkit.nocheat.config.ConfigurationCacheStore;
import cc.co.evenprime.bukkit.nocheat.config.Permissions;
+import cc.co.evenprime.bukkit.nocheat.debug.PerformanceManager.EventType;
import cc.co.evenprime.bukkit.nocheat.events.EventManagerImpl;
public class InventoryEventManager extends EventManagerImpl {
@@ -23,11 +24,11 @@ public class InventoryEventManager extends EventManagerImpl {
super(plugin);
this.checks = new ArrayList(1);
-
- // Don't use this check now, it's buggy
- //this.checks.add(new DropCheck(plugin));
- //registerListener(Event.Type.PLAYER_DROP_ITEM, Priority.Lowest, true, plugin.getPerformance(EventType.INVENTORY));
+ // Don't use this check now, it's buggy
+ this.checks.add(new DropCheck(plugin));
+
+ registerListener(Event.Type.PLAYER_DROP_ITEM, Priority.Lowest, true, plugin.getPerformance(EventType.INVENTORY));
registerListener(Event.Type.PLAYER_TELEPORT, Priority.Monitor, true, null);
}
@@ -35,12 +36,12 @@ public class InventoryEventManager extends EventManagerImpl {
protected void handlePlayerTeleportEvent(final PlayerTeleportEvent event, final Priority priority) {
try {
- NoCheatPlayer player = plugin.getPlayer(event.getPlayer());
- if(InventoryCheck.getConfig(player.getConfigurationStore()).closebeforeteleports && event.getTo() != null && !(event.getTo().getWorld().equals(player.getPlayer().getWorld()))) {
- player.closeInventory();
- }
+ NoCheatPlayer player = plugin.getPlayer(event.getPlayer());
+ if(InventoryCheck.getConfig(player.getConfigurationStore()).closebeforeteleports && event.getTo() != null && !(event.getTo().getWorld().equals(player.getPlayer().getWorld()))) {
+ player.closeInventory();
+ }
} catch(NullPointerException e) {
-
+
}
}
@@ -50,7 +51,7 @@ public class InventoryEventManager extends EventManagerImpl {
final NoCheatPlayer player = plugin.getPlayer(event.getPlayer());
final CCInventory cc = InventoryCheck.getConfig(player.getConfigurationStore());
- if(!cc.check || player.hasPermission(Permissions.INVENTORY)) {
+ if(!cc.check || player.hasPermission(Permissions.INVENTORY) || player.isDead()) {
return;
}
@@ -66,8 +67,9 @@ public class InventoryEventManager extends EventManagerImpl {
}
if(cancelled) {
- event.setCancelled(true);
- player.closeInventory();
+ // Cancelling drop events is not save. So don't do it
+ // and kick players instead by default
+ //event.setCancelled(true);
}
}
diff --git a/src/cc/co/evenprime/bukkit/nocheat/checks/moving/MovingEventManager.java b/src/cc/co/evenprime/bukkit/nocheat/checks/moving/MovingEventManager.java
index 858a2f7b..4227ff44 100644
--- a/src/cc/co/evenprime/bukkit/nocheat/checks/moving/MovingEventManager.java
+++ b/src/cc/co/evenprime/bukkit/nocheat/checks/moving/MovingEventManager.java
@@ -110,6 +110,11 @@ public class MovingEventManager extends EventManagerImpl {
final CCMoving cc = MovingCheck.getConfig(player.getConfigurationStore());
+ final MovingData data = MovingCheck.getData(player.getDataStore());
+
+ // Various calculations related to velocity estimates
+ updateVelocities(data);
+
if(!cc.check || player.hasPermission(Permissions.MOVING)) {
// Just because he is allowed now, doesn't mean he will always
// be. So forget data about the player related to moving
@@ -117,27 +122,6 @@ public class MovingEventManager extends EventManagerImpl {
return;
}
- final MovingData data = MovingCheck.getData(player.getDataStore());
-
- /******** DO GENERAL DATA MODIFICATIONS ONCE FOR EACH EVENT *****/
- if(data.horizVelocityCounter > 0) {
- data.horizVelocityCounter--;
- } else {
- data.horizFreedom *= 0.90;
- }
-
- if(data.vertVelocity <= 0.1) {
- data.vertVelocityCounter--;
- }
- if(data.vertVelocityCounter > 0) {
-
- data.vertFreedom += data.vertVelocity;
- data.vertVelocity *= 0.90;
- } else {
- // Counter has run out, now reduce the vert freedom over time
- data.vertFreedom *= 0.90;
- }
-
// Get some data that's needed from this event, to avoid passing the
// event itself on to the checks (and risk to
// accidentally modifying the event there)
@@ -167,6 +151,27 @@ public class MovingEventManager extends EventManagerImpl {
}
}
+ private void updateVelocities(MovingData data) {
+
+ /******** DO GENERAL DATA MODIFICATIONS ONCE FOR EACH EVENT *****/
+ if(data.horizVelocityCounter > 0) {
+ data.horizVelocityCounter--;
+ } else if(data.horizFreedom > 0.001) {
+ data.horizFreedom *= 0.90;
+ }
+
+ if(data.vertVelocity <= 0.1) {
+ data.vertVelocityCounter--;
+ }
+ if(data.vertVelocityCounter > 0) {
+ data.vertFreedom += data.vertVelocity;
+ data.vertVelocity *= 0.90;
+ } else if(data.vertFreedom > 0.001) {
+ // Counter has run out, now reduce the vert freedom over time
+ data.vertFreedom *= 0.93;
+ }
+ }
+
@Override
protected void handlePlayerVelocityEvent(final PlayerVelocityEvent event, final Priority priority) {
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 34a88358..0b5f64d2 100644
--- a/src/cc/co/evenprime/bukkit/nocheat/checks/moving/RunflyCheck.java
+++ b/src/cc/co/evenprime/bukkit/nocheat/checks/moving/RunflyCheck.java
@@ -11,7 +11,10 @@ public class RunflyCheck extends MovingCheck {
private final RunningCheck runningCheck;
public RunflyCheck(NoCheat plugin) {
- super(plugin, "moving.runfly", Permissions.MOVING_RUNFLY);
+ // Permission field intentionally left blank here
+ // We check in the actual "check" method, because
+ // we have to do something beside skipping the test
+ super(plugin, "moving.runfly", null);
flyingCheck = new FlyingCheck(plugin);
runningCheck = new RunningCheck(plugin);
@@ -20,6 +23,12 @@ public class RunflyCheck extends MovingCheck {
@Override
public PreciseLocation check(NoCheatPlayer player, MovingData data, CCMoving cc) {
+ if(player.hasPermission(Permissions.MOVING_RUNFLY)) {
+ // If the player doesn't get checked for movement
+ // reset his critical data
+ data.clearCriticalData();
+ return null;
+ }
final boolean flyAllowed = cc.allowFlying || player.hasPermission(Permissions.MOVING_FLYING) || (player.isCreative() && cc.identifyCreativeMode);
/********************* EXECUTE THE FLY/JUMP/RUNNING CHECK ********************/
diff --git a/src/cc/co/evenprime/bukkit/nocheat/config/Configuration.java b/src/cc/co/evenprime/bukkit/nocheat/config/Configuration.java
index b5b4ecdc..e1b3a694 100644
--- a/src/cc/co/evenprime/bukkit/nocheat/config/Configuration.java
+++ b/src/cc/co/evenprime/bukkit/nocheat/config/Configuration.java
@@ -36,9 +36,9 @@ public abstract class Configuration {
private final static OptionNode INVENTORY = new OptionNode("inventory", ROOT, DataType.PARENT);
public final static OptionNode INVENTORY_PREVENTITEMDUPE = new OptionNode("preventitemdupe", INVENTORY, DataType.BOOLEAN);
- public static final OptionNode INVENTORY_CHECK = new OptionNode("check", INACTIVE, DataType.BOOLEAN);
+ public static final OptionNode INVENTORY_CHECK = new OptionNode("check", INVENTORY, DataType.BOOLEAN);
- private final static OptionNode INVENTORY_DROP = new OptionNode("drop", INACTIVE, DataType.PARENT);
+ private final static OptionNode INVENTORY_DROP = new OptionNode("drop", INVENTORY, DataType.PARENT);
public final static OptionNode INVENTORY_DROP_CHECK = new OptionNode("check", INVENTORY_DROP, DataType.BOOLEAN);
public final static OptionNode INVENTORY_DROP_TIMEFRAME = new OptionNode("timeframe", INVENTORY_DROP, DataType.INTEGER);
public final static OptionNode INVENTORY_DROP_LIMIT = new OptionNode("limit", INVENTORY_DROP, DataType.INTEGER);
diff --git a/src/cc/co/evenprime/bukkit/nocheat/config/DefaultConfiguration.java b/src/cc/co/evenprime/bukkit/nocheat/config/DefaultConfiguration.java
index 1b41c6ce..871bb65d 100644
--- a/src/cc/co/evenprime/bukkit/nocheat/config/DefaultConfiguration.java
+++ b/src/cc/co/evenprime/bukkit/nocheat/config/DefaultConfiguration.java
@@ -38,20 +38,17 @@ public class DefaultConfiguration extends Configuration {
/*** INVENTORY ***/
{
setValue(INVENTORY_PREVENTITEMDUPE, true);
- /*
- * setValue(INVENTORY_CHECK, true);
- *
- * setValue(INVENTORY_DROP_CHECK, true);
- * setValue(INVENTORY_DROP_TIMEFRAME, 20);
- * setValue(INVENTORY_DROP_LIMIT, 100);
- *
- * ActionList dropActionList = new ActionList();
- * dropActionList.setActions(0,
- * action.getActions("dropLog dropCancel".split(" ")));
- * dropActionList.setActions(500,
- * action.getActions("dropLog dropCancel dropkick".split(" ")));
- * setValue(INVENTORY_DROP_ACTIONS, dropActionList);
- */
+
+ setValue(INVENTORY_CHECK, true);
+
+ setValue(INVENTORY_DROP_CHECK, true);
+ setValue(INVENTORY_DROP_TIMEFRAME, 20);
+ setValue(INVENTORY_DROP_LIMIT, 100);
+
+ ActionList dropActionList = new ActionList();
+ dropActionList.setActions(0, action.getActions("dropLog dropkick".split(" ")));
+ setValue(INVENTORY_DROP_ACTIONS, dropActionList);
+
}
/*** MOVING ***/
@@ -297,7 +294,6 @@ public class DefaultConfiguration extends Configuration {
w(w, "special chatCancel 0 0");
w(w, "special nofallDamage 0 0");
w(w, "special fightCancel 0 0");
- w(w, "special dropCancel 0 0");
w(w, "");
w(w, "# CONSOLECOMMAND Actions: They will execute a command as if it were typed into the console.");
w(w, "# - They start with the word 'consolecommand'");
diff --git a/src/cc/co/evenprime/bukkit/nocheat/player/NoCheatPlayerImpl.java b/src/cc/co/evenprime/bukkit/nocheat/player/NoCheatPlayerImpl.java
index 6b9875f5..398b6b92 100644
--- a/src/cc/co/evenprime/bukkit/nocheat/player/NoCheatPlayerImpl.java
+++ b/src/cc/co/evenprime/bukkit/nocheat/player/NoCheatPlayerImpl.java
@@ -40,7 +40,7 @@ public class NoCheatPlayerImpl implements NoCheatPlayer {
public boolean hasPermission(String permission) {
if(permission == null) {
- System.out.println("NoCheat: Warning, asked for null permission");
+ // System.out.println("NoCheat: Warning, asked for null permission");
return false;
}
return player.hasPermission(permission);