diff --git a/NCPCompatBukkit/src/main/java/fr/neatmonster/nocheatplus/checks/inventory/FastConsume.java b/NCPCompatBukkit/src/main/java/fr/neatmonster/nocheatplus/checks/inventory/FastConsume.java index 84042226..58a2a750 100644 --- a/NCPCompatBukkit/src/main/java/fr/neatmonster/nocheatplus/checks/inventory/FastConsume.java +++ b/NCPCompatBukkit/src/main/java/fr/neatmonster/nocheatplus/checks/inventory/FastConsume.java @@ -5,6 +5,7 @@ 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; @@ -12,6 +13,7 @@ import fr.neatmonster.nocheatplus.actions.ParameterName; import fr.neatmonster.nocheatplus.checks.Check; import fr.neatmonster.nocheatplus.checks.CheckType; import fr.neatmonster.nocheatplus.checks.ViolationData; +import fr.neatmonster.nocheatplus.compat.BridgeHealth; import fr.neatmonster.nocheatplus.config.ConfPaths; import fr.neatmonster.nocheatplus.config.ConfigManager; import fr.neatmonster.nocheatplus.logging.LogUtil; @@ -44,7 +46,14 @@ public class FastConsume extends Check implements Listener{ @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onItemConsume(final PlayerItemConsumeEvent event){ final Player player = event.getPlayer(); - if (!isEnabled(player)) return; + if (player.isDead() && BridgeHealth.getHealth(player) <= 0.0) { + // Eat after death. + event.setCancelled(true); + return; + } + if (!isEnabled(player)) { + return; + } final InventoryData data = InventoryData.getData(player); if (check(player, event.getItem(), data)){ event.setCancelled(true); diff --git a/NCPCore/src/main/java/fr/neatmonster/nocheatplus/checks/blockinteract/BlockInteractListener.java b/NCPCore/src/main/java/fr/neatmonster/nocheatplus/checks/blockinteract/BlockInteractListener.java index 82d02a61..4ddbd2f1 100644 --- a/NCPCore/src/main/java/fr/neatmonster/nocheatplus/checks/blockinteract/BlockInteractListener.java +++ b/NCPCore/src/main/java/fr/neatmonster/nocheatplus/checks/blockinteract/BlockInteractListener.java @@ -15,6 +15,7 @@ import org.bukkit.inventory.ItemStack; import fr.neatmonster.nocheatplus.checks.CheckListener; import fr.neatmonster.nocheatplus.checks.CheckType; import fr.neatmonster.nocheatplus.checks.combined.CombinedConfig; +import fr.neatmonster.nocheatplus.compat.BridgeHealth; import fr.neatmonster.nocheatplus.utilities.BlockProperties; /** @@ -52,6 +53,15 @@ public class BlockInteractListener extends CheckListener { @EventHandler( ignoreCancelled = false, priority = EventPriority.LOWEST) protected void onPlayerInteract(final PlayerInteractEvent event) { + final Player player = event.getPlayer(); + // Cancel interact events for dead players. + if (player.isDead() && BridgeHealth.getHealth(player) <= 0.0) { + // Auto-soup after death. + event.setUseInteractedBlock(Result.DENY); + event.setUseItemInHand(Result.DENY); + event.setCancelled(true); + return; + } // TODO: Re-arrange for interact spam, possibly move ender pearl stuff to a method. final Action action = event.getAction(); @@ -60,7 +70,7 @@ public class BlockInteractListener extends CheckListener { if (block == null){ return; } - final Player player = event.getPlayer(); + final BlockInteractData data = BlockInteractData.getData(player); data.setLastBlock(block, action); switch(action){ diff --git a/NCPCore/src/main/java/fr/neatmonster/nocheatplus/checks/fight/FightListener.java b/NCPCore/src/main/java/fr/neatmonster/nocheatplus/checks/fight/FightListener.java index bcf74384..2df74733 100644 --- a/NCPCore/src/main/java/fr/neatmonster/nocheatplus/checks/fight/FightListener.java +++ b/NCPCore/src/main/java/fr/neatmonster/nocheatplus/checks/fight/FightListener.java @@ -533,6 +533,11 @@ public class FightListener extends CheckListener implements JoinLeaveListener{ final Entity entity = event.getEntity(); if (!(entity instanceof Player)) return; final Player player = (Player) entity; + if (player.isDead() && BridgeHealth.getHealth(player) <= 0.0) { + // Heal after death. + event.setCancelled(true); + return; + } if (event.getRegainReason() != RegainReason.SATIATED) { return; } diff --git a/NCPCore/src/main/java/fr/neatmonster/nocheatplus/checks/fight/GodMode.java b/NCPCore/src/main/java/fr/neatmonster/nocheatplus/checks/fight/GodMode.java index 70e3e06c..5c2428df 100644 --- a/NCPCore/src/main/java/fr/neatmonster/nocheatplus/checks/fight/GodMode.java +++ b/NCPCore/src/main/java/fr/neatmonster/nocheatplus/checks/fight/GodMode.java @@ -173,7 +173,7 @@ public class GodMode extends Check { public void death(final Player player) { // TODO: Is this still relevant ? // First check if the player is really dead (e.g. another plugin could have just fired an artificial event). - if (BridgeHealth.getHealth(player) <= 0.0 && player.isDead()){ + if (BridgeHealth.getHealth(player) <= 0.0 && player.isDead()) { try { // Schedule a task to be executed in roughly 1.5 seconds. // TODO: Get plugin otherwise !? diff --git a/NCPCore/src/main/java/fr/neatmonster/nocheatplus/checks/inventory/InventoryListener.java b/NCPCore/src/main/java/fr/neatmonster/nocheatplus/checks/inventory/InventoryListener.java index 949e06e7..b92585f0 100644 --- a/NCPCore/src/main/java/fr/neatmonster/nocheatplus/checks/inventory/InventoryListener.java +++ b/NCPCore/src/main/java/fr/neatmonster/nocheatplus/checks/inventory/InventoryListener.java @@ -29,6 +29,7 @@ import fr.neatmonster.nocheatplus.checks.CheckListener; import fr.neatmonster.nocheatplus.checks.CheckType; import fr.neatmonster.nocheatplus.checks.combined.Combined; import fr.neatmonster.nocheatplus.checks.combined.Improbable; +import fr.neatmonster.nocheatplus.compat.BridgeHealth; import fr.neatmonster.nocheatplus.components.JoinLeaveListener; import fr.neatmonster.nocheatplus.utilities.InventoryUtil; @@ -111,6 +112,10 @@ public class InventoryListener extends CheckListener implements JoinLeaveListen if (instantEat.isEnabled(player) && instantEat.check(player, event.getFoodLevel())){ event.setCancelled(true); } + else if (player.isDead() && BridgeHealth.getHealth(player) <= 0.0) { + // Eat after death. + event.setCancelled(true); + } } } @@ -253,6 +258,11 @@ public class InventoryListener extends CheckListener implements JoinLeaveListen public final void onPlayerInteractEntity(final PlayerInteractEntityEvent event) { final Player player = event.getPlayer(); if (player.getGameMode() == GameMode.CREATIVE) return; + if (player.isDead() && BridgeHealth.getHealth(player) <= 0.0) { + // No zombies. + event.setCancelled(true); + return; + } final ItemStack stack = player.getItemInHand(); if (stack != null && stack.getTypeId() == Material.MONSTER_EGG.getId() && items.isEnabled(player)){ event.setCancelled(true); diff --git a/NCPCore/src/main/java/fr/neatmonster/nocheatplus/command/admin/InspectCommand.java b/NCPCore/src/main/java/fr/neatmonster/nocheatplus/command/admin/InspectCommand.java index 39a56265..3e154be6 100644 --- a/NCPCore/src/main/java/fr/neatmonster/nocheatplus/command/admin/InspectCommand.java +++ b/NCPCore/src/main/java/fr/neatmonster/nocheatplus/command/admin/InspectCommand.java @@ -13,6 +13,7 @@ import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.potion.PotionEffect; import fr.neatmonster.nocheatplus.command.BaseCommand; +import fr.neatmonster.nocheatplus.compat.BridgeHealth; import fr.neatmonster.nocheatplus.permissions.Permissions; import fr.neatmonster.nocheatplus.players.DataManager; @@ -53,7 +54,7 @@ public class InspectCommand extends BaseCommand { builder.append(" (" + (player.isOnline() ? "online" : "offline") + (player.isDead() ? ",dead" : "") + (player.isValid() ? "" : ",invalid") + (player.isInsideVehicle() ? (",vehicle=" + player.getVehicle().getType() + "@" + locString(player.getVehicle().getLocation())) : "")+ "):"); // TODO: isValid, isDead, isInsideVehicle ... // Health. - builder.append(" health=" + f1.format(player.getHealth()) + "/" + f1.format(player.getMaxHealth())); + builder.append(" health=" + f1.format(BridgeHealth.getHealth(player)) + "/" + f1.format(BridgeHealth.getMaxHealth(player))); // Food. builder.append(" food=" + player.getFoodLevel()); // Exp.