diff --git a/Essentials/src/com/earth2me/essentials/DescParseTickFormat.java b/Essentials/src/com/earth2me/essentials/DescParseTickFormat.java index 9c40acacc..91efe3c0a 100644 --- a/Essentials/src/com/earth2me/essentials/DescParseTickFormat.java +++ b/Essentials/src/com/earth2me/essentials/DescParseTickFormat.java @@ -269,11 +269,11 @@ public final class DescParseTickFormat // How many ingame days have passed since the server start? final long days = ticks / ticksPerDay; - ticks = ticks - days * ticksPerDay; + ticks -= days * ticksPerDay; // How many hours on the last day? final long hours = ticks / ticksPerHour; - ticks = ticks - hours * ticksPerHour; + ticks -= hours * ticksPerHour; // How many minutes on the last day? final long minutes = (long)Math.floor(ticks / ticksPerMinute); diff --git a/Essentials/src/com/earth2me/essentials/EssentialsEntityListener.java b/Essentials/src/com/earth2me/essentials/EssentialsEntityListener.java index 8dbd02a38..0077d988c 100644 --- a/Essentials/src/com/earth2me/essentials/EssentialsEntityListener.java +++ b/Essentials/src/com/earth2me/essentials/EssentialsEntityListener.java @@ -7,6 +7,7 @@ import java.util.logging.Logger; import org.bukkit.Material; import org.bukkit.entity.Ageable; import org.bukkit.entity.Entity; +import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; @@ -46,7 +47,7 @@ public class EssentialsEntityListener implements Listener { event.setCancelled(true); } - + if (attacker.isGodModeEnabled() && !attacker.isAuthorized("essentials.god.pvp")) { event.setCancelled(true); @@ -161,4 +162,16 @@ public class EssentialsEntityListener implements Listener event.setCancelled(true); } } + + @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) + public void onPotionSplashEvent(final PotionSplashEvent event) + { + for (LivingEntity entity : event.getAffectedEntities()) + { + if (entity instanceof Player && ess.getUser(entity).isGodModeEnabled()) + { + event.setIntensity(entity, 0d); + } + } + } } diff --git a/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java b/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java index f19f0f763..8ef218a67 100644 --- a/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java +++ b/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java @@ -347,7 +347,7 @@ public class EssentialsPlayerListener implements Listener } } - @EventHandler(priority = EventPriority.LOWEST) + @EventHandler(priority = EventPriority.LOW) public void onPlayerChangedWorldHack(final PlayerChangedWorldEvent event) { final Player user = event.getPlayer(); @@ -496,7 +496,7 @@ public class EssentialsPlayerListener implements Listener } } - @EventHandler(priority = EventPriority.LOWEST) + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onInventoryClickEvent(final InventoryClickEvent event) { if (event.getView().getTopInventory().getType() == InventoryType.PLAYER) diff --git a/Essentials/src/com/earth2me/essentials/I18n.java b/Essentials/src/com/earth2me/essentials/I18n.java index c00180087..93f743140 100644 --- a/Essentials/src/com/earth2me/essentials/I18n.java +++ b/Essentials/src/com/earth2me/essentials/I18n.java @@ -143,7 +143,7 @@ public class I18n implements II18n { private final transient File dataFolder; - public FileResClassLoader(final ClassLoader classLoader, final IEssentials ess) + FileResClassLoader(final ClassLoader classLoader, final IEssentials ess) { super(classLoader); this.dataFolder = ess.getDataFolder(); diff --git a/Essentials/src/com/earth2me/essentials/ISettings.java b/Essentials/src/com/earth2me/essentials/ISettings.java index 434de7ba6..d8c421fde 100644 --- a/Essentials/src/com/earth2me/essentials/ISettings.java +++ b/Essentials/src/com/earth2me/essentials/ISettings.java @@ -92,10 +92,6 @@ public interface ISettings extends IConf boolean isCommandOverridden(String name); - boolean isCommandRestricted(IEssentialsCommand cmd); - - boolean isCommandRestricted(String label); - boolean isDebug(); boolean isEcoDisabled(); diff --git a/Essentials/src/com/earth2me/essentials/Settings.java b/Essentials/src/com/earth2me/essentials/Settings.java index 90310cedb..fff129d52 100644 --- a/Essentials/src/com/earth2me/essentials/Settings.java +++ b/Essentials/src/com/earth2me/essentials/Settings.java @@ -146,26 +146,6 @@ public class Settings implements ISettings return disCommands; } - @Override - public boolean isCommandRestricted(IEssentialsCommand cmd) - { - return isCommandRestricted(cmd.getName()); - } - - @Override - public boolean isCommandRestricted(String label) - { - for (String c : config.getStringList("restricted-commands")) - { - if (!c.equalsIgnoreCase(label)) - { - continue; - } - return true; - } - return config.getBoolean("restrict-" + label.toLowerCase(Locale.ENGLISH), false); - } - @Override public boolean isPlayerCommand(String label) { @@ -387,6 +367,7 @@ public class Settings implements ISettings format = format.replace("{WORLDNAME}", "{1}"); format = format.replace("{SHORTWORLDNAME}", "{2}"); format = format.replaceAll("\\{(\\D*?)\\}", "\\[$1\\]"); + format = "§r".concat(format); mFormat = new MessageFormat(format); chatFormats.put(group, mFormat); } diff --git a/Essentials/src/com/earth2me/essentials/Teleport.java b/Essentials/src/com/earth2me/essentials/Teleport.java index b6179c0a5..6a666a199 100644 --- a/Essentials/src/com/earth2me/essentials/Teleport.java +++ b/Essentials/src/com/earth2me/essentials/Teleport.java @@ -21,13 +21,13 @@ public class Teleport implements Runnable, ITeleport private final Location location; private final String name; - public Target(Location location) + Target(Location location) { this.location = location; this.name = null; } - public Target(Player entity) + Target(Player entity) { this.name = entity.getName(); this.location = null; @@ -37,13 +37,14 @@ public class Teleport implements Runnable, ITeleport { if (this.name != null) { - + return ess.getServer().getPlayerExact(name).getLocation(); } return location; } } private IUser user; + private IUser teleportUser; private int teleTimer = -1; private long started; // time this task was initiated private long delay; // how long to delay the teleport @@ -61,13 +62,19 @@ public class Teleport implements Runnable, ITeleport private TeleportCause cause; private void initTimer(long delay, Target target, Trade chargeFor, TeleportCause cause) + { + initTimer(delay, user, target, chargeFor, cause); + } + + private void initTimer(long delay, IUser teleportUser, Target target, Trade chargeFor, TeleportCause cause) { this.started = System.currentTimeMillis(); this.delay = delay; - this.health = user.getHealth(); - this.initX = Math.round(user.getLocation().getX() * MOVE_CONSTANT); - this.initY = Math.round(user.getLocation().getY() * MOVE_CONSTANT); - this.initZ = Math.round(user.getLocation().getZ() * MOVE_CONSTANT); + this.health = teleportUser.getHealth(); + this.initX = Math.round(teleportUser.getLocation().getX() * MOVE_CONSTANT); + this.initY = Math.round(teleportUser.getLocation().getY() * MOVE_CONSTANT); + this.initZ = Math.round(teleportUser.getLocation().getZ() * MOVE_CONSTANT); + this.teleportUser = teleportUser; this.teleportTarget = target; this.chargeFor = chargeFor; this.cause = cause; @@ -79,31 +86,38 @@ public class Teleport implements Runnable, ITeleport if (user == null || !user.isOnline() || user.getLocation() == null) { - cancel(); + cancel(false); return; } - if (Math.round(user.getLocation().getX() * MOVE_CONSTANT) != initX - || Math.round(user.getLocation().getY() * MOVE_CONSTANT) != initY - || Math.round(user.getLocation().getZ() * MOVE_CONSTANT) != initZ - || user.getHealth() < health) - { // user moved, cancel teleport + if (teleportUser == null || !teleportUser.isOnline() || teleportUser.getLocation() == null) + { + cancel(false); + return; + } + + if (!user.isAuthorized("essentials.teleport.timer.move") + && (Math.round(teleportUser.getLocation().getX() * MOVE_CONSTANT) != initX + || Math.round(teleportUser.getLocation().getY() * MOVE_CONSTANT) != initY + || Math.round(teleportUser.getLocation().getZ() * MOVE_CONSTANT) != initZ + || teleportUser.getHealth() < health)) + { + // user moved, cancel teleport cancel(true); return; } - - health = user.getHealth(); // in case user healed, then later gets injured - + health = teleportUser.getHealth(); // in case user healed, then later gets injured long now = System.currentTimeMillis(); if (now > started + delay) { try { cooldown(false); - user.sendMessage(_("teleportationCommencing")); + teleportUser.sendMessage(_("teleportationCommencing")); try { - now(teleportTarget, cause); + teleportUser.getTeleport().now(teleportTarget, cause); + cancel(false); if (chargeFor != null) { chargeFor.charge(user); @@ -117,6 +131,10 @@ public class Teleport implements Runnable, ITeleport catch (Exception ex) { user.sendMessage(_("cooldownWithMessage", ex.getMessage())); + if (user != teleportUser) + { + teleportUser.sendMessage(_("cooldownWithMessage", ex.getMessage())); + } } } } @@ -127,22 +145,6 @@ public class Teleport implements Runnable, ITeleport this.ess = ess; } - public void respawn(final Trade chargeFor, TeleportCause cause) throws Exception - { - final Player player = user.getBase(); - final Location bed = player.getBedSpawnLocation(); - final PlayerRespawnEvent pre = new PlayerRespawnEvent(player, bed == null ? player.getWorld().getSpawnLocation() : bed, bed != null); - ess.getServer().getPluginManager().callEvent(pre); - teleport(new Target(pre.getRespawnLocation()), chargeFor, cause); - } - - public void warp(String warp, Trade chargeFor, TeleportCause cause) throws Exception - { - Location loc = ess.getWarps().getWarp(warp); - teleport(new Target(loc), chargeFor, cause); - user.sendMessage(_("warpingTo", warp)); - } - public void cooldown(boolean check) throws Exception { final Calendar time = new GregorianCalendar(); @@ -181,6 +183,7 @@ public class Teleport implements Runnable, ITeleport } } + //If we need to cancel a pending teleport call this method public void cancel(boolean notifyUser) { if (teleTimer == -1) @@ -193,6 +196,10 @@ public class Teleport implements Runnable, ITeleport if (notifyUser) { user.sendMessage(_("pendingTeleportCancelled")); + if (teleportUser != user) + { + teleportUser.sendMessage(_("pendingTeleportCancelled")); + } } } finally @@ -201,16 +208,40 @@ public class Teleport implements Runnable, ITeleport } } - public void cancel() + //The now function is used when you want to skip tp delay when teleporting someone to a location or player. + public void now(Location loc, boolean cooldown, TeleportCause cause) throws Exception + { + if (cooldown) + { + cooldown(false); + } + now(new Target(loc), cause); + } + + public void now(Player entity, boolean cooldown, TeleportCause cause) throws Exception + { + if (cooldown) + { + cooldown(false); + } + now(new Target(entity), cause); + } + + private void now(Target target, TeleportCause cause) throws Exception { cancel(false); + user.setLastLocation(); + user.getBase().teleport(Util.getSafeDestination(target.getLocation()), cause); } + //The teleport function is used when you want to normally teleport someone to a location or player. + //This method is nolonger used internally and will be removed. + @Deprecated public void teleport(Location loc, Trade chargeFor) throws Exception { - teleport(new Target(loc), chargeFor, TeleportCause.PLUGIN); + teleport(loc, chargeFor, TeleportCause.PLUGIN); } - + public void teleport(Location loc, Trade chargeFor, TeleportCause cause) throws Exception { teleport(new Target(loc), chargeFor, cause); @@ -241,58 +272,82 @@ public class Teleport implements Runnable, ITeleport return; } - cancel(); - Calendar c = new GregorianCalendar(); - c.add(Calendar.SECOND, (int)delay); - c.add(Calendar.MILLISECOND, (int)((delay * 1000.0) % 1000.0)); - user.sendMessage(_("dontMoveMessage", Util.formatDateDiff(c.getTimeInMillis()))); + cancel(false); + warnUser(user); initTimer((long)(delay * 1000.0), target, chargeFor, cause); teleTimer = ess.scheduleSyncRepeatingTask(this, 10, 10); } - private void now(Target target, TeleportCause cause) throws Exception + //The teleportToMe function is a wrapper used to handle teleporting players to them, like /tphere + public void teleportToMe(User otherUser, Trade chargeFor, TeleportCause cause) throws Exception { - cancel(); - user.setLastLocation(); - user.getBase().teleport(Util.getSafeDestination(target.getLocation()), cause); - } + Target target = new Target(user); - public void now(Location loc, boolean cooldown, TeleportCause cause) throws Exception - { - if (cooldown) + double delay = ess.getSettings().getTeleportDelay(); + + if (chargeFor != null) + { + chargeFor.isAffordableFor(user); + } + cooldown(true); + if (delay <= 0 || user.isAuthorized("essentials.teleport.timer.bypass")) { cooldown(false); + otherUser.getTeleport().now(target, cause); + if (chargeFor != null) + { + chargeFor.charge(user); + } + return; } - now(new Target(loc), cause); + + cancel(false); + warnUser(otherUser); + initTimer((long)(delay * 1000.0), otherUser, target, chargeFor, cause); + + teleTimer = ess.scheduleSyncRepeatingTask(this, 10, 10); } - public void now(Location loc, Trade chargeFor, TeleportCause cause) throws Exception + private void warnUser(final IUser user) { - cooldown(false); - chargeFor.charge(user); - now(new Target(loc), cause); + Calendar c = new GregorianCalendar(); + c.add(Calendar.SECOND, (int)delay); + c.add(Calendar.MILLISECOND, (int)((delay * 1000.0) % 1000.0)); + user.sendMessage(_("dontMoveMessage", Util.formatDateDiff(c.getTimeInMillis()))); } - public void now(Player entity, boolean cooldown, TeleportCause cause) throws Exception + //The respawn function is a wrapper used to handle tp fallback, on /jail and /home + public void respawn(final Trade chargeFor, TeleportCause cause) throws Exception { - if (cooldown) - { - cooldown(false); - } - now(new Target(entity), cause); + final Player player = user.getBase(); + final Location bed = player.getBedSpawnLocation(); + final PlayerRespawnEvent pre = new PlayerRespawnEvent(player, bed == null ? player.getWorld().getSpawnLocation() : bed, bed != null); + ess.getServer().getPluginManager().callEvent(pre); + teleport(new Target(pre.getRespawnLocation()), chargeFor, cause); } + //The warp function is a wrapper used to teleport a player to a /warp + public void warp(String warp, Trade chargeFor, TeleportCause cause) throws Exception + { + Location loc = ess.getWarps().getWarp(warp); + teleport(new Target(loc), chargeFor, cause); + user.sendMessage(_("warpingTo", warp)); + } + + //The back function is a wrapper used to teleport a player /back to their previous location. public void back(Trade chargeFor) throws Exception { teleport(new Target(user.getLastLocation()), chargeFor, TeleportCause.COMMAND); } + //This function is used to throw a user back after a jail sentence public void back() throws Exception { now(new Target(user.getLastLocation()), TeleportCause.COMMAND); } + //This function handles teleporting to /home public void home(Location loc, Trade chargeFor) throws Exception { teleport(new Target(loc), chargeFor, TeleportCause.COMMAND); diff --git a/Essentials/src/com/earth2me/essentials/User.java b/Essentials/src/com/earth2me/essentials/User.java index dbd56df12..01284d4b8 100644 --- a/Essentials/src/com/earth2me/essentials/User.java +++ b/Essentials/src/com/earth2me/essentials/User.java @@ -63,20 +63,22 @@ public class User extends UserData implements Comparable, IReplyTo, IUser @Override public boolean isAuthorized(final String node) { + final boolean result = isAuthorizedCheck(node); if (ess.getSettings().isDebug()) { - ess.getLogger().log(Level.INFO, "checking if " + base.getName() + " has " + node); + ess.getLogger().log(Level.INFO, "checking if " + base.getName() + " has " + node + " - " + result); } + return result; + } + + private boolean isAuthorizedCheck(final String node) + { + if (base instanceof OfflinePlayer) { return false; } - if (isOp()) - { - return true; - } - if (isJailed()) { return false; diff --git a/Essentials/src/com/earth2me/essentials/UserData.java b/Essentials/src/com/earth2me/essentials/UserData.java index be25cf665..e9b84e656 100644 --- a/Essentials/src/com/earth2me/essentials/UserData.java +++ b/Essentials/src/com/earth2me/essentials/UserData.java @@ -28,8 +28,9 @@ public abstract class UserData extends PlayerExtension implements IConf config = new EssentialsConf(new File(folder, Util.sanitizeFileName(base.getName()) + ".yml")); reloadConfig(); } - - public final void reset () { + + public final void reset() + { config.getFile().delete(); config = new EssentialsConf(new File(folder, Util.sanitizeFileName(base.getName()) + ".yml")); reloadConfig(); @@ -108,26 +109,25 @@ public abstract class UserData extends PlayerExtension implements IConf return new HashMap(); } - public Location getHome(String name) throws Exception + private String getHomeName(String search) { - Location loc = config.getLocation("homes." + name, getServer()); - if (loc == null) + if (Util.isInt(search)) { try { - loc = config.getLocation("homes." + getHomes().get(Integer.parseInt(name) - 1), getServer()); + search = getHomes().get(Integer.parseInt(search) - 1); } - catch (IndexOutOfBoundsException e) + catch (Exception e) { - return null; - } - catch (NumberFormatException e) - { - return null; } } - - return loc; + return search; + } + + public Location getHome(String name) throws Exception + { + String search = getHomeName(name); + return config.getLocation("homes." + search, getServer()); } public Location getHome(final Location world) @@ -169,20 +169,20 @@ public abstract class UserData extends PlayerExtension implements IConf public void delHome(String name) throws Exception { - String search = name; + String search = getHomeName(name); if (!homes.containsKey(search)) { - search = Util.sanitizeFileName(name); + search = Util.sanitizeFileName(search); } if (homes.containsKey(search)) { - homes.remove(name); - config.removeProperty("homes." + name); + homes.remove(search); + config.removeProperty("homes." + search); config.save(); } else { - throw new Exception(_("invalidHome", name)); + throw new Exception(_("invalidHome", search)); } } diff --git a/Essentials/src/com/earth2me/essentials/Util.java b/Essentials/src/com/earth2me/essentials/Util.java index c1f7cd014..34e5c6420 100644 --- a/Essentials/src/com/earth2me/essentials/Util.java +++ b/Essentials/src/com/earth2me/essentials/Util.java @@ -23,10 +23,13 @@ public class Util private final static Logger logger = Logger.getLogger("Minecraft"); 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]"); + private final static Pattern BADFILENAMES = Pattern.compile("^(CON|PRN|AUX|NUL|COM[1-9]|LPT[1-9])(\\.(.+))?$", Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE | Pattern.COMMENTS); public static String sanitizeFileName(final String name) { - final String newName = INVALIDFILECHARS.matcher(name.toLowerCase(Locale.ENGLISH)).replaceAll("_"); + String newName = INVALIDFILECHARS.matcher(name.toLowerCase(Locale.ENGLISH)).replaceAll("_"); + if(BADFILENAMES.matcher(newName).matches()) + newName = "_" + newName; return newName; } diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandban.java b/Essentials/src/com/earth2me/essentials/commands/Commandban.java index 5f70df273..cf6ea53df 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandban.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandban.java @@ -44,7 +44,7 @@ public class Commandban extends EssentialsCommand } else { - if (user.isAuthorized("essentials.ban.exempt")) + if (user.isAuthorized("essentials.ban.exempt") && sender instanceof Player) { sender.sendMessage(_("banExempt")); return; diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandgc.java b/Essentials/src/com/earth2me/essentials/commands/Commandgc.java index 11af52b6f..56816d452 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandgc.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandgc.java @@ -53,10 +53,7 @@ public class Commandgc extends EssentialsCommand break; } - sender.sendMessage( - "\u00a76" + worldType + " \"" + w.getName() + "\": " - + w.getLoadedChunks().length + _("gcchunks") - + w.getEntities().size() + _("gcentities")); + sender.sendMessage(_("gcWorld", worldType, w.getName(), w.getLoadedChunks().length, w.getEntities().size())); } } diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandheal.java b/Essentials/src/com/earth2me/essentials/commands/Commandheal.java index 82678c96e..224e782de 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandheal.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandheal.java @@ -6,6 +6,8 @@ import java.util.List; import org.bukkit.Server; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; public class Commandheal extends EssentialsCommand @@ -33,9 +35,7 @@ public class Commandheal extends EssentialsCommand { user.healCooldown(); } - user.setHealth(20); - user.setFoodLevel(20); - user.sendMessage(_("heal")); + healPlayer(user); } @Override @@ -63,10 +63,19 @@ public class Commandheal extends EssentialsCommand { continue; } - p.setHealth(20); - p.setFoodLevel(20); - p.sendMessage(_("heal")); + healPlayer(p); sender.sendMessage(_("healOther", p.getDisplayName())); } } + + private void healPlayer(final Player p) + { + p.setHealth(20); + p.setFoodLevel(20); + p.sendMessage(_("heal")); + for (PotionEffect effect : p.getActivePotionEffects()) + { + p.removePotionEffect(effect.getType()); + } + } } diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandsethome.java b/Essentials/src/com/earth2me/essentials/commands/Commandsethome.java index 7ec1ba11d..c97761f8d 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandsethome.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandsethome.java @@ -2,7 +2,9 @@ package com.earth2me.essentials.commands; import static com.earth2me.essentials.I18n._; import com.earth2me.essentials.User; +import com.earth2me.essentials.Util; import java.util.Locale; +import java.util.regex.Pattern; import org.bukkit.Location; import org.bukkit.Server; @@ -55,9 +57,10 @@ public class Commandsethome extends EssentialsCommand { name = "home"; } - if ("bed".equals(name)) + if ("bed".equals(name) || Util.isInt(name)) { - throw new NotEnoughArgumentsException(); + user.sendMessage(_("invalidHomeName")); + throw new NoChargeException(); } usersHome.setHome(name, location); user.sendMessage(_("homeSet", user.getLocation().getWorld().getName(), user.getLocation().getBlockX(), user.getLocation().getBlockY(), user.getLocation().getBlockZ())); diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandsudo.java b/Essentials/src/com/earth2me/essentials/commands/Commandsudo.java index 1d974121b..d41cf9a51 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandsudo.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandsudo.java @@ -7,6 +7,7 @@ import java.util.logging.Logger; import org.bukkit.Server; import org.bukkit.command.CommandSender; import org.bukkit.command.PluginCommand; +import org.bukkit.entity.Player; public class Commandsudo extends EssentialsCommand @@ -26,6 +27,15 @@ public class Commandsudo extends EssentialsCommand } final User user = getPlayer(server, args, 0, false); + if(args[1].equalsIgnoreCase("say")) + { + if (user.isAuthorized("essentials.sudo.exempt")) + { + throw new Exception(_("sudoExempt")); + } + user.chat(getFinalArg(args, 2)); + return; + } final String command = args[1]; final String[] arguments = new String[args.length - 2]; if (arguments.length > 0) @@ -33,7 +43,7 @@ public class Commandsudo extends EssentialsCommand System.arraycopy(args, 2, arguments, 0, args.length - 2); } - if (user.isAuthorized("essentials.sudo.exempt")) + if (user.isAuthorized("essentials.sudo.exempt") && sender instanceof Player) { throw new Exception(_("sudoExempt")); } diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandtpaccept.java b/Essentials/src/com/earth2me/essentials/commands/Commandtpaccept.java index 86f88f884..865492921 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandtpaccept.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandtpaccept.java @@ -65,12 +65,13 @@ public class Commandtpaccept extends EssentialsCommand if (user.isTpRequestHere()) { - user.getTeleport().teleport(target, charge, TeleportCause.COMMAND); + target.getTeleport().teleportToMe(user, charge, TeleportCause.COMMAND); } else { target.getTeleport().teleport(user, charge, TeleportCause.COMMAND); } user.requestTeleport(null, false); + throw new NoChargeException(); } } diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandtphere.java b/Essentials/src/com/earth2me/essentials/commands/Commandtphere.java index 641290575..76041ca6c 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandtphere.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandtphere.java @@ -27,7 +27,7 @@ public class Commandtphere extends EssentialsCommand { throw new Exception(_("noPerm", "essentials.worlds." + user.getWorld().getName())); } - player.getTeleport().teleport(user, new Trade(this.getName(), ess), TeleportCause.COMMAND); + user.getTeleport().teleportToMe(player, new Trade(this.getName(), ess), TeleportCause.COMMAND); user.sendMessage(_("teleporting")); player.sendMessage(_("teleporting")); throw new NoChargeException(); diff --git a/Essentials/src/com/earth2me/essentials/metrics/Metrics.java b/Essentials/src/com/earth2me/essentials/metrics/Metrics.java index f361e4f50..a0bf103e8 100644 --- a/Essentials/src/com/earth2me/essentials/metrics/Metrics.java +++ b/Essentials/src/com/earth2me/essentials/metrics/Metrics.java @@ -223,7 +223,7 @@ public class Metrics } catch (IOException e) { - Bukkit.getLogger().log(Level.INFO, "[Metrics] " + e.getMessage()); + Bukkit.getLogger().log(Level.FINE, "[Metrics] " + e.getMessage()); } } }, 0, PING_INTERVAL * 1200); diff --git a/Essentials/src/com/earth2me/essentials/perm/ConfigPermissionsHandler.java b/Essentials/src/com/earth2me/essentials/perm/ConfigPermissionsHandler.java index fad479444..9396bd4ad 100644 --- a/Essentials/src/com/earth2me/essentials/perm/ConfigPermissionsHandler.java +++ b/Essentials/src/com/earth2me/essentials/perm/ConfigPermissionsHandler.java @@ -1,12 +1,11 @@ package com.earth2me.essentials.perm; import com.earth2me.essentials.IEssentials; -import java.util.List; import org.bukkit.entity.Player; import org.bukkit.plugin.Plugin; -public class ConfigPermissionsHandler implements IPermissionsHandler +public class ConfigPermissionsHandler extends SuperpermsHandler { private final transient IEssentials ess; @@ -15,47 +14,17 @@ public class ConfigPermissionsHandler implements IPermissionsHandler this.ess = (IEssentials)ess; } - @Override - public String getGroup(final Player base) - { - return null; - } - - @Override - public List getGroups(final Player base) - { - return null; - } - @Override public boolean canBuild(final Player base, final String group) { return true; } - @Override - public boolean inGroup(final Player base, final String group) - { - return false; - } - @Override public boolean hasPermission(final Player base, final String node) { final String[] cmds = node.split("\\.", 2); - return !ess.getSettings().isCommandRestricted(cmds[cmds.length - 1]) - && ess.getSettings().isPlayerCommand(cmds[cmds.length - 1]); + return ess.getSettings().isPlayerCommand(cmds[cmds.length - 1]) || super.hasPermission(base, node); } - @Override - public String getPrefix(final Player base) - { - return null; - } - - @Override - public String getSuffix(final Player base) - { - return null; - } } diff --git a/Essentials/src/com/earth2me/essentials/perm/PermissionsExHandler.java b/Essentials/src/com/earth2me/essentials/perm/PermissionsExHandler.java index ae19f57dd..68dc3fe50 100644 --- a/Essentials/src/com/earth2me/essentials/perm/PermissionsExHandler.java +++ b/Essentials/src/com/earth2me/essentials/perm/PermissionsExHandler.java @@ -8,7 +8,7 @@ import ru.tehkode.permissions.PermissionUser; import ru.tehkode.permissions.bukkit.PermissionsEx; -public class PermissionsExHandler implements IPermissionsHandler +public class PermissionsExHandler extends SuperpermsHandler { private final transient PermissionManager manager; @@ -66,7 +66,7 @@ public class PermissionsExHandler implements IPermissionsHandler @Override public boolean hasPermission(final Player base, final String node) { - return manager.has(base.getName(), node, base.getWorld().getName()); + return super.hasPermission(base, node); } @Override diff --git a/Essentials/src/com/earth2me/essentials/perm/PermissionsHandler.java b/Essentials/src/com/earth2me/essentials/perm/PermissionsHandler.java index e1bf13d10..ab2332528 100644 --- a/Essentials/src/com/earth2me/essentials/perm/PermissionsHandler.java +++ b/Essentials/src/com/earth2me/essentials/perm/PermissionsHandler.java @@ -200,7 +200,8 @@ public class PermissionsHandler implements IPermissionsHandler { if (!(handler instanceof ConfigPermissionsHandler)) { - LOGGER.log(Level.INFO, "Essentials: Using config based permissions. Enable superperms in config."); + LOGGER.log(Level.INFO, "Essentials: Using config file enhanced permissions."); + LOGGER.log(Level.INFO, "Permissions listed in as player-commands will be given to all users."); handler = new ConfigPermissionsHandler(plugin); } } diff --git a/Essentials/src/com/earth2me/essentials/perm/SuperpermsHandler.java b/Essentials/src/com/earth2me/essentials/perm/SuperpermsHandler.java index aedd4c5ae..0b4b93058 100644 --- a/Essentials/src/com/earth2me/essentials/perm/SuperpermsHandler.java +++ b/Essentials/src/com/earth2me/essentials/perm/SuperpermsHandler.java @@ -31,25 +31,26 @@ public class SuperpermsHandler implements IPermissionsHandler } @Override - public boolean hasPermission(final Player base, final String node) + public boolean hasPermission(final Player base, String node) { - if (base.hasPermission("-" + node)) + String permCheck = node; + int index; + while (true) { - return false; - } - final String[] parts = node.split("\\."); - final StringBuilder builder = new StringBuilder(node.length()); - for (String part : parts) - { - builder.append('*'); - if (base.hasPermission(builder.toString())) + if (base.isPermissionSet(permCheck)) { - return true; + return base.hasPermission(permCheck); } - builder.deleteCharAt(builder.length() - 1); - builder.append(part).append('.'); + + index = node.lastIndexOf('.'); + if (index < 1) + { + return base.hasPermission("*"); + } + + node = node.substring(0, index); + permCheck = node + ".*"; } - return base.hasPermission(node); } @Override diff --git a/Essentials/src/com/earth2me/essentials/signs/EssentialsSign.java b/Essentials/src/com/earth2me/essentials/signs/EssentialsSign.java index f3faa2de0..e5f125cf8 100644 --- a/Essentials/src/com/earth2me/essentials/signs/EssentialsSign.java +++ b/Essentials/src/com/earth2me/essentials/signs/EssentialsSign.java @@ -438,11 +438,13 @@ public class EssentialsSign { private final transient SignChangeEvent event; private final transient Block block; + private final transient Sign sign; - public EventSign(final SignChangeEvent event) + EventSign(final SignChangeEvent event) { this.event = event; this.block = event.getBlock(); + this.sign = (Sign)block.getState(); } @Override @@ -455,6 +457,8 @@ public class EssentialsSign public final void setLine(final int index, final String text) { event.setLine(index, text); + sign.setLine(index, text); + updateSign(); } @Override @@ -466,6 +470,7 @@ public class EssentialsSign @Override public void updateSign() { + sign.update(); } } @@ -475,7 +480,7 @@ public class EssentialsSign private final transient Sign sign; private final transient Block block; - public BlockSign(final Block block) + BlockSign(final Block block) { this.block = block; this.sign = (Sign)block.getState(); diff --git a/Essentials/src/com/earth2me/essentials/signs/SignBlockListener.java b/Essentials/src/com/earth2me/essentials/signs/SignBlockListener.java index 162457baf..517c313cc 100644 --- a/Essentials/src/com/earth2me/essentials/signs/SignBlockListener.java +++ b/Essentials/src/com/earth2me/essentials/signs/SignBlockListener.java @@ -88,6 +88,16 @@ public class SignBlockListener implements Listener { event.setLine(i, Util.formatString(user, "essentials.signs", event.getLine(i))); } + + final String topLine = event.getLine(0); + for (Signs signs : Signs.values()) + { + final EssentialsSign sign = signs.getSign(); + if (topLine.equalsIgnoreCase(sign.getSuccessName())) + { + event.setLine(0, Util.stripFormat(topLine)); + } + } } @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) @@ -98,9 +108,8 @@ public class SignBlockListener implements Listener return; } - for (Signs signs : Signs.values()) + for (EssentialsSign sign : ess.getSettings().enabledSigns()) { - final EssentialsSign sign = signs.getSign(); if (event.getLine(0).equalsIgnoreCase(sign.getSuccessName())) { event.setCancelled(true); @@ -137,9 +146,8 @@ public class SignBlockListener implements Listener { return; } - for (Signs signs : Signs.values()) + for (EssentialsSign sign : ess.getSettings().enabledSigns()) { - final EssentialsSign sign = signs.getSign(); if (sign.getBlocks().contains(block.getType()) && !sign.onBlockPlace(block, event.getPlayer(), ess)) { diff --git a/Essentials/src/com/earth2me/essentials/signs/SignEnchant.java b/Essentials/src/com/earth2me/essentials/signs/SignEnchant.java index e1eb7825e..37203555c 100644 --- a/Essentials/src/com/earth2me/essentials/signs/SignEnchant.java +++ b/Essentials/src/com/earth2me/essentials/signs/SignEnchant.java @@ -21,11 +21,13 @@ public class SignEnchant extends EssentialsSign final String[] enchantLevel = sign.getLine(2).split(":"); if (enchantLevel.length != 2) { + sign.setLine(2, "§c"); throw new SignException(_("invalidSignLine", 3)); } final Enchantment enchantment = Enchantments.getByName(enchantLevel[0]); if (enchantment == null) { + sign.setLine(2, "§c"); throw new SignException(_("enchantmentNotFound")); } int level; @@ -35,6 +37,7 @@ public class SignEnchant extends EssentialsSign } catch (NumberFormatException ex) { + sign.setLine(2, "§c"); throw new SignException(ex.getMessage(), ex); } if (level < 1 || level > enchantment.getMaxLevel()) diff --git a/Essentials/src/com/earth2me/essentials/signs/SignFree.java b/Essentials/src/com/earth2me/essentials/signs/SignFree.java index 781cbd33b..b5dd3fa73 100644 --- a/Essentials/src/com/earth2me/essentials/signs/SignFree.java +++ b/Essentials/src/com/earth2me/essentials/signs/SignFree.java @@ -19,7 +19,14 @@ public class SignFree extends EssentialsSign @Override protected boolean onSignCreate(final ISign sign, final User player, final String username, final IEssentials ess) throws SignException { - getItemStack(sign.getLine(1), 1, ess); + try { + getItemStack(sign.getLine(1), 1, ess); + } + catch (SignException ex) + { + sign.setLine(1, "§c"); + throw new SignException(ex.getMessage(), ex); + } return true; } diff --git a/Essentials/src/com/earth2me/essentials/signs/SignKit.java b/Essentials/src/com/earth2me/essentials/signs/SignKit.java index aee1d7dea..1c3528a18 100644 --- a/Essentials/src/com/earth2me/essentials/signs/SignKit.java +++ b/Essentials/src/com/earth2me/essentials/signs/SignKit.java @@ -51,7 +51,7 @@ public class SignKit extends EssentialsSign final String kitName = sign.getLine(1).toLowerCase(Locale.ENGLISH).trim(); final String group = sign.getLine(2); if ((!group.isEmpty() && ("§2Everyone".equals(group) || player.inGroup(group))) - || (group.isEmpty() && (player.isAuthorized("essentials.kit." + kitName)))) + || (group.isEmpty() && (player.isAuthorized("essentials.kits." + kitName)))) { final Trade charge = getTrade(sign, 3, ess); charge.isAffordableFor(player); diff --git a/Essentials/src/com/earth2me/essentials/signs/SignRepair.java b/Essentials/src/com/earth2me/essentials/signs/SignRepair.java index 361cd4c55..7e76309f1 100644 --- a/Essentials/src/com/earth2me/essentials/signs/SignRepair.java +++ b/Essentials/src/com/earth2me/essentials/signs/SignRepair.java @@ -25,6 +25,7 @@ public class SignRepair extends EssentialsSign } else if (!repairTarget.equalsIgnoreCase("all") && !repairTarget.equalsIgnoreCase("hand") ) { + sign.setLine(1, "§c"); throw new SignException(_("invalidSignLine", 2)); } validateTrade(sign, 2, ess); diff --git a/Essentials/src/com/earth2me/essentials/signs/SignWarp.java b/Essentials/src/com/earth2me/essentials/signs/SignWarp.java index 76e8e730b..eb81ea4e1 100644 --- a/Essentials/src/com/earth2me/essentials/signs/SignWarp.java +++ b/Essentials/src/com/earth2me/essentials/signs/SignWarp.java @@ -1,6 +1,7 @@ package com.earth2me.essentials.signs; import com.earth2me.essentials.ChargeException; +import static com.earth2me.essentials.I18n._; import com.earth2me.essentials.IEssentials; import com.earth2me.essentials.Trade; import com.earth2me.essentials.User; @@ -22,8 +23,8 @@ public class SignWarp extends EssentialsSign if (warpName.isEmpty()) { - sign.setLine(1, "§dWarp name!"); - return false; + sign.setLine(1, "§c"); + throw new SignException(_("invalidSignLine", 1)); } else { @@ -52,7 +53,7 @@ public class SignWarp extends EssentialsSign if ((!group.isEmpty() && ("§2Everyone".equals(group) || player.inGroup(group))) - || (group.isEmpty() && (!ess.getSettings().getPerWarpPermission() || player.isAuthorized("essentials.warp." + warpName)))) + || (group.isEmpty() && (!ess.getSettings().getPerWarpPermission() || player.isAuthorized("essentials.warps." + warpName)))) { final Trade charge = getTrade(sign, 3, ess); try diff --git a/Essentials/src/com/earth2me/essentials/signs/SignWeather.java b/Essentials/src/com/earth2me/essentials/signs/SignWeather.java index 559fcc2e3..9be677143 100644 --- a/Essentials/src/com/earth2me/essentials/signs/SignWeather.java +++ b/Essentials/src/com/earth2me/essentials/signs/SignWeather.java @@ -29,6 +29,7 @@ public class SignWeather extends EssentialsSign sign.setLine(1, "§2Storm"); return true; } + sign.setLine(1, "§c"); throw new SignException(_("onlySunStorm")); } diff --git a/Essentials/src/com/earth2me/essentials/storage/AsyncStorageObjectHolder.java b/Essentials/src/com/earth2me/essentials/storage/AsyncStorageObjectHolder.java index b651dd40b..39ab28bd9 100644 --- a/Essentials/src/com/earth2me/essentials/storage/AsyncStorageObjectHolder.java +++ b/Essentials/src/com/earth2me/essentials/storage/AsyncStorageObjectHolder.java @@ -89,7 +89,7 @@ public abstract class AsyncStorageObjectHolder implemen private class StorageObjectDataWriter extends AbstractDelayedYamlFileWriter { - public StorageObjectDataWriter() + StorageObjectDataWriter() { super(ess, getStorageFile()); } @@ -112,7 +112,7 @@ public abstract class AsyncStorageObjectHolder implemen private class StorageObjectDataReader extends AbstractDelayedYamlFileReader { - public StorageObjectDataReader() + StorageObjectDataReader() { super(ess, getStorageFile(), clazz); } diff --git a/Essentials/src/com/earth2me/essentials/textreader/SimpleTextInput.java b/Essentials/src/com/earth2me/essentials/textreader/SimpleTextInput.java index a9f9e1480..57e599ff2 100644 --- a/Essentials/src/com/earth2me/essentials/textreader/SimpleTextInput.java +++ b/Essentials/src/com/earth2me/essentials/textreader/SimpleTextInput.java @@ -1,9 +1,6 @@ package com.earth2me.essentials.textreader; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Map; +import java.util.*; public class SimpleTextInput implements IText @@ -11,7 +8,7 @@ public class SimpleTextInput implements IText private final transient List lines = new ArrayList(); public SimpleTextInput (final String input) { - lines.add(input); + lines.addAll(Arrays.asList(input.split("\\n"))); } @Override diff --git a/Essentials/src/com/earth2me/essentials/textreader/SimpleTextPager.java b/Essentials/src/com/earth2me/essentials/textreader/SimpleTextPager.java index ea1b787d5..5376abbd2 100644 --- a/Essentials/src/com/earth2me/essentials/textreader/SimpleTextPager.java +++ b/Essentials/src/com/earth2me/essentials/textreader/SimpleTextPager.java @@ -1,5 +1,6 @@ package com.earth2me.essentials.textreader; +import java.util.List; import org.bukkit.command.CommandSender; @@ -20,7 +21,12 @@ public class SimpleTextPager } } - public String getString(int line) + public List getLines() + { + return text.getLines(); + } + + public String getLine(int line) { if (text.getLines().size() < line) { diff --git a/Essentials/src/com/earth2me/essentials/textreader/TextPager.java b/Essentials/src/com/earth2me/essentials/textreader/TextPager.java index 7b73f49ab..3242d7509 100644 --- a/Essentials/src/com/earth2me/essentials/textreader/TextPager.java +++ b/Essentials/src/com/earth2me/essentials/textreader/TextPager.java @@ -70,7 +70,7 @@ public class TextPager } for (int i = start; i < lines.size() && i < start + (onePage ? 20 : 9); i++) { - sender.sendMessage(lines.get(i)); + sender.sendMessage("§r" + lines.get(i)); } if (!onePage && page < pages && commandName != null) { @@ -137,7 +137,7 @@ public class TextPager } for (int i = start; i < end && i < start + (onePage ? 20 : 9); i++) { - sender.sendMessage(lines.get(i)); + sender.sendMessage("§r" + lines.get(i)); } if (!onePage && page < pages && commandName != null) { @@ -189,7 +189,7 @@ public class TextPager } for (int i = start; i < chapterend && i < start + (onePage ? 20 : 9); i++) { - sender.sendMessage(lines.get(i)); + sender.sendMessage("§r" + lines.get(i)); } if (!onePage && page < pages && commandName != null) { diff --git a/Essentials/src/config.yml b/Essentials/src/config.yml index 65a0773fd..9fa0f8c4c 100644 --- a/Essentials/src/config.yml +++ b/Essentials/src/config.yml @@ -8,15 +8,10 @@ # If you receive an error when Essentials loads, ensure that: # - No tabs are present: YAML only allows spaces # - Indents are correct: YAML hierarchy is based entirely on indentation -# - You have "escaped" all apostrophes in your text: If you want to write "don't", for example, write "don''t" instead (note the doubled apostrphe) -# - List items are prefixed with a hyphen and indented: -# lists: -# - look like this -# not: -# - like this +# - You have "escaped" all apostrophes in your text: If you want to write "don't", for example, write "don''t" instead (note the doubled apostrophe) # - Text with symbols is enclosed in single or double quotation marks -# - CraftBukkit and Permissions have been updated: CraftBukkit and Essentials almost always line up, but sometimes other plugins fall behind CraftBukkit's multiple daily updates -# - You have saved the document as UTF-8, NOT the default, ANSI + +# If you have problems join the Essentials help support channel: http://tiny.cc/EssentialsChat ############################################################ # +------------------------------------------------------+ # @@ -96,18 +91,20 @@ overridden-commands: disabled-commands: # - nick -# Restricted commands have been removed. -# Now we have a whitelist, all commands not on this list are only available to ops. -# These will have NO EFFECT if you have Permissions installed! -# They are here only if you want something simpler than Permissions. +# If you do not wish to use a permission system, you can define a list of 'player perms' below. +# This list has no effect if your using a supported permissions system. +# If your using an unsupported permissions system simply delete this section. +# Whitelist the commands and permissions you wish to give players by default (everything else is op only). # These are the permissions without the "essentials." part. player-commands: - afk + - afk.auto - back - back.ondeath - balance - balance.others - balancetop + - build - chat.color - chat.format - chat.shout @@ -138,8 +135,6 @@ player-commands: - near - pay - ping - - powertool - - powertooltoggle - protect - r - rules @@ -190,7 +185,7 @@ kits: dtools: delay: 10 items: - - 277 1 efficiency:1 + - 277 1 efficiency:1 durability:1 - 278 1 - 279:780 1 tools: @@ -206,7 +201,6 @@ kits: # To enable signs, remove # symbol. To disable all signs, comment/remove each sign. # Essentials Colored sign support will be enabled when any sign types are enabled. # Color is not an actual sign, its for enabling using color codes on signs, when the correct permissions are given. -# We recommend not enabling chest protection signs if you don't intend to use them, (or are using LWC/Lockette). enabledSigns: #- color @@ -226,9 +220,7 @@ enabledSigns: #- spawnmob #- repair #- time - #- weather - #- protection - + #- weather # How many times per second can Essentials signs be interacted with per player. # Values should be between 1-20, 20 being virtually no lag protection. @@ -254,16 +246,12 @@ debug: false # Set the locale for all messages # If you don't set this, the default locale of the server will be used. -# Don't forget to remove the # infront of the line +# Don't forget to remove the # in front of the line #locale: de_DE # Turn off god mode when people exit remove-god-on-disconnect: false -# Use the permission system of bukkit -# This only works if no other permission plugins are installed -use-bukkit-permissions: false - # Auto-AFK # After this timeout in seconds, the user will be set as afk. # Set to -1 for no timeout. @@ -285,11 +273,11 @@ freeze-afk-players: false disable-item-pickup-while-afk: false # Should we automatically remove afk status when the player moves? -# Player will be removed from afk on chat/command reguardless of this setting. +# Player will be removed from afk on chat/command regardless of this setting. # Disable this to reduce server lag. cancel-afk-on-move: true -# You can disable the death messages of minecraft here +# You can disable the death messages of Minecraft here death-messages: true # Add worlds to this list, if you want to automatically disable god mode there @@ -299,17 +287,17 @@ no-god-in-worlds: # Set to true to enable per-world permissions for teleporting between worlds with essentials commands # This applies to /world, /back, /tp[a|o][here|all], but not warps. # Give someone permission to teleport to a world with essentials.worlds. -# This does not effect the /home command, there is a seperate toggle below for this. +# This does not effect the /home command, there is a separate toggle below for this. world-teleport-permissions: false # The number of items given if the quantity parameter is left out in /item or /give. -# If this number is below 1, the maximum stack size size is given. If oversized stacks -# is not enabled, any number higher then the maximum stack size results in more than one stack. +# If this number is below 1, the maximum stack size size is given. If over-sized stacks +# are not enabled, any number higher then the maximum stack size results in more than one stack. default-stack-size: -1 -# Oversized stacks are stacks that ignore the normal max stacksize. +# Over-sized stacks are stacks that ignore the normal max stack size. # They can be obtained using /give and /item, if the player has essentials.oversizedstacks permission. -# How many items should be in an oversized stack? +# How many items should be in an over-sized stack? oversized-stacksize: 64 # Allow repair of enchanted weapons and armor. @@ -369,7 +357,7 @@ starting-balance: 0 # These are now defined in worth.yml # Defines the cost to use the given commands PER USE -# Some commands like /repair have subcosts, check the wiki for more information. +# Some commands like /repair have sub-costs, check the wiki for more information. command-costs: # /example costs $1000 PER USE #example: 1000 @@ -564,15 +552,15 @@ protect: storm: false thunder: false lightning: false - + ############################################################ # +------------------------------------------------------+ # # | EssentialsAntiBuild | # # +------------------------------------------------------+ # ############################################################ - + # Disable various default physics and behaviors - + # Should people with build: false in permissions be allowed to build # Set true to disable building for those people # Setting to false means EssentialsAntiBuild will never prevent you from building @@ -585,7 +573,7 @@ protect: # Should we tell people they are not allowed to build warn-on-build-disallow: true - + # For which block types would you like to be alerted? # You can find a list of IDs in plugins/Essentials/items.csv after loading Essentials for the first time. # 10 = lava :: 11 = still lava :: 46 = TNT :: 327 = lava bucket @@ -624,7 +612,7 @@ newbies: # When we spawn for the first time, which spawnpoint do we use? # Set to "none" if you want to use the spawn point of the world. spawnpoint: newbies - + # Do we want to give users anything on first join? Set to '' to disable # This kit will be given regardless of cost, and permissions. #kit: '' diff --git a/Essentials/src/info.txt b/Essentials/src/info.txt index cfc037040..965780a15 100644 --- a/Essentials/src/info.txt +++ b/Essentials/src/info.txt @@ -25,28 +25,30 @@ when he does not select a chapter. #Colors Minecraft colors: -&0 &&0 &1 &&1 &2 &&2 &3 &&3 -&4 &&4 &5 &&5 &6 &&6 &7 &&7 -&8 &&8 &9 &&9 &a &&a &b &&b -&c &&c &d &&d &e &&e &f &&f -&&k &k Magic! +&0 &&0 &1 &&1 &2 &&2 &3 &&3 +&4 &&4 &5 &&5 &6 &&6 &7 &&7 +&8 &&8 &9 &&9 &a &&a &b &&b +&c &&c &d &&d &e &&e &f &&f + +&&k &k Magic!&r &&l &l Bold! +&&m &m Strike!&r &&n &n Underline! +&&o &o Italic!&r &&r &r reset format codes! #Tags -PLAYER: {PLAYER} -USERNAME: {PLAYER} -IP: {IP} -ADDRESS: {ADDRESS} -BALANCE: {BALANCE} -MAILS: {MAILS} -WORLD: {WORLD} -WORLDS: {WORLDS} -ONLINE: {ONLINE} -UNIQUE: {UNIQUE} -PLAYERLIST: {PLAYERLIST} -TIME: {TIME} -DATE: {DATE} -WORLDTIME12: {WORLDTIME12} -WORLDTIME24: {WORLDTIME24} -WORLDDATE: {WORLDDATE} -PLUGINS: {PLUGINS} -VERSION: {VERSION} \ No newline at end of file +&6Player name:&r {PLAYER} +&6IP:&r {IP} +&6Address:&r {ADDRESS} +&6Balance:&r {BALANCE} +&6Unread mails:&r {MAILS} +&6Current world:&r {WORLD} +&6Worlds list:&r {WORLDS} +&6Number of online players:&r {ONLINE} +&6Number of unique players who joined the server:&r {UNIQUE} +&6Player list:&r {PLAYERLIST} +&6Time of server:&r {TIME} +&6Date of server:&r {DATE} +&6Time of world PM/AM:&r {WORLDTIME12} +&6Time of world:&r {WORLDTIME24} +&6Date of world:&r {WORLDDATE} +&6Plugin list:&r {PLUGINS} +&6Version of Craftbukkit:&r {VERSION} \ No newline at end of file diff --git a/Essentials/src/items.csv b/Essentials/src/items.csv index ecb3e816f..a3d6ca91b 100644 --- a/Essentials/src/items.csv +++ b/Essentials/src/items.csv @@ -1,4 +1,4 @@ -#version: teamcity +#version: TeamCity #If you change this file, it will not be automatically updated after the next release, #item,id,metadata stone,1,0 @@ -1587,7 +1587,9 @@ tdoor,96,0 doort,96,0 trapd,96,0 dtrap,96,0 +monsteregg,97,0 silverfish,97,0 +monsteregg,97,0 monstereggsmoothstone,97,0 monstereggsstone,97,0 meggsmoothstone,97,0 @@ -3396,6 +3398,7 @@ sign,323,0 woodendoor,324,0 wooddoor,324,0 wdoor,324,0 +door,324,0 bucket,325,0 bukkit,325,0 waterbucket,326,0 @@ -3945,14 +3948,98 @@ waterbottle,373,0 fullbottle,373,0 watervase,373,0 fullvase,373,0 +clearpotion,373,6 +clearpot,373,6 +clearextendedpotion,373,7 +clearexpotion,373,7 +clear2potion,373,7 +clearextendedpot,373,7 +clearexpot,373,7 +clear2pot,373,7 +diffusepotion,373,11 +diffusepot,373,11 +artlesspotion,373,13 +artlesspot,373,13 +thinpotion,373,14 +thinpot,373,14 +thinextendedpotion,373,15 +thinexpotion,373,15 +thin2potion,373,15 +thinextendedpot,373,15 +thinexpot,373,15 +thin2pot,373,15 awkwardpotion,373,16 awkwardpot,373,16 +bunglingpotion,373,22 +bunglingpot,373,22 +bunglingextendedpotion,373,23 +bunglingexpotion,373,23 +bungling2potion,373,23 +bunglingextendedpot,373,23 +bunglingexpot,373,23 +bungling2pot,373,23 +smoothpotion,373,27 +smoothpot,373,27 +suavepotion,373,29 +suavepot,373,29 +debonairpotion,373,30 +debonairpot,373,30 +debonairextendedpotion,373,31 +debonairexpotion,373,31 +debonair2potion,373,31 +debonairextendedpot,373,31 +debonairexpot,373,31 +debonair2pot,373,31 thickpotion,373,32 thickpot,373,32 -mundaneexpotion,373,64 +charmingpotion,373,38 +charmingpot,373,38 +charmingextendedpotion,373,39 +charmingexpotion,373,39 +charming2potion,373,39 +charmingextendedpot,373,39 +charmingexpot,373,39 +charming2pot,373,39 +refinedpotion,373,43 +refinedpot,373,43 +cordialpotion,373,45 +cordialpot,373,45 +sparklingpotion,373,46 +sparklingpot,373,46 +sparklingextendedpotion,373,47 +sparklingexpotion,373,47 +sparkling2potion,373,47 +sparklingextendedpot,373,47 +sparklingexpot,373,47 +sparkling2pot,373,47 +potentpotion,373,48 +potentpot,373,48 +rankpotion,373,54 +rankpot,373,54 +rankextendedpotion,373,55 +rankexpotion,373,55 +rank2potion,373,55 +rankextendedpot,373,55 +rankexpot,373,55 +rank2pot,373,55 +acridpotion,373,59 +acridpot,373,59 +grosspotion,373,61 +grosspot,373,61 +stinkypotion,373,62 +stinkypot,373,62 +stinkyextendedpotion,373,63 +stinkyexpotion,373,63 +stinky2potion,373,63 +stinkyextendedpot,373,63 +stinkyexpot,373,63 +stinky2pot,373,63 mundaneextendedpotion,373,64 -mundaneexpot,373,64 +mundaneexpotion,373,64 +mundane2potion,373,64 mundaneextendedpot,373,64 +mundaneexpot,373,64 +mundane2pot,373,64 mundanepotion,373,8192 mundanepot,373,8192 regenerationpotion,373,8193 @@ -3964,8 +4051,10 @@ regenpot,373,8193 rpot,373,8193 swiftnesspotion,373,8194 swiftpotion,373,8194 +speedpotion,373,8194 swiftnesspot,373,8194 swiftpot,373,8194 +speedpot,373,8194 swpot,373,8194 fireresistancepotion,373,8195 fireresistpotion,373,8195 @@ -3997,7 +4086,7 @@ strpotion,373,8201 strengthpot,373,8201 strongpot,373,8201 strpot,373,8201 -spot,373,8201 +stpot,373,8201 slownesspotion,373,8202 slowpotion,373,8202 slownesspot,373,8202 @@ -4031,16 +4120,22 @@ regeniipot,373,8225 r2pot,373,8225 swiftnessleveliipotion,373,8226 swiftleveliipotion,373,8226 +speedleveliipotion,373,8226 swiftnesslevel2potion,373,8226 swiftlevel2potion,373,8226 +speedlevel2potion,373,8226 swiftnessiipotion,373,8226 swiftiipotion,373,8226 +speediipotion,373,8226 swiftnessleveliipot,373,8226 swiftleveliipot,373,8226 +speedleveliipot,373,8226 swiftnesslevel2pot,373,8226 swiftlevel2pot,373,8226 +speedlevel2pot,373,8226 swiftnessiipot,373,8226 swiftiipot,373,8226 +speediipot,373,8226 sw2pot,373,8226 posionleveliipotion,373,8228 acidleveliipotion,373,8228 @@ -4086,7 +4181,7 @@ strlevel2pot,373,8233 strengthiipot,373,8233 strongiipot,373,8233 striipot,373,8233 -s2pot,373,8233 +st2pot,373,8233 harmingleveliipotion,373,8236 damageleveliipotion,373,8236 dmgleveliipotion,373,8236 @@ -4121,12 +4216,16 @@ regenexpot,373,8257 repot,373,8257 swiftnessextendedpotion,373,8258 swiftextendedpotion,373,8258 +speedextendedpotion,373,8258 swiftnessexpotion,373,8258 swiftexpotion,373,8258 +speedexpotion,373,8258 swiftnessextendedpot,373,8258 swiftextendedpot,373,8258 +speedextendedpot,373,8258 swiftnessexpot,373,8258 swiftexpot,373,8258 +speedexpot,373,8258 swepot,373,8258 fireresistanceextendedpotion,373,8259 fireresistextendedpotion,373,8259 @@ -4171,7 +4270,7 @@ strextendedpot,373,8265 strengthexpot,373,8265 strongexpot,373,8265 strexpot,373,8265 -sepot,373,8265 +stepot,373,8265 slownessextendedpotion,373,8266 slowextenedpotion,373,8266 slownessexpotion,373,8266 @@ -4184,19 +4283,37 @@ slepot,373,8266 regenerationdualbitpotion,373,8289 regeneratedualbitpotion,373,8289 regendualbitpotion,373,8289 +regenerationdbpotion,373,8289 +regeneratedbpotion,373,8289 +regendbpotion,373,8289 regenerationdualbitpot,373,8289 regeneratedualbitpot,373,8289 regendualbitpot,373,8289 +regenerationdbpot,373,8289 +regeneratedbpot,373,8289 +regendbpot,373,8289 rdbpot,373,8289 swiftnessdualbitpotion,373,8290 swiftdualbitpotion,373,8290 +speeddualbitpotion,373,8290 swiftnessdualbitpot,373,8290 swiftdualbitpot,373,8290 +speeddualbitpot,373,8290 +swiftnessdbpotion,373,8290 +swiftdbpotion,373,8290 +speeddbpotion,373,8290 +swiftnessdbpot,373,8290 +swiftdbpot,373,8290 +speeddbpot,373,8290 swdbpot,373,8290 poisondualbitpotion,373,8292 aciddualbitpotion,373,8292 poisondualbitpot,373,8292 aciddualbitpot,373,8292 +poisondbpotion,373,8292 +aciddbpotion,373,8292 +poisondbpot,373,8292 +aciddbpot,373,8292 pdbpot,373,8292 strengthdualbitpotion,373,8297 strongdualbitpotion,373,8297 @@ -4204,7 +4321,13 @@ strdualbitpotion,373,8297 strengthdualbitpot,373,8297 strongdualbitpot,373,8297 strdualbitpot,373,8297 -sdbpot,373,8297 +strengthdbpotion,373,8297 +strongdbpotion,373,8297 +strdbpotion,373,8297 +strengthdbpot,373,8297 +strongdbpot,373,8297 +strdbpot,373,8297 +stdbpot,373,8297 splashmundanepotion,373,16384 splmundanepotion,373,16384 splashregenerationpotion,373,16385 @@ -4225,12 +4348,16 @@ splregenpot,373,16385 sprpot,373,16385 splashswiftnesspotion,373,16386 splashswiftpotion,373,16386 +splashspeedpotion,373,16386 splashswiftnesspot,373,16386 splashswiftpot,373,16386 +splashspeedpot,373,16386 splswiftnesspotion,373,16386 splswiftpotion,373,16386 +splspeedpotion,373,16386 splswiftnesspot,373,16386 splswiftpot,373,16386 +splspeedpot,373,16386 spswpot,373,16386 splashfireresistancepotion,373,16387 splashfireresistpotion,373,16387 @@ -4267,6 +4394,22 @@ splhealingpot,373,16389 splhealpot,373,16389 spllifepot,373,16389 sphpot,373,16389 +splashclearpotion,373,16390 +splashclearpot,373,16390 +splclearpotion,373,16390 +splclearpot,373,16390 +splashclearextendedpotion,373,16391 +splashclearexpotion,373,16391 +splashclear2potion,373,16391 +splashclearextendedpot,373,16391 +splashclearexpot,373,16391 +splashclear2pot,373,16391 +splclearextendedpotion,373,16391 +splclearexpotion,373,16391 +splclear2potion,373,16391 +splclearextendedpot,373,16391 +splclearexpot,373,16391 +splclear2pot,373,16391 splashweaknesspotion,373,16392 splashweakpotion,373,16392 splashweaknesspot,373,16392 @@ -4288,7 +4431,7 @@ splstrpotion,373,16393 splstrengthpot,373,16393 splstrongpot,373,16393 splstrpot,373,16393 -spspot,373,16393 +spstpot,373,16393 splashslownesspotion,373,16394 splashslowpotion,373,16394 splashslownesspot,373,16394 @@ -4298,13 +4441,16 @@ splslowpotion,373,16394 splslownesspot,373,16394 splslowpot,373,16394 spslpot,373,16394 +splashdiffusepotion,373,16395 +splashdiffusepot,373,16395 +spldiffusepotion,373,16395 +spldiffusepot,373,16395 splashharmingpotion,373,16396 splashdamagepotion,373,16396 splashdmgpotion,373,16396 splashharmingpot,373,16396 splashdamagepot,373,16396 splashdmgpot,373,16396 -dmgsplashpot,373,16396 splharmingpotion,373,16396 spldamagepotion,373,16396 spldmgpotion,373,16396 @@ -4312,6 +4458,74 @@ splharmingpot,373,16396 spldamagepot,373,16396 spldmgpot,373,16396 spdpot,373,16396 +splashartlesspotion,373,16397 +splashartlesspot,373,16397 +splartlesspotion,373,16397 +splartlesspot,373,16397 +splashthinpotion,373,16398 +splashthinpot,373,16398 +splthinpotion,373,16398 +splthinpot,373,16398 +splashthinextendedpotion,373,16399 +splashthinexpotion,373,16399 +splashthin2potion,373,16399 +splashthinextendedpot,373,16399 +splashthinexpot,373,16399 +splashthin2pot,373,16399 +splthinextendedpotion,373,16399 +splthinexpotion,373,16399 +splthin2potion,373,16399 +splthinextendedpot,373,16399 +splthinexpot,373,16399 +splthin2pot,373,16399 +splashawkwardpotion,373,16400 +splashawkwardpot,373,16400 +splawkwardpotion,373,16400 +splawkwardpot,373,16400 +splashbunglingpotion,373,16406 +splashbunglingpot,373,16406 +splbunglingpotion,373,16406 +splbunglingpot,373,16406 +splashbunglingextendedpotion,373,16407 +splashbunglingexpotion,373,16407 +splashbungling2potion,373,16407 +splashbunglingextendedpot,373,16407 +splashbunglingexpot,373,16407 +splashbungling2pot,373,16407 +splbunglingextendedpotion,373,16407 +splbunglingexpotion,373,16407 +splbungling2potion,373,16407 +splbunglingextendedpot,373,16407 +splbunglingexpot,373,16407 +splbungling2pot,373,16407 +splashsmoothpotion,373,16411 +splashsmoothpot,373,16411 +splsmoothpotion,373,16411 +splsmoothpot,373,16411 +splashsuavepotion,373,16413 +splashsuavepot,373,16413 +splsuavepotion,373,16413 +splsuavepot,373,16413 +splashdebonairpotion,373,16414 +splashdebonairpot,373,16414 +spldebonairpotion,373,16414 +spldebonairpot,373,16414 +splashdebonairextendedpotion,373,16415 +splashdebonairexpotion,373,16415 +splashdebonair2potion,373,16415 +splashdebonairextendedpot,373,16415 +splashdebonairexpot,373,16415 +splashdebonair2pot,373,16415 +spldebonairextendedpotion,373,16415 +spldebonairexpotion,373,16415 +spldebonair2potion,373,16415 +spldebonairextendedpot,373,16415 +spldebonairexpot,373,16415 +spldebonair2pot,373,16415 +splashthickpotion,373,16416 +splashthickpot,373,16416 +splthickpotion,373,16416 +splthickpot,373,16416 splashregenerationleveliipotion,373,16417 splashregenerateleveliipotion,373,16417 splashregenleveliipotion,373,16417 @@ -4351,28 +4565,40 @@ splregeniipot,373,16417 spr2pot,373,16417 splashswiftnessleveliipotion,373,16418 splashswiftleveliipotion,373,16418 +splashspeedleveliipotion,373,16418 splashswiftnesslevel2potion,373,16418 splashswiftlevel2potion,373,16418 +splashspeedlevel2potion,373,16418 splashswiftnessiipotion,373,16418 splashswiftiipotion,373,16418 +splashspeediipotion,373,16418 splashswiftnessleveliipot,373,16418 splashswiftleveliipot,373,16418 +splashspeedleveliipot,373,16418 splashswiftnesslevel2pot,373,16418 splashswiftlevel2pot,373,16418 +splashspeedlevel2pot,373,16418 splashswiftnessiipot,373,16418 splashswiftiipot,373,16418 +splashspeediipot,373,16418 splswiftnessleveliipotion,373,16418 splswiftleveliipotion,373,16418 +splspeedleveliipotion,373,16418 splswiftnesslevel2potion,373,16418 splswiftlevel2potion,373,16418 +splspeedlevel2potion,373,16418 splswiftnessiipotion,373,16418 splswiftiipotion,373,16418 +splspeediipotion,373,16418 splswiftnessleveliipot,373,16418 splswiftleveliipot,373,16418 +splspeedleveliipot,373,16418 splswiftnesslevel2pot,373,16418 splswiftlevel2pot,373,16418 +splspeedlevel2pot,373,16418 splswiftnessiipot,373,16418 splswiftiipot,373,16418 +splspeediipot,373,16418 spsw2pot,373,16418 splashposionleveliipotion,373,16420 splashacidleveliipotion,373,16420 @@ -4424,6 +4650,22 @@ splheallevel2pot,373,16421 splhealingiipot,373,16421 splhealiipot,373,16421 sph2pot,373,16421 +splashcharmingpotion,373,16422 +splashcharmingpot,373,16422 +splcharmingpotion,373,16422 +splcharmingpot,373,16422 +splashcharmingextendedpotion,373,16423 +splashcharmingexpotion,373,16423 +splashcharming2potion,373,16423 +splashcharmingextendedpot,373,16423 +splashcharmingexpot,373,16423 +splashcharming2pot,373,16423 +splcharmingextendedpotion,373,16423 +splcharmingexpotion,373,16423 +splcharming2potion,373,16423 +splcharmingextendedpot,373,16423 +splcharmingexpot,373,16423 +splcharming2pot,373,16423 splashstrengthleveliipotion,373,16425 splashstrongleveliipotion,373,16425 splashstrleveliipotion,373,16425 @@ -4460,7 +4702,11 @@ splstrlevel2pot,373,16425 splstrengthiipot,373,16425 splstrongiipot,373,16425 splstriipot,373,16425 -sps2pot,373,16425 +spst2pot,373,16425 +splashrefinedpotion,373,16427 +splashrefinedpot,373,16427 +splrefinedpotion,373,16427 +splrefinedpot,373,16427 splashharmingleveliipotion,373,16428 splashdamageleveliipotion,373,16428 splashdmgleveliipotion,373,16428 @@ -4498,6 +4744,82 @@ splharmingiipot,373,16428 spldamageiipot,373,16428 spldmgiipot,373,16428 spd2pot,373,16428 +splashcordialpotion,373,16429 +splashcordialpot,373,16429 +splcordialpotion,373,16429 +splcordialpot,373,16429 +splashsparklingpotion,373,16430 +splashsparklingpot,373,16430 +splsparklingpotion,373,16430 +splsparklingpot,373,16430 +splashsparklingextendedpotion,373,16431 +splashsparklingexpotion,373,16431 +splashsparkling2potion,373,16431 +splashsparklingextendedpot,373,16431 +splashsparklingexpot,373,16431 +splashsparkling2pot,373,16431 +splsparklingextendedpotion,373,16431 +splsparklingexpotion,373,16431 +splsparkling2potion,373,16431 +splsparklingextendedpot,373,16431 +splsparklingexpot,373,16431 +splsparkling2pot,373,16431 +splashpotentpotion,373,16432 +splashpotentpot,373,16432 +splpotentpotion,373,16432 +splpotentpot,373,16432 +splashrankpotion,373,16438 +splashrankpot,373,16438 +splrankpotion,373,16438 +splrankpot,373,16438 +splashrankextendedpotion,373,16439 +splashrankexpotion,373,16439 +splashrank2potion,373,16439 +splashrankextendedpot,373,16439 +splashrankexpot,373,16439 +splashrank2pot,373,16439 +splrankextendedpotion,373,16439 +splrankexpotion,373,16439 +splrank2potion,373,16439 +splrankextendedpot,373,16439 +splrankexpot,373,16439 +splrank2pot,373,16439 +splashacridpotion,373,16443 +splashacridpot,373,16443 +splacridpotion,373,16443 +splacridpot,373,16443 +splashgrosspotion,373,16445 +splashgrosspot,373,16445 +splgrosspotion,373,16445 +splgrosspot,373,16445 +splashstinkypotion,373,16446 +splashstinkypot,373,16446 +splstinkypotion,373,16446 +splstinkypot,373,16446 +splashstinkyextendedpotion,373,16447 +splashstinkyexpotion,373,16447 +splashstinky2potion,373,16447 +splashstinkyextendedpot,373,16447 +splashstinkyexpot,373,16447 +splashstinky2pot,373,16447 +splstinkyextendedpotion,373,16447 +splstinkyexpotion,373,16447 +splstinky2potion,373,16447 +splstinkyextendedpot,373,16447 +splstinkyexpot,373,16447 +splstinky2pot,373,16447 +splashmundaneextendedpotion,373,16448 +splashmundaneexpotion,373,16448 +splashmundane2potion,373,16448 +splashmundaneextendedpot,373,16448 +splashmundaneexpot,373,16448 +splashmundane2pot,373,16448 +splmundaneextendedpotion,373,16448 +splmundaneexpotion,373,16448 +splmundane2potion,373,16448 +splmundaneextendedpot,373,16448 +splmundaneexpot,373,16448 +splmundane2pot,373,16448 splashregenerationextendedpotion,373,16449 splashregenerateextendedpotion,373,16449 splashregenextendepotion,373,16449 @@ -4525,20 +4847,28 @@ splregenexpot,373,16449 sprepot,373,16449 splashswiftnessextendedpotion,373,16450 splashswiftextendedpotion,373,16450 +splashspeedextendedpotion,373,16450 splashswiftnessexpotion,373,16450 splashswiftexpotion,373,16450 +splashspeedexpotion,373,16450 splashswiftnessextendedpot,373,16450 splashswiftextendedpot,373,16450 +splashspeedextendedpot,373,16450 splashswiftnessexpot,373,16450 splashswiftexpot,373,16450 +splashspeedexpot,373,16450 splswiftnessextendedpotion,373,16450 splswiftextendedpotion,373,16450 +splspeedextendedpotion,373,16450 splswiftnessexpotion,373,16450 splswiftexpotion,373,16450 +splspeedexpotion,373,16450 splswiftnessextendedpot,373,16450 splswiftextendedpot,373,16450 +splspeedextendedpot,373,16450 splswiftnessexpot,373,16450 splswiftexpot,373,16450 +splspeedexpot,373,16450 spswepot,373,16450 splashfireresistanceextendedpotion,373,16451 splashfireresistextendedpotion,373,16451 @@ -4623,7 +4953,7 @@ splstrextendedpot,373,16457 splstrengthexpot,373,16457 splstrongexpot,373,16457 splstrexpot,373,16457 -spsepot,373,16457 +spstepot,373,16457 splashslownessextendedpotion,373,16458 splashslowextenedpotion,373,16458 splashslownessexpotion,373,16458 @@ -4653,15 +4983,43 @@ splregendualbitpotion,373,16481 splregenerationdualbitpot,373,16481 splregeneratedualbitpot,373,16481 splregendualbitpot,373,16481 +splashregenerationdbpotion,373,16481 +splashregeneratedbpotion,373,16481 +splashregendbpotion,373,16481 +splashregenerationdbpot,373,16481 +splashregeneratedbpot,373,16481 +splashregendbpot,373,16481 +splregenerationdbpotion,373,16481 +splregeneratedbpotion,373,16481 +splregendbpotion,373,16481 +splregenerationdbpot,373,16481 +splregeneratedbpot,373,16481 +splregendbpot,373,16481 sprdbpot,373,16481 splashswiftnessdualbitpotion,373,16482 splashswiftdualbitpotion,373,16482 +splashspeeddualbitpotion,373,16482 splashswiftnessdualbitpot,373,16482 splashswiftdualbitpot,373,16482 +splashspeeddualbitpot,373,16482 splswiftnessdualbitpotion,373,16482 splswiftdualbitpotion,373,16482 +splspeeddualbitpotion,373,16482 splswiftnessdualbitpot,373,16482 splswiftdualbitpot,373,16482 +splspeeddualbitpot,373,16482 +splashswiftnessdbpotion,373,16482 +splashswiftdbpotion,373,16482 +splashspeeddbpotion,373,16482 +splashswiftnessdbpot,373,16482 +splashswiftdbpot,373,16482 +splashspeeddbpot,373,16482 +splswiftnessdbpotion,373,16482 +splswiftdbpotion,373,16482 +splspeeddbpotion,373,16482 +splswiftnessdbpot,373,16482 +splswiftdbpot,373,16482 +splspeeddbpot,373,16482 spswdbpot,373,16482 splashpoisondualbitpotion,373,16484 splashaciddualbitpotion,373,16484 @@ -4671,6 +5029,14 @@ splpoisondualbitpotion,373,16484 splaciddualbitpotion,373,16484 splpoisondualbitpot,373,16484 splaciddualbitpot,373,16484 +splashpoisondbpotion,373,16484 +splashaciddbpotion,373,16484 +splashpoisondbpot,373,16484 +splashaciddbpot,373,16484 +splpoisondbpotion,373,16484 +splaciddbpotion,373,16484 +splpoisondbpot,373,16484 +splaciddbpot,373,16484 sppdbpot,373,16484 splashstrengthdualbitpotion,373,16489 splashstrongdualbitpotion,373,16489 @@ -4684,7 +5050,19 @@ splstrdualbitpotion,373,16489 splstrengthdualbitpot,373,16489 splstrongdualbitpot,373,16489 splstrdualbitpot,373,16489 -spsdbpot,373,16489 +splashstrengthdbpotion,373,16489 +splashstrongdbpotion,373,16489 +splashstrdbpotion,373,16489 +splashstrengthdbpot,373,16489 +splashstrongdbpot,373,16489 +splashstrdbpot,373,16489 +splstrengthdbpotion,373,16489 +splstrongdbpotion,373,16489 +splstrdbpotion,373,16489 +splstrengthdbpot,373,16489 +splstrongdbpot,373,16489 +splstrdbpot,373,16489 +spstdbpot,373,16489 glassbottle,374,0 bottle,374,0 gbottle,374,0 diff --git a/Essentials/src/messages.properties b/Essentials/src/messages.properties index f46a42314..4852f2bef 100644 --- a/Essentials/src/messages.properties +++ b/Essentials/src/messages.properties @@ -28,7 +28,7 @@ banIpAddress=\u00a76Banned IP address bigTreeFailure=\u00a74Big tree generation failure. Try again on grass or dirt. bigTreeSuccess= \u00a76Big tree spawned. blockList=\u00a76Essentials relayed the following commands to another plugin: -broadcast=\u00a76[\u00a74Broadcast\u00a76]\u00a7a {0} +broadcast=\u00a7r\u00a76[\u00a74Broadcast\u00a76]\u00a7a {0} buildAlert=\u00a74You are not permitted to build bukkitFormatChanged=Bukkit version format changed. Version not checked. burnMsg=\u00a76You set\u00a7c {0} \u00a76on fire for\u00a7c {1} seconds\u00a76. @@ -105,8 +105,6 @@ flying=flying foreverAlone=\u00a74You have nobody to whom you can reply. freedMemory=Freed {0} MB. gameMode=\u00a76Set game mode\u00a7c {0} \u00a76for {1}\u00a76. -gcchunks= chunks, -gcentities= entities gcfree=\u00a76Free memory:\u00a7c {0} MB gcmax=\u00a76Maximum memory:\u00a7c {0} MB gctotal=\u00a76Allocated memory:\u00a7c {0} MB @@ -456,3 +454,7 @@ distance=\u00a76Distance: {0} giveSpawn=\u00a76Giving\u00a7c {0} \u00a76of\u00a7c {1} to\u00a7c {2}\u00a76. warpList={0} uptime=\u00a76Uptime:\u00a7c {0} +antiBuildCraft=\u00a74You are not permitted to create\u00a7c {0}\u00a74. +antiBuildDrop=\u00a74You are not permitted to drop\u00a7c {0}\u00a74. +gcWorld=\u00a76{0} "\u00a7c{1}\u00a76": \u00a7c{2}\u00a76 chunks, \u00a7c{3}\u00a76 entities +invalidHomeName=\u00a74Invalid home name diff --git a/Essentials/src/messages_cs.properties b/Essentials/src/messages_cs.properties index 9c05f7aba..26e039001 100644 --- a/Essentials/src/messages_cs.properties +++ b/Essentials/src/messages_cs.properties @@ -108,8 +108,6 @@ flying=flying foreverAlone=\u00a7cNemas komu odepsat. freedMemory=Uvolneno {0} MB. gameMode=\u00a77Nastavil jsi herni mod z {0} na {1}. -gcchunks= chunky, -gcentities= entity gcfree=Volna pamet: {0} MB gcmax=Dostupna pamet: {0} MB gctotal=Vyuzita pamet: {0} MB @@ -459,3 +457,7 @@ distance=\u00a76Distance: {0} giveSpawn=\u00a76Giving\u00a7c {0} \u00a76of\u00a7c {1} to\u00a7c {2}\u00a76. warpList={0} uptime=\u00a76Uptime:\u00a7c {0} +antiBuildCraft=\u00a74You are not permitted to create\u00a7c {0}\u00a74. +antiBuildDrop=\u00a74You are not permitted to drop\u00a7c {0}\u00a74. +gcWorld=\u00a76{0} "\u00a7c{1}\u00a76": \u00a7c{2}\u00a76 chunks, \u00a7c{3}\u00a76 entities +invalidHomeName=\u00a74Invalid home name diff --git a/Essentials/src/messages_da.properties b/Essentials/src/messages_da.properties index 10794e3ef..9419ad45e 100644 --- a/Essentials/src/messages_da.properties +++ b/Essentials/src/messages_da.properties @@ -105,8 +105,6 @@ flying=flying foreverAlone=\u00a7cDu har ingen til hvem du kan svare. freedMemory=Frigjorde {0} MB. gameMode=\u00a77Satte game mode {0} for {1}. -gcchunks= chunks, -gcentities= entities gcfree=Free memory: {0} MB gcmax=Maximum memory: {0} MB gctotal=Allocated memory: {0} MB @@ -456,3 +454,7 @@ distance=\u00a76Distance: {0} giveSpawn=\u00a76Giving\u00a7c {0} \u00a76of\u00a7c {1} to\u00a7c {2}\u00a76. warpList={0} uptime=\u00a76Uptime:\u00a7c {0} +antiBuildCraft=\u00a74You are not permitted to create\u00a7c {0}\u00a74. +antiBuildDrop=\u00a74You are not permitted to drop\u00a7c {0}\u00a74. +gcWorld=\u00a76{0} "\u00a7c{1}\u00a76": \u00a7c{2}\u00a76 chunks, \u00a7c{3}\u00a76 entities +invalidHomeName=\u00a74Invalid home name diff --git a/Essentials/src/messages_de.properties b/Essentials/src/messages_de.properties index 312647887..90e373b33 100644 --- a/Essentials/src/messages_de.properties +++ b/Essentials/src/messages_de.properties @@ -105,8 +105,6 @@ flying=flying foreverAlone=\u00a7cDu hast niemanden, dem du antworten kannst. freedMemory={0} MB frei gemacht. gameMode=\u00a77Set game mode {0} for {1}. -gcchunks= Chunks, -gcentities= Einheiten gcfree=Freier Speicher: {0} MB gcmax=Maximaler Speicher: {0} MB gctotal=Reservierter Speicher: {0} MB @@ -232,7 +230,7 @@ nickChanged=Nickname ge\u00e4ndert. nickDisplayName=\u00a77Du musst \u00a7fchange-displayname\u00a7c in der Essentials-Config aktivieren. nickInUse=\u00a7cDieser Name wird bereits verwendet. nickNamesAlpha=\u00a7cNicknamen d\u00fcrfen nur alphanumerische Zeichen enthalten. -nickNoMore=\u00a7Du hast keinen Nicknamen mehr. +nickNoMore=\u00a7cDu hast keinen Nicknamen mehr. nickOthersPermission=\u00a7cDu hast keine Rechte um den Nicknamen von anderen zu \u00e4ndern. nickSet=\u00a77Dein Nickname ist nun \u00a7c{0} noAccessCommand=\u00a7cDu hast keinen Zugriff auf diesen Befehl. @@ -456,3 +454,7 @@ distance=\u00a76Distance: {0} giveSpawn=\u00a76Giving\u00a7c {0} \u00a76of\u00a7c {1} to\u00a7c {2}\u00a76. warpList={0} uptime=\u00a76Uptime:\u00a7c {0} +antiBuildCraft=\u00a74You are not permitted to create\u00a7c {0}\u00a74. +antiBuildDrop=\u00a74You are not permitted to drop\u00a7c {0}\u00a74. +gcWorld=\u00a76{0} "\u00a7c{1}\u00a76": \u00a7c{2}\u00a76 chunks, \u00a7c{3}\u00a76 entities +invalidHomeName=\u00a74Invalid home name diff --git a/Essentials/src/messages_en.properties b/Essentials/src/messages_en.properties index f46a42314..4852f2bef 100644 --- a/Essentials/src/messages_en.properties +++ b/Essentials/src/messages_en.properties @@ -28,7 +28,7 @@ banIpAddress=\u00a76Banned IP address bigTreeFailure=\u00a74Big tree generation failure. Try again on grass or dirt. bigTreeSuccess= \u00a76Big tree spawned. blockList=\u00a76Essentials relayed the following commands to another plugin: -broadcast=\u00a76[\u00a74Broadcast\u00a76]\u00a7a {0} +broadcast=\u00a7r\u00a76[\u00a74Broadcast\u00a76]\u00a7a {0} buildAlert=\u00a74You are not permitted to build bukkitFormatChanged=Bukkit version format changed. Version not checked. burnMsg=\u00a76You set\u00a7c {0} \u00a76on fire for\u00a7c {1} seconds\u00a76. @@ -105,8 +105,6 @@ flying=flying foreverAlone=\u00a74You have nobody to whom you can reply. freedMemory=Freed {0} MB. gameMode=\u00a76Set game mode\u00a7c {0} \u00a76for {1}\u00a76. -gcchunks= chunks, -gcentities= entities gcfree=\u00a76Free memory:\u00a7c {0} MB gcmax=\u00a76Maximum memory:\u00a7c {0} MB gctotal=\u00a76Allocated memory:\u00a7c {0} MB @@ -456,3 +454,7 @@ distance=\u00a76Distance: {0} giveSpawn=\u00a76Giving\u00a7c {0} \u00a76of\u00a7c {1} to\u00a7c {2}\u00a76. warpList={0} uptime=\u00a76Uptime:\u00a7c {0} +antiBuildCraft=\u00a74You are not permitted to create\u00a7c {0}\u00a74. +antiBuildDrop=\u00a74You are not permitted to drop\u00a7c {0}\u00a74. +gcWorld=\u00a76{0} "\u00a7c{1}\u00a76": \u00a7c{2}\u00a76 chunks, \u00a7c{3}\u00a76 entities +invalidHomeName=\u00a74Invalid home name diff --git a/Essentials/src/messages_es.properties b/Essentials/src/messages_es.properties index dd0ad7494..b3b098d91 100644 --- a/Essentials/src/messages_es.properties +++ b/Essentials/src/messages_es.properties @@ -105,8 +105,6 @@ flying=volando foreverAlone=\u00a7cNo tienes nadie a quien puedas responder. freedMemory= {0} MB libres. gameMode=\u00a77Modo de juego {0} activado para {1}. -gcchunks= pixeles -gcentities= entidades gcfree=Memoria libre: {0} MB gcmax=Memoria maxima: {0} MB gctotal=Memoria localizada: {0} MB @@ -456,3 +454,7 @@ distance=\u00a76Distance: {0} giveSpawn=\u00a76Giving\u00a7c {0} \u00a76of\u00a7c {1} to\u00a7c {2}\u00a76. warpList={0} uptime=\u00a76Uptime:\u00a7c {0} +antiBuildCraft=\u00a74You are not permitted to create\u00a7c {0}\u00a74. +antiBuildDrop=\u00a74You are not permitted to drop\u00a7c {0}\u00a74. +gcWorld=\u00a76{0} "\u00a7c{1}\u00a76": \u00a7c{2}\u00a76 chunks, \u00a7c{3}\u00a76 entities +invalidHomeName=\u00a74Invalid home name diff --git a/Essentials/src/messages_fi.properties b/Essentials/src/messages_fi.properties index 9ea0819ce..8dd5343ad 100644 --- a/Essentials/src/messages_fi.properties +++ b/Essentials/src/messages_fi.properties @@ -105,8 +105,6 @@ flying=flying foreverAlone=\u00a7cSinulla ei ole ket\u00e4\u00e4n kenelle vastata. freedMemory=Vapaata muistia {0} MB. gameMode=\u00a77Asetit pelimuodon "{0}" pelaajalle {1}. -gcchunks= chunkkia, -gcentities= kokonaisuutta gcfree=Vapaa muisti: {0} MB gcmax=Maksimi muisti: {0} MB gctotal=Sallittu muisti: {0} MB @@ -456,3 +454,7 @@ distance=\u00a76Distance: {0} giveSpawn=\u00a76Giving\u00a7c {0} \u00a76of\u00a7c {1} to\u00a7c {2}\u00a76. warpList={0} uptime=\u00a76Uptime:\u00a7c {0} +antiBuildCraft=\u00a74You are not permitted to create\u00a7c {0}\u00a74. +antiBuildDrop=\u00a74You are not permitted to drop\u00a7c {0}\u00a74. +gcWorld=\u00a76{0} "\u00a7c{1}\u00a76": \u00a7c{2}\u00a76 chunks, \u00a7c{3}\u00a76 entities +invalidHomeName=\u00a74Invalid home name diff --git a/Essentials/src/messages_fr.properties b/Essentials/src/messages_fr.properties index 3551fad51..7468952a6 100644 --- a/Essentials/src/messages_fr.properties +++ b/Essentials/src/messages_fr.properties @@ -105,8 +105,6 @@ flying=flying foreverAlone=\u00a7cVous n''avez personne \u00e0 qui r\u00e9pondre freedMemory=A lib\u00e9r\u00e9 {0} Mo. gameMode=\u00a77Mode de jeu {0} pour {1}. -gcchunks=portions, -gcentities=entit\u00e9s gcfree=M\u00e9moire libre : {0} Mo gcmax=M\u00e9moire maximale : {0} Mo gctotal=M\u00e9moire utilis\u00e9e : {0} Mo @@ -456,3 +454,7 @@ distance=\u00a76Distance: {0} giveSpawn=\u00a76Giving\u00a7c {0} \u00a76of\u00a7c {1} to\u00a7c {2}\u00a76. warpList={0} uptime=\u00a76Uptime:\u00a7c {0} +antiBuildCraft=\u00a74You are not permitted to create\u00a7c {0}\u00a74. +antiBuildDrop=\u00a74You are not permitted to drop\u00a7c {0}\u00a74. +gcWorld=\u00a76{0} "\u00a7c{1}\u00a76": \u00a7c{2}\u00a76 chunks, \u00a7c{3}\u00a76 entities +invalidHomeName=\u00a74Invalid home name diff --git a/Essentials/src/messages_it.properties b/Essentials/src/messages_it.properties index b4a6a0d95..91e2e8f27 100644 --- a/Essentials/src/messages_it.properties +++ b/Essentials/src/messages_it.properties @@ -105,8 +105,6 @@ flying=flying foreverAlone=\u00a7cNon c''e'' nessuno a cui rispondere. freedMemory=Liberati {0} MB. gameMode=\u00a77Modalita''di gioco {0} impostata per {1}. -gcchunks= blocchi, -gcentities= entita'' gcfree=Memoria libera: {0} MB gcmax=Memoria massima: {0} MB gctotal=Memoria allocata: {0} MB @@ -456,3 +454,7 @@ distance=\u00a76Distance: {0} giveSpawn=\u00a76Giving\u00a7c {0} \u00a76of\u00a7c {1} to\u00a7c {2}\u00a76. warpList={0} uptime=\u00a76Uptime:\u00a7c {0} +antiBuildCraft=\u00a74You are not permitted to create\u00a7c {0}\u00a74. +antiBuildDrop=\u00a74You are not permitted to drop\u00a7c {0}\u00a74. +gcWorld=\u00a76{0} "\u00a7c{1}\u00a76": \u00a7c{2}\u00a76 chunks, \u00a7c{3}\u00a76 entities +invalidHomeName=\u00a74Invalid home name diff --git a/Essentials/src/messages_nl.properties b/Essentials/src/messages_nl.properties index d64fd52f3..62be530f1 100644 --- a/Essentials/src/messages_nl.properties +++ b/Essentials/src/messages_nl.properties @@ -105,8 +105,6 @@ flying=vliegen foreverAlone=\u00a7cJe hebt niemand waarnaar je kan reageren. freedMemory={0} MB gelost. gameMode=\u00a77Zet spel modus {0} voor {1}. -gcchunks= chunks, -gcentities= entiteiten gcfree=Vrij geheugen: {0} MB gcmax=Maximaal geheugen: {0} MB gctotal=Gealloceerd geheugen: {0} MB @@ -456,3 +454,7 @@ distance=\u00a76Distance: {0} giveSpawn=\u00a76Giving\u00a7c {0} \u00a76of\u00a7c {1} to\u00a7c {2}\u00a76. warpList={0} uptime=\u00a76Uptime:\u00a7c {0} +antiBuildCraft=\u00a74You are not permitted to create\u00a7c {0}\u00a74. +antiBuildDrop=\u00a74You are not permitted to drop\u00a7c {0}\u00a74. +gcWorld=\u00a76{0} "\u00a7c{1}\u00a76": \u00a7c{2}\u00a76 chunks, \u00a7c{3}\u00a76 entities +invalidHomeName=\u00a74Invalid home name diff --git a/Essentials/src/messages_pl.properties b/Essentials/src/messages_pl.properties index 5a98a7ee5..1a1e73d65 100644 --- a/Essentials/src/messages_pl.properties +++ b/Essentials/src/messages_pl.properties @@ -105,8 +105,6 @@ flying=flying foreverAlone=\u00a7cNie masz komu odpisac. freedMemory=Zwolniono {0} MB. gameMode=\u00a77Ustawiono tryb gry {0} dla {1}. -gcchunks= chunki -gcentities= jednostki gcfree=Wolna pamiec: {0} MB gcmax=Maksymalna pamiec: {0} MB gctotal=Alokowana pamiec: {0} MB @@ -456,3 +454,7 @@ distance=\u00a76Distance: {0} giveSpawn=\u00a76Giving\u00a7c {0} \u00a76of\u00a7c {1} to\u00a7c {2}\u00a76. warpList={0} uptime=\u00a76Uptime:\u00a7c {0} +antiBuildCraft=\u00a74You are not permitted to create\u00a7c {0}\u00a74. +antiBuildDrop=\u00a74You are not permitted to drop\u00a7c {0}\u00a74. +gcWorld=\u00a76{0} "\u00a7c{1}\u00a76": \u00a7c{2}\u00a76 chunks, \u00a7c{3}\u00a76 entities +invalidHomeName=\u00a74Invalid home name diff --git a/Essentials/src/messages_pt.properties b/Essentials/src/messages_pt.properties index 4d5d59b22..11a2c1df0 100644 --- a/Essentials/src/messages_pt.properties +++ b/Essentials/src/messages_pt.properties @@ -105,8 +105,6 @@ flying=flying foreverAlone=\u00a7cVoc\u00ea nao tem ninguem a quem responder. freedMemory=Livre {0} MB. gameMode=\u00a77Gamemode {0} definido para {1}. -gcchunks= chunks, -gcentities= entidades gcfree=Memoria livre: {0} MB gcmax=Mem\u00f3ria Maxima: {0} MB gctotal=Mem\u00f3ria alocada: {0} MB @@ -456,3 +454,7 @@ distance=\u00a76Distance: {0} giveSpawn=\u00a76Giving\u00a7c {0} \u00a76of\u00a7c {1} to\u00a7c {2}\u00a76. warpList={0} uptime=\u00a76Uptime:\u00a7c {0} +antiBuildCraft=\u00a74You are not permitted to create\u00a7c {0}\u00a74. +antiBuildDrop=\u00a74You are not permitted to drop\u00a7c {0}\u00a74. +gcWorld=\u00a76{0} "\u00a7c{1}\u00a76": \u00a7c{2}\u00a76 chunks, \u00a7c{3}\u00a76 entities +invalidHomeName=\u00a74Invalid home name diff --git a/Essentials/src/messages_se.properties b/Essentials/src/messages_se.properties index 43a181a6c..c7685d6f4 100644 --- a/Essentials/src/messages_se.properties +++ b/Essentials/src/messages_se.properties @@ -105,8 +105,6 @@ flying=flying foreverAlone=\u00a7cDu har ingen att svara. freedMemory=Befriade {0} MB. gameMode=\u00a77Satte {0}s spell\u00e4ge till {1}. -gcchunks= bitar, -gcentities= enheter gcfree=Ledigt minne: {0} MB gcmax=Maximalt minne: {0} MB gctotal=Tilldelat minne: {0} MB @@ -456,3 +454,7 @@ distance=\u00a76Distance: {0} giveSpawn=\u00a76Giving\u00a7c {0} \u00a76of\u00a7c {1} to\u00a7c {2}\u00a76. warpList={0} uptime=\u00a76Uptime:\u00a7c {0} +antiBuildCraft=\u00a74You are not permitted to create\u00a7c {0}\u00a74. +antiBuildDrop=\u00a74You are not permitted to drop\u00a7c {0}\u00a74. +gcWorld=\u00a76{0} "\u00a7c{1}\u00a76": \u00a7c{2}\u00a76 chunks, \u00a7c{3}\u00a76 entities +invalidHomeName=\u00a74Invalid home name diff --git a/Essentials/src/plugin.yml b/Essentials/src/plugin.yml index ce1e8d787..225534a08 100644 --- a/Essentials/src/plugin.yml +++ b/Essentials/src/plugin.yml @@ -128,9 +128,9 @@ commands: usage: / [player] aliases: [coords,egetpos,position,eposition,whereami,ewhereami] gc: - description: Reports garbage collection and tick info; useful to developers. + description: Reports memory, uptime and tick info. usage: / - aliases: [elag,lag,mem,memory,egc,emem,ememory] + aliases: [elag,lag,mem,memory,egc,emem,ememory,uptime,euptime] give: description: Give a player an item. usage: / [amount ...] @@ -351,7 +351,7 @@ commands: usage: / [day|night|dawn|17:30|4pm|4000ticks] [worldname|all] aliases: [etime, day, night, eday, enight] togglejail: - description: Jails/Unjails a player and tp them to the jail specified. + description: Jails/Unjails a player, TPs them to the jail specified. usage: / [datediff] aliases: [tjail,jail,ejail,unjail,eunjail,etogglejail] top: @@ -450,3 +450,8 @@ commands: description: Calculates the worth of items in hand or as specified. usage: / [item] [amount] aliases: [eworth,price,eprice] + +permissions: + essentials.*: + default: op + description: Give players with op everything by default \ No newline at end of file diff --git a/EssentialsAntiBuild/src/com/earth2me/essentials/antibuild/EssentialsAntiBuildListener.java b/EssentialsAntiBuild/src/com/earth2me/essentials/antibuild/EssentialsAntiBuildListener.java index a877bc47e..d2f46586f 100644 --- a/EssentialsAntiBuild/src/com/earth2me/essentials/antibuild/EssentialsAntiBuildListener.java +++ b/EssentialsAntiBuild/src/com/earth2me/essentials/antibuild/EssentialsAntiBuildListener.java @@ -7,13 +7,17 @@ import java.util.logging.Level; import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.entity.Entity; +import org.bukkit.entity.HumanEntity; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; import org.bukkit.event.block.*; +import org.bukkit.event.inventory.CraftItemEvent; import org.bukkit.event.painting.PaintingBreakByEntityEvent; +import org.bukkit.event.player.PlayerDropItemEvent; import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.event.player.PlayerPickupItemEvent; import org.bukkit.inventory.ItemStack; @@ -28,7 +32,7 @@ public class EssentialsAntiBuildListener implements Listener this.ess = prot.getEssentialsConnect().getEssentials(); } - private boolean metaPermCheck(User user, String action, Block block) + private boolean metaPermCheck(final User user, final String action, final Block block) { if (block == null) { @@ -37,13 +41,13 @@ public class EssentialsAntiBuildListener implements Listener return metaPermCheck(user, action, block.getTypeId(), block.getData()); } - private boolean metaPermCheck(User user, String action, int blockId) + private boolean metaPermCheck(final User user, final String action, final int blockId) { final String blockPerm = "essentials.build." + action + "." + blockId; return user.isAuthorized(blockPerm); } - private boolean metaPermCheck(User user, String action, int blockId, byte data) + private boolean metaPermCheck(final User user, final String action, final int blockId, final byte data) { final String blockPerm = "essentials.build." + action + "." + blockId; final String dataPerm = blockPerm + ":" + data; @@ -137,7 +141,7 @@ public class EssentialsAntiBuildListener implements Listener } @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) - public void onPaintingBreak(PaintingBreakByEntityEvent event) + public void onPaintingBreak(final PaintingBreakByEntityEvent event) { final Entity entity = event.getRemover(); if (entity instanceof Player) @@ -156,7 +160,7 @@ public class EssentialsAntiBuildListener implements Listener } @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) - public void onBlockPistonExtend(BlockPistonExtendEvent event) + public void onBlockPistonExtend(final BlockPistonExtendEvent event) { for (Block block : event.getBlocks()) { @@ -169,7 +173,7 @@ public class EssentialsAntiBuildListener implements Listener } @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) - public void onBlockPistonRetract(BlockPistonRetractEvent event) + public void onBlockPistonRetract(final BlockPistonRetractEvent event) { if (!event.isSticky()) { @@ -230,4 +234,66 @@ public class EssentialsAntiBuildListener implements Listener } } } + + @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) + public void onCraftItemEvent(final CraftItemEvent event) + { + HumanEntity entity = event.getWhoClicked(); + + if (entity instanceof Player) + { + final User user = ess.getUser(entity); + final ItemStack item = event.getRecipe().getResult(); + + if (prot.getSettingBool(AntiBuildConfig.disable_use) && !user.canBuild() && !user.isAuthorized("essentials.build")) + { + if (!metaPermCheck(user, "craft", item.getTypeId(), item.getData().getData())) + { + event.setCancelled(true); + if (ess.getSettings().warnOnBuildDisallow()) + { + user.sendMessage(_("antiBuildCraft", item.getType().toString())); + } + } + } + } + } + + @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) + public void onPlayerPickupItem(PlayerPickupItemEvent event) + { + + final User user = ess.getUser(event.getPlayer()); + final ItemStack item = event.getItem().getItemStack(); + + if (prot.getSettingBool(AntiBuildConfig.disable_use) && !user.canBuild() && !user.isAuthorized("essentials.build")) + { + if (!metaPermCheck(user, "pickup", item.getTypeId(), item.getData().getData())) + { + event.setCancelled(true); + event.getItem().setPickupDelay(50); + } + } + } + + @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) + public void onPlayerDropItem(final PlayerDropItemEvent event) + { + + final User user = ess.getUser(event.getPlayer()); + final ItemStack item = event.getItemDrop().getItemStack(); + + if (prot.getSettingBool(AntiBuildConfig.disable_use) && !user.canBuild() && !user.isAuthorized("essentials.build")) + { + if (!metaPermCheck(user, "drop", item.getTypeId(), item.getData().getData())) + { + event.setCancelled(true); + user.updateInventory(); + if (ess.getSettings().warnOnBuildDisallow()) + { + user.sendMessage(_("antiBuildDrop", item.getType().toString())); + } + } + } + } } diff --git a/EssentialsProtect/src/com/earth2me/essentials/protect/EssentialsProtectBlockListener.java b/EssentialsProtect/src/com/earth2me/essentials/protect/EssentialsProtectBlockListener.java index bd760b0ec..1791a9c5b 100644 --- a/EssentialsProtect/src/com/earth2me/essentials/protect/EssentialsProtectBlockListener.java +++ b/EssentialsProtect/src/com/earth2me/essentials/protect/EssentialsProtectBlockListener.java @@ -25,14 +25,9 @@ public class EssentialsProtectBlockListener implements Listener this.ess = prot.getEssentialsConnect().getEssentials(); } - @EventHandler(priority = EventPriority.HIGHEST) + @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void onBlockPlace(final BlockPlaceEvent event) { - if (event.isCancelled()) - { - return; - } - final User user = ess.getUser(event.getPlayer()); final Block blockPlaced = event.getBlockPlaced(); @@ -79,13 +74,9 @@ public class EssentialsProtectBlockListener implements Listener } } - @EventHandler(priority = EventPriority.HIGHEST) + @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void onBlockIgnite(BlockIgniteEvent event) { - if (event.isCancelled()) - { - return; - } final Block block = event.getBlock(); if ((block.getType() == Material.RAILS || block.getType() == Material.POWERED_RAIL || block.getType() == Material.DETECTOR_RAIL) && prot.getSettingBool(ProtectConfig.protect_rails)) @@ -130,13 +121,9 @@ public class EssentialsProtectBlockListener implements Listener } } - @EventHandler(priority = EventPriority.HIGHEST) + @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void onBlockFromTo(final BlockFromToEvent event) { - if (event.isCancelled()) - { - return; - } final Block toBlock = event.getToBlock(); if ((toBlock.getType() == Material.RAILS || toBlock.getType() == Material.POWERED_RAIL || toBlock.getType() == Material.DETECTOR_RAIL) && prot.getSettingBool(ProtectConfig.protect_rails)) @@ -171,13 +158,9 @@ public class EssentialsProtectBlockListener implements Listener } } - @EventHandler(priority = EventPriority.HIGHEST) + @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void onBlockBurn(final BlockBurnEvent event) { - if (event.isCancelled()) - { - return; - } final Block block = event.getBlock(); if ((block.getType() == Material.RAILS || block.getType() == Material.POWERED_RAIL || block.getType() == Material.DETECTOR_RAIL) && prot.getSettingBool(ProtectConfig.protect_rails)) { @@ -207,13 +190,9 @@ public class EssentialsProtectBlockListener implements Listener BlockFace.SELF }; - @EventHandler(priority = EventPriority.HIGHEST) + @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void onBlockBreak(final BlockBreakEvent event) { - if (event.isCancelled()) - { - return; - } final User user = ess.getUser(event.getPlayer()); final Block block = event.getBlock(); @@ -290,13 +269,9 @@ public class EssentialsProtectBlockListener implements Listener } } - @EventHandler(priority = EventPriority.HIGHEST) + @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void onBlockPistonExtend(BlockPistonExtendEvent event) { - if (event.isCancelled()) - { - return; - } for (Block block : event.getBlocks()) { if ((block.getRelative(BlockFace.UP).getType() == Material.RAILS @@ -338,10 +313,10 @@ public class EssentialsProtectBlockListener implements Listener } } - @EventHandler(priority = EventPriority.HIGHEST) + @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void onBlockPistonRetract(BlockPistonRetractEvent event) { - if (event.isCancelled() || !event.isSticky()) + if (!event.isSticky()) { return; } diff --git a/EssentialsProtect/src/com/earth2me/essentials/protect/EssentialsProtectEntityListener.java b/EssentialsProtect/src/com/earth2me/essentials/protect/EssentialsProtectEntityListener.java index 7e558eb81..ef556c9bd 100644 --- a/EssentialsProtect/src/com/earth2me/essentials/protect/EssentialsProtectEntityListener.java +++ b/EssentialsProtect/src/com/earth2me/essentials/protect/EssentialsProtectEntityListener.java @@ -26,13 +26,9 @@ public class EssentialsProtectEntityListener implements Listener this.ess = prot.getEssentialsConnect().getEssentials(); } - @EventHandler(priority = EventPriority.HIGHEST) + @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void onEntityDamage(final EntityDamageEvent event) { - if (event.isCancelled()) - { - return; - } final Entity target = event.getEntity(); if (target instanceof Villager && prot.getSettingBool(ProtectConfig.prevent_villager_death)) @@ -191,10 +187,10 @@ public class EssentialsProtectEntityListener implements Listener } } - @EventHandler(priority = EventPriority.HIGHEST) + @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void onEntityExplode(final EntityExplodeEvent event) { - if (event.isCancelled() || event.getEntity() == null) + if (event.getEntity() == null) { return; } @@ -263,17 +259,13 @@ public class EssentialsProtectEntityListener implements Listener } } - @EventHandler(priority = EventPriority.HIGHEST) + @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void onCreatureSpawn(final CreatureSpawnEvent event) { if (event.getEntity() instanceof Player) { return; } - if (event.isCancelled()) - { - return; - } final EntityType creature = event.getEntityType(); if (creature == null) { @@ -290,13 +282,9 @@ public class EssentialsProtectEntityListener implements Listener } } - @EventHandler(priority = EventPriority.HIGHEST) + @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void onEntityTarget(final EntityTargetEvent event) { - if (event.isCancelled()) - { - return; - } if (!(event.getTarget() instanceof Player)) { return; @@ -316,7 +304,7 @@ public class EssentialsProtectEntityListener implements Listener } } - @EventHandler(priority = EventPriority.HIGHEST) + @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void onExplosionPrime(ExplosionPrimeEvent event) { if ((event.getEntity() instanceof Fireball || event.getEntity() instanceof SmallFireball) @@ -326,13 +314,9 @@ public class EssentialsProtectEntityListener implements Listener } } - @EventHandler(priority = EventPriority.HIGHEST) + @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void onEntityChangeBlock(EntityChangeBlockEvent event) { - if (event.isCancelled()) - { - return; - } if (event.getEntityType() == EntityType.ENDERMAN && prot.getSettingBool(ProtectConfig.prevent_enderman_pickup)) { event.setCancelled(true); diff --git a/EssentialsProtect/src/com/earth2me/essentials/protect/EssentialsProtectWeatherListener.java b/EssentialsProtect/src/com/earth2me/essentials/protect/EssentialsProtectWeatherListener.java index 1b8dd19ff..1e5fa6da3 100644 --- a/EssentialsProtect/src/com/earth2me/essentials/protect/EssentialsProtectWeatherListener.java +++ b/EssentialsProtect/src/com/earth2me/essentials/protect/EssentialsProtectWeatherListener.java @@ -17,11 +17,10 @@ public class EssentialsProtectWeatherListener implements Listener this.prot = prot; } - @EventHandler(priority = EventPriority.HIGHEST) + @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void onWeatherChange(final WeatherChangeEvent event) { - if (!event.isCancelled() - && prot.getSettingBool(ProtectConfig.disable_weather_storm) + if (prot.getSettingBool(ProtectConfig.disable_weather_storm) && event.toWeatherState()) { event.setCancelled(true); @@ -29,21 +28,19 @@ public class EssentialsProtectWeatherListener implements Listener } - @EventHandler(priority = EventPriority.HIGHEST) + @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void onLightningStrike(final LightningStrikeEvent event) { - if (!event.isCancelled() - && prot.getSettingBool(ProtectConfig.disable_weather_lightning)) + if (prot.getSettingBool(ProtectConfig.disable_weather_lightning)) { event.setCancelled(true); } } - @EventHandler(priority = EventPriority.HIGHEST) + @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void onThunderChange(final ThunderChangeEvent event) { - if (!event.isCancelled() - && prot.getSettingBool(ProtectConfig.disable_weather_thunder) + if (prot.getSettingBool(ProtectConfig.disable_weather_thunder) && event.toThunderState()) { event.setCancelled(true); diff --git a/EssentialsSpawn/src/com/earth2me/essentials/spawn/EssentialsSpawnPlayerListener.java b/EssentialsSpawn/src/com/earth2me/essentials/spawn/EssentialsSpawnPlayerListener.java index 52567de41..0dcf9843a 100644 --- a/EssentialsSpawn/src/com/earth2me/essentials/spawn/EssentialsSpawnPlayerListener.java +++ b/EssentialsSpawn/src/com/earth2me/essentials/spawn/EssentialsSpawnPlayerListener.java @@ -101,7 +101,11 @@ public class EssentialsSpawnPlayerListener implements Listener { final IText output = new KeywordReplacer(ess.getSettings().getAnnounceNewPlayerFormat(), user, ess); final SimpleTextPager pager = new SimpleTextPager(output); - ess.broadcastMessage(user, pager.getString(0)); + + for (String line : pager.getLines()) + { + ess.broadcastMessage(user, line); + } } final String kitName = ess.getSettings().getNewPlayerKit();