A fix for a new itemduplication bug involving Workbenches, but may

also fix other such bugs due to its generic nature.
This commit is contained in:
Evenprime 2011-04-25 14:03:17 +02:00
parent eb3ddabbc3
commit 385c807c10
5 changed files with 104 additions and 15 deletions

View File

@ -3,7 +3,7 @@ name: NoCheat
author: Evenprime
main: cc.co.evenprime.bukkit.nocheat.NoCheat
version: 0.8.6
version: 0.8.7
commands:
nocheat:

View File

@ -17,6 +17,7 @@ import org.bukkit.plugin.PluginManager;
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.ItemdupeCheck;
import cc.co.evenprime.bukkit.nocheat.checks.MovingCheck;
import cc.co.evenprime.bukkit.nocheat.checks.SpeedhackCheck;
import cc.co.evenprime.bukkit.nocheat.listeners.AirbuildListener;
@ -24,6 +25,7 @@ import cc.co.evenprime.bukkit.nocheat.listeners.BedteleportListener;
import cc.co.evenprime.bukkit.nocheat.listeners.MovingListener;
import cc.co.evenprime.bukkit.nocheat.listeners.MovingMonitor;
import cc.co.evenprime.bukkit.nocheat.listeners.MovingEntityListener;
import cc.co.evenprime.bukkit.nocheat.listeners.ItemdupeListener;
import cc.co.evenprime.bukkit.nocheat.listeners.SpeedhackListener;
import com.ensifera.animosity.craftirc.CraftIRC;
@ -41,10 +43,11 @@ import org.bukkit.plugin.Plugin;
*/
public class NoCheat extends JavaPlugin {
public final MovingCheck movingCheck;
public final BedteleportCheck bedteleportCheck;
public final SpeedhackCheck speedhackCheck;
public final AirbuildCheck airbuildCheck;
public MovingCheck movingCheck;
public BedteleportCheck bedteleportCheck;
public SpeedhackCheck speedhackCheck;
public AirbuildCheck airbuildCheck;
public ItemdupeCheck itemdupeCheck;
private NoCheatConfiguration config;
@ -59,13 +62,7 @@ public class NoCheat extends JavaPlugin {
private CraftIRC irc;
public NoCheat() {
movingCheck = new MovingCheck(this);
bedteleportCheck = new BedteleportCheck(this);
speedhackCheck = new SpeedhackCheck(this);
airbuildCheck = new AirbuildCheck(this);
// parse the nocheat.yml config file
setupConfig();
}
@Override
@ -123,12 +120,18 @@ public class NoCheat extends JavaPlugin {
}
public void onEnable() {
// Create our listeners and feed them with neccessary information
PluginManager pm = getServer().getPluginManager();
movingCheck = new MovingCheck(this);
bedteleportCheck = new BedteleportCheck(this);
speedhackCheck = new SpeedhackCheck(this);
airbuildCheck = new AirbuildCheck(this);
itemdupeCheck = new ItemdupeCheck(this);
// parse the nocheat.yml config file
setupConfig();
// Create our listeners and feed them with neccessary information
PluginManager pm = getServer().getPluginManager();
// Register listeners for moving check
pm.registerEvent(Event.Type.PLAYER_MOVE, new MovingListener(movingCheck), Priority.Lowest, this);
@ -137,6 +140,9 @@ public class NoCheat extends JavaPlugin {
pm.registerEvent(Event.Type.PLAYER_MOVE, new MovingMonitor(movingCheck), Priority.Monitor, this);
pm.registerEvent(Event.Type.PLAYER_RESPAWN, new MovingMonitor(movingCheck), Priority.Monitor, this);
pm.registerEvent(Event.Type.ENTITY_DAMAGE, new MovingEntityListener(movingCheck), Priority.Monitor, this);
pm.registerEvent(Event.Type.PLAYER_PICKUP_ITEM, new ItemdupeListener(itemdupeCheck), Priority.Lowest, this);
pm.registerEvent(Event.Type.PLAYER_INTERACT, new ItemdupeListener(itemdupeCheck), Priority.Lowest, this);
// Register listeners for speedhack check
pm.registerEvent(Event.Type.PLAYER_MOVE, new SpeedhackListener(speedhackCheck), Priority.High, this);
@ -320,7 +326,8 @@ public class NoCheat extends JavaPlugin {
(movingCheck.isActive() && !movingCheck.allowFlying ? "flying " : "") +
(speedhackCheck.isActive() ? speedhackCheck.getName() + " " : "") +
(airbuildCheck.isActive() ? airbuildCheck.getName() + " " : "") +
(bedteleportCheck.isActive() ? bedteleportCheck.getName() + " " : "");
(bedteleportCheck.isActive() ? bedteleportCheck.getName() + " " : "") +
(itemdupeCheck.isActive() ? itemdupeCheck.getName() + " " : "");
}
@ -330,6 +337,7 @@ public class NoCheat extends JavaPlugin {
(!speedhackCheck.isActive() ? speedhackCheck.getName() + "* " : (hasPermission(p, NoCheatData.PERMISSION_SPEEDHACK) ? speedhackCheck.getName() + " " : "")) +
(!airbuildCheck.isActive() ? airbuildCheck.getName() + "* " : (hasPermission(p, NoCheatData.PERMISSION_AIRBUILD) ? airbuildCheck.getName() + " " : "")) +
(!bedteleportCheck.isActive() ? bedteleportCheck.getName() + "* " : (hasPermission(p, NoCheatData.PERMISSION_BEDTELEPORT) ? bedteleportCheck.getName() + " " : "")) +
(!itemdupeCheck.isActive() ? itemdupeCheck.getName() + "* " : " ") +
(hasPermission(p, NoCheatData.PERMISSION_NOTIFY) ? "notify " : ""));
}

View File

@ -122,6 +122,7 @@ public class NoCheatConfiguration {
plugin.movingCheck.setActive(c.getBoolean("active.moving", plugin.movingCheck.isActive()));
plugin.airbuildCheck.setActive(c.getBoolean("active.airbuild", plugin.airbuildCheck.isActive()));
plugin.bedteleportCheck.setActive(c.getBoolean("active.bedteleport", plugin.bedteleportCheck.isActive()));
plugin.itemdupeCheck.setActive(c.getBoolean("active.itemdupe", plugin.itemdupeCheck.isActive()));
}
public void cleanup() {
@ -244,6 +245,7 @@ public class NoCheatConfiguration {
w.write(" moving: "+plugin.movingCheck.isActive()); w.newLine();
w.write(" airbuild: "+plugin.airbuildCheck.isActive()); w.newLine();
w.write(" bedteleport: "+plugin.bedteleportCheck.isActive()); w.newLine();
w.write(" itemdupe: "+plugin.itemdupeCheck.isActive()); w.newLine();
w.write("# Speedhack specific options"); w.newLine();
w.write("speedhack:"); w.newLine();
w.write(" logmessage: \"" + plugin.speedhackCheck.logMessage+"\""); w.newLine();
@ -281,6 +283,8 @@ public class NoCheatConfiguration {
w.write(" high: "+actionsToString(plugin.airbuildCheck.actions[2])); w.newLine();
w.write("# Bedteleport specific options (none exist yet)"); w.newLine();
w.write("bedteleport:"); w.newLine();
w.write("# Itemdupe specific options (none exist yet)"); w.newLine();
w.write("itemdupe:"); w.newLine();
w.flush(); w.close();
} catch (IOException e) {

View File

@ -0,0 +1,48 @@
package cc.co.evenprime.bukkit.nocheat.checks;
import java.util.logging.Level;
import org.bukkit.entity.Item;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.event.player.PlayerPickupItemEvent;
import org.bukkit.inventory.ItemStack;
import cc.co.evenprime.bukkit.nocheat.NoCheat;
public class ItemdupeCheck extends Check {
public ItemdupeCheck(NoCheat plugin){
super(plugin);
this.setActive(false);
}
public void check(PlayerPickupItemEvent event) {
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 will be removed now.");
}
}
}
}
public void check(PlayerInteractEvent event) {
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 will be removed now.");
event.getPlayer().getInventory().remove(event.getItem());
}
}
@Override
public String getName() {
return "itemdupe";
}
}

View File

@ -0,0 +1,29 @@
package cc.co.evenprime.bukkit.nocheat.listeners;
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;
public class ItemdupeListener extends PlayerListener {
ItemdupeCheck check;
public ItemdupeListener(ItemdupeCheck itemdupeCheck) {
check = itemdupeCheck;
}
@Override
public void onPlayerPickupItem(PlayerPickupItemEvent event) {
if(check.isActive()) check.check(event);
}
@Override
public void onPlayerInteract(PlayerInteractEvent event) {
if(check.isActive()) check.check(event);
}
}