diff options
30 files changed, 245 insertions, 76 deletions
diff --git a/Essentials/nbproject/project.properties b/Essentials/nbproject/project.properties index 4e80ceafa..71fea5cf9 100644 --- a/Essentials/nbproject/project.properties +++ b/Essentials/nbproject/project.properties @@ -76,6 +76,7 @@ file.reference.MultiCurrency.jar=../lib/MultiCurrency.jar file.reference.Permissions3.jar=../lib/Permissions3.jar file.reference.PermissionsBukkit-1.2.jar=../lib/PermissionsBukkit-1.2.jar file.reference.PermissionsEx.jar=../lib/PermissionsEx.jar +file.reference.Privileges.jar=..\\lib\\Privileges.jar file.reference.Vault.jar=../lib/Vault.jar includes=** jar.archive.disabled=${jnlp.enabled} @@ -95,7 +96,8 @@ javac.classpath=\ ${reference.EssentialsGroupManager.jar}:\ ${file.reference.bukkit.jar}:\ ${file.reference.craftbukkit.jar}:\ - ${file.reference.Vault.jar} + ${file.reference.Vault.jar}:\ + ${file.reference.Privileges.jar} # Space-separated list of extra javac options javac.compilerargs= javac.deprecation=false diff --git a/Essentials/src/com/earth2me/essentials/Essentials.java b/Essentials/src/com/earth2me/essentials/Essentials.java index e1c8c28b9..3ee7c1777 100644 --- a/Essentials/src/com/earth2me/essentials/Essentials.java +++ b/Essentials/src/com/earth2me/essentials/Essentials.java @@ -32,15 +32,20 @@ import com.earth2me.essentials.signs.SignPlayerListener; import java.io.File; import java.io.FileReader; import java.io.IOException; +import java.lang.reflect.Array; import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; import java.util.regex.Matcher; import java.util.regex.Pattern; +import org.bukkit.ChatColor; import org.bukkit.Server; import org.bukkit.World; import org.bukkit.command.Command; +import org.bukkit.command.CommandException; import org.bukkit.command.CommandSender; import org.bukkit.command.PluginCommand; import org.bukkit.entity.Player; @@ -61,7 +66,7 @@ import org.yaml.snakeyaml.error.YAMLException; public class Essentials extends JavaPlugin implements IEssentials { - public static final int BUKKIT_VERSION = 1818; + public static final int BUKKIT_VERSION = 1846; private static final Logger LOGGER = Logger.getLogger("Minecraft"); private transient ISettings settings; private final transient TNTExplodeListener tntListener = new TNTExplodeListener(this); @@ -277,7 +282,29 @@ public class Essentials extends JavaPlugin implements IEssentials if (pc != null) { alternativeCommandsHandler.executed(commandLabel, pc.getLabel()); - return pc.execute(sender, commandLabel, args); + try + { + return pc.execute(sender, commandLabel, args); + } + catch (final Exception ex) + { + final ArrayList<StackTraceElement> elements = new ArrayList<StackTraceElement>(Arrays.asList(ex.getStackTrace())); + elements.remove(0); + final ArrayList<StackTraceElement> toRemove = new ArrayList<StackTraceElement>(); + for (final StackTraceElement e : elements) + { + if (e.getClassName().equals("com.earth2me.essentials.Essentials")) + { + toRemove.add(e); + } + } + elements.removeAll(toRemove); + final StackTraceElement[] trace = elements.toArray(new StackTraceElement[elements.size()]); + ex.setStackTrace(trace); + ex.printStackTrace(); + sender.sendMessage(ChatColor.RED + "An internal error occurred while attempting to perform this command"); + return true; + } } } diff --git a/Essentials/src/com/earth2me/essentials/EssentialsConf.java b/Essentials/src/com/earth2me/essentials/EssentialsConf.java index 35252532f..ec6e27b53 100644 --- a/Essentials/src/com/earth2me/essentials/EssentialsConf.java +++ b/Essentials/src/com/earth2me/essentials/EssentialsConf.java @@ -110,9 +110,10 @@ public class EssentialsConf extends Configuration super.load(); } catch (RuntimeException e) - { - LOGGER.log(Level.SEVERE, "File broken: " + configFile.toString()); - throw e; + { + File broken = new File(configFile.getAbsolutePath() + ".broken." + System.currentTimeMillis()); + configFile.renameTo(broken); + LOGGER.log(Level.SEVERE, "The file " + configFile.toString() + " is broken, it has been renamed to " + broken.toString(), e.getCause()); } if (this.root == null) diff --git a/Essentials/src/com/earth2me/essentials/EssentialsTimer.java b/Essentials/src/com/earth2me/essentials/EssentialsTimer.java index f3b447dae..0c413bfc8 100644 --- a/Essentials/src/com/earth2me/essentials/EssentialsTimer.java +++ b/Essentials/src/com/earth2me/essentials/EssentialsTimer.java @@ -3,6 +3,7 @@ package com.earth2me.essentials; import java.util.HashSet; import java.util.Iterator; import java.util.Set; +import java.util.logging.Level; import org.bukkit.entity.Player; @@ -22,10 +23,17 @@ public class EssentialsTimer implements Runnable final long currentTime = System.currentTimeMillis(); for (Player player : ess.getServer().getOnlinePlayers()) { - final User user = ess.getUser(player); - onlineUsers.add(user); - user.setLastOnlineActivity(currentTime); - user.checkActivity(); + try + { + final User user = ess.getUser(player); + onlineUsers.add(user); + user.setLastOnlineActivity(currentTime); + user.checkActivity(); + } + catch (Exception e) + { + ess.getLogger().log(Level.WARNING, "EssentialsTimer Error:", e); + } } final Iterator<User> iterator = onlineUsers.iterator(); diff --git a/Essentials/src/com/earth2me/essentials/Jails.java b/Essentials/src/com/earth2me/essentials/Jails.java index f8ab2d02e..0011905ec 100644 --- a/Essentials/src/com/earth2me/essentials/Jails.java +++ b/Essentials/src/com/earth2me/essentials/Jails.java @@ -1,18 +1,24 @@ package com.earth2me.essentials; +import static com.earth2me.essentials.I18n._; import com.earth2me.essentials.api.IJails; import com.earth2me.essentials.storage.AsyncStorageObjectHolder; -import static com.earth2me.essentials.I18n._; import java.io.File; import java.util.*; import java.util.logging.Level; import java.util.logging.Logger; import org.bukkit.Bukkit; import org.bukkit.Location; -import org.bukkit.event.Event.Priority; -import org.bukkit.event.Event.Type; -import org.bukkit.event.block.*; -import org.bukkit.event.player.*; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.block.BlockBreakEvent; +import org.bukkit.event.block.BlockDamageEvent; +import org.bukkit.event.block.BlockPlaceEvent; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerRespawnEvent; +import org.bukkit.event.player.PlayerTeleportEvent; import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; import org.bukkit.plugin.PluginManager; @@ -33,13 +39,8 @@ public class Jails extends AsyncStorageObjectHolder<com.earth2me.essentials.sett final PluginManager pluginManager = ess.getServer().getPluginManager(); final JailBlockListener blockListener = new JailBlockListener(); final JailPlayerListener playerListener = new JailPlayerListener(); - pluginManager.registerEvent(Type.BLOCK_BREAK, blockListener, Priority.Low, ess); - pluginManager.registerEvent(Type.BLOCK_DAMAGE, blockListener, Priority.Low, ess); - pluginManager.registerEvent(Type.BLOCK_PLACE, blockListener, Priority.Low, ess); - pluginManager.registerEvent(Type.PLAYER_INTERACT, playerListener, Priority.Low, ess); - pluginManager.registerEvent(Type.PLAYER_RESPAWN, playerListener, Priority.High, ess); - pluginManager.registerEvent(Type.PLAYER_TELEPORT, playerListener, Priority.High, ess); - pluginManager.registerEvent(Type.PLAYER_JOIN, playerListener, Priority.High, ess); + pluginManager.registerEvents(blockListener, ess); + pluginManager.registerEvents(playerListener, ess); } @Override @@ -146,9 +147,9 @@ public class Jails extends AsyncStorageObjectHolder<com.earth2me.essentials.sett } - private class JailBlockListener extends BlockListener + private class JailBlockListener implements Listener { - @Override + @EventHandler(priority = EventPriority.LOW) public void onBlockBreak(final BlockBreakEvent event) { final User user = ess.getUser(event.getPlayer()); @@ -158,7 +159,7 @@ public class Jails extends AsyncStorageObjectHolder<com.earth2me.essentials.sett } } - @Override + @EventHandler(priority = EventPriority.LOW) public void onBlockPlace(final BlockPlaceEvent event) { final User user = ess.getUser(event.getPlayer()); @@ -168,7 +169,7 @@ public class Jails extends AsyncStorageObjectHolder<com.earth2me.essentials.sett } } - @Override + @EventHandler(priority = EventPriority.LOW) public void onBlockDamage(final BlockDamageEvent event) { final User user = ess.getUser(event.getPlayer()); @@ -180,9 +181,9 @@ public class Jails extends AsyncStorageObjectHolder<com.earth2me.essentials.sett } - private class JailPlayerListener extends PlayerListener + private class JailPlayerListener implements Listener { - @Override + @EventHandler(priority = EventPriority.LOW) public void onPlayerInteract(final PlayerInteractEvent event) { final User user = ess.getUser(event.getPlayer()); @@ -192,7 +193,7 @@ public class Jails extends AsyncStorageObjectHolder<com.earth2me.essentials.sett } } - @Override + @EventHandler(priority = EventPriority.HIGH) public void onPlayerRespawn(final PlayerRespawnEvent event) { final User user = ess.getUser(event.getPlayer()); @@ -207,11 +208,18 @@ public class Jails extends AsyncStorageObjectHolder<com.earth2me.essentials.sett } catch (Exception ex) { - LOGGER.log(Level.WARNING, _("returnPlayerToJailError"), ex); + if (ess.getSettings().isDebug()) + { + LOGGER.log(Level.INFO, _("returnPlayerToJailError", user.getName(), ex.getLocalizedMessage()), ex); + } + else + { + LOGGER.log(Level.INFO, _("returnPlayerToJailError", user.getName(), ex.getLocalizedMessage())); + } } } - @Override + @EventHandler(priority = EventPriority.HIGH) public void onPlayerTeleport(final PlayerTeleportEvent event) { final User user = ess.getUser(event.getPlayer()); @@ -226,12 +234,19 @@ public class Jails extends AsyncStorageObjectHolder<com.earth2me.essentials.sett } catch (Exception ex) { - LOGGER.log(Level.WARNING, _("returnPlayerToJailError"), ex); + if (ess.getSettings().isDebug()) + { + LOGGER.log(Level.INFO, _("returnPlayerToJailError", user.getName(), ex.getLocalizedMessage()), ex); + } + else + { + LOGGER.log(Level.INFO, _("returnPlayerToJailError", user.getName(), ex.getLocalizedMessage())); + } } user.sendMessage(_("jailMessage")); } - @Override + @EventHandler(priority = EventPriority.HIGH) public void onPlayerJoin(final PlayerJoinEvent event) { final User user = ess.getUser(event.getPlayer()); @@ -246,7 +261,14 @@ public class Jails extends AsyncStorageObjectHolder<com.earth2me.essentials.sett } catch (Exception ex) { - LOGGER.log(Level.WARNING, _("returnPlayerToJailError"), ex); + if (ess.getSettings().isDebug()) + { + LOGGER.log(Level.INFO, _("returnPlayerToJailError", user.getName(), ex.getLocalizedMessage()), ex); + } + else + { + LOGGER.log(Level.INFO, _("returnPlayerToJailError", user.getName(), ex.getLocalizedMessage())); + } } user.sendMessage(_("jailMessage")); } diff --git a/Essentials/src/com/earth2me/essentials/Settings.java b/Essentials/src/com/earth2me/essentials/Settings.java index e50e9c16f..6b81753b6 100644 --- a/Essentials/src/com/earth2me/essentials/Settings.java +++ b/Essentials/src/com/earth2me/essentials/Settings.java @@ -374,6 +374,10 @@ public class Settings implements ISettings private List<Integer> getItemSpawnBlacklist() { final List<Integer> epItemSpwn = new ArrayList<Integer>(); + if (ess.getItemDb() == null) { + logger.log(Level.FINE, "Aborting ItemSpawnBL read, itemDB not yet loaded."); + return epItemSpwn; + } for (String itemName : config.getString("item-spawn-blacklist", "").split(",")) { itemName = itemName.trim(); diff --git a/Essentials/src/com/earth2me/essentials/User.java b/Essentials/src/com/earth2me/essentials/User.java index e23fe1de0..b289333aa 100644 --- a/Essentials/src/com/earth2me/essentials/User.java +++ b/Essentials/src/com/earth2me/essentials/User.java @@ -544,6 +544,10 @@ public class User extends UserData implements Comparable<User>, IReplyTo, IUser public boolean canBuild() { + if (isOp()) + { + return true; + } return ess.getPermissionsHandler().canBuild(base, getGroup()); } diff --git a/Essentials/src/com/earth2me/essentials/Util.java b/Essentials/src/com/earth2me/essentials/Util.java index 386433326..65077a7fc 100644 --- a/Essentials/src/com/earth2me/essentials/Util.java +++ b/Essentials/src/com/earth2me/essentials/Util.java @@ -21,11 +21,17 @@ public class Util { } private final static Logger logger = Logger.getLogger("Minecraft"); - private final static Pattern INVALIDCHARS = Pattern.compile("[^a-z0-9]"); + private final static Pattern INVALIDFILECHARS = Pattern.compile("[^a-z0-9]"); + private final static Pattern INVALIDCHARS = Pattern.compile("[^\t\n\r\u0020-\u007E\u0085\u00A0-\uD7FF\uE000-\uFFFC]");; public static String sanitizeFileName(final String name) { - return INVALIDCHARS.matcher(name.toLowerCase(Locale.ENGLISH)).replaceAll("_"); + return INVALIDFILECHARS.matcher(name.toLowerCase(Locale.ENGLISH)).replaceAll("_"); + } + + public static String sanitizeString(final String string) + { + return INVALIDCHARS.matcher(string).replaceAll(""); } public static String formatDateDiff(long date) diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandhome.java b/Essentials/src/com/earth2me/essentials/commands/Commandhome.java index ebe57adf7..f14422efd 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandhome.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandhome.java @@ -48,7 +48,7 @@ public class Commandhome extends EssentialsCommand if ("bed".equalsIgnoreCase(homeName)) { final Location bed = player.getBedSpawnLocation(); - if (bed != null) + if (bed != null && bed.getBlock().getType() == Material.BED_BLOCK) { user.getTeleport().teleport(bed, charge, TeleportCause.COMMAND); throw new NoChargeException(); diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandkill.java b/Essentials/src/com/earth2me/essentials/commands/Commandkill.java index c23161c0e..566cb69d5 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandkill.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandkill.java @@ -31,7 +31,8 @@ public class Commandkill extends EssentialsCommand continue; } - matchPlayer.damage(1000); + matchPlayer.damage(1000); + matchPlayer.setHealth(0); sender.sendMessage(_("kill", matchPlayer.getDisplayName())); } } diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandmail.java b/Essentials/src/com/earth2me/essentials/commands/Commandmail.java index 4a9928b85..abc551f58 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandmail.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandmail.java @@ -40,7 +40,7 @@ public class Commandmail extends EssentialsCommand { if (!user.isAuthorized("essentials.mail.send")) { - throw new Exception(_("noPerm","essentials.mail.send")); + throw new Exception(_("noPerm", "essentials.mail.send")); } Player player = server.getPlayer(args[1]); @@ -59,7 +59,8 @@ public class Commandmail extends EssentialsCommand } if (!u.isIgnoredPlayer(user.getName())) { - u.addMail(user.getName() + ": " + Util.stripColor(getFinalArg(args, 2))); + final String mail = Util.sanitizeString(Util.stripColor(getFinalArg(args, 2))); + u.addMail(user.getName() + ": " + mail); } user.sendMessage(_("mailSent")); return; @@ -68,7 +69,7 @@ public class Commandmail extends EssentialsCommand { if (!user.isAuthorized("essentials.mail.sendall")) { - throw new Exception(_("noPerm","essentials.mail.sendall")); + throw new Exception(_("noPerm", "essentials.mail.sendall")); } ess.scheduleAsyncDelayedTask(new SendAll(user.getName() + ": " + Util.stripColor(getFinalArg(args, 1)))); user.sendMessage(_("mailSent")); diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandping.java b/Essentials/src/com/earth2me/essentials/commands/Commandping.java index 1fad701b2..0956f4082 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandping.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandping.java @@ -1,8 +1,9 @@ package com.earth2me.essentials.commands; import static com.earth2me.essentials.I18n._; -import com.earth2me.essentials.User; +import com.earth2me.essentials.Util; import org.bukkit.Server; +import org.bukkit.command.CommandSender; public class Commandping extends EssentialsCommand @@ -13,8 +14,16 @@ public class Commandping extends EssentialsCommand } @Override - public void run(Server server, User player, String commandLabel, String[] args) throws Exception + public void run(final Server server, final CommandSender sender, final String commandLabel, final String[] args) throws Exception { - player.sendMessage(_("pong")); + if (args.length < 1) + { + + sender.sendMessage(_("pong")); + } + else + { + sender.sendMessage(Util.replaceColor(getFinalArg(args, 0))); + } } } diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandrepair.java b/Essentials/src/com/earth2me/essentials/commands/Commandrepair.java index cf9e43f9f..8d1278fd0 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandrepair.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandrepair.java @@ -80,7 +80,7 @@ public class Commandrepair extends EssentialsCommand private void repairItem(final ItemStack item) throws Exception { final Material material = Material.getMaterial(item.getTypeId()); - if (material.isBlock() || material.getMaxDurability() < 0) + if (material.isBlock() || material.getMaxDurability() < 1) { throw new Exception(_("repairInvalidType")); } diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandspawner.java b/Essentials/src/com/earth2me/essentials/commands/Commandspawner.java index 73c86eba4..d52315241 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandspawner.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandspawner.java @@ -2,6 +2,7 @@ package com.earth2me.essentials.commands; import static com.earth2me.essentials.I18n._; import com.earth2me.essentials.Mob; +import com.earth2me.essentials.Trade; import com.earth2me.essentials.User; import com.earth2me.essentials.Util; import java.util.Locale; @@ -47,11 +48,14 @@ public class Commandspawner extends EssentialsCommand { throw new Exception(_("unableToSpawnMob")); } - if (!user.isAuthorized("essentials.spawner." + mob.name.toLowerCase())) + if (!user.isAuthorized("essentials.spawner." + mob.name.toLowerCase(Locale.ENGLISH))) { throw new Exception(_("unableToSpawnMob")); } + final Trade charge = new Trade("spawner-" + mob.name.toLowerCase(Locale.ENGLISH), ess); + charge.isAffordableFor(user); ((CreatureSpawner)target.getBlock().getState()).setCreatureType(mob.getType()); + charge.charge(user); user.sendMessage(_("setSpawner", mob.name)); } catch (Throwable ex) diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandsudo.java b/Essentials/src/com/earth2me/essentials/commands/Commandsudo.java index 7f758ad2e..86394e502 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandsudo.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandsudo.java @@ -30,7 +30,13 @@ public class Commandsudo extends EssentialsCommand } //TODO: Translate this. - sender.sendMessage("Running the command as " + user.getDisplayName()); + if (user.isAuthorized("essentials.sudo.exempt")) + { + throw new Exception("You cannot sudo this user"); + } + + //TODO: Translate this. + sender.sendMessage("Forcing " + user.getDisplayName() + " to run: /" + command + " " + arguments); final PluginCommand execCommand = ess.getServer().getPluginCommand(command); if (execCommand != null) diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandsuicide.java b/Essentials/src/com/earth2me/essentials/commands/Commandsuicide.java index 6ccb3f7b6..64f7fe04a 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandsuicide.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandsuicide.java @@ -19,6 +19,7 @@ public class Commandsuicide extends EssentialsCommand EntityDamageEvent ede = new EntityDamageEvent(user, EntityDamageEvent.DamageCause.SUICIDE, 1000); server.getPluginManager().callEvent(ede); user.damage(1000); + user.setHealth(0); user.sendMessage(_("suicideMessage")); ess.broadcastMessage(user,_("suicideSuccess", user.getDisplayName())); } diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandtpaccept.java b/Essentials/src/com/earth2me/essentials/commands/Commandtpaccept.java index 2e3e024a3..891742043 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandtpaccept.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandtpaccept.java @@ -22,7 +22,9 @@ public class Commandtpaccept extends EssentialsCommand final User target = user.getTeleportRequest(); if (target == null || target.getBase() instanceof OfflinePlayer - || (user.isTeleportRequestHere() && !target.isAuthorized("essentials.tpahere"))) + || (user.isTeleportRequestHere() && !target.isAuthorized("essentials.tpahere")) + || (!user.isTeleportRequestHere() && !target.isAuthorized("essentials.tpa") && !target.isAuthorized("essentials.tpaall")) + ) { throw new Exception(_("noPendingRequest")); } diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandwarp.java b/Essentials/src/com/earth2me/essentials/commands/Commandwarp.java index 51b64563b..62641172b 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandwarp.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandwarp.java @@ -8,6 +8,7 @@ import com.earth2me.essentials.Warps; import java.util.ArrayList; import java.util.Iterator; import java.util.List; +import java.util.Locale; import org.bukkit.Server; import org.bukkit.command.CommandSender; import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; @@ -44,10 +45,10 @@ public class Commandwarp extends EssentialsCommand { throw new Exception(_("playerNotFound")); } - warpUser(otherUser, args[0]); + warpUser(user, otherUser, args[0]); throw new NoChargeException(); } - warpUser(user, args[0]); + warpUser(user, user, args[0]); throw new NoChargeException(); } } @@ -65,7 +66,7 @@ public class Commandwarp extends EssentialsCommand { throw new Exception(_("playerNotFound")); } - warpUser(otherUser, args[0]); + otherUser.getTeleport().warp(args[0], null, TeleportCause.COMMAND); throw new NoChargeException(); } @@ -112,17 +113,12 @@ public class Commandwarp extends EssentialsCommand } } - private void warpUser(final User user, final String name) throws Exception + private void warpUser(final User owner, final User user, final String name) throws Exception { - final Trade charge = new Trade(this.getName(), ess); - charge.isAffordableFor(user); - if (ess.getSettings().getPerWarpPermission()) + final Trade charge = new Trade("warp-" + name.toLowerCase(Locale.ENGLISH).replace('_', '-'), ess); + charge.isAffordableFor(owner); + if (ess.getSettings().getPerWarpPermission() && !owner.isAuthorized("essentials.warp." + name)) { - if (user.isAuthorized("essentials.warp." + name)) - { - user.getTeleport().warp(name, charge, TeleportCause.COMMAND); - return; - } throw new Exception(_("warpUsePermission")); } user.getTeleport().warp(name, charge, TeleportCause.COMMAND); diff --git a/Essentials/src/com/earth2me/essentials/perm/PermissionsHandler.java b/Essentials/src/com/earth2me/essentials/perm/PermissionsHandler.java index 8c16aab7a..aa786934e 100644 --- a/Essentials/src/com/earth2me/essentials/perm/PermissionsHandler.java +++ b/Essentials/src/com/earth2me/essentials/perm/PermissionsHandler.java @@ -144,6 +144,17 @@ public class PermissionsHandler implements IPermissionsHandler return; } + final Plugin privPlugin = pluginManager.getPlugin("Privileges"); + if (privPlugin != null && privPlugin.isEnabled()) + { + if (!(handler instanceof PrivilegesHandler)) + { + LOGGER.log(Level.INFO, "Essentials: Using Privileges based permissions."); + handler = new PrivilegesHandler(privPlugin); + } + return; + } + final Plugin permPlugin = pluginManager.getPlugin("Permissions"); if (permPlugin != null && permPlugin.isEnabled()) { diff --git a/Essentials/src/com/earth2me/essentials/perm/PrivilegesHandler.java b/Essentials/src/com/earth2me/essentials/perm/PrivilegesHandler.java new file mode 100644 index 000000000..c81f93cbc --- /dev/null +++ b/Essentials/src/com/earth2me/essentials/perm/PrivilegesHandler.java @@ -0,0 +1,61 @@ +package com.earth2me.essentials.perm; + +import java.util.ArrayList; +import java.util.List; +import net.krinsoft.privileges.Privileges; +import net.krinsoft.privileges.groups.Group; +import net.krinsoft.privileges.groups.GroupManager; +import org.bukkit.entity.Player; +import org.bukkit.plugin.Plugin; + +public class PrivilegesHandler extends SuperpermsHandler +{ + private final transient Privileges plugin; + private final GroupManager manager; + + public PrivilegesHandler(final Plugin plugin) + { + this.plugin = (Privileges) plugin; + this.manager = this.plugin.getGroupManager(); + } + + @Override + public String getGroup(final Player base) + { + Group group = manager.getGroup(base); + if (group == null) + { + return null; + } + return group.getName(); + } + + @Override + public List<String> getGroups(final Player base) + { + Group group = manager.getGroup(base); + if (group == null) + { + return new ArrayList<String>(); + } + return group.getGroupTree(); + } + + @Override + public boolean inGroup(final Player base, final String group) + { + Group pGroup = manager.getGroup(base); + if (pGroup == null) + { + return false; + } + return pGroup.isMemberOf(group); + } + + @Override + public boolean canBuild(Player base, String group) + { + return base.hasPermission("essentials.build") || base.hasPermission("privileges.build"); + } + +} diff --git a/Essentials/src/com/earth2me/essentials/signs/SignProtection.java b/Essentials/src/com/earth2me/essentials/signs/SignProtection.java index f64b6f3f1..088e74f01 100644 --- a/Essentials/src/com/earth2me/essentials/signs/SignProtection.java +++ b/Essentials/src/com/earth2me/essentials/signs/SignProtection.java @@ -129,7 +129,7 @@ public class SignProtection extends EssentialsSign if (block.getType() == Material.SIGN_POST || block.getType() == Material.WALL_SIGN) { final BlockSign sign = new BlockSign(block); - if (sign.getLine(0).equalsIgnoreCase(this.getSuccessName())) + if (sign.getLine(0).equals(this.getSuccessName())) { return checkProtectionSign(sign, user, username); } diff --git a/Essentials/src/com/earth2me/essentials/signs/SignTrade.java b/Essentials/src/com/earth2me/essentials/signs/SignTrade.java index 943a14a83..6b47ebc76 100644 --- a/Essentials/src/com/earth2me/essentials/signs/SignTrade.java +++ b/Essentials/src/com/earth2me/essentials/signs/SignTrade.java @@ -36,7 +36,7 @@ public class SignTrade extends EssentialsSign try { stored = getTrade(sign, 1, true, true, ess); - substractAmount(sign, 1, stored, ess); + subtractAmount(sign, 1, stored, ess); stored.pay(player); } catch (SignException e) @@ -53,12 +53,14 @@ public class SignTrade extends EssentialsSign final Trade charge = getTrade(sign, 1, false, false, ess); final Trade trade = getTrade(sign, 2, false, true, ess); charge.isAffordableFor(player); + addAmount(sign, 1, charge, ess); + subtractAmount(sign, 2, trade, ess); if (!trade.pay(player, false)) { + subtractAmount(sign, 1, charge, ess); + addAmount(sign, 2, trade, ess); throw new ChargeException("Full inventory"); } - substractAmount(sign, 2, trade, ess); - addAmount(sign, 1, charge, ess); charge.charge(player); Trade.log("Sign", "Trade", "Interact", sign.getLine(3), charge, username, trade, sign.getBlock().getLocation(), ess); } @@ -256,7 +258,7 @@ public class SignTrade extends EssentialsSign throw new SignException(_("invalidSignLine", index + 1)); } - protected final void substractAmount(final ISign sign, final int index, final Trade trade, final IEssentials ess) throws SignException + protected final void subtractAmount(final ISign sign, final int index, final Trade trade, final IEssentials ess) throws SignException { final Double money = trade.getMoney(); if (money != null) @@ -294,6 +296,7 @@ public class SignTrade extends EssentialsSign } } + //TODO: Translate these exceptions. private void changeAmount(final ISign sign, final int index, final double value, final IEssentials ess) throws SignException { @@ -313,7 +316,7 @@ public class SignTrade extends EssentialsSign final String newline = Util.formatCurrency(money, ess) + ":" + Util.formatCurrency(amount + value, ess).substring(1); if (newline.length() > 15) { - throw new SignException("Line too long!"); + throw new SignException("This sign is full: Line too long!"); } sign.setLine(index, newline); return; @@ -329,7 +332,7 @@ public class SignTrade extends EssentialsSign final String newline = stackamount + " " + split[1] + ":" + (amount + Math.round(value)); if (newline.length() > 15) { - throw new SignException("Line too long!"); + throw new SignException("This sign is full: Line too long!"); } sign.setLine(index, newline); return; @@ -343,7 +346,7 @@ public class SignTrade extends EssentialsSign final String newline = stackamount + " " + split[1] + ":" + (amount + Math.round(value)); if (newline.length() > 15) { - throw new SignException("Line too long!"); + throw new SignException("This sign is full: Line too long!"); } sign.setLine(index, newline); return; diff --git a/Essentials/src/messages.properties b/Essentials/src/messages.properties index abc643ae4..ec55210b0 100644 --- a/Essentials/src/messages.properties +++ b/Essentials/src/messages.properties @@ -295,7 +295,7 @@ requestDeniedFrom=\u00a77{0} denied your teleport request. requestSent=\u00a77Request sent to {0}\u00a77. requestTimedOut=\u00a7cTeleport request has timed out requiredBukkit= * ! * You need atleast build {0} of CraftBukkit, download it from http://ci.bukkit.org. -returnPlayerToJailError=Error occurred when trying to return player to jail. +returnPlayerToJailError=Error occurred when trying to return player {0} to jail: {1} second=second seconds=seconds seenOffline=Player {0} is offline since {1} diff --git a/Essentials/src/messages_da.properties b/Essentials/src/messages_da.properties index b3821ea27..03bbe6f78 100644 --- a/Essentials/src/messages_da.properties +++ b/Essentials/src/messages_da.properties @@ -295,7 +295,7 @@ requestDeniedFrom=\u00a77{0} afviste din anmodning om teleport. requestSent=\u00a77Anmodning sendt til {0}\u00a77. requestTimedOut=\u00a7cTeleport request has timed out requiredBukkit=* ! * You need atleast build {0} of CraftBukkit, download it from http://ci.bukkit.org. -returnPlayerToJailError=En fejl opstod ved fors\u00f8g p\u00e5 at returnere spilleren til f\u00e6ngsel. +returnPlayerToJailError=Error occurred when trying to return player {0} to jail: {1} second=sekund seconds=sekunder seenOffline=Spilleren {0} har v\u00c3\u00a6ret offline i {1} diff --git a/Essentials/src/messages_de.properties b/Essentials/src/messages_de.properties index 1b84e78a8..edffe33ac 100644 --- a/Essentials/src/messages_de.properties +++ b/Essentials/src/messages_de.properties @@ -295,7 +295,7 @@ requestDeniedFrom=\u00a77{0} hat deine Teleportierungsanfrage abgelehnt. requestSent=\u00a77Anfrage gesendet an {0}\u00a77. requestTimedOut=\u00a7cTeleport request has timed out requiredBukkit=* ! * You need atleast build {0} of CraftBukkit, download it from http://ci.bukkit.org. -returnPlayerToJailError=Fehler beim Versuch, den Spieler ins Gef\u00e4ngnis zu teleportieren. +returnPlayerToJailError=Error occurred when trying to return player {0} to jail: {1} second=Sekunde seconds=Sekunden seenOffline=Spieler {0} ist offline seit {1} diff --git a/Essentials/src/messages_en.properties b/Essentials/src/messages_en.properties index 86dbc9a37..b03a49812 100644 --- a/Essentials/src/messages_en.properties +++ b/Essentials/src/messages_en.properties @@ -295,7 +295,7 @@ requestDeniedFrom=\u00a77{0} denied your teleport request requestSent=\u00a77Request sent to {0}\u00a77. requestTimedOut=\u00a7cTeleport request has timed out requiredBukkit=* ! * You need atleast build {0} of CraftBukkit, download it from http://ci.bukkit.org. -returnPlayerToJailError=Error occurred when trying to return player to jail. +returnPlayerToJailError=Error occurred when trying to return player {0} to jail: {1} second=second seconds=seconds seenOffline=Player {0} is offline since {1} diff --git a/Essentials/src/messages_es.properties b/Essentials/src/messages_es.properties index 7227f375c..4f3da7738 100644 --- a/Essentials/src/messages_es.properties +++ b/Essentials/src/messages_es.properties @@ -295,7 +295,7 @@ requestDeniedFrom=\u00a77{0} ha denegado tu peticion de teletransporte. requestSent=\u00a77Peticion enviada a {0}\u00a77. requestTimedOut=\u00a7cTeleport request has timed out requiredBukkit=* ! * You need atleast build {0} of CraftBukkit, download it from http://ci.bukkit.org. -returnPlayerToJailError=Error al intentar quitar al jugador de la carcel. +returnPlayerToJailError=Error occurred when trying to return player {0} to jail: {1} second=segundo seconds=segundos seenOffline=El jugador {0} esta desconectado desde {1} diff --git a/Essentials/src/messages_fr.properties b/Essentials/src/messages_fr.properties index 9258963bd..1649a552a 100644 --- a/Essentials/src/messages_fr.properties +++ b/Essentials/src/messages_fr.properties @@ -295,7 +295,7 @@ requestDeniedFrom=\u00a77{0} a refus\u00e9 votre demande de t\u00e9l\u00e9portat requestSent=\u00a77Requ\u00eate envoy\u00e9e \u00e0 {0}\u00a77. requestTimedOut=\u00a7cLa de mande de t\u00e9l\u00e9portation a expir\u00e9. requiredBukkit=* ! * Vous avez besoin au moins de la version {0} de CraftBukkit. T\u00e9l\u00e9chargez-la ici http://ci.bukkit.org. -returnPlayerToJailError=Erreur survenue lors de la tentative d'emprisonner de nouveau un joueur. +returnPlayerToJailError=Error occurred when trying to return player {0} to jail: {1} second=seconde seconds=secondes seenOffline=Le joueur {0} est hors ligne depuis {1} diff --git a/Essentials/src/messages_nl.properties b/Essentials/src/messages_nl.properties index 30c9caaee..16d942b0d 100644 --- a/Essentials/src/messages_nl.properties +++ b/Essentials/src/messages_nl.properties @@ -295,7 +295,7 @@ requestDeniedFrom=\u00a77{0} denied your teleport request. requestSent=\u00a77Aanvraag verstuurd naar {0}\u00a77. requestTimedOut=\u00a7cTeleport request has timed out requiredBukkit=* ! * You need atleast build {0} of CraftBukkit, download it from http://ci.bukkit.org. -returnPlayerToJailError=Fout opgetreden bij terugzetten van speler in gevangenis. +returnPlayerToJailError=Error occurred when trying to return player {0} to jail: {1} second=seconde seconds=seconde seenOffline=Speler {0} is offline vanaf {1} diff --git a/EssentialsChat/src/com/earth2me/essentials/chat/ChatStore.java b/EssentialsChat/src/com/earth2me/essentials/chat/ChatStore.java index 38239abfe..d353d5d6c 100644 --- a/EssentialsChat/src/com/earth2me/essentials/chat/ChatStore.java +++ b/EssentialsChat/src/com/earth2me/essentials/chat/ChatStore.java @@ -36,7 +36,7 @@ public class ChatStore public String getLongType() { - return type.length() > 0 ? "chat" : "chat-" + type; + return type.length() == 0 ? "chat" : "chat-" + type; } public long getRadius() |