From 6a5b9f2a202fe3144b0257f117f2fb0d8d200948 Mon Sep 17 00:00:00 2001 From: Evenprime Date: Wed, 27 Apr 2011 11:17:51 +0200 Subject: [PATCH] Split itemdupe check into itemdupe and bogusitems checks + logging instead of just System.out.println --- plugin.yml | 2 +- .../co/evenprime/bukkit/nocheat/NoCheat.java | 11 +- .../bukkit/nocheat/NoCheatConfiguration.java | 8 +- .../nocheat/checks/BogusitemsCheck.java | 107 ++++++++++++++++++ .../bukkit/nocheat/checks/ItemdupeCheck.java | 104 +++-------------- .../bukkit/nocheat/checks/MovingCheck.java | 2 +- .../bukkit/nocheat/data/PermissionData.java | 2 +- ...ner.java => BogusitemsPlayerListener.java} | 10 +- 8 files changed, 141 insertions(+), 105 deletions(-) create mode 100644 src/cc/co/evenprime/bukkit/nocheat/checks/BogusitemsCheck.java rename src/cc/co/evenprime/bukkit/nocheat/listeners/{ItemdupePlayerListener.java => BogusitemsPlayerListener.java} (68%) diff --git a/plugin.yml b/plugin.yml index 093f97ce..0e344f03 100644 --- a/plugin.yml +++ b/plugin.yml @@ -3,7 +3,7 @@ name: NoCheat author: Evenprime main: cc.co.evenprime.bukkit.nocheat.NoCheat -version: 0.9 +version: 0.9.1 commands: nocheat: diff --git a/src/cc/co/evenprime/bukkit/nocheat/NoCheat.java b/src/cc/co/evenprime/bukkit/nocheat/NoCheat.java index abefaa1d..f6d3818f 100644 --- a/src/cc/co/evenprime/bukkit/nocheat/NoCheat.java +++ b/src/cc/co/evenprime/bukkit/nocheat/NoCheat.java @@ -15,6 +15,7 @@ import org.bukkit.plugin.java.JavaPlugin; import cc.co.evenprime.bukkit.nocheat.actions.Action; import cc.co.evenprime.bukkit.nocheat.checks.AirbuildCheck; import cc.co.evenprime.bukkit.nocheat.checks.BedteleportCheck; +import cc.co.evenprime.bukkit.nocheat.checks.BogusitemsCheck; import cc.co.evenprime.bukkit.nocheat.checks.Check; import cc.co.evenprime.bukkit.nocheat.checks.ItemdupeCheck; import cc.co.evenprime.bukkit.nocheat.checks.MovingCheck; @@ -41,6 +42,7 @@ public class NoCheat extends JavaPlugin { public SpeedhackCheck speedhackCheck; public AirbuildCheck airbuildCheck; public ItemdupeCheck itemdupeCheck; + public BogusitemsCheck bogusitemsCheck; public Check[] checks; @@ -68,12 +70,12 @@ public class NoCheat extends JavaPlugin { @Override public boolean onCommand(CommandSender sender, Command command, String commandLabel, String[] args) { - if(sender instanceof Player) { + /*if(sender instanceof Player) { if(!hasPermission((Player)sender, PermissionData.PERMISSION_P)) { sender.sendMessage("NC: You are not allowed to use this command."); return false; } - } + }*/ if(args.length == 0) { sender.sendMessage("NC: Using "+ ((permissions == null) ? "isOp()" : "Permissions") + ". Activated checks/bugfixes: " + getActiveChecksAsString() + ". Total time used for moving check so far: " + (movingCheck.statisticElapsedTimeNano / 1000000L + " ms. Average time per move event: " + (movingCheck.statisticElapsedTimeNano/1000L)/movingCheck.statisticTotalEvents + " us")); @@ -126,9 +128,10 @@ public class NoCheat extends JavaPlugin { speedhackCheck = new SpeedhackCheck(this); airbuildCheck = new AirbuildCheck(this); itemdupeCheck = new ItemdupeCheck(this); + bogusitemsCheck = new BogusitemsCheck(this); // just for convenience - checks = new Check[] { movingCheck, bedteleportCheck, speedhackCheck, airbuildCheck, itemdupeCheck }; + checks = new Check[] { movingCheck, bedteleportCheck, speedhackCheck, airbuildCheck, itemdupeCheck, bogusitemsCheck }; // parse the nocheat.yml config file setupConfig(); @@ -299,7 +302,7 @@ public class NoCheat extends JavaPlugin { data.permissionsCache[PermissionData.PERMISSION_BEDTELEPORT] = permissions.has(player, "nocheat.bedteleport"); data.permissionsCache[PermissionData.PERMISSION_FLYING] = permissions.has(player, "nocheat.flying"); data.permissionsCache[PermissionData.PERMISSION_MOVING] = permissions.has(player, "nocheat.moving"); - data.permissionsCache[PermissionData.PERMISSION_P] = permissions.has(player, "nocheat.p"); + data.permissionsCache[PermissionData.PERMISSION_BOGUSITEMS] = permissions.has(player, "nocheat.bogusitems"); data.permissionsCache[PermissionData.PERMISSION_SPEEDHACK] = permissions.has(player, "nocheat.speedhack"); data.permissionsCache[PermissionData.PERMISSION_NOTIFY] = permissions.has(player, "nocheat.notify"); data.permissionsCache[PermissionData.PERMISSION_ITEMDUPE] = permissions.has(player, "nocheat.itemdupe"); diff --git a/src/cc/co/evenprime/bukkit/nocheat/NoCheatConfiguration.java b/src/cc/co/evenprime/bukkit/nocheat/NoCheatConfiguration.java index d9a2663c..f5ea1bec 100644 --- a/src/cc/co/evenprime/bukkit/nocheat/NoCheatConfiguration.java +++ b/src/cc/co/evenprime/bukkit/nocheat/NoCheatConfiguration.java @@ -122,7 +122,8 @@ public class NoCheatConfiguration { plugin.movingCheck.setActive(c.getBoolean("active.moving", true)); plugin.airbuildCheck.setActive(c.getBoolean("active.airbuild", false)); plugin.bedteleportCheck.setActive(c.getBoolean("active.bedteleport", true)); - plugin.itemdupeCheck.setActive(c.getBoolean("active.itemdupe", false)); + plugin.itemdupeCheck.setActive(c.getBoolean("active.itemdupe", true)); + plugin.bogusitemsCheck.setActive(c.getBoolean("active.bogusitems", false)); } public void cleanup() { @@ -245,7 +246,8 @@ public class NoCheatConfiguration { w.write(" moving: true"); w.newLine(); w.write(" airbuild: false"); w.newLine(); w.write(" bedteleport: true"); w.newLine(); - w.write(" itemdupe: false"); w.newLine(); + w.write(" itemdupe: true"); w.newLine(); + w.write(" bogusitems: false"); w.newLine(); w.write("# Speedhack specific options"); w.newLine(); w.write("speedhack:"); w.newLine(); w.write(" logmessage: \"" + plugin.speedhackCheck.logMessage+"\""); w.newLine(); @@ -285,6 +287,8 @@ public class NoCheatConfiguration { w.write("bedteleport:"); w.newLine(); w.write("# Itemdupe specific options (none exist yet)"); w.newLine(); w.write("itemdupe:"); w.newLine(); + w.write("# Bogusitems specific options (none exist yet)"); w.newLine(); + w.write("bogusitems:"); w.newLine(); w.flush(); w.close(); } catch (IOException e) { diff --git a/src/cc/co/evenprime/bukkit/nocheat/checks/BogusitemsCheck.java b/src/cc/co/evenprime/bukkit/nocheat/checks/BogusitemsCheck.java new file mode 100644 index 00000000..f1f72ac4 --- /dev/null +++ b/src/cc/co/evenprime/bukkit/nocheat/checks/BogusitemsCheck.java @@ -0,0 +1,107 @@ +package cc.co.evenprime.bukkit.nocheat.checks; + +import java.util.logging.Level; + +import org.bukkit.Bukkit; +import org.bukkit.entity.Item; +import org.bukkit.entity.Player; +import org.bukkit.event.Event; +import org.bukkit.event.Listener; +import org.bukkit.event.Event.Priority; +import org.bukkit.event.player.PlayerDropItemEvent; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.event.player.PlayerPickupItemEvent; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import org.bukkit.plugin.PluginManager; + +import cc.co.evenprime.bukkit.nocheat.NoCheat; +import cc.co.evenprime.bukkit.nocheat.data.PermissionData; +import cc.co.evenprime.bukkit.nocheat.listeners.BogusitemsPlayerListener; + +public class BogusitemsCheck extends Check { + + public BogusitemsCheck(NoCheat plugin){ + super(plugin, "bogusitems", PermissionData.PERMISSION_BOGUSITEMS); + } + + public void check(PlayerPickupItemEvent event) { + + // Should we check at all? + if(hasPermission(event.getPlayer())) return; + + Item i = event.getItem(); + if(i != null) { + ItemStack s = i.getItemStack(); + if(s != null) { + if(s.getAmount() <= 0) {// buggy item + event.getItem().remove(); + event.setCancelled(true); + plugin.log(Level.WARNING, event.getPlayer().getName() + " tried to pick up an invalid item. Item was removed."); + + cleanPlayerInventory(event.getPlayer()); + } + } + } + } + + public void check(PlayerInteractEvent event) { + + if(hasPermission(event.getPlayer())) return; + + if(event.hasItem() && event.getItem().getAmount() <= 0) {// buggy item + event.setCancelled(true); + plugin.log(Level.WARNING, event.getPlayer().getName() + " tried to use an invalid item. Item was removed."); + event.getPlayer().getInventory().remove(event.getItem()); + + cleanPlayerInventory(event.getPlayer()); + } + } + + public void check(PlayerDropItemEvent event) { + + if(hasPermission(event.getPlayer())) return; + + Item item = event.getItemDrop(); + + if(item.getItemStack() != null) { + ItemStack stack = item.getItemStack(); + + if(stack.getAmount() <= 0) { + plugin.log(Level.WARNING, event.getPlayer().getName() + " tried to drop an invalid item. Dropped item was changed to dirt."); + stack.setTypeId(3); // dirt + stack.setAmount(1); + + cleanPlayerInventory(event.getPlayer()); + } + } + } + + private void cleanPlayerInventory(Player player) { + + Inventory inv = player.getInventory(); + + ItemStack stacks[] = inv.getContents(); + + for(int i = 0; i < stacks.length; i++) { + if(stacks[i] != null && stacks[i].getAmount() <= 0) { + inv.clear(i); + plugin.log(Level.WARNING, "Removed illegal item from inventory of " + player.getName()); + } + } + } + + @Override + protected void registerListeners() { + PluginManager pm = Bukkit.getServer().getPluginManager(); + + // Register listeners for itemdupe check + Listener bogusitemsPlayerListener = new BogusitemsPlayerListener(this); + + // Register listeners for itemdupe check + pm.registerEvent(Event.Type.PLAYER_PICKUP_ITEM, bogusitemsPlayerListener, Priority.Lowest, plugin); + pm.registerEvent(Event.Type.PLAYER_DROP_ITEM, bogusitemsPlayerListener, Priority.Lowest, plugin); + pm.registerEvent(Event.Type.PLAYER_INTERACT, bogusitemsPlayerListener, Priority.Lowest, plugin); + + } +} diff --git a/src/cc/co/evenprime/bukkit/nocheat/checks/ItemdupeCheck.java b/src/cc/co/evenprime/bukkit/nocheat/checks/ItemdupeCheck.java index fc87d412..3aa91bf7 100644 --- a/src/cc/co/evenprime/bukkit/nocheat/checks/ItemdupeCheck.java +++ b/src/cc/co/evenprime/bukkit/nocheat/checks/ItemdupeCheck.java @@ -1,27 +1,16 @@ package cc.co.evenprime.bukkit.nocheat.checks; -import java.util.logging.Level; - import org.bukkit.Bukkit; import org.bukkit.craftbukkit.entity.CraftPlayer; -import org.bukkit.entity.Item; -import org.bukkit.entity.Player; import org.bukkit.event.Event; import org.bukkit.event.Listener; import org.bukkit.event.Event.Priority; import org.bukkit.event.entity.EntityDeathEvent; -import org.bukkit.event.player.PlayerDropItemEvent; -import org.bukkit.event.player.PlayerInteractEvent; -import org.bukkit.event.player.PlayerInventoryEvent; -import org.bukkit.event.player.PlayerPickupItemEvent; -import org.bukkit.inventory.Inventory; -import org.bukkit.inventory.ItemStack; import org.bukkit.plugin.PluginManager; import cc.co.evenprime.bukkit.nocheat.NoCheat; import cc.co.evenprime.bukkit.nocheat.data.PermissionData; import cc.co.evenprime.bukkit.nocheat.listeners.ItemdupeEntityListener; -import cc.co.evenprime.bukkit.nocheat.listeners.ItemdupePlayerListener; public class ItemdupeCheck extends Check { @@ -29,86 +18,6 @@ public class ItemdupeCheck extends Check { super(plugin, "itemdupe", PermissionData.PERMISSION_ITEMDUPE); } - public void check(PlayerPickupItemEvent event) { - - // Should we check at all? - if(hasPermission(event.getPlayer())) return; - - Item i = event.getItem(); - if(i != null) { - ItemStack s = i.getItemStack(); - if(s != null) { - if(s.getAmount() <= 0) {// buggy item - event.getItem().remove(); - event.setCancelled(true); - plugin.log(Level.WARNING, event.getPlayer().getName() + " tried to pick up an invalid item. Item was removed."); - - cleanPlayerInventory(event.getPlayer()); - } - } - } - } - - public void check(PlayerInteractEvent event) { - - if(hasPermission(event.getPlayer())) return; - - if(event.hasItem() && event.getItem().getAmount() <= 0) {// buggy item - event.setCancelled(true); - plugin.log(Level.WARNING, event.getPlayer().getName() + " tried to use an invalid item. Item was removed."); - event.getPlayer().getInventory().remove(event.getItem()); - - cleanPlayerInventory(event.getPlayer()); - } - } - - public void check(PlayerDropItemEvent event) { - - if(hasPermission(event.getPlayer())) return; - - Item item = event.getItemDrop(); - - if(item.getItemStack() != null) { - ItemStack stack = item.getItemStack(); - - if(stack.getAmount() <= 0) { - plugin.log(Level.WARNING, event.getPlayer().getName() + " tried to drop an invalid item. Dropped item was changed to dirt."); - stack.setTypeId(3); // dirt - stack.setAmount(1); - - cleanPlayerInventory(event.getPlayer()); - } - } - } - - private void cleanPlayerInventory(Player player) { - - Inventory inv = player.getInventory(); - - ItemStack stacks[] = inv.getContents(); - - for(int i = 0; i < stacks.length; i++) { - if(stacks[i] != null && stacks[i].getAmount() <= 0) { - inv.clear(i); - System.out.println("Removed illegal item from inventory of " + player.getName()); - } - } - } - - @Override - protected void registerListeners() { - PluginManager pm = Bukkit.getServer().getPluginManager(); - - // Register listeners for itemdupe check - Listener itemdupePlayerListener = new ItemdupePlayerListener(this); - - // Register listeners for itemdupe check - pm.registerEvent(Event.Type.PLAYER_PICKUP_ITEM, itemdupePlayerListener, Priority.Lowest, plugin); - pm.registerEvent(Event.Type.ENTITY_DEATH, new ItemdupeEntityListener(this), Priority.Lowest, plugin); - pm.registerEvent(Event.Type.PLAYER_DROP_ITEM, itemdupePlayerListener, Priority.Lowest, plugin); - pm.registerEvent(Event.Type.PLAYER_INTERACT, itemdupePlayerListener, Priority.Lowest, plugin); - - } public void check(EntityDeathEvent event) { @@ -118,4 +27,17 @@ public class ItemdupeCheck extends Check { ((CraftPlayer)event.getEntity()).getHandle().x(); // close all inventory screens } } + + + @Override + protected void registerListeners() { + PluginManager pm = Bukkit.getServer().getPluginManager(); + + // Register listeners for itemdupe check + Listener itemdupePlayerListener = new ItemdupeEntityListener(this); + + // Register listeners for itemdupe check + pm.registerEvent(Event.Type.ENTITY_DEATH, itemdupePlayerListener, Priority.Lowest, plugin); + + } } diff --git a/src/cc/co/evenprime/bukkit/nocheat/checks/MovingCheck.java b/src/cc/co/evenprime/bukkit/nocheat/checks/MovingCheck.java index ef09c3f6..10154264 100644 --- a/src/cc/co/evenprime/bukkit/nocheat/checks/MovingCheck.java +++ b/src/cc/co/evenprime/bukkit/nocheat/checks/MovingCheck.java @@ -653,6 +653,6 @@ public class MovingCheck extends Check { pm.registerEvent(Event.Type.PLAYER_MOVE, movingPlayerMonitor, Priority.Monitor, plugin); pm.registerEvent(Event.Type.PLAYER_RESPAWN, movingPlayerMonitor, Priority.Monitor, plugin); pm.registerEvent(Event.Type.ENTITY_DAMAGE, new MovingEntityListener(this), Priority.Monitor, plugin); - pm.registerEvent(Event.Type.PLAYER_TELEPORT, new MovingPlayerMonitor(this), Priority.Monitor, plugin); + pm.registerEvent(Event.Type.PLAYER_TELEPORT, new MovingPlayerMonitor(this), Priority.Monitor, plugin); } } diff --git a/src/cc/co/evenprime/bukkit/nocheat/data/PermissionData.java b/src/cc/co/evenprime/bukkit/nocheat/data/PermissionData.java index b95e8209..b57608c2 100644 --- a/src/cc/co/evenprime/bukkit/nocheat/data/PermissionData.java +++ b/src/cc/co/evenprime/bukkit/nocheat/data/PermissionData.java @@ -14,7 +14,7 @@ public class PermissionData { public static final int PERMISSION_SPEEDHACK = 2; public static final int PERMISSION_AIRBUILD = 3; public static final int PERMISSION_BEDTELEPORT = 4; - public static final int PERMISSION_P = 5; + public static final int PERMISSION_BOGUSITEMS = 5; public static final int PERMISSION_NOTIFY = 6; public static final int PERMISSION_ITEMDUPE = 7; diff --git a/src/cc/co/evenprime/bukkit/nocheat/listeners/ItemdupePlayerListener.java b/src/cc/co/evenprime/bukkit/nocheat/listeners/BogusitemsPlayerListener.java similarity index 68% rename from src/cc/co/evenprime/bukkit/nocheat/listeners/ItemdupePlayerListener.java rename to src/cc/co/evenprime/bukkit/nocheat/listeners/BogusitemsPlayerListener.java index 64baf892..cab33d4d 100644 --- a/src/cc/co/evenprime/bukkit/nocheat/listeners/ItemdupePlayerListener.java +++ b/src/cc/co/evenprime/bukkit/nocheat/listeners/BogusitemsPlayerListener.java @@ -5,14 +5,14 @@ import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerListener; import org.bukkit.event.player.PlayerPickupItemEvent; -import cc.co.evenprime.bukkit.nocheat.checks.ItemdupeCheck; +import cc.co.evenprime.bukkit.nocheat.checks.BogusitemsCheck; -public class ItemdupePlayerListener extends PlayerListener { +public class BogusitemsPlayerListener extends PlayerListener { - ItemdupeCheck check; + BogusitemsCheck check; - public ItemdupePlayerListener(ItemdupeCheck itemdupeCheck) { - check = itemdupeCheck; + public BogusitemsPlayerListener(BogusitemsCheck bogusitemsCheck) { + check = bogusitemsCheck; } @Override