mirror of
https://github.com/NoCheatPlus/NoCheatPlus.git
synced 2024-10-06 10:27:26 +02:00
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:
parent
eb3ddabbc3
commit
385c807c10
@ -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:
|
||||
|
@ -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 " : ""));
|
||||
}
|
||||
|
||||
|
@ -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) {
|
||||
|
48
src/cc/co/evenprime/bukkit/nocheat/checks/ItemdupeCheck.java
Normal file
48
src/cc/co/evenprime/bukkit/nocheat/checks/ItemdupeCheck.java
Normal 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";
|
||||
}
|
||||
|
||||
}
|
@ -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);
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user