From 1b811716e26d953fecb0fc8a39821a20f1461b68 Mon Sep 17 00:00:00 2001 From: asofold Date: Thu, 14 Mar 2013 12:21:38 +0100 Subject: [PATCH] Inventory.FastClick: Fix vl not adding, prepare for 1.5. --- .../checks/inventory/FastClick.java | 35 +++++++++++++++++-- .../checks/inventory/InventoryConfig.java | 2 ++ .../checks/inventory/InventoryData.java | 5 ++- .../checks/inventory/InventoryListener.java | 12 ++++--- .../nocheatplus/config/ConfPaths.java | 1 + .../nocheatplus/config/DefaultConfig.java | 1 + 6 files changed, 48 insertions(+), 8 deletions(-) diff --git a/NCPPlugin/src/main/java/fr/neatmonster/nocheatplus/checks/inventory/FastClick.java b/NCPPlugin/src/main/java/fr/neatmonster/nocheatplus/checks/inventory/FastClick.java index 6c8a944a..c30df2c5 100644 --- a/NCPPlugin/src/main/java/fr/neatmonster/nocheatplus/checks/inventory/FastClick.java +++ b/NCPPlugin/src/main/java/fr/neatmonster/nocheatplus/checks/inventory/FastClick.java @@ -1,6 +1,8 @@ package fr.neatmonster.nocheatplus.checks.inventory; +import org.bukkit.Material; import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; import fr.neatmonster.nocheatplus.checks.Check; import fr.neatmonster.nocheatplus.checks.CheckType; @@ -79,10 +81,36 @@ public class FastClick extends Check { // return cancel; // } - public boolean check(final Player player, final long now, final InventoryData data, final InventoryConfig cc) { + public boolean check(final Player player, final long now, final int slot, final ItemStack cursor, final ItemStack clicked, final InventoryData data, final InventoryConfig cc) { // Take time once. + + final float amount; + + if (cursor != null && cc.fastClickTweaks1_5){ + final Material mat = cursor.getType(); + final int size = cursor.getAmount(); + if (mat != data.fastClickLastMat || mat == Material.AIR || size != data.fastClickLastAmount || clicked == null){ + amount = 1f; + } + else{ + final Material cMat = clicked.getType(); + if (cMat == Material.AIR || cMat == mat){ + amount = Math.min(cc.fastClickNormalLimit , cc.fastClickShortTermLimit) / (float) size * 0.75f; + } + else{ + amount = 1f; + } + } + data.fastClickLastMat = mat; + data.fastClickLastAmount = size; + } + else{ + data.fastClickLastMat = null; + data.fastClickLastAmount = 0; + amount = 1f; + } - data.fastClickFreq.add(now, 1f); + data.fastClickFreq.add(now, amount); float shortTerm = data.fastClickFreq.bucketScore(0); if (shortTerm > cc.fastClickShortTermLimit){ @@ -103,12 +131,13 @@ public class FastClick extends Check { boolean cancel = false; if (violation > 0){ + data.fastClickVL += violation; final ViolationData vd = new ViolationData(this, player, data.fastClickVL + violation, violation, cc.fastClickActions); cancel = executeActions(vd); } if (cc.debug && player.hasPermission(Permissions.ADMINISTRATION_DEBUG)){ - player.sendMessage("FastClick: " + ((int) data.fastClickFreq.bucketScore(0)) + " / " + ((int) data.fastClickFreq.score(1f))); + player.sendMessage("FastClick: " + data.fastClickFreq.bucketScore(0) + " / " + data.fastClickFreq.score(1f)); } return cancel; diff --git a/NCPPlugin/src/main/java/fr/neatmonster/nocheatplus/checks/inventory/InventoryConfig.java b/NCPPlugin/src/main/java/fr/neatmonster/nocheatplus/checks/inventory/InventoryConfig.java index 4d247408..0181eedc 100644 --- a/NCPPlugin/src/main/java/fr/neatmonster/nocheatplus/checks/inventory/InventoryConfig.java +++ b/NCPPlugin/src/main/java/fr/neatmonster/nocheatplus/checks/inventory/InventoryConfig.java @@ -80,6 +80,7 @@ public class InventoryConfig extends ACheckConfig { public final boolean fastClickCheck; public final boolean fastClickSpareCreative; + public final boolean fastClickTweaks1_5; public final float fastClickShortTermLimit; public final float fastClickNormalLimit; public final ActionList fastClickActions; @@ -110,6 +111,7 @@ public class InventoryConfig extends ACheckConfig { fastClickCheck = data.getBoolean(ConfPaths.INVENTORY_FASTCLICK_CHECK); fastClickSpareCreative = data.getBoolean(ConfPaths.INVENTORY_FASTCLICK_SPARECREATIVE); + fastClickTweaks1_5 = data.getBoolean(ConfPaths.INVENTORY_FASTCLICK_TWEAKS1_5); fastClickShortTermLimit = (float) data.getDouble(ConfPaths.INVENTORY_FASTCLICK_LIMIT_SHORTTERM); fastClickNormalLimit = (float) data.getDouble(ConfPaths.INVENTORY_FASTCLICK_LIMIT_NORMAL); fastClickActions = data.getOptimizedActionList( diff --git a/NCPPlugin/src/main/java/fr/neatmonster/nocheatplus/checks/inventory/InventoryData.java b/NCPPlugin/src/main/java/fr/neatmonster/nocheatplus/checks/inventory/InventoryData.java index f9dc1249..a9e50d7b 100644 --- a/NCPPlugin/src/main/java/fr/neatmonster/nocheatplus/checks/inventory/InventoryData.java +++ b/NCPPlugin/src/main/java/fr/neatmonster/nocheatplus/checks/inventory/InventoryData.java @@ -75,7 +75,7 @@ public class InventoryData extends ACheckData { public double instantEatVL; // General. - public long lastClickTime = 0;; + public long lastClickTime = 0; // Data of the drop check. public int dropCount; @@ -84,6 +84,8 @@ public class InventoryData extends ACheckData { // Data of the fast click check. // public boolean fastClickLastCancelled; public final ActionFrequency fastClickFreq = new ActionFrequency(5, 200L); + public Material fastClickLastMat = null; + public int fastClickLastAmount = 0; // Data of the instant bow check. public long instantBowInteract; @@ -92,4 +94,5 @@ public class InventoryData extends ACheckData { // Data of the instant eat check. public Material instantEatFood; public long instantEatInteract; + } diff --git a/NCPPlugin/src/main/java/fr/neatmonster/nocheatplus/checks/inventory/InventoryListener.java b/NCPPlugin/src/main/java/fr/neatmonster/nocheatplus/checks/inventory/InventoryListener.java index a68ce66c..01f1a8b9 100644 --- a/NCPPlugin/src/main/java/fr/neatmonster/nocheatplus/checks/inventory/InventoryListener.java +++ b/NCPPlugin/src/main/java/fr/neatmonster/nocheatplus/checks/inventory/InventoryListener.java @@ -161,18 +161,22 @@ public class InventoryListener extends CheckListener { return; } final Player player = (Player) entity; - if (event.getSlot() == InventoryView.OUTSIDE){ + final int slot = event.getSlot(); + if (slot == InventoryView.OUTSIDE){ InventoryData.getData(player).lastClickTime = now; return; } + + final ItemStack cursor = event.getCursor(); + final ItemStack clicked = event.getCurrentItem(); // Illegal enchantment checks. try{ - if (Items.checkIllegalEnchantments(player, event.getCurrentItem())) event.setCancelled(true); + if (Items.checkIllegalEnchantments(player, clicked)) event.setCancelled(true); } catch(final ArrayIndexOutOfBoundsException e){} // Hotfix (CB) try{ - if (Items.checkIllegalEnchantments(player, event.getCursor())) event.setCancelled(true); + if (Items.checkIllegalEnchantments(player, cursor)) event.setCancelled(true); } catch(final ArrayIndexOutOfBoundsException e){} // Hotfix (CB) @@ -182,7 +186,7 @@ public class InventoryListener extends CheckListener { if (fastClick.isEnabled(player)){ final InventoryConfig cc = InventoryConfig.getConfig(player); if (player.getGameMode() != GameMode.CREATIVE || !cc.fastClickSpareCreative){ - if (fastClick.check(player, now, data, cc)){ + if (fastClick.check(player, now, slot, cursor, clicked, data, cc)){ // The check requested the event to be cancelled. event.setCancelled(true); } diff --git a/NCPPlugin/src/main/java/fr/neatmonster/nocheatplus/config/ConfPaths.java b/NCPPlugin/src/main/java/fr/neatmonster/nocheatplus/config/ConfPaths.java index 4345c12f..22f27a36 100644 --- a/NCPPlugin/src/main/java/fr/neatmonster/nocheatplus/config/ConfPaths.java +++ b/NCPPlugin/src/main/java/fr/neatmonster/nocheatplus/config/ConfPaths.java @@ -468,6 +468,7 @@ public abstract class ConfPaths { private static final String INVENTORY_FASTCLICK = INVENTORY + "fastclick."; public static final String INVENTORY_FASTCLICK_CHECK = INVENTORY_FASTCLICK + "active"; public static final String INVENTORY_FASTCLICK_SPARECREATIVE = INVENTORY_FASTCLICK + "sparecreative"; + public static final String INVENTORY_FASTCLICK_TWEAKS1_5 = INVENTORY_FASTCLICK + "tweaks1_5"; private static final String INVENTORY_FASTCLICK_LIMIT = INVENTORY_FASTCLICK + "limit."; public static final String INVENTORY_FASTCLICK_LIMIT_SHORTTERM = INVENTORY_FASTCLICK_LIMIT + "shortterm"; public static final String INVENTORY_FASTCLICK_LIMIT_NORMAL = INVENTORY_FASTCLICK_LIMIT + "normal"; diff --git a/NCPPlugin/src/main/java/fr/neatmonster/nocheatplus/config/DefaultConfig.java b/NCPPlugin/src/main/java/fr/neatmonster/nocheatplus/config/DefaultConfig.java index 0f75827f..b306cbf0 100644 --- a/NCPPlugin/src/main/java/fr/neatmonster/nocheatplus/config/DefaultConfig.java +++ b/NCPPlugin/src/main/java/fr/neatmonster/nocheatplus/config/DefaultConfig.java @@ -360,6 +360,7 @@ public class DefaultConfig extends ConfigFile { set(ConfPaths.INVENTORY_FASTCLICK_CHECK, true); set(ConfPaths.INVENTORY_FASTCLICK_SPARECREATIVE, true); + set(ConfPaths.INVENTORY_FASTCLICK_TWEAKS1_5, true); set(ConfPaths.INVENTORY_FASTCLICK_LIMIT_SHORTTERM, 4); set(ConfPaths.INVENTORY_FASTCLICK_LIMIT_NORMAL, 15); set(ConfPaths.INVENTORY_FASTCLICK_ACTIONS, "cancel vl>50 log:fastclick:3:5:cif cancel");