[trunk] Unlimited: Breaking change!

In favor for a much easier system, the config.yml settings have been removed.

New permissions:
essentials.unlimited: activates the /unlimited command
essentials.unlimited.others: allows to give unlimited stacks to others
essentials.unlimited.item-all: Access to all items
essentials.unlimited.item-bucket: Access to all buckets
essentials.unlimited.item-[itemname]: Access to specific item
item names are from https://github.com/Bukkit/Bukkit/blob/master/src/main/java/org/bukkit/Material.java
lower case, with - instead of _

All other essentials.unlimited.* permissions have been removed.

git-svn-id: https://svn.java.net/svn/essentials~svn/trunk@1118 e251c2fe-e539-e718-e476-b85c1f46cddb
This commit is contained in:
snowleo 2011-04-04 14:16:00 +00:00
parent cd64b68222
commit 2606e5d9ff
5 changed files with 65 additions and 146 deletions

View file

@ -166,59 +166,53 @@ public class EssentialsBlockListener extends BlockListener
return; return;
} }
} }
if (Essentials.getSettings().isUnlimitedPlacingEnabled()) { final User user = User.get(event.getPlayer());
final User user = User.get(event.getPlayer()); final ItemStack is = event.getItemInHand();
final ItemStack is = event.getItemInHand(); if (is.getType() == Material.AIR) {
if (is.getType() == Material.AIR) { is.setType(event.getBlockPlaced().getType());
is.setType(event.getBlockPlaced().getType()); }
} switch(is.getType()) {
switch(is.getType()) { case WOODEN_DOOR:
case WOODEN_DOOR: is.setType(Material.WOOD_DOOR);
is.setType(Material.WOOD_DOOR); break;
break; case IRON_DOOR_BLOCK:
case IRON_DOOR_BLOCK: is.setType(Material.IRON_DOOR);
is.setType(Material.IRON_DOOR); break;
break; case SIGN_POST:
case SIGN_POST: case WALL_SIGN:
case WALL_SIGN: is.setType(Material.SIGN);
is.setType(Material.SIGN); break;
break; case CROPS:
case CROPS: is.setType(Material.SEEDS);
is.setType(Material.SEEDS); break;
break; case CAKE_BLOCK:
case CAKE_BLOCK: is.setType(Material.CAKE);
is.setType(Material.CAKE); break;
break; case BED_BLOCK:
case BED_BLOCK: is.setType(Material.BED);
is.setType(Material.BED); break;
break; case REDSTONE_WIRE:
case REDSTONE_WIRE: is.setType(Material.REDSTONE);
is.setType(Material.REDSTONE); break;
break; case REDSTONE_TORCH_OFF:
case REDSTONE_TORCH_OFF: is.setType(Material.REDSTONE_TORCH_ON);
is.setType(Material.REDSTONE_TORCH_ON); break;
break; case DIODE_BLOCK_OFF:
case DIODE_BLOCK_OFF: case DIODE_BLOCK_ON:
case DIODE_BLOCK_ON: is.setType(Material.DIODE);
is.setType(Material.DIODE); break;
break; }
} boolean unlimitedForUser = user.hasUnlimited(is);
boolean unlimitedForUser = user.hasUnlimited(is); if (unlimitedForUser) {
if (user.isAuthorized("essentials.unlimited.placing") || unlimitedForUser) { is.setAmount(1);
List<Integer> whitelist = Essentials.getSettings().getUnlimitedWhitelist(); Essentials.getStatic().getScheduler().scheduleSyncDelayedTask(Essentials.getStatic(),
if (whitelist.isEmpty() || whitelist.contains(is.getTypeId()) || new Runnable() {
user.isAuthorized("essentials.unlimited.whitelist.override") || unlimitedForUser) {
is.setAmount(1);
Essentials.getStatic().getScheduler().scheduleSyncDelayedTask(Essentials.getStatic(),
new Runnable() {
public void run() { public void run() {
user.getInventory().addItem(is); user.getInventory().addItem(is);
user.updateInventory(); user.updateInventory();
}
});
} }
} });
} }
} }

View file

@ -398,36 +398,26 @@ public class EssentialsPlayerListener extends PlayerListener
@Override @Override
public void onPlayerEggThrow(PlayerEggThrowEvent event) { public void onPlayerEggThrow(PlayerEggThrowEvent event) {
if (Essentials.getSettings().isUnlimitedEggThrowEnabled()) { User user = User.get(event.getPlayer());
User user = User.get(event.getPlayer()); ItemStack is = new ItemStack(Material.EGG, 1);
ItemStack is = new ItemStack(Material.EGG, 1); if (user.hasUnlimited(is)) {
if (user.isAuthorized("essentials.unlimited.eggthrow") || user.hasUnlimited(is)) { user.getInventory().addItem(is);
user.getInventory().addItem(is); user.updateInventory();
user.updateInventory();
}
} }
} }
@Override @Override
public void onPlayerBucketEmpty(PlayerBucketEmptyEvent event) { public void onPlayerBucketEmpty(PlayerBucketEmptyEvent event) {
if (Essentials.getSettings().isUnlimitedBucketsEnabled()) { final User user = User.get(event.getPlayer());
final User user = User.get(event.getPlayer()); if (user.hasUnlimited(new ItemStack(event.getBucket()))) {
boolean unlimitedForUser = user.hasUnlimited(new ItemStack(event.getBucket())); event.getItemStack().setType(event.getBucket());
if (user.isAuthorized("essentials.unlimited.buckets") || unlimitedForUser) { Essentials.getStatic().getScheduler().scheduleSyncDelayedTask(Essentials.getStatic(),
List<Integer> whitelist = Essentials.getSettings().getUnlimitedWhitelist(); new Runnable() {
if (whitelist.isEmpty() || whitelist.contains(event.getBucket().getId()) ||
user.isAuthorized("essentials.unlimited.whitelist.override") ||
unlimitedForUser) {
event.getItemStack().setType(event.getBucket());
Essentials.getStatic().getScheduler().scheduleSyncDelayedTask(Essentials.getStatic(),
new Runnable() {
public void run() { public void run() {
user.updateInventory(); user.updateInventory();
}
});
} }
} });
} }
} }

View file

@ -433,35 +433,4 @@ public class Settings implements IConf
} }
return epBreakList; return epBreakList;
} }
boolean isUnlimitedPlacingEnabled() {
return config.getBoolean("unlimited.placing",false);
}
boolean isUnlimitedEggThrowEnabled() {
return config.getBoolean("unlimited.eggthrow",false);
}
boolean isUnlimitedBucketsEnabled() {
return config.getBoolean("unlimited.buckets",false);
}
public ArrayList<Integer> getUnlimitedWhitelist()
{
ArrayList<Integer> unlimitedWhitelist = new ArrayList<Integer>();
for (String itemName : config.getString("unlimited.whitelist", "").split(",")) {
itemName = itemName.trim();
if (itemName.isEmpty()) {
continue;
}
ItemStack is;
try {
is = ItemDb.get(itemName);
unlimitedWhitelist.add(is.getTypeId());
} catch (Exception ex) {
logger.log(Level.SEVERE, "Unknown item " + itemName + " in unlimited whitelist.");
}
}
return unlimitedWhitelist;
}
} }

View file

@ -27,35 +27,21 @@ public class Commandunlimited extends EssentialsCommand
} }
ItemStack stack = ItemDb.get(args[0], 1); ItemStack stack = ItemDb.get(args[0], 1);
if(!user.isAuthorized("essentials.infinite.whitelist.override") &&
Essentials.getSettings().getUnlimitedWhitelist().contains(stack.getTypeId()))
{
user.sendMessage(ChatColor.RED + "You are not allowed to spawn that item");
return;
}
User target = user; User target = user;
if (args.length > 1 && user.isAuthorized("essentials.unlimited.others")) { if (args.length > 1 && user.isAuthorized("essentials.unlimited.others")) {
target = getPlayer(server, args, 1); target = getPlayer(server, args, 1);
} }
if (target.isAuthorized("essentials.unlimited.eggthrow") && stack.getType() == Material.EGG) { String itemname = stack.getType().toString().toLowerCase().replace("_", "-");
user.sendMessage(ChatColor.RED + "Unlimited eggs already activated by permissions."); if (!user.isAuthorized("essentials.unlimited.item-add") &&
!user.isAuthorized("essentials.unlimited.item-"+itemname)
&& !((stack.getType() == Material.WATER_BUCKET || stack.getType() == Material.LAVA_BUCKET)
&& user.isAuthorized("essentials.unlimited.item-bucket"))) {
user.sendMessage(ChatColor.RED + "No permission for unlimited item "+itemname+".");
return; return;
} }
if (target.isAuthorized("essentials.unlimited.buckets") &&
(stack.getType() == Material.WATER_BUCKET || stack.getType() == Material.LAVA_BUCKET)) {
user.sendMessage(ChatColor.RED + "Unlimited buckets already activated by permissions.");
return;
}
if (target.isAuthorized("essentials.unlimited.placing") &&
(stack.getType() != Material.WATER_BUCKET && stack.getType() != Material.LAVA_BUCKET &&
stack.getType() != Material.EGG)) {
user.sendMessage(ChatColor.RED + "Unlimited placing already activated by permissions.");
return;
}
String itemName = stack.getType().name().toLowerCase().replace('_', ' '); String itemName = stack.getType().name().toLowerCase().replace('_', ' ');

View file

@ -155,26 +155,6 @@ per-warp-permission: false
# Sort output of /list command by groups # Sort output of /list command by groups
sort-list-by-groups: false sort-list-by-groups: false
# Unlimited placement of blocks, throwing of eggs, using of buckets
# You have to enabled this here if you want to use the /unlimited command.
# The following permissions will activate unlimited for all items:
# - essentials.unlimited.placing
# - essentials.unlimited.eggthrow
# - essentials.unlimited.buckets
# Since admins commonly have a '*' permission, they get everything unlimited.
# If you want to avoid that, explicitly deactivate the above permissions.
unlimited:
placing: false
eggthrow: false
buckets: false
# Use this whitelist to restrict the use of unlimited placing and buckets
# Set permission
# - essentials.unlimited.whitelist.override
# for players, that are not bound to this list.
# If empty, all items are allowed.
whitelist:
# Example: (You can use ids or names from items.csv)
# whitelist: cobblestone, dirt, waterbucket
############################################################ ############################################################
# +------------------------------------------------------+ # # +------------------------------------------------------+ #