Compare commits

...
18 Commits
Author SHA1 Message Date
sk89q 48ace4947b Updated for 1.4.1. 2010-11-21 11:40:26 -08:00
sk89q 57acbebaf1 Fixed issue with the block lag fix dropping item stacks of 0 quantity. 2010-11-21 11:34:46 -08:00
sk89q e15311178b Updated the README.txt. 2010-11-21 01:36:13 -08:00
sk89q 7385be7eff Fixed typo in worldguard.properties. 2010-11-21 01:30:50 -08:00
sk89q 9a29474132 Updated for 1.4. 2010-11-21 01:29:52 -08:00
sk89q 881f050f0d Inventory checks now won't be used if there are no on-acquire events. 2010-11-21 01:25:59 -08:00
sk89q 339bf1a06d Improved documentation. 2010-11-21 01:21:20 -08:00
sk89q bc70678387 Updated for new version of durability fix. 2010-11-21 01:13:33 -08:00
sk89q c3eef60672 Added no-physics-gravel, no-physics-sand, and allow-portal-anywhere. 2010-11-21 01:12:00 -08:00
sk89q eb78b390ca Added item-durability and blacklist on-acquire event. Thanks to Dinnerbone for heading my requests :) 2010-11-21 00:45:16 -08:00
sk89q a0fc3472e4 Updated blacklist and added Sturmeh's item durability 'fix' as sample rules. 2010-11-20 20:10:29 -08:00
sk89q 915946317d Updated the changelog to note the table schema change. 2010-11-20 12:01:38 -08:00
sk89q d4c4a497c4 Updated for 1.3. 2010-11-20 11:59:35 -08:00
sk89q 0286900829 The notify, log, and tell actions will now trigger every time for the on-break, on-create, on-drop events. 2010-11-20 11:53:57 -08:00
sk89q cf7874f776 Added comments and messages. Made the blacklist notification messages more compact and a different color. 2010-11-20 11:47:32 -08:00
sk89q 93c0295744 Added on-break event to the blacklist. 2010-11-20 11:13:18 -08:00
sk89q 9bc3a25191 Fixed signs being blank if they were denied via the blacklist. 2010-11-20 10:59:34 -08:00
sk89q e95d7a8b6e Improved plugin compatibility with the block lag fix. 2010-11-20 10:56:47 -08:00
15 changed files with 807 additions and 114 deletions

No files matched your search

+36
View File
@@ -1,3 +1,39 @@
1.4.1
- Fixed issue with the block lag fix dropping item stacks of 0 quantity.
1.4
- New on-acquire hook. This does both a total inventory check on inventory
change and item pick up denial. The item pick up denial is largely
thanks to Dinnerbone for fulfilling my request to add a particular hook.
- Item durability can now be toggled with item-durability. Thanks to
Dinnerbone for figuring this out while filfilling my request. The
default setting is to fix item durability.
- New no-physics-gravel and no-physics-sand options allow you to
prevent gravel and sand from falling.
- New allow-portal-anywhere option allows you to create portal blocks
anywhere.
1.3
- UPGRADE WARNING: If you are using database logging, you must add a
NULL 'comment' VARCHAR field to the table. The line of SQL that you
can run for MySQL can be found in blacklist_table.sql.
- Improved plugin compatibility with the block lag fix. For maximum
compatibility, you must now list WorldGuard as the first plugin in
server.properties and you cannot reload or enable the plugin
while the server is up. This is for bad plugins that unnecessarily
use the "critical" priority for its hooks like the LWC. Most plugins
don't do that though, so this won't apply for most people.
- Fixed signs being blank if they were denied via the blacklist.
- Added on-break event to the blacklist.
- Added comments and messages. Comments are only for your own use and they
are printed with the log and notify actions of the blacklist. The
message replaces the message that is shown the user and it is optional.
- The blacklist notification messages are now more compact and are
light grey instead of light purple.
- The notify, log, and tell actions will now trigger every time for the
on-break, on-create, on-drop events rather than wait 3 seconds between
events for the same item or block for a player.
1.2
- /stopfire and /allowfire disable and enable fire spreading globally.
- Block lag fix slightly improved in accuracy for item drops.
+35 -2
View File
@@ -24,6 +24,9 @@ use or not:
- Temporarily stop fire globally with some commands.
- Fix the block lag.
- Destroy tools on drop to alleviate the durability cheat.
- OR just fix the durability bug.
- Prevent gravel and sand from falling.
- Allow portal blocks to be placed anywhere.
hMod is required as WorldGuard is a plugin for hMod.
@@ -34,6 +37,9 @@ A "worldguard.properties" will be created the first the time that you load
WorldGuard on your server. You can either restart your server or use
/reloadplugin WorldGuard to reload the configuraton file after editing it.
- item-durability (def. true)
Enables item durability.
- classic-water (def. false)
Toggle use of classic water. Be foreward that your world may be
flooded if you are not careful. If you have WorldEdit, you can use
@@ -51,6 +57,15 @@ WorldGuard on your server. You can either restart your server or use
creating a 5x5x5 cuboid free of water. Increasing the number will
increase server load exponentially, although 3-5 has fairly low impact.
- no-physics-gravel (def. false)
Prevents gravel from falling due to gravity.
- no-physics-sand (def. false)
Prevents sand from falling due to gravity.
- allow-portal-anywhere (def. false)
Allows you to place portal blocks anywhere.
- enforce-single-session (def. true)
Enforce single sessions. If the player is already found to be on
the server when s/he logs in, the other player will be kicked with
@@ -67,7 +82,8 @@ WorldGuard on your server. You can either restart your server or use
command; it is only used for permissions.
- block-creepers (def. false)
Block creeper explosions. They will not explode client-side.
Block creeper explosions from destroying terrain (and possibly from
causing damage).
- disable-lava-fire (def. false)
Prevent lava from starting fires.
@@ -92,7 +108,12 @@ WorldGuard on your server. You can either restart your server or use
friendly message than if you used the 'tell' action of the blacklist).
- block-lag-fix (def. false)
Attempts to fix block lag.
Attempts to fix block lag. For maximum compatibility with other plugins,
you must list WorldGuard as the first plugin in server.properties and
you cannot reload or enable WorldGuard while the server is up.
This is for bad plugins that unnecessarily use the "critical" priority
for its hooks like the LWC. Most plugins, the popular protection ones
included, don't do that though so this won't apply for most people.
- log-console (def. true)
For blacklist log actions, print to console.
@@ -174,3 +195,15 @@ certain rules apply to only some groups.
Edit the included worldguard-blacklist.txt file and follow the
instructions inside. The file comes with the download for WorldGuard.
Thanks
------
While I would like to thank everyone for their support, I would like to
say thanks to the following individuals for their direct
contributions to WorldGuard:
- Sturmeh, for contributing the original durability workaround
- Meaglin, for changing the on flow hook at my request
- Dinnerbone, for implementing the on item pick up hook at my request,
and also for figuring out the durability bug in the process
+5
View File
@@ -12,5 +12,10 @@ CREATE TABLE `blacklist_events` (
`z` int(11) NOT NULL,
`item` int(11) NOT NULL,
`time` int(11) NOT NULL,
`comment` varchar(255) NULL,
PRIMARY KEY (`id`)
);
-- Required update if you have an older version of the table:
ALTER TABLE `blacklist_events` ADD `comment` VARCHAR( 255 ) NULL
+1 -1
View File
@@ -1,2 +1,2 @@
Manifest-Version: 1.0
WorldGuard-Version: 1.2
WorldGuard-Version: 1.4.1
+89
View File
@@ -45,6 +45,11 @@ public class Blacklist {
*/
private BlacklistLogger blacklistLogger = new BlacklistLogger();
/**
* Blacklist contains on-acquire events.
*/
private boolean hasOnAcquire;
/**
* Returns whether the list is empty.
*
@@ -92,6 +97,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.
*
@@ -197,6 +224,48 @@ public class Blacklist {
return ret;
}
/**
* Called on acquire. Returns true to let the action pass through.
*
* @param item
* @param player
* @return
*/
public boolean onAcquire(int item, Player player) {
List<BlacklistEntry> entries = getEntries(item);
if (entries == null) {
return true;
}
boolean ret = true;
for (BlacklistEntry entry : entries) {
if (!entry.onAcquire(item, player)) {
ret = false;
}
}
return ret;
}
/**
* Called on acquire. Returns true to let the action pass through.
*
* @param item
* @param player
* @return
*/
public boolean onSilentAcquire(int item, Player player) {
List<BlacklistEntry> entries = getEntries(item);
if (entries == null) {
return true;
}
boolean ret = true;
for (BlacklistEntry entry : entries) {
if (!entry.onSilentAcquire(item, player)) {
ret = false;
}
}
return ret;
}
/**
* Load the blacklist.
*
@@ -213,6 +282,8 @@ public class Blacklist {
input = new FileReader(file);
BufferedReader buff = new BufferedReader(input);
hasOnAcquire = false;
String line;
List<BlacklistEntry> currentEntries = null;
while ((line = buff.readLine()) != null) {
@@ -269,6 +340,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(","));
@@ -280,6 +353,13 @@ public class Blacklist {
entry.setUseActions(parts[1].split(","));
} else if (parts[0].equalsIgnoreCase("on-drop")) {
entry.setDropActions(parts[1].split(","));
} else if (parts[0].equalsIgnoreCase("on-acquire")) {
hasOnAcquire = true;
entry.setAcquireActions(parts[1].split(","));
} else if (parts[0].equalsIgnoreCase("message")) {
entry.setMessage(parts[1].trim());
} else if (parts[0].equalsIgnoreCase("comment")) {
entry.setComment(parts[1].trim());
} else {
unknownOption = true;
}
@@ -305,4 +385,13 @@ public class Blacklist {
}
}
}
/**
* Blacklist contains on-acquire events.
*
* @return
*/
public boolean hasOnAcquire() {
return hasOnAcquire;
}
}
+237 -38
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.
*/
@@ -62,6 +66,29 @@ public class BlacklistEntry {
* List of actions to perform on drop.
*/
private String[] dropActions;
/**
* List of actions to perform on drop.
*/
private String[] acquireActions;
/**
* Message for users.
*/
private String message;
/**
* Comment for administrators.
*/
private String comment;
/**
* Used to ignore messages.
*/
private static ActionHandler silentHandler = new ActionHandler() {
public void log(String itemName) {}
public void kick(String itemName) {}
public void ban(String itemName) {}
public void notifyAdmins(String itemName) {}
public void tell(String itemName) {}
};
/**
* Construct the object.
@@ -104,6 +131,20 @@ public class BlacklistEntry {
this.destroyActions = actions;
}
/**
* @return
*/
public String[] getBreakActions() {
return breakActions;
}
/**
* @param actions
*/
public void setBreakActions(String[] actions) {
this.breakActions = actions;
}
/**
* @return
*/
@@ -160,6 +201,48 @@ public class BlacklistEntry {
this.dropActions = actions;
}
/**
* @return
*/
public String[] getAcquireActions() {
return acquireActions;
}
/**
* @param actions
*/
public void setAcquireActions(String[] actions) {
this.acquireActions = actions;
}
/**
* @return the message
*/
public String getMessage() {
return message;
}
/**
* @param message the message to set
*/
public void setMessage(String message) {
this.message = message;
}
/**
* @return the comment
*/
public String getComment() {
return comment;
}
/**
* @param comment the comment to set
*/
public void setComment(String comment) {
this.comment = comment;
}
/**
* Returns true if this player should be ignored.
*
@@ -188,7 +271,7 @@ public class BlacklistEntry {
for (Player player : etc.getServer().getPlayerList()) {
if (player.canUseCommand("/wprotectalerts")
|| player.canUseCommand("/worldguardnotify")) {
player.sendMessage(Colors.LightPurple + "WorldGuard: " + str);
player.sendMessage(Colors.LightGray + "WG: " + str);
}
}
}
@@ -224,7 +307,7 @@ public class BlacklistEntry {
ActionHandler handler = new ActionHandler() {
public void log(String itemName) {
blacklist.getLogger().logDestroyAttempt(player, block);
blacklist.getLogger().logDestroyAttempt(player, block, comment);
}
public void kick(String itemName) {
player.kick("You are not allowed to destroy " + itemName);
@@ -233,14 +316,52 @@ public class BlacklistEntry {
entry.banPlayer(player, "Banned: You are not allowed to destroy " + itemName);
}
public void notifyAdmins(String itemName) {
entry.notifyAdmins(player.getName() + " tried to destroy " + itemName + ".");
entry.notifyAdmins(player.getName() + " (destroy) " + itemName
+ (comment != null ? " (" + comment + ")" : "") + ".");
}
public void tell(String itemName) {
player.sendMessage(Colors.Yellow + "You are not allowed to destroy " + itemName + ".");
}
};
return process(block.getType(), player, destroyActions, handler);
return process(block.getType(), player, destroyActions, handler, false, false);
}
/**
* 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, comment);
}
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() + " (break) " + itemName
+ (comment != null ? " (" + comment + ")" : "") + ".");
}
public void tell(String itemName) {
player.sendMessage(Colors.Yellow + "You are not allowed to break " + itemName + ".");
}
};
return process(block.getType(), player, breakActions, handler, true, false);
}
/**
@@ -259,7 +380,7 @@ public class BlacklistEntry {
ActionHandler handler = new ActionHandler() {
public void log(String itemName) {
blacklist.getLogger().logDestroyWithAttempt(player, item);
blacklist.getLogger().logDestroyWithAttempt(player, item, comment);
}
public void kick(String itemName) {
player.kick("You can't destroy with " + itemName);
@@ -268,14 +389,15 @@ public class BlacklistEntry {
entry.banPlayer(player, "Banned: You can't destroy with " + itemName);
}
public void notifyAdmins(String itemName) {
entry.notifyAdmins(player.getName() + " tried to destroyed with " + itemName + ".");
entry.notifyAdmins(player.getName() + " (destroy w/) " + itemName
+ (comment != null ? " (" + comment + ")" : "") + ".");
}
public void tell(String itemName) {
player.sendMessage(Colors.Yellow + "You can't destroy with " + itemName + ".");
}
};
return process(item, player, destroyWithActions, handler);
return process(item, player, destroyWithActions, handler, false, false);
}
/**
@@ -294,23 +416,24 @@ public class BlacklistEntry {
ActionHandler handler = new ActionHandler() {
public void log(String itemName) {
blacklist.getLogger().logCreateAttempt(player, item);
blacklist.getLogger().logCreateAttempt(player, item, comment);
}
public void kick(String itemName) {
player.kick("You can't create " + itemName);
player.kick("You can't place " + itemName);
}
public void ban(String itemName) {
entry.banPlayer(player, "Banned: You can't create " + itemName);
entry.banPlayer(player, "Banned: You can't place " + itemName);
}
public void notifyAdmins(String itemName) {
entry.notifyAdmins(player.getName() + " tried to create " + itemName + ".");
entry.notifyAdmins(player.getName() + " (place) " + itemName
+ (comment != null ? " (" + comment + ")" : "") + ".");
}
public void tell(String itemName) {
player.sendMessage(Colors.Yellow + "You can't create " + itemName + ".");
player.sendMessage(Colors.Yellow + "You can't place " + itemName + ".");
}
};
return process(item, player, createActions, handler);
return process(item, player, createActions, handler, true, false);
}
/**
@@ -329,7 +452,7 @@ public class BlacklistEntry {
ActionHandler handler = new ActionHandler() {
public void log(String itemName) {
blacklist.getLogger().logUseAttempt(player, block);
blacklist.getLogger().logUseAttempt(player, block, comment);
}
public void kick(String itemName) {
player.kick("You can't use " + itemName);
@@ -338,14 +461,15 @@ public class BlacklistEntry {
entry.banPlayer(player, "Banned: You can't use " + itemName);
}
public void notifyAdmins(String itemName) {
entry.notifyAdmins(player.getName() + " tried to use " + itemName + ".");
entry.notifyAdmins(player.getName() + " (use) " + itemName
+ (comment != null ? " (" + comment + ")" : "") + ".");
}
public void tell(String itemName) {
player.sendMessage(Colors.Yellow + "You're not allowed to use " + itemName + ".");
}
};
return process(block.getType(), player, useActions, handler);
return process(block.getType(), player, useActions, handler, false, false);
}
/**
@@ -360,20 +484,7 @@ public class BlacklistEntry {
return true;
}
ActionHandler handler = new ActionHandler() {
public void log(String itemName) {
}
public void kick(String itemName) {
}
public void ban(String itemName) {
}
public void notifyAdmins(String itemName) {
}
public void tell(String itemName) {
}
};
return process(block.getType(), player, useActions, handler);
return process(block.getType(), player, useActions, silentHandler, false, true);
}
/**
@@ -392,7 +503,7 @@ public class BlacklistEntry {
ActionHandler handler = new ActionHandler() {
public void log(String itemName) {
blacklist.getLogger().logDropAttempt(player, item);
blacklist.getLogger().logDropAttempt(player, item, comment);
}
public void kick(String itemName) {
player.kick("You can't drop " + itemName);
@@ -401,14 +512,66 @@ public class BlacklistEntry {
entry.banPlayer(player, "Banned: You can't drop " + itemName);
}
public void notifyAdmins(String itemName) {
entry.notifyAdmins(player.getName() + " tried to drop " + itemName + ".");
entry.notifyAdmins(player.getName() + " (drop) " + itemName
+ (comment != null ? " (" + comment + ")" : "") + ".");
}
public void tell(String itemName) {
player.sendMessage(Colors.Yellow + "You're not allowed to drop " + itemName + ".");
}
};
return process(item, player, dropActions, handler);
return process(item, player, dropActions, handler, true, false);
}
/**
* Called on item acquire. Returns true to let the action pass through.
*
* @param item
* @param player
* @return
*/
public boolean onAcquire(final int item, final Player player) {
if (acquireActions == null) {
return true;
}
final BlacklistEntry entry = this;
ActionHandler handler = new ActionHandler() {
public void log(String itemName) {
blacklist.getLogger().logAcquireAttempt(player, item, comment);
}
public void kick(String itemName) {
player.kick("You can't acquire " + itemName);
}
public void ban(String itemName) {
entry.banPlayer(player, "Banned: You can't acquire " + itemName);
}
public void notifyAdmins(String itemName) {
entry.notifyAdmins(player.getName() + " (acquire) " + itemName
+ (comment != null ? " (" + comment + ")" : "") + ".");
}
public void tell(String itemName) {
player.sendMessage(Colors.Yellow + "You're not allowed to acquire " + itemName + ".");
}
};
return process(item, player, acquireActions, handler, true, false);
}
/**
* Called on item acquire. Returns true to let the action pass through.
*
* @param item
* @param player
* @return
*/
public boolean onSilentAcquire(final int item, final Player player) {
if (acquireActions == null) {
return true;
}
return process(item, player, acquireActions, silentHandler, false, true);
}
/**
@@ -417,9 +580,14 @@ public class BlacklistEntry {
* @param id
* @param player
* @param actions
* @param handler
* @param allowRepeat
* @param silent
* @return
*/
private boolean process(int id, Player player, String[] actions, ActionHandler handler) {
private boolean process(int id, Player player, String[] actions,
ActionHandler handler, boolean allowRepeat, boolean silent) {
if (shouldIgnore(player)) {
return true;
}
@@ -444,19 +612,50 @@ public class BlacklistEntry {
boolean ret = true;
for (String action : actions) {
// Deny
if (action.equalsIgnoreCase("deny")) {
if (silent) {
return false;
}
ret = false;
// Kick
} else if (action.equalsIgnoreCase("kick")) {
handler.kick(etc.getDataSource().getItem(id));
if (this.message != null) {
player.kick(String.format(this.message,
etc.getDataSource().getItem(id)));
} else {
handler.kick(etc.getDataSource().getItem(id));
}
// Ban
} else if (action.equalsIgnoreCase("ban")) {
handler.ban(etc.getDataSource().getItem(id));
} else if (!repeating) {
if (this.message != null) {
banPlayer(player, "Banned: " + String.format(this.message,
etc.getDataSource().getItem(id)));
} else {
handler.ban(etc.getDataSource().getItem(id));
}
} else if (!repeating || allowRepeat) {
// Notify
if (action.equalsIgnoreCase("notify")) {
handler.notifyAdmins(etc.getDataSource().getItem(id));
// Log
} else if (action.equalsIgnoreCase("log")) {
handler.log(etc.getDataSource().getItem(id));
} else if (!repeating && action.equalsIgnoreCase("tell")) {
handler.tell(etc.getDataSource().getItem(id));
// Tell
} else if (action.equalsIgnoreCase("tell")) {
if (this.message != null) {
player.sendMessage(Colors.Yellow +
String.format(message, etc.getDataSource().getItem(id))
+ ".");
} else {
handler.tell(etc.getDataSource().getItem(id));
}
}
}
}
+35 -11
View File
@@ -64,9 +64,21 @@ public class BlacklistLogger implements BlacklistLoggerHandler {
* @param player
* @param block
*/
public void logDestroyAttempt(Player player, Block block) {
public void logDestroyAttempt(Player player, Block block, String comment) {
for (BlacklistLoggerHandler handler : handlers) {
handler.logDestroyAttempt(player, block);
handler.logDestroyAttempt(player, block, comment);
}
}
/**
* Log a block break attempt.
*
* @param player
* @param block
*/
public void logBreakAttempt(Player player, Block block, String comment) {
for (BlacklistLoggerHandler handler : handlers) {
handler.logBreakAttempt(player, block, comment);
}
}
@@ -76,9 +88,9 @@ public class BlacklistLogger implements BlacklistLoggerHandler {
* @param player
* @param block
*/
public void logUseAttempt(Player player, Block block) {
public void logUseAttempt(Player player, Block block, String comment) {
for (BlacklistLoggerHandler handler : handlers) {
handler.logUseAttempt(player, block);
handler.logUseAttempt(player, block, comment);
}
}
@@ -88,9 +100,9 @@ public class BlacklistLogger implements BlacklistLoggerHandler {
* @param player
* @param item
*/
public void logDestroyWithAttempt(Player player, int item) {
public void logDestroyWithAttempt(Player player, int item, String comment) {
for (BlacklistLoggerHandler handler : handlers) {
handler.logDestroyWithAttempt(player, item);
handler.logDestroyWithAttempt(player, item, comment);
}
}
@@ -100,21 +112,33 @@ public class BlacklistLogger implements BlacklistLoggerHandler {
* @param player
* @param item
*/
public void logCreateAttempt(Player player, int item) {
public void logCreateAttempt(Player player, int item, String comment) {
for (BlacklistLoggerHandler handler : handlers) {
handler.logCreateAttempt(player, item);
handler.logCreateAttempt(player, item, comment);
}
}
/**
* Log a right click attempt.
* Log a drop attempt.
*
* @param player
* @param item
*/
public void logDropAttempt(Player player, int item) {
public void logDropAttempt(Player player, int item, String comment) {
for (BlacklistLoggerHandler handler : handlers) {
handler.logDropAttempt(player, item);
handler.logDropAttempt(player, item, comment);
}
}
/**
* Log an acquire attempt.
*
* @param player
* @param item
*/
public void logAcquireAttempt(Player player, int item, String comment) {
for (BlacklistLoggerHandler handler : handlers) {
handler.logAcquireAttempt(player, item, comment);
}
}
+19 -5
View File
@@ -29,35 +29,49 @@ public interface BlacklistLoggerHandler {
* @param player
* @param block
*/
public void logDestroyAttempt(Player player, Block block);
public void logDestroyAttempt(Player player, Block block, String comment);
/**
* Log a block break attempt.
*
* @param player
* @param block
*/
public void logBreakAttempt(Player player, Block block, String comment);
/**
* Log a right click on attempt.
*
* @param player
* @param block
*/
public void logUseAttempt(Player player, Block block);
public void logUseAttempt(Player player, Block block, String comment);
/**
* Right a left click attempt.
*
* @param player
* @param item
*/
public void logDestroyWithAttempt(Player player, int item);
public void logDestroyWithAttempt(Player player, int item, String comment);
/**
* Log a right click attempt.
*
* @param player
* @param item
*/
public void logCreateAttempt(Player player, int item);
public void logCreateAttempt(Player player, int item, String comment);
/**
* Log a drop attempt.
*
* @param player
* @param item
*/
public void logDropAttempt(Player player, int item);
public void logDropAttempt(Player player, int item, String comment);
/**
* Log an acquire attempt.
*
* @param player
* @param item
*/
public void logAcquireAttempt(Player player, int item, String comment);
/**
* Close the logger.
*/
+40 -11
View File
@@ -29,16 +29,29 @@ public class ConsoleLoggerHandler implements BlacklistLoggerHandler {
* Logger.
*/
private static final Logger logger = Logger.getLogger("Minecraft.WorldGuard");
/**
* Log a block destroy attempt.
*
* @param player
* @param block
*/
public void logDestroyAttempt(Player player, Block block) {
public void logDestroyAttempt(Player player, Block block, String comment) {
logger.log(Level.INFO, "WorldGuard: " + player.getName()
+ " tried to destroy " + getFriendlyItemName(block.getType()));
+ " tried to destroy " + getFriendlyItemName(block.getType())
+ (comment != null ? " (" + comment + ")" : ""));
}
/**
* Log a block break attempt.
*
* @param player
* @param block
*/
public void logBreakAttempt(Player player, Block block, String comment) {
logger.log(Level.INFO, "WorldGuard: " + player.getName()
+ " tried to break " + getFriendlyItemName(block.getType())
+ (comment != null ? " (" + comment + ")" : ""));
}
/**
@@ -47,9 +60,10 @@ public class ConsoleLoggerHandler implements BlacklistLoggerHandler {
* @param player
* @param block
*/
public void logUseAttempt(Player player, Block block) {
public void logUseAttempt(Player player, Block block, String comment) {
logger.log(Level.INFO, "WorldGuard: " + player.getName()
+ " tried to use " + getFriendlyItemName(block.getType()));
+ " tried to use " + getFriendlyItemName(block.getType())
+ (comment != null ? " (" + comment + ")" : ""));
}
/**
@@ -58,9 +72,10 @@ public class ConsoleLoggerHandler implements BlacklistLoggerHandler {
* @param player
* @param item
*/
public void logDestroyWithAttempt(Player player, int item) {
public void logDestroyWithAttempt(Player player, int item, String comment) {
logger.log(Level.INFO, "WorldGuard: " + player.getName()
+ " tried to destroy with " + getFriendlyItemName(item));
+ " tried to destroy with " + getFriendlyItemName(item)
+ (comment != null ? " (" + comment + ")" : ""));
}
/**
@@ -69,9 +84,10 @@ public class ConsoleLoggerHandler implements BlacklistLoggerHandler {
* @param player
* @param item
*/
public void logCreateAttempt(Player player, int item) {
public void logCreateAttempt(Player player, int item, String comment) {
logger.log(Level.INFO, "WorldGuard: " + player.getName()
+ " tried to create " + getFriendlyItemName(item));
+ " tried to create " + getFriendlyItemName(item)
+ (comment != null ? " (" + comment + ")" : ""));
}
/**
@@ -80,9 +96,22 @@ public class ConsoleLoggerHandler implements BlacklistLoggerHandler {
* @param player
* @param item
*/
public void logDropAttempt(Player player, int item) {
public void logDropAttempt(Player player, int item, String comment) {
logger.log(Level.INFO, "WorldGuard: " + player.getName()
+ " tried to drop " + getFriendlyItemName(item));
+ " tried to drop " + getFriendlyItemName(item)
+ (comment != null ? " (" + comment + ")" : ""));
}
/**
* Log an acquire attempt.
*
* @param player
* @param item
*/
public void logAcquireAttempt(Player player, int item, String comment) {
logger.log(Level.INFO, "WorldGuard: " + player.getName()
+ " tried to acquire " + getFriendlyItemName(item)
+ (comment != null ? " (" + comment + ")" : ""));
}
/**
+43 -14
View File
@@ -91,14 +91,16 @@ public class DatabaseLoggerHandler implements BlacklistLoggerHandler {
* @param y
* @param z
* @param item
* @param comment
*/
private void logEvent(String event, String name, int x, int y, int z, int item) {
private void logEvent(String event, String name, int x, int y, int z, int item,
String comment) {
try {
Connection conn = getConnection();
PreparedStatement stmt = conn.prepareStatement(
"INSERT INTO " + table
+ "(event, player, x, y, z, item, time) VALUES "
+ "(?, ?, ?, ?, ?, ?, ?)");
+ "(event, player, x, y, z, item, time, comment) VALUES "
+ "(?, ?, ?, ?, ?, ?, ?, ?)");
stmt.setString(1, event);
stmt.setString(2, name);
stmt.setInt(3, x);
@@ -106,22 +108,36 @@ public class DatabaseLoggerHandler implements BlacklistLoggerHandler {
stmt.setInt(5, z);
stmt.setInt(6, item);
stmt.setInt(7, (int)(System.currentTimeMillis() / 1000));
stmt.setString(8, comment);
stmt.executeUpdate();
} catch (SQLException e) {
logger.log(Level.SEVERE, "Failed to log blacklist event to database: "
+ e.getMessage());
}
}
/**
* Log a block destroy attempt.
*
* @param player
* @param block
*/
public void logDestroyAttempt(Player player, Block block) {
public void logDestroyAttempt(Player player, Block block, String comment) {
logEvent("DESTROY", player.getName(),
block.getX(), block.getY(), block.getZ(), block.getType());
block.getX(), block.getY(), block.getZ(), block.getType(),
comment);
}
/**
* Log a block break attempt.
*
* @param player
* @param block
*/
public void logBreakAttempt(Player player, Block block, String comment) {
logEvent("BREAK", player.getName(),
block.getX(), block.getY(), block.getZ(), block.getType(),
comment);
}
/**
@@ -130,9 +146,10 @@ public class DatabaseLoggerHandler implements BlacklistLoggerHandler {
* @param player
* @param block
*/
public void logUseAttempt(Player player, Block block) {
public void logUseAttempt(Player player, Block block, String comment) {
logEvent("USE", player.getName(),
block.getX(), block.getY(), block.getZ(), block.getType());
block.getX(), block.getY(), block.getZ(), block.getType(),
comment);
}
/**
@@ -141,10 +158,10 @@ public class DatabaseLoggerHandler implements BlacklistLoggerHandler {
* @param player
* @param item
*/
public void logDestroyWithAttempt(Player player, int item) {
public void logDestroyWithAttempt(Player player, int item, String comment) {
logEvent("DESTROY_WITH", player.getName(),
(int)Math.floor(player.getX()), (int)Math.floor(player.getY()),
(int)Math.floor(player.getZ()), item);
(int)Math.floor(player.getZ()), item, comment);
}
/**
@@ -153,10 +170,10 @@ public class DatabaseLoggerHandler implements BlacklistLoggerHandler {
* @param player
* @param item
*/
public void logCreateAttempt(Player player, int item) {
public void logCreateAttempt(Player player, int item, String comment) {
logEvent("CREATE", player.getName(),
(int)Math.floor(player.getX()), (int)Math.floor(player.getY()),
(int)Math.floor(player.getZ()), item);
(int)Math.floor(player.getZ()), item, comment);
}
/**
@@ -165,10 +182,22 @@ public class DatabaseLoggerHandler implements BlacklistLoggerHandler {
* @param player
* @param item
*/
public void logDropAttempt(Player player, int item) {
public void logDropAttempt(Player player, int item, String comment) {
logEvent("DROP", player.getName(),
(int)Math.floor(player.getX()), (int)Math.floor(player.getY()),
(int)Math.floor(player.getZ()), item);
(int)Math.floor(player.getZ()), item, comment);
}
/**
* Log an aquire attempt.
*
* @param player
* @param item
*/
public void logAcquireAttempt(Player player, int item, String comment) {
logEvent("AQUIRE", player.getName(),
(int)Math.floor(player.getX()), (int)Math.floor(player.getY()),
(int)Math.floor(player.getZ()), item, comment);
}
/**
+36 -12
View File
@@ -143,11 +143,12 @@ public class FileLoggerHandler implements BlacklistLoggerHandler {
* @param player
* @param message
*/
private void log(Player player, String message) {
private void log(Player player, String message, String comment) {
String path = buildPath(player.getName());
try {
String date = dateFormat.format(new Date());
String line = "[" + date + "] " + player.getName() + ": " + message + "\r\n";
String line = "[" + date + "] " + player.getName() + ": " + message
+ (comment != null ? " (" + comment + ")" : "") + "\r\n";
FileLoggerWriter writer = writers.get(path);
@@ -211,8 +212,20 @@ public class FileLoggerHandler implements BlacklistLoggerHandler {
* @param player
* @param block
*/
public void logDestroyAttempt(Player player, Block block) {
log(player, "Tried to destroy " + getFriendlyItemName(block.getType()));
public void logDestroyAttempt(Player player, Block block, String comment) {
log(player, "Tried to destroy " + getFriendlyItemName(block.getType()),
comment);
}
/**
* Log a block break attempt.
*
* @param player
* @param block
*/
public void logBreakAttempt(Player player, Block block, String comment) {
log(player, "Tried to break " + getFriendlyItemName(block.getType()),
comment);
}
/**
@@ -221,8 +234,9 @@ public class FileLoggerHandler implements BlacklistLoggerHandler {
* @param player
* @param block
*/
public void logUseAttempt(Player player, Block block) {
log(player, "Tried to use " + getFriendlyItemName(block.getType()));
public void logUseAttempt(Player player, Block block, String comment) {
log(player, "Tried to use " + getFriendlyItemName(block.getType()),
comment);
}
/**
@@ -231,8 +245,8 @@ public class FileLoggerHandler implements BlacklistLoggerHandler {
* @param player
* @param item
*/
public void logDestroyWithAttempt(Player player, int item) {
log(player, "Tried to destroy with " + getFriendlyItemName(item));
public void logDestroyWithAttempt(Player player, int item, String comment) {
log(player, "Tried to destroy with " + getFriendlyItemName(item), comment);
}
/**
@@ -241,8 +255,8 @@ public class FileLoggerHandler implements BlacklistLoggerHandler {
* @param player
* @param item
*/
public void logCreateAttempt(Player player, int item) {
log(player, "Tried to create " + getFriendlyItemName(item));
public void logCreateAttempt(Player player, int item, String comment) {
log(player, "Tried to create " + getFriendlyItemName(item), comment);
}
/**
@@ -251,8 +265,18 @@ public class FileLoggerHandler implements BlacklistLoggerHandler {
* @param player
* @param item
*/
public void logDropAttempt(Player player, int item) {
log(player, "Tried to drop " + getFriendlyItemName(item));
public void logDropAttempt(Player player, int item, String comment) {
log(player, "Tried to drop " + getFriendlyItemName(item), comment);
}
/**
* Log an acquire attempt.
*
* @param player
* @param item
*/
public void logAcquireAttempt(Player player, int item, String comment) {
log(player, "Tried to acquire " + getFriendlyItemName(item), comment);
}
/**
+9 -1
View File
@@ -70,15 +70,23 @@ public class WorldGuard extends Plugin {
loader.addListener(PluginLoader.Hook.BLOCK_CREATED, listener, this,
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,
loader.addListener(PluginLoader.Hook.ITEM_DROP, listener, this,
PluginListener.Priority.HIGH);
loader.addListener(PluginLoader.Hook.ITEM_PICK_UP, listener, this,
PluginListener.Priority.HIGH);
loader.addListener(PluginLoader.Hook.COMPLEX_BLOCK_CHANGE, listener, this,
PluginListener.Priority.HIGH);
loader.addListener(PluginLoader.Hook.COMPLEX_BLOCK_SEND, listener, this,
PluginListener.Priority.HIGH);
loader.addListener(PluginLoader.Hook.INVENTORY_CHANGE, listener, this,
PluginListener.Priority.HIGH);
loader.addListener(PluginLoader.Hook.BLOCK_PHYSICS, listener, this,
PluginListener.Priority.MEDIUM);
}
/**
+147 -18
View File
@@ -58,10 +58,6 @@ public class WorldGuardListener extends PluginListener {
* Properties file for WorldGuard.
*/
private PropertiesFile properties = new PropertiesFile("worldguard.properties");
/**
* List of blocks to remove when possible.
*/
private LinkedList<int[]> blockRemoveQueue = new LinkedList<int[]>();
/**
* Stop fire spread mode.
@@ -77,10 +73,14 @@ public class WorldGuardListener extends PluginListener {
private boolean simulateSponge;
private int spongeRadius;
private boolean blockLagFix;
private boolean itemDurability;
private Set<Integer> fireNoSpreadBlocks;
private Set<Integer> allowedLavaSpreadOver;
private Set<Integer> itemDropBlacklist;
private boolean classicWater;
private boolean noPhysicsGravel;
private boolean noPhysicsSand;
private boolean allowPortalAnywhere;
private Blacklist blacklist;
/**
@@ -143,6 +143,10 @@ public class WorldGuardListener extends PluginListener {
simulateSponge = properties.getBoolean("simulate-sponge", false);
spongeRadius = Math.max(1, properties.getInt("sponge-radius", 3)) - 1;
blockLagFix = properties.getBoolean("block-lag-fix", false);
itemDurability = properties.getBoolean("item-durability", true);
noPhysicsGravel = properties.getBoolean("no-physics-gravel", false);
noPhysicsSand = properties.getBoolean("no-physics-sand", false);
allowPortalAnywhere = properties.getBoolean("allow-portal-anywhere", false);
// Console log configuration
boolean logConsole = properties.getBoolean("log-console", true);
@@ -346,6 +350,58 @@ public class WorldGuardListener extends PluginListener {
}
}
if (!itemDurability) {
item.setDamage(0);
}
return false;
}
/**
* Called when a player picks up an item.
*
* @param player
* player who picked up the item
* @param item
* item that was picked up
* @return true if you want to leave the item where it was
*/
public boolean onItemPickUp(Player player, Item item) {
if (blacklist != null && blacklist.hasOnAcquire()) {
if (!blacklist.onSilentAcquire(item.getItemId(), player)) {
return true;
}
}
return false;
}
/**
* Called when a player's inventory is modified.
*
* @param player
* player who's inventory was modified
* @return true if you want any changes to be reverted
*/
public boolean onInventoryChange(Player player) {
if (blacklist != null && blacklist.hasOnAcquire()) {
hj[] items = player.getInventory().getArray();
boolean needUpdate = false;
for (int i = 0; i < items.length; i++) {
if (items[i] != null) {
if (!blacklist.onAcquire(items[i].c, player)) {
items[i] = null;
needUpdate = true;
}
}
}
if (needUpdate) {
player.getInventory().updateInventory();
}
}
return false;
}
@@ -450,7 +506,7 @@ public class WorldGuardListener extends PluginListener {
// destroyed. Since this causes the hook to eventually call
// twice, we try to nullify it below
if (canDestroyBlock(player, block)) {
if (block.getStatus() == 3) {
if (block.getStatus() == 3 && canBreakBlock(player, block)) {
int dropItem = type;
int count = 1;
@@ -488,7 +544,7 @@ public class WorldGuardListener extends PluginListener {
if (dropItem > 0) {
for (int i = 0; i < count; i++) {
etc.getServer().dropItem(block.getX(), block.getY(), block.getZ(),
dropItem, i);
dropItem, 1);
}
// Drop flint with gravel
@@ -501,8 +557,7 @@ public class WorldGuardListener extends PluginListener {
}
// Now loop this hook back through!
block.setStatus(3); // Block is destroyed
canDestroyBlock(player, block);
simulateBlockDestroy(player, block);
}
return true;
@@ -517,6 +572,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.
*
@@ -583,15 +655,6 @@ public class WorldGuardListener extends PluginListener {
Block block = new Block(id, complexBlock.getX(),
complexBlock.getY(), complexBlock.getZ());
if (!blacklist.onSilentUse(block, player)) {
return true;
}
} else if (complexBlock instanceof Sign) {
int id = etc.getServer().getBlockIdAt(complexBlock.getX(),
complexBlock.getY(), complexBlock.getZ());
Block block = new Block(id, complexBlock.getX(),
complexBlock.getY(), complexBlock.getZ());
if (!blacklist.onSilentUse(block, player)) {
return true;
}
@@ -726,6 +789,34 @@ public class WorldGuardListener extends PluginListener {
return false;
}
/**
* Called when the game is checking the physics for a certain block.
* This method is called frequently whenever a nearby block is changed,
* or if the block has just been placed.
* Currently the only supported blocks are sand, gravel and portals.
*
* @param block Block which requires special physics
* @param boolean true if this block has just been placed
* @return true if you do want to stop the default physics for this block
*/
public boolean onBlockPhysics(Block block, boolean placed) {
int id = block.getType();
if (id == 13 && noPhysicsGravel) {
return true;
}
if (id == 12 && noPhysicsSand) {
return true;
}
if (id == 90 && allowPortalAnywhere) {
return true;
}
return false;
}
/**
* Called on player disconnect
*
@@ -735,6 +826,44 @@ public class WorldGuardListener extends PluginListener {
BlacklistEntry.forgetPlayer(player);
}
/**
* Simulate the block destroy hook.
*
* @param player
* @param block
* @return
*/
private boolean simulateBlockDestroy(Player player, Block block) {
plugin.toggleEnabled(); // Prevent infinite loop
try {
block.setStatus(3);;
return !(Boolean)etc.getLoader().callHook(PluginLoader.Hook.BLOCK_DESTROYED,
new Object[]{ player.getUser(), block });
} catch (Throwable t) {
return true;
} finally {
plugin.toggleEnabled();
}
}
/**
* Checks if a block can be broken.
*
* @param player
* @param block
* @return
*/
private boolean canBreakBlock(Player player, Block orig) {
try {
Block block = etc.getServer().getBlockAt(
orig.getX(), orig.getY(), orig.getZ());
return !(Boolean)etc.getLoader().callHook(PluginLoader.Hook.BLOCK_BROKEN,
new Object[]{ player.getUser(), block });
} catch (Throwable t) {
return true;
}
}
/**
* Checks if a block can be destroyed.
*
@@ -742,7 +871,7 @@ public class WorldGuardListener extends PluginListener {
* @param block
* @return
*/
public boolean canDestroyBlock(Player player, Block block) {
private boolean canDestroyBlock(Player player, Block block) {
plugin.toggleEnabled(); // Prevent infinite loop
try {
return !(Boolean)etc.getLoader().callHook(PluginLoader.Hook.BLOCK_DESTROYED,
+22 -1
View File
@@ -15,13 +15,17 @@
#
# Options:
# - ignore-groups (comma-delimited list of groups to not affect)
# - comment (message for yourself that is printed with 'log' and 'notify')
# - message (optional message to show the user instead; %s is the item name)
#
# 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)
# - on-drop (the item is being dropped from the player's inventory)
# - on-acquire (the item enters a player's inventory via some method)
#
# Actions (for events):
# - deny (deny completely)
@@ -31,6 +35,13 @@
# - kick (kick player)
# - ban (ban player)
#
# With the on-acquire event, it will completely block item pick ups
# (the item will still be on the ground) if you use 'deny' but the other
# actions (notify, log, etc.) won't do anything. However, if the player
# receives the item via a different method (i.e. from a chest), all actions
# will work although the item is removed after a short delay rather than
# blocked from the beginning (as it is part client-side).
#
# Users with the /worldguardnotify permission will be receive notifications.
#
# -------------
@@ -67,4 +78,14 @@
#on-destroy=notify,deny,log
#[cobblestone]
#on-create=deny,tell,log
#on-create=deny,tell,log
#[lever]
#on-break=deny
# This is an example of the 'durability cheat' workaround that destroys your
# tool when you drop it
#[256,257,258,259,267,268,269,270,271,272,273,274,275,276,277,278,279,283,284,285,286,290,291,292,293,294,346]
#on-drop=deny,tell
#comment=Durability Hacks
#message=Your tool was destroyed
+53
View File
@@ -0,0 +1,53 @@
# This is a starter copy of WorldGuard's configuration so you can configure
# WorldGuard right from the beginning. Copy it into your server folder
# (into where server.properties resides) and edit the file as your desire.
# These comments will be lost whenever WorldGuard updates this file.
# More detailed descriptions of the options can be found in README.txt!
summary-on-start=true
# Toggle the item durabiltiy fix
item-durability=true
# Simulate sponge
simulate-sponge=false
sponge-radius=3
# Simulate classic water
classic-water=false
# Fix block lag
block-lag-fix=false
# Adjust physics
allow-portal-anywhere=false
no-physics-gravel=false
no-physics-sand=false
# Protection
enforce-single-session=true
item-drop-blacklist=
# Simple prevention
block-creepers=false
block-lighter=false
block-tnt=false
# Control fire
disable-all-fire-spread=false
disallowed-fire-spread-blocks=
# Disable lava fire and spread
disable-lava-fire=false
allowed-lava-spread-blocks=
# Log/blacklist
log-console=true
log-database-dsn=jdbc\:mysql\://localhost\:3306/minecraft
log-database-pass=
log-database-table=blacklist_events
log-database-user=root
log-database=false
log-file-open-files=10
log-file-path=worldguard/logs/%Y-%m-%d.log
log-file=false