From 125628cdd8173008eebc67a38d74d32c72adbb07 Mon Sep 17 00:00:00 2001 From: Evenprime Date: Thu, 17 Feb 2011 21:48:03 +0100 Subject: [PATCH] Fixed Permissions - Fixed bug with players with identical names - Fixed Minecart bug --- plugin.yml | 2 +- .../bukkit/nocheat/NoCheatPlugin.java | 8 +++- .../nocheat/NoCheatPluginPlayerListener.java | 45 ++++++++++++++----- 3 files changed, 42 insertions(+), 13 deletions(-) diff --git a/plugin.yml b/plugin.yml index 4beeaee9..b9174beb 100644 --- a/plugin.yml +++ b/plugin.yml @@ -3,5 +3,5 @@ name: NoCheatPlugin author: Evenprime main: cc.co.evenprime.bukkit.nocheat.NoCheatPlugin -version: 0.4 +version: 0.4.1 diff --git a/src/cc/co/evenprime/bukkit/nocheat/NoCheatPlugin.java b/src/cc/co/evenprime/bukkit/nocheat/NoCheatPlugin.java index 1e8307b7..ae4dcb21 100644 --- a/src/cc/co/evenprime/bukkit/nocheat/NoCheatPlugin.java +++ b/src/cc/co/evenprime/bukkit/nocheat/NoCheatPlugin.java @@ -24,7 +24,9 @@ import org.bukkit.plugin.Plugin; * @author Evenprime */ public class NoCheatPlugin extends JavaPlugin { - private final NoCheatPluginPlayerListener playerListener = new NoCheatPluginPlayerListener(this); + + private final NoCheatPluginPlayerListener playerListener; + private final NoCheatPluginVehicleListener vehicleListener; public static final Logger log = Logger.getLogger("Minecraft"); public static PermissionHandler Permissions = null; @@ -32,6 +34,8 @@ public class NoCheatPlugin extends JavaPlugin { public NoCheatPlugin(PluginLoader pluginLoader, Server instance, PluginDescriptionFile desc, File folder, File plugin, ClassLoader cLoader) { super(pluginLoader, instance, desc, folder, plugin, cLoader); + playerListener = new NoCheatPluginPlayerListener(this); + vehicleListener = new NoCheatPluginVehicleListener(this, playerListener); } public void onDisable() { } @@ -41,6 +45,8 @@ public class NoCheatPlugin extends JavaPlugin { PluginManager pm = getServer().getPluginManager(); pm.registerEvent(Event.Type.PLAYER_MOVE, playerListener, Priority.Lowest, this); pm.registerEvent(Event.Type.PLAYER_QUIT, playerListener, Priority.Monitor, this); + pm.registerEvent(Event.Type.VEHICLE_EXIT, vehicleListener, Priority.Monitor, this); + pm.registerEvent(Event.Type.VEHICLE_DAMAGE, vehicleListener, Priority.Monitor, this); PluginDescriptionFile pdfFile = this.getDescription(); diff --git a/src/cc/co/evenprime/bukkit/nocheat/NoCheatPluginPlayerListener.java b/src/cc/co/evenprime/bukkit/nocheat/NoCheatPluginPlayerListener.java index 573ce9dc..e4b86169 100644 --- a/src/cc/co/evenprime/bukkit/nocheat/NoCheatPluginPlayerListener.java +++ b/src/cc/co/evenprime/bukkit/nocheat/NoCheatPluginPlayerListener.java @@ -7,9 +7,13 @@ import java.util.Map; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.World; +import org.bukkit.entity.Entity; +import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Player; import org.bukkit.event.player.PlayerEvent; import org.bukkit.event.player.PlayerListener; import org.bukkit.event.player.PlayerMoveEvent; +import org.bukkit.event.vehicle.VehicleExitEvent; /** * Handle events for all Player related events @@ -38,6 +42,7 @@ public class NoCheatPluginPlayerListener extends PlayerListener { private boolean lastWasInvalid = false; // used to reduce amount logging private long lastSpeedHackCheck = System.currentTimeMillis();; // timestamp of last check for speedhacks private int eventsSinceLastSpeedHackCheck = 0; // used to identify speedhacks + private int vehicleExitCooldown = 0; private NoCheatPluginData() { } } @@ -152,7 +157,7 @@ public class NoCheatPluginPlayerListener extends PlayerListener { private static final long eventLimitForSpeedHackCheck = 60; // Store data between Events - private static Map playerData = new HashMap(); + private static Map playerData = new HashMap(); public NoCheatPluginPlayerListener(NoCheatPlugin instance) { @@ -161,28 +166,42 @@ public class NoCheatPluginPlayerListener extends PlayerListener { @Override public void onPlayerQuit(PlayerEvent event) { - playerData.remove(event.getPlayer().getName()); + playerData.remove(event.getPlayer()); + } + + + public void vehicleUpdate(Entity player) { + + NoCheatPluginData data = playerData.get(player); + if(data != null) { + data.vehicleExitCooldown = 1; + } } @Override public void onPlayerMove(PlayerMoveEvent event) { - + // Get the player-specific data NoCheatPluginData data = null; - if((data = playerData.get(event.getPlayer().getName())) == null ) { + if((data = playerData.get(event.getPlayer())) == null ) { // If we have no data for the player, create some data = new NoCheatPluginData(); - playerData.put(event.getPlayer().getName(), data); + playerData.put(event.getPlayer(), data); } // If someone cancelled the event already, ignore it // If the player is inside a vehicle, ignore it for now - if(event.isCancelled() || event.getPlayer().isInsideVehicle()) { + if(event.isCancelled()) { data.phase = 0; return; } + if(data.vehicleExitCooldown > 0 ) { + data.vehicleExitCooldown--; + return; + } + // Get the two locations of the event Location from = event.getFrom(); Location to = event.getTo(); @@ -192,7 +211,7 @@ public class NoCheatPluginPlayerListener extends PlayerListener { long time = System.currentTimeMillis(); boolean allowSpeedhack = false; - if(NoCheatPlugin.Permissions != null && !NoCheatPlugin.Permissions.has(event.getPlayer(), "nocheat.speedhack")) { + if(NoCheatPlugin.Permissions != null && NoCheatPlugin.Permissions.has(event.getPlayer(), "nocheat.speedhack")) { allowSpeedhack = true; } else if(NoCheatPlugin.Permissions == null && event.getPlayer().isOp() ) { @@ -221,7 +240,7 @@ public class NoCheatPluginPlayerListener extends PlayerListener { } boolean allowMoving = false; - if(NoCheatPlugin.Permissions != null && !NoCheatPlugin.Permissions.has(event.getPlayer(), "nocheat.moving")) { + if(NoCheatPlugin.Permissions != null && NoCheatPlugin.Permissions.has(event.getPlayer(), "nocheat.moving")) { allowMoving = true; } else if(NoCheatPlugin.Permissions == null && event.getPlayer().isOp() ) { @@ -325,8 +344,8 @@ public class NoCheatPluginPlayerListener extends PlayerListener { // To prevent players from getting stuck in an infinite loop, needs probably more testing // TODO: Find a better solution - if(data.phase > 4) { - data.phase = 4; + if(data.phase > 7) { + data.phase = 7; } } else if(event.isCancelled() && data.lastWasInvalid) { @@ -379,7 +398,11 @@ public class NoCheatPluginPlayerListener extends PlayerListener { (types[w.getBlockTypeIdAt(values[0], values[2]+1, values[3])] == BlockType.LADDER || types[w.getBlockTypeIdAt(values[0], values[2]+1, values[4])] == BlockType.LADDER || types[w.getBlockTypeIdAt(values[1], values[2]+1, values[3])] == BlockType.LADDER || - types[w.getBlockTypeIdAt(values[1], values[2]+1, values[4])] == BlockType.LADDER)) { + types[w.getBlockTypeIdAt(values[1], values[2]+1, values[4])] == BlockType.LADDER)|| + (types[w.getBlockTypeIdAt(values[0], values[2], values[3])] == BlockType.LADDER || + types[w.getBlockTypeIdAt(values[0], values[2], values[4])] == BlockType.LADDER || + types[w.getBlockTypeIdAt(values[1], values[2], values[3])] == BlockType.LADDER || + types[w.getBlockTypeIdAt(values[1], values[2], values[4])] == BlockType.LADDER)) { return true; }