mirror of
https://github.com/NoCheatPlus/NoCheatPlus.git
synced 2025-03-30 08:05:41 +02:00
Alter resetting of FastConsume timings.
* Reset to time, if time ran backwards. * Reset to time instead of 0, on eating. TODO: Switch to Monotonic.
This commit is contained in:
parent
56bab0a3ae
commit
587236dfdc
NCPCompatBukkit/src/main/java/fr/neatmonster/nocheatplus/checks/inventory
NCPCore/src/main/java/fr/neatmonster/nocheatplus/checks/inventory
@ -5,7 +5,6 @@ import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.Event.Result;
|
||||
import org.bukkit.event.player.PlayerItemConsumeEvent;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
@ -55,24 +54,26 @@ public class FastConsume extends Check implements Listener{
|
||||
return;
|
||||
}
|
||||
final InventoryData data = InventoryData.getData(player);
|
||||
if (check(player, event.getItem(), data)){
|
||||
final long time = System.currentTimeMillis();
|
||||
if (check(player, event.getItem(), time, data)){
|
||||
event.setCancelled(true);
|
||||
DataManager.getPlayerData(player.getName(), true).task.updateInventory();
|
||||
}
|
||||
data.instantEatInteract = 0;
|
||||
data.instantEatInteract = time;
|
||||
data.instantEatFood = null;
|
||||
}
|
||||
|
||||
private boolean check(final Player player, final ItemStack stack, final InventoryData data){
|
||||
private boolean check(final Player player, final ItemStack stack, final long time, final InventoryData data){
|
||||
// Uses the instant-eat data for convenience.
|
||||
// Consistency checks...
|
||||
if (stack == null){ // || stack.getType() != data.instantEatFood){
|
||||
// TODO: Strict version should prevent other material (?).
|
||||
return false;
|
||||
}
|
||||
final long time = System.currentTimeMillis();
|
||||
final long ref = Math.max(data.instantEatInteract, data.lastClickTime);
|
||||
final long ref = data.instantEatInteract == 0 ? 0 : Math.max(data.instantEatInteract, data.lastClickTime);
|
||||
if (time < ref){
|
||||
// Time ran backwards.
|
||||
data.instantEatInteract = data.lastClickTime = time;
|
||||
return false;
|
||||
}
|
||||
// Check exceptions.
|
||||
|
@ -47,7 +47,7 @@ public class InstantBow extends Check {
|
||||
if (cc.instantBowStrict) {
|
||||
// The interact time is invalid, if set to 0.
|
||||
valid = data.instantBowInteract != 0;
|
||||
pullDuration = valid ? (now - data.instantBowInteract) : 0L;
|
||||
pullDuration = valid ? (now - data.instantBowInteract) : 0L;
|
||||
} else {
|
||||
valid = true;
|
||||
pullDuration = now - data.instantBowShoot;
|
||||
|
@ -228,6 +228,7 @@ public class InventoryListener extends CheckListener implements JoinLeaveListen
|
||||
if (event.hasItem()){
|
||||
final ItemStack item = event.getItem();
|
||||
final Material type = item.getType();
|
||||
// TODO: Get Magic values (800) from the config.
|
||||
if (type == Material.BOW){
|
||||
final long now = System.currentTimeMillis();
|
||||
// It was a bow, the player starts to pull the string, remember this time.
|
||||
@ -242,9 +243,13 @@ public class InventoryListener extends CheckListener implements JoinLeaveListen
|
||||
} else resetAll = true;
|
||||
|
||||
// Illegal enchantments hotfix check.
|
||||
if (Items.checkIllegalEnchantments(player, item)) event.setCancelled(true);
|
||||
if (Items.checkIllegalEnchantments(player, item)) {
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
else {
|
||||
resetAll = true;
|
||||
}
|
||||
else resetAll = true;
|
||||
|
||||
if (resetAll){
|
||||
// Nothing that we are interested in, reset data.
|
||||
@ -257,7 +262,9 @@ public class InventoryListener extends CheckListener implements JoinLeaveListen
|
||||
@EventHandler(ignoreCancelled = false, priority = EventPriority.LOWEST)
|
||||
public final void onPlayerInteractEntity(final PlayerInteractEntityEvent event) {
|
||||
final Player player = event.getPlayer();
|
||||
if (player.getGameMode() == GameMode.CREATIVE) return;
|
||||
if (player.getGameMode() == GameMode.CREATIVE) {
|
||||
return;
|
||||
}
|
||||
if (player.isDead() && BridgeHealth.getHealth(player) <= 0.0) {
|
||||
// No zombies.
|
||||
event.setCancelled(true);
|
||||
|
Loading…
Reference in New Issue
Block a user