Improved missing feature detection.

This commit is contained in:
sk89q 2010-11-24 11:58:54 -08:00
parent c0b4d95082
commit 84ccabdf34
2 changed files with 41 additions and 12 deletions

View File

@ -25,6 +25,7 @@
import java.util.ArrayList; import java.util.ArrayList;
import java.net.URL; import java.net.URL;
import java.io.*; import java.io.*;
import java.lang.reflect.*;
/** /**
* Entry point for the plugin for hey0's mod. * Entry point for the plugin for hey0's mod.
@ -67,7 +68,7 @@ public void initialize() {
} }
if (!registerHook("FLOW", PluginListener.Priority.HIGH)) { if (!registerHook("FLOW", PluginListener.Priority.HIGH)) {
missingFeatures.add("controlling lava flow"); missingFeatures.add("controlling lava flow");
missingFeatures.add("sponges"); missingFeatures.add("sponge simulation");
} }
registerHook("LOGINCHECK", PluginListener.Priority.HIGH); registerHook("LOGINCHECK", PluginListener.Priority.HIGH);
registerHook("LOGIN", PluginListener.Priority.MEDIUM); registerHook("LOGIN", PluginListener.Priority.MEDIUM);
@ -78,18 +79,28 @@ public void initialize() {
registerHook("ITEM_DROP", PluginListener.Priority.HIGH); registerHook("ITEM_DROP", PluginListener.Priority.HIGH);
if (!registerHook("ITEM_PICK_UP", PluginListener.Priority.HIGH)) { if (!registerHook("ITEM_PICK_UP", PluginListener.Priority.HIGH)) {
missingFeatures.add("denying item pickups"); missingFeatures.add("denying item pickups");
missingFeatures.add("item durability fix"); missingFeatures.add("the item durability fix");
} else {
try {
Method method =
Item.class.getDeclaredMethod("setDamage", new Class[]{ Integer.class });
if (method == null) {
missingFeatures.add("the item durability fix");
}
} catch (NoSuchMethodException e) {
missingFeatures.add("the item durability fix");
}
} }
registerHook("COMPLEX_BLOCK_CHANGE", PluginListener.Priority.HIGH); registerHook("COMPLEX_BLOCK_CHANGE", PluginListener.Priority.HIGH);
registerHook("COMPLEX_BLOCK_SEND", PluginListener.Priority.HIGH); registerHook("COMPLEX_BLOCK_SEND", PluginListener.Priority.HIGH);
registerHook("INVENTORY_CHANGE", PluginListener.Priority.HIGH); registerHook("INVENTORY_CHANGE", PluginListener.Priority.HIGH);
if (!registerHook("BLOCK_PHYSICS", PluginListener.Priority.MEDIUM)) { if (!registerHook("BLOCK_PHYSICS", PluginListener.Priority.MEDIUM)) {
missingFeatures.add("controlling physics on gravel, sand, or portal blocks"); missingFeatures.add("controlling the physics of gravel, sand, or portal blocks");
} }
if (missingFeatures.size() > 0) { if (missingFeatures.size() > 0) {
logger.log(Level.WARNING, "WorldGuard: Your version of hMod does not support " logger.log(Level.WARNING, "WorldGuard: Your version of hMod does not support "
+ joinString(missingFeatures, ", ", 0) + "."); + concatMissingFeatures(missingFeatures) + ".");
} }
} }
@ -164,14 +175,29 @@ private String getVersion() {
* @param delimiter * @param delimiter
* @return * @return
*/ */
private static String joinString(List<String> str, String delimiter, private static String concatMissingFeatures(List<String> str) {
int initialIndex) { if (str.isEmpty()) {
if (str.size() == 0) {
return ""; return "";
} }
StringBuilder buffer = new StringBuilder(str.get(0));
for (int i = initialIndex + 1; i < str.size(); i++) { int size = str.size();
buffer.append(delimiter).append(str.get(i)); StringBuilder buffer = new StringBuilder();
buffer.append("(1) ");
buffer.append(str.get(0));
for (int i = 1; i < size; i++) {
if (i == size - 1) {
buffer.append(" or ");
buffer.append("(");
buffer.append(i + 1);
buffer.append(") ");
buffer.append(str.get(i));
} else {
buffer.append(", ");
buffer.append("(");
buffer.append(i + 1);
buffer.append(") ");
buffer.append(str.get(i));
}
} }
return buffer.toString(); return buffer.toString();
} }

View File

@ -351,7 +351,10 @@ public boolean onItemDrop(Player player, Item item) {
} }
if (!itemDurability) { if (!itemDurability) {
item.setDamage(0); try {
item.setDamage(0);
} catch (java.lang.NoSuchMethodError e) {
}
} }
return false; return false;
@ -385,7 +388,7 @@ public boolean onItemPickUp(Player player, Item item) {
*/ */
public boolean onInventoryChange(Player player) { public boolean onInventoryChange(Player player) {
if (blacklist != null && blacklist.hasOnAcquire()) { if (blacklist != null && blacklist.hasOnAcquire()) {
hj[] items = player.getInventory().getArray(); hl[] items = player.getInventory().getArray();
boolean needUpdate = false; boolean needUpdate = false;
for (int i = 0; i < items.length; i++) { for (int i = 0; i < items.length; i++) {