Added on-break event to the blacklist.

This commit is contained in:
sk89q 2010-11-20 11:13:18 -08:00
parent 9bc3a25191
commit 93c0295744
10 changed files with 155 additions and 3 deletions

View File

@ -92,6 +92,28 @@ public class Blacklist {
return ret;
}
/**
* Called on block break. Returns true to let the action pass
* through.
*
* @param block
* @param player
* @return
*/
public boolean onBreak(final Block block, final Player player) {
List<BlacklistEntry> entries = getEntries(block.getType());
if (entries == null) {
return true;
}
boolean ret = true;
for (BlacklistEntry entry : entries) {
if (!entry.onBreak(block, player)) {
ret = false;
}
}
return ret;
}
/**
* Called on left click. Returns true to let the action pass through.
*
@ -269,6 +291,8 @@ public class Blacklist {
entry.setIgnoreGroups(parts[1].split(","));
} else if (parts[0].equalsIgnoreCase("on-destroy")) {
entry.setDestroyActions(parts[1].split(","));
} else if (parts[0].equalsIgnoreCase("on-break")) {
entry.setBreakActions(parts[1].split(","));
} else if (parts[0].equalsIgnoreCase("on-left")
|| parts[0].equalsIgnoreCase("on-destroy-with")) {
entry.setDestroyWithActions(parts[1].split(","));

View File

@ -46,6 +46,10 @@ public class BlacklistEntry {
* List of actions to perform on destruction.
*/
private String[] destroyActions;
/**
* List of actions to perform on break.
*/
private String[] breakActions;
/**
* List of actions to perform on left click.
*/
@ -104,6 +108,20 @@ public class BlacklistEntry {
this.destroyActions = actions;
}
/**
* @return
*/
public String[] getBreakActions() {
return breakActions;
}
/**
* @param actions
*/
public void setBreakActions(String[] actions) {
this.breakActions = actions;
}
/**
* @return
*/
@ -243,6 +261,42 @@ public class BlacklistEntry {
return process(block.getType(), player, destroyActions, handler);
}
/**
* Called on block break. Returns true to let the action pass
* through.
*
* @param block
* @param player
* @return
*/
public boolean onBreak(final Block block, final Player player) {
if (breakActions == null) {
return true;
}
final BlacklistEntry entry = this;
ActionHandler handler = new ActionHandler() {
public void log(String itemName) {
blacklist.getLogger().logBreakAttempt(player, block);
}
public void kick(String itemName) {
player.kick("You are not allowed to break " + itemName);
}
public void ban(String itemName) {
entry.banPlayer(player, "Banned: You are not allowed to break " + itemName);
}
public void notifyAdmins(String itemName) {
entry.notifyAdmins(player.getName() + " tried to break " + itemName + ".");
}
public void tell(String itemName) {
player.sendMessage(Colors.Yellow + "You are not allowed to break " + itemName + ".");
}
};
return process(block.getType(), player, breakActions, handler);
}
/**
* Called on left click. Returns true to let the action pass through.
*

View File

@ -70,6 +70,18 @@ public class BlacklistLogger implements BlacklistLoggerHandler {
}
}
/**
* Log a block break attempt.
*
* @param player
* @param block
*/
public void logBreakAttempt(Player player, Block block) {
for (BlacklistLoggerHandler handler : handlers) {
handler.logBreakAttempt(player, block);
}
}
/**
* Log a right click on attempt.
*

View File

@ -30,6 +30,13 @@ public interface BlacklistLoggerHandler {
* @param block
*/
public void logDestroyAttempt(Player player, Block block);
/**
* Log a block break attempt.
*
* @param player
* @param block
*/
public void logBreakAttempt(Player player, Block block);
/**
* Log a right click on attempt.
*

View File

@ -29,7 +29,7 @@ public class ConsoleLoggerHandler implements BlacklistLoggerHandler {
* Logger.
*/
private static final Logger logger = Logger.getLogger("Minecraft.WorldGuard");
/**
* Log a block destroy attempt.
*
@ -41,6 +41,17 @@ public class ConsoleLoggerHandler implements BlacklistLoggerHandler {
+ " tried to destroy " + getFriendlyItemName(block.getType()));
}
/**
* Log a block break attempt.
*
* @param player
* @param block
*/
public void logBreakAttempt(Player player, Block block) {
logger.log(Level.INFO, "WorldGuard: " + player.getName()
+ " tried to break " + getFriendlyItemName(block.getType()));
}
/**
* Log a right click on attempt.
*

View File

@ -112,7 +112,7 @@ public class DatabaseLoggerHandler implements BlacklistLoggerHandler {
+ e.getMessage());
}
}
/**
* Log a block destroy attempt.
*
@ -124,6 +124,17 @@ public class DatabaseLoggerHandler implements BlacklistLoggerHandler {
block.getX(), block.getY(), block.getZ(), block.getType());
}
/**
* Log a block break attempt.
*
* @param player
* @param block
*/
public void logBreakAttempt(Player player, Block block) {
logEvent("BREAK", player.getName(),
block.getX(), block.getY(), block.getZ(), block.getType());
}
/**
* Log a right click on attempt.
*

View File

@ -215,6 +215,16 @@ public class FileLoggerHandler implements BlacklistLoggerHandler {
log(player, "Tried to destroy " + getFriendlyItemName(block.getType()));
}
/**
* Log a block break attempt.
*
* @param player
* @param block
*/
public void logBreakAttempt(Player player, Block block) {
log(player, "Tried to break " + getFriendlyItemName(block.getType()));
}
/**
* Log a right click on attempt.
*

View File

@ -71,6 +71,8 @@ public class WorldGuard extends Plugin {
PluginListener.Priority.HIGH);
loader.addListener(PluginLoader.Hook.BLOCK_DESTROYED, listener, this,
PluginListener.Priority.CRITICAL);
loader.addListener(PluginLoader.Hook.BLOCK_BROKEN, listener, this,
PluginListener.Priority.HIGH);
loader.addListener(PluginLoader.Hook.DISCONNECT, listener, this,
PluginListener.Priority.HIGH);
loader.addListener(PluginLoader.Hook.ITEM_DROP , listener, this,

View File

@ -516,6 +516,23 @@ public class WorldGuardListener extends PluginListener {
return false;
}
/**
* Called when a person actually breaks the block.
*
* @param player
* @param block
* @return
*/
public boolean onBlockBreak(Player player, Block block) {
if (blacklist != null) {
if (!blacklist.onBreak(block, player)) {
return true;
}
}
return false;
}
/**
* Called when either a sign, chest or furnace is changed.
*

View File

@ -18,6 +18,7 @@
#
# Events:
# - on-destroy (when a block of this type is being destroyed)
# - on-break (when a block of this type is about to be broken)
# - on-destroy-with (the item/block held by the user while destroying)
# - on-create (the item/block in the user's inventory is being created)
# - on-use (the block is right clicked)
@ -67,4 +68,7 @@
#on-destroy=notify,deny,log
#[cobblestone]
#on-create=deny,tell,log
#on-create=deny,tell,log
#[lever]
#on-break=deny