diff options
Diffstat (limited to 'Essentials/src/com/earth2me/essentials')
48 files changed, 510 insertions, 211 deletions
diff --git a/Essentials/src/com/earth2me/essentials/DescParseTickFormat.java b/Essentials/src/com/earth2me/essentials/DescParseTickFormat.java index bf3037e59..9c40acacc 100644 --- a/Essentials/src/com/earth2me/essentials/DescParseTickFormat.java +++ b/Essentials/src/com/earth2me/essentials/DescParseTickFormat.java @@ -6,12 +6,11 @@ import java.util.*; /** - * This utility class is used for converting between the ingame - * time in ticks to ingame time as a friendly string. - * Note that the time is INGAME. - * + * This utility class is used for converting between the ingame time in ticks to ingame time as a friendly string. Note + * that the time is INGAME. + * * http://www.minecraftwiki.net/wiki/Day/night_cycle - * + * * @author Olof Larsson */ public final class DescParseTickFormat @@ -156,30 +155,31 @@ public final class DescParseTickFormat int hours = 0; int minutes = 0; - desc = desc.toLowerCase(Locale.ENGLISH).replaceAll("[^0-9]", ""); + desc = desc.toLowerCase(Locale.ENGLISH); + String parsetime = desc.replaceAll("[^0-9]", ""); - if (desc.length() > 4) + if (parsetime.length() > 4) { throw new NumberFormatException(); } - if (desc.length() == 4) + if (parsetime.length() == 4) { - hours += Integer.parseInt(desc.substring(0, 2)); - minutes += Integer.parseInt(desc.substring(2, 4)); + hours += Integer.parseInt(parsetime.substring(0, 2)); + minutes += Integer.parseInt(parsetime.substring(2, 4)); } - else if (desc.length() == 3) + else if (parsetime.length() == 3) { - hours += Integer.parseInt(desc.substring(0, 1)); - minutes += Integer.parseInt(desc.substring(1, 3)); + hours += Integer.parseInt(parsetime.substring(0, 1)); + minutes += Integer.parseInt(parsetime.substring(1, 3)); } - else if (desc.length() == 2) + else if (parsetime.length() == 2) { - hours += Integer.parseInt(desc.substring(0, 2)); + hours += Integer.parseInt(parsetime.substring(0, 2)); } - else if (desc.length() == 1) + else if (parsetime.length() == 1) { - hours += Integer.parseInt(desc.substring(0, 1)); + hours += Integer.parseInt(parsetime.substring(0, 1)); } else { diff --git a/Essentials/src/com/earth2me/essentials/Enchantments.java b/Essentials/src/com/earth2me/essentials/Enchantments.java index 5ce10d75d..ed0051c46 100644 --- a/Essentials/src/com/earth2me/essentials/Enchantments.java +++ b/Essentials/src/com/earth2me/essentials/Enchantments.java @@ -19,47 +19,72 @@ public class Enchantments ENCHANTMENTS.put("alldamage", Enchantment.DAMAGE_ALL); ENCHANTMENTS.put("alldmg", Enchantment.DAMAGE_ALL); ENCHANTMENTS.put("sharpness", Enchantment.DAMAGE_ALL); + ENCHANTMENTS.put("arthropodsdamage", Enchantment.DAMAGE_ARTHROPODS); ENCHANTMENTS.put("ardmg", Enchantment.DAMAGE_ARTHROPODS); ENCHANTMENTS.put("baneofarthropods", Enchantment.DAMAGE_ARTHROPODS); + ENCHANTMENTS.put("undeaddamage", Enchantment.DAMAGE_UNDEAD); ENCHANTMENTS.put("smite", Enchantment.DAMAGE_UNDEAD); + ENCHANTMENTS.put("digspeed", Enchantment.DIG_SPEED); ENCHANTMENTS.put("efficiency", Enchantment.DIG_SPEED); + ENCHANTMENTS.put("durability", Enchantment.DURABILITY); ENCHANTMENTS.put("dura", Enchantment.DURABILITY); ENCHANTMENTS.put("unbreaking", Enchantment.DURABILITY); + ENCHANTMENTS.put("fireaspect", Enchantment.FIRE_ASPECT); ENCHANTMENTS.put("fire", Enchantment.FIRE_ASPECT); + ENCHANTMENTS.put("knockback", Enchantment.KNOCKBACK); + ENCHANTMENTS.put("blockslootbonus", Enchantment.LOOT_BONUS_BLOCKS); ENCHANTMENTS.put("fortune", Enchantment.LOOT_BONUS_BLOCKS); + ENCHANTMENTS.put("mobslootbonus", Enchantment.LOOT_BONUS_MOBS); ENCHANTMENTS.put("mobloot", Enchantment.LOOT_BONUS_MOBS); ENCHANTMENTS.put("looting", Enchantment.LOOT_BONUS_MOBS); + ENCHANTMENTS.put("oxygen", Enchantment.OXYGEN); ENCHANTMENTS.put("respiration", Enchantment.OXYGEN); + ENCHANTMENTS.put("protection", Enchantment.PROTECTION_ENVIRONMENTAL); ENCHANTMENTS.put("prot", Enchantment.PROTECTION_ENVIRONMENTAL); - ENCHANTMENTS.put("explosionsprotection", Enchantment.PROTECTION_EXPLOSIONS); + + ENCHANTMENTS.put("explosionsprotection", Enchantment.PROTECTION_EXPLOSIONS); ENCHANTMENTS.put("expprot", Enchantment.PROTECTION_EXPLOSIONS); ENCHANTMENTS.put("blastprotection", Enchantment.PROTECTION_EXPLOSIONS); + ENCHANTMENTS.put("fallprotection", Enchantment.PROTECTION_FALL); ENCHANTMENTS.put("fallprot", Enchantment.PROTECTION_FALL); + ENCHANTMENTS.put("featherfall", Enchantment.PROTECTION_FALL); ENCHANTMENTS.put("featherfalling", Enchantment.PROTECTION_FALL); + ENCHANTMENTS.put("fireprotection", Enchantment.PROTECTION_FIRE); ENCHANTMENTS.put("fireprot", Enchantment.PROTECTION_FIRE); + ENCHANTMENTS.put("projectileprotection", Enchantment.PROTECTION_PROJECTILE); ENCHANTMENTS.put("projprot", Enchantment.PROTECTION_PROJECTILE); + ENCHANTMENTS.put("silktouch", Enchantment.SILK_TOUCH); + ENCHANTMENTS.put("waterworker", Enchantment.WATER_WORKER); ENCHANTMENTS.put("aquaaffinity", Enchantment.WATER_WORKER); + ENCHANTMENTS.put("firearrow", Enchantment.ARROW_FIRE); + ENCHANTMENTS.put("flame", Enchantment.ARROW_FIRE); + ENCHANTMENTS.put("arrowdamage", Enchantment.ARROW_DAMAGE); + ENCHANTMENTS.put("power", Enchantment.ARROW_DAMAGE); + ENCHANTMENTS.put("arrowknockback", Enchantment.ARROW_KNOCKBACK); ENCHANTMENTS.put("arrowkb", Enchantment.ARROW_KNOCKBACK); + ENCHANTMENTS.put("punch", Enchantment.ARROW_KNOCKBACK); + ENCHANTMENTS.put("infinitearrows", Enchantment.ARROW_INFINITE); ENCHANTMENTS.put("infarrows", Enchantment.ARROW_INFINITE); + ENCHANTMENTS.put("infinity", Enchantment.ARROW_INFINITE); } public static Enchantment getByName(String name) { diff --git a/Essentials/src/com/earth2me/essentials/Essentials.java b/Essentials/src/com/earth2me/essentials/Essentials.java index c3dac9b50..5a82a9fb1 100644 --- a/Essentials/src/com/earth2me/essentials/Essentials.java +++ b/Essentials/src/com/earth2me/essentials/Essentials.java @@ -66,7 +66,7 @@ import org.yaml.snakeyaml.error.YAMLException; public class Essentials extends JavaPlugin implements IEssentials { - public static final int BUKKIT_VERSION = 2122; + public static final int BUKKIT_VERSION = 2149; private static final Logger LOGGER = Logger.getLogger("Minecraft"); private transient ISettings settings; private final transient TNTExplodeListener tntListener = new TNTExplodeListener(this); diff --git a/Essentials/src/com/earth2me/essentials/EssentialsBlockListener.java b/Essentials/src/com/earth2me/essentials/EssentialsBlockListener.java index 17f0f1778..3423da9d0 100644 --- a/Essentials/src/com/earth2me/essentials/EssentialsBlockListener.java +++ b/Essentials/src/com/earth2me/essentials/EssentialsBlockListener.java @@ -20,14 +20,14 @@ public class EssentialsBlockListener implements Listener @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onBlockPlace(final BlockPlaceEvent event) { - final User user = ess.getUser(event.getPlayer()); // Do not rely on getItemInHand(); - // http://leaky.bukkit.org/issues/663 + // http://leaky.bukkit.org/issues/663 final ItemStack is = Util.convertBlockToItem(event.getBlockPlaced()); if (is == null) { return; } + final User user = ess.getUser(event.getPlayer()); final boolean unlimitedForUser = user.hasUnlimited(is); if (unlimitedForUser && user.getGameMode() == GameMode.SURVIVAL) { diff --git a/Essentials/src/com/earth2me/essentials/EssentialsConf.java b/Essentials/src/com/earth2me/essentials/EssentialsConf.java index 85c2bbd8c..b2cb1fd12 100644 --- a/Essentials/src/com/earth2me/essentials/EssentialsConf.java +++ b/Essentials/src/com/earth2me/essentials/EssentialsConf.java @@ -39,7 +39,7 @@ public class EssentialsConf extends YamlConfiguration this.configFile = configFile; } - public void load() + public synchronized void load() { configFile = configFile.getAbsoluteFile(); if (!configFile.getParentFile().exists()) @@ -356,7 +356,7 @@ public class EssentialsConf extends YamlConfiguration } @Override - public void save(final File file) throws IOException + public synchronized void save(final File file) throws IOException { if (file == null) { diff --git a/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java b/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java index 36adf37e2..604703770 100644 --- a/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java +++ b/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java @@ -123,14 +123,25 @@ public class EssentialsPlayerListener implements Listener @EventHandler(priority = EventPriority.MONITOR) public void onPlayerJoin(final PlayerJoinEvent event) { - ess.getBackup().onPlayerJoin(); - final User user = ess.getUser(event.getPlayer()); + ess.scheduleAsyncDelayedTask(new Runnable() + { + @Override + public void run() + { + delayedJoin(event.getPlayer()); + } + }); + } + public void delayedJoin(final Player player) + { + ess.getBackup().onPlayerJoin(); + final User user = ess.getUser(player); user.setDisplayNick(); + updateCompass(user); user.setLastLogin(System.currentTimeMillis()); - user.updateActivity(false); - updateCompass(user); + if (user.isAuthorized("essentials.sleepingignored")) { user.setSleepingIgnored(true); @@ -172,6 +183,27 @@ public class EssentialsPlayerListener implements Listener } } + private void updateCompass(final User user) + { + Location loc = user.getHome(user.getLocation()); + if (loc == null) + { + loc = user.getBedSpawnLocation(); + } + if (loc != null) + { + final Location updateLoc = loc; + ess.scheduleSyncDelayedTask(new Runnable() + { + @Override + public void run() + { + user.setCompassTarget(updateLoc); + } + }); + } + } + @EventHandler(priority = EventPriority.HIGH) public void onPlayerLogin(final PlayerLoginEvent event) { @@ -211,30 +243,24 @@ public class EssentialsPlayerListener implements Listener event.allow(); } - private void updateCompass(final User user) - { - Location loc = user.getHome(user.getLocation()); - if (loc == null) - { - loc = user.getBedSpawnLocation(); - } - if (loc != null) - { - user.setCompassTarget(loc); - } - } - @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true) public void onPlayerTeleport(final PlayerTeleportEvent event) { - //TODO: Don't fetch user unless one of these features are enabled. - final User user = ess.getUser(event.getPlayer()); - //There is TeleportCause.COMMMAND but plugins have to actively pass the cause in on their teleports. - if ((event.getCause() == TeleportCause.PLUGIN || event.getCause() == TeleportCause.COMMAND) && ess.getSettings().registerBackInListener()) + boolean backListener = ess.getSettings().registerBackInListener(); + boolean teleportInvulnerability = ess.getSettings().isTeleportInvulnerability(); + if (backListener || teleportInvulnerability) { - user.setLastLocation(); + final User user = ess.getUser(event.getPlayer()); + //There is TeleportCause.COMMMAND but plugins have to actively pass the cause in on their teleports. + if (backListener && (event.getCause() == TeleportCause.PLUGIN || event.getCause() == TeleportCause.COMMAND)) + { + user.setLastLocation(); + } + if (teleportInvulnerability) + { + user.enableInvulnerabilityAfterTeleport(); + } } - user.enableInvulnerabilityAfterTeleport(); } @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true) @@ -309,8 +335,6 @@ public class EssentialsPlayerListener implements Listener @EventHandler(priority = EventPriority.NORMAL) public void onPlayerInteract(final PlayerInteractEvent event) { - final User user = ess.getUser(event.getPlayer()); - user.updateActivity(true); switch (event.getAction()) { case RIGHT_CLICK_BLOCK: @@ -318,16 +342,20 @@ public class EssentialsPlayerListener implements Listener { return; } - if (event.getClickedBlock().getType() == Material.BED_BLOCK && ess.getSettings().getUpdateBedAtDaytime()) + if (event.getClickedBlock().getTypeId() == Material.BED_BLOCK.getId() && ess.getSettings().getUpdateBedAtDaytime()) { event.getPlayer().setBedSpawnLocation(event.getClickedBlock().getLocation()); } break; - case LEFT_CLICK_BLOCK: case LEFT_CLICK_AIR: - if (user.hasPowerTools() && user.arePowerToolsEnabled() && usePowertools(user, event.getItem())) + case LEFT_CLICK_BLOCK: + if (event.getItem() != null && event.getMaterial() != Material.AIR) { - event.setCancelled(true); + final User user = ess.getUser(event.getPlayer()); + if (user.hasPowerTools() && user.arePowerToolsEnabled() && usePowertools(user, event.getItem().getTypeId())) + { + event.setCancelled(true); + } } break; default: @@ -335,13 +363,8 @@ public class EssentialsPlayerListener implements Listener } } - private boolean usePowertools(final User user, final ItemStack is) + private boolean usePowertools(final User user, final int id) { - int id; - if (is == null || (id = is.getTypeId()) == 0) - { - return false; - } final List<String> commandList = user.getPowertool(id); if (commandList == null || commandList.isEmpty()) { @@ -351,9 +374,8 @@ public class EssentialsPlayerListener implements Listener // We need to loop through each command and execute for (final String command : commandList) { - if (command.matches(".*\\{player\\}.*")) + if (command.contains("{player}")) { - //user.sendMessage("Click a player to use this command"); continue; } else if (command.startsWith("c:")) diff --git a/Essentials/src/com/earth2me/essentials/EssentialsPluginListener.java b/Essentials/src/com/earth2me/essentials/EssentialsPluginListener.java index 11f42e701..2ec8538ca 100644 --- a/Essentials/src/com/earth2me/essentials/EssentialsPluginListener.java +++ b/Essentials/src/com/earth2me/essentials/EssentialsPluginListener.java @@ -24,7 +24,7 @@ public class EssentialsPluginListener implements Listener, IConf ess.getAlternativeCommandsHandler().addPlugin(event.getPlugin()); if (!ess.getPaymentMethod().hasMethod() && ess.getPaymentMethod().setMethod(ess.getServer().getPluginManager())) { - ess.getLogger().log(Level.INFO, "Payment method found (" + ess.getPaymentMethod().getMethod().getName() + " version: " + ess.getPaymentMethod().getMethod().getVersion() + ")"); + ess.getLogger().log(Level.INFO, "Payment method found (" + ess.getPaymentMethod().getMethod().getLongName() + " version: " + ess.getPaymentMethod().getMethod().getVersion() + ")"); } } diff --git a/Essentials/src/com/earth2me/essentials/ISettings.java b/Essentials/src/com/earth2me/essentials/ISettings.java index 74942640e..2c07ccd58 100644 --- a/Essentials/src/com/earth2me/essentials/ISettings.java +++ b/Essentials/src/com/earth2me/essentials/ISettings.java @@ -170,5 +170,7 @@ public interface ISettings extends IConf void setMetricsEnabled(boolean metricsEnabled); - public long getTeleportInvulnerability(); + long getTeleportInvulnerability(); + + boolean isTeleportInvulnerability(); } diff --git a/Essentials/src/com/earth2me/essentials/Jails.java b/Essentials/src/com/earth2me/essentials/Jails.java index 00c9d8999..0aa90e08c 100644 --- a/Essentials/src/com/earth2me/essentials/Jails.java +++ b/Essentials/src/com/earth2me/essentials/Jails.java @@ -9,12 +9,16 @@ import java.util.logging.Level; import java.util.logging.Logger; import org.bukkit.Bukkit; import org.bukkit.Location; +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; import org.bukkit.event.block.BlockBreakEvent; import org.bukkit.event.block.BlockDamageEvent; import org.bukkit.event.block.BlockPlaceEvent; +import org.bukkit.event.entity.EntityDamageByEntityEvent; +import org.bukkit.event.entity.EntityDamageEvent.DamageCause; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerRespawnEvent; @@ -38,10 +42,8 @@ public class Jails extends AsyncStorageObjectHolder<com.earth2me.essentials.sett { enabled = true; final PluginManager pluginManager = ess.getServer().getPluginManager(); - final JailBlockListener blockListener = new JailBlockListener(); - final JailPlayerListener playerListener = new JailPlayerListener(); + final JailListener blockListener = new JailListener(); pluginManager.registerEvents(blockListener, ess); - pluginManager.registerEvents(playerListener, ess); } @Override @@ -179,7 +181,7 @@ public class Jails extends AsyncStorageObjectHolder<com.earth2me.essentials.sett } - private class JailBlockListener implements Listener + private class JailListener implements Listener { @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) public void onBlockBreak(final BlockBreakEvent event) @@ -210,11 +212,25 @@ public class Jails extends AsyncStorageObjectHolder<com.earth2me.essentials.sett event.setCancelled(true); } } - } + @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) + public void onEntityDamageByEntity(final EntityDamageByEntityEvent event) + { + if (event.getCause() != DamageCause.ENTITY_ATTACK || event.getEntity().getType() != EntityType.PLAYER) + { + return; + } + final Entity damager = event.getDamager(); + if (damager.getType() == EntityType.PLAYER) + { + final User user = ess.getUser(damager); + if (user != null && user.isJailed()) + { + event.setCancelled(true); + } + } + } - private class JailPlayerListener implements Listener - { @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) public void onPlayerInteract(final PlayerInteractEvent event) { diff --git a/Essentials/src/com/earth2me/essentials/Kit.java b/Essentials/src/com/earth2me/essentials/Kit.java index 36a2e60b0..5edd40776 100644 --- a/Essentials/src/com/earth2me/essentials/Kit.java +++ b/Essentials/src/com/earth2me/essentials/Kit.java @@ -5,6 +5,7 @@ import static com.earth2me.essentials.I18n.capitalCase; import com.earth2me.essentials.commands.NoChargeException; import com.earth2me.essentials.craftbukkit.InventoryWorkaround; import java.util.*; +import java.util.logging.Level; import org.bukkit.Material; import org.bukkit.configuration.ConfigurationSection; import org.bukkit.enchantments.Enchantment; @@ -22,7 +23,7 @@ public class Kit final StringBuilder list = new StringBuilder(); for (String kiteItem : kits.getKeys(false)) { - if (user.isAuthorized("essentials.kit." + kiteItem.toLowerCase(Locale.ENGLISH))) + if (user == null || user.isAuthorized("essentials.kit." + kiteItem.toLowerCase(Locale.ENGLISH))) { list.append(" ").append(capitalCase(kiteItem)); } @@ -31,7 +32,7 @@ public class Kit } catch (Exception ex) { - throw new Exception(_("kitError")); + throw new Exception(_("kitError"), ex); } } @@ -76,7 +77,7 @@ public class Kit catch (Exception e) { user.sendMessage(_("kitError2")); - throw new Exception(_("kitErrorHelp")); + throw new Exception(_("kitErrorHelp"),e); } } @@ -104,6 +105,10 @@ public class Kit continue; } final Enchantment enchantment = Enchantments.getByName(split[0]); + if (enchantment == null) + { + throw new Exception("Enchantment not found: " + split[0]); + } int level; if (split.length > 1) { @@ -113,7 +118,14 @@ public class Kit { level = enchantment.getMaxLevel(); } - stack.addEnchantment(enchantment, level); + try + { + stack.addEnchantment(enchantment, level); + } + catch (Exception ex) + { + throw new Exception("Enchantment " + enchantment.getName() + ": " + ex.getMessage(), ex); + } } } @@ -141,7 +153,15 @@ public class Kit catch (Exception e) { user.updateInventory(); - throw new Exception(_("kitError2")); + if (ess.getSettings().isDebug()) + { + ess.getLogger().log(Level.WARNING, e.getMessage()); + } + else + { + ess.getLogger().log(Level.WARNING, e.getMessage()); + } + throw new Exception(_("kitError2"), e); } } } diff --git a/Essentials/src/com/earth2me/essentials/Settings.java b/Essentials/src/com/earth2me/essentials/Settings.java index 9dee4e990..7ee6a7057 100644 --- a/Essentials/src/com/earth2me/essentials/Settings.java +++ b/Essentials/src/com/earth2me/essentials/Settings.java @@ -382,6 +382,8 @@ public class Settings implements ISettings config.load(); noGodWorlds = new HashSet<String>(config.getStringList("no-god-in-worlds")); enabledSigns = _getEnabledSigns(); + teleportInvulnerability = _isTeleportInvulnerability(); + disableItemPickupWhileAfk = _getDisableItemPickupWhileAfk(); itemSpawnBl = _getItemSpawnBlacklist(); kits = _getKits(); chatFormats.clear(); @@ -694,10 +696,16 @@ public class Settings implements ISettings { return config.getBoolean("register-back-in-listener", false); } + private boolean disableItemPickupWhileAfk; @Override public boolean getDisableItemPickupWhileAfk() { + return disableItemPickupWhileAfk; + } + + private boolean _getDisableItemPickupWhileAfk() + { return config.getBoolean("disable-item-pickup-while-afk", true); } @@ -745,10 +753,22 @@ public class Settings implements ISettings { this.metricsEnabled = metricsEnabled; } + private boolean teleportInvulnerability; @Override public long getTeleportInvulnerability() { return config.getLong("teleport-invulnerability", 0) * 1000; } + + private boolean _isTeleportInvulnerability() + { + return (config.getLong("teleport-invulnerability", 0) > 0); + } + + @Override + public boolean isTeleportInvulnerability() + { + return teleportInvulnerability; + } } diff --git a/Essentials/src/com/earth2me/essentials/Trade.java b/Essentials/src/com/earth2me/essentials/Trade.java index 730037d9a..3d3f36d8c 100644 --- a/Essentials/src/com/earth2me/essentials/Trade.java +++ b/Essentials/src/com/earth2me/essentials/Trade.java @@ -20,6 +20,7 @@ import org.bukkit.inventory.ItemStack; public class Trade { private final transient String command; + private final transient String fallbackCommand; private final transient Double money; private final transient ItemStack itemStack; private final transient Integer exp; @@ -27,27 +28,33 @@ public class Trade public Trade(final String command, final IEssentials ess) { - this(command, null, null, null, ess); + this(command, null, null, null, null, ess); + } + + public Trade(final String command, final String fallback, final IEssentials ess) + { + this(command, fallback, null, null, null, ess); } public Trade(final double money, final IEssentials ess) { - this(null, money, null, null, ess); + this(null, null, money, null, null, ess); } public Trade(final ItemStack items, final IEssentials ess) { - this(null, null, items, null, ess); + this(null, null, null, items, null, ess); } public Trade(final int exp, final IEssentials ess) { - this(null, null, null, exp, ess); + this(null, null, null, null, exp, ess); } - private Trade(final String command, final Double money, final ItemStack item, final Integer exp, final IEssentials ess) + private Trade(final String command, final String fallback, final Double money, final ItemStack item, final Integer exp, final IEssentials ess) { this.command = command; + this.fallbackCommand = fallback; this.money = money; this.itemStack = item; this.exp = exp; @@ -197,6 +204,10 @@ public class Trade && !user.isAuthorized("essentials.nocommandcost." + command)) { cost = ess.getSettings().getCommandCost(command.charAt(0) == '/' ? command.substring(1) : command); + if (cost == 0.0 && fallbackCommand != null && !fallbackCommand.isEmpty()) + { + cost = ess.getSettings().getCommandCost(fallbackCommand.charAt(0) == '/' ? fallbackCommand.substring(1) : fallbackCommand); + } } return cost; } diff --git a/Essentials/src/com/earth2me/essentials/User.java b/Essentials/src/com/earth2me/essentials/User.java index f931b07d9..a8149e773 100644 --- a/Essentials/src/com/earth2me/essentials/User.java +++ b/Essentials/src/com/earth2me/essentials/User.java @@ -453,6 +453,10 @@ public class User extends UserData implements Comparable<User>, IReplyTo, IUser public void setHidden(final boolean hidden) { this.hidden = hidden; + if (hidden == true) + { + setLastLogout(getLastOnlineActivity()); + } } //Returns true if status expired during this check @@ -626,7 +630,7 @@ public class User extends UserData implements Comparable<User>, IReplyTo, IUser teleportInvulnerabilityTimestamp = 0; } } - + public boolean hasInvulnerabilityAfterTeleport() { return teleportInvulnerabilityTimestamp != 0 && teleportInvulnerabilityTimestamp >= System.currentTimeMillis(); diff --git a/Essentials/src/com/earth2me/essentials/Util.java b/Essentials/src/com/earth2me/essentials/Util.java index 510ab8a9a..73817f645 100644 --- a/Essentials/src/com/earth2me/essentials/Util.java +++ b/Essentials/src/com/earth2me/essentials/Util.java @@ -80,11 +80,17 @@ public class Util _("second"), _("seconds") }; + int accuracy = 0; for (int i = 0; i < types.length; i++) { + if (accuracy > 2) + { + break; + } int diff = dateDiff(types[i], fromDate, toDate, future); if (diff > 0) { + accuracy++; sb.append(" ").append(diff).append(" ").append(names[i * 2 + (diff > 1 ? 1 : 0)]); } } @@ -92,7 +98,7 @@ public class Util { return "now"; } - return sb.toString(); + return sb.toString().trim(); } private static int dateDiff(int type, Calendar fromDate, Calendar toDate, boolean future) @@ -209,6 +215,12 @@ public class Util { c.add(Calendar.SECOND, seconds * (future ? 1 : -1)); } + + Calendar max = new GregorianCalendar(); + max.add(Calendar.YEAR, 10); + if (c.after(max)) { + return max.getTimeInMillis(); + } return c.getTimeInMillis(); } // The player can stand inside these materials @@ -242,6 +254,7 @@ public class Util AIR_MATERIALS.add(Material.REDSTONE_TORCH_OFF.getId()); AIR_MATERIALS.add(Material.REDSTONE_TORCH_ON.getId()); AIR_MATERIALS.add(Material.STONE_BUTTON.getId()); + AIR_MATERIALS.add(Material.SNOW.getId()); AIR_MATERIALS.add(Material.SUGAR_CANE_BLOCK.getId()); AIR_MATERIALS.add(Material.DIODE_BLOCK_OFF.getId()); AIR_MATERIALS.add(Material.DIODE_BLOCK_ON.getId()); @@ -249,8 +262,10 @@ public class Util AIR_MATERIALS.add(Material.PUMPKIN_STEM.getId()); AIR_MATERIALS.add(Material.MELON_STEM.getId()); AIR_MATERIALS.add(Material.VINE.getId()); - AIR_MATERIALS.add(Material.NETHER_WARTS.getId()); + AIR_MATERIALS.add(Material.FENCE_GATE.getId()); AIR_MATERIALS.add(Material.WATER_LILY.getId()); + AIR_MATERIALS.add(Material.NETHER_FENCE.getId()); + AIR_MATERIALS.add(Material.NETHER_WARTS.getId()); for (Integer integer : AIR_MATERIALS) { diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandban.java b/Essentials/src/com/earth2me/essentials/commands/Commandban.java index bc09cbba8..ca6707088 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandban.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandban.java @@ -50,7 +50,9 @@ public class Commandban extends EssentialsCommand else { banReason = _("defaultBanReason"); + user.setBanReason(""); } + user.setBanned(true); user.kickPlayer(banReason); final String senderName = sender instanceof Player ? ((Player)sender).getDisplayName() : Console.NAME; diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandgamemode.java b/Essentials/src/com/earth2me/essentials/commands/Commandgamemode.java index 62ace9357..aad79d616 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandgamemode.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandgamemode.java @@ -24,7 +24,7 @@ public class Commandgamemode extends EssentialsCommand throw new NotEnoughArgumentsException(); } - gamemodeOtherPlayers(server, sender, args[0]); + gamemodeOtherPlayers(server, sender, args); } @Override @@ -32,7 +32,7 @@ public class Commandgamemode extends EssentialsCommand { if (args.length > 0 && !args[0].trim().isEmpty() && user.isAuthorized("essentials.gamemode.others")) { - gamemodeOtherPlayers(server, user, args[0]); + gamemodeOtherPlayers(server, user, args); return; } @@ -40,9 +40,9 @@ public class Commandgamemode extends EssentialsCommand user.sendMessage(_("gameMode", _(user.getGameMode().toString().toLowerCase(Locale.ENGLISH)), user.getDisplayName())); } - private void gamemodeOtherPlayers(final Server server, final CommandSender sender, final String name) + private void gamemodeOtherPlayers(final Server server, final CommandSender sender, final String[] args) { - for (Player matchPlayer : server.matchPlayer(name)) + for (Player matchPlayer : server.matchPlayer(args[0])) { final User player = ess.getUser(matchPlayer); if (player.isHidden()) @@ -50,7 +50,21 @@ public class Commandgamemode extends EssentialsCommand continue; } - player.setGameMode(player.getGameMode() == GameMode.SURVIVAL ? GameMode.CREATIVE : GameMode.SURVIVAL); + if (args.length > 1) + { + if (args[1].contains("creat") || args[1].equalsIgnoreCase("1")) + { + player.setGameMode(GameMode.CREATIVE); + } + else + { + player.setGameMode(GameMode.SURVIVAL); + } + } + else + { + player.setGameMode(player.getGameMode() == GameMode.SURVIVAL ? GameMode.CREATIVE : GameMode.SURVIVAL); + } sender.sendMessage(_("gameMode", _(player.getGameMode().toString().toLowerCase(Locale.ENGLISH)), player.getDisplayName())); } } diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandgive.java b/Essentials/src/com/earth2me/essentials/commands/Commandgive.java index 701fa6577..106efa6e9 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandgive.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandgive.java @@ -3,6 +3,7 @@ package com.earth2me.essentials.commands; import static com.earth2me.essentials.I18n._; import com.earth2me.essentials.craftbukkit.InventoryWorkaround; import com.earth2me.essentials.User; +import com.earth2me.essentials.Util; import java.util.Locale; import org.bukkit.ChatColor; import org.bukkit.Material; @@ -44,7 +45,12 @@ public class Commandgive extends EssentialsCommand final User giveTo = getPlayer(server, args, 0); - if (args.length > 2 && Integer.parseInt(args[2]) > 0) + if (args.length > 3 && Util.isInt(args[2]) && Util.isInt(args[3])) + { + stack.setDurability(Short.parseShort(args[2])); + stack.setAmount(Integer.parseInt(args[3])); + } + else if (args.length > 2 && Integer.parseInt(args[2]) > 0) { stack.setAmount(Integer.parseInt(args[2])); } @@ -59,7 +65,7 @@ public class Commandgive extends EssentialsCommand if (args.length > 3) { - for (int i = 3; i < args.length; i++) + for (int i = Util.isInt(args[3]) ? 4 : 3; i < args.length; i++) { final String[] split = args[i].split("[:+',;.]", 2); if (split.length < 1) diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandkick.java b/Essentials/src/com/earth2me/essentials/commands/Commandkick.java index ae5db48fb..3e2e08b50 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandkick.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandkick.java @@ -24,7 +24,7 @@ public class Commandkick extends EssentialsCommand } final User user = getPlayer(server, args, 0); - if (user.isAuthorized("essentials.kick.exempt")) + if (sender instanceof Player && user.isAuthorized("essentials.kick.exempt")) { throw new Exception(_("kickExempt")); } diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandkillall.java b/Essentials/src/com/earth2me/essentials/commands/Commandkillall.java index c0b47d20f..a455ccc20 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandkillall.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandkillall.java @@ -61,7 +61,7 @@ public class Commandkillall extends EssentialsCommand } catch (NumberFormatException e) { - throw new Exception(_("numberRequired")); + throw new Exception(_("numberRequired"), e); } } } diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandkit.java b/Essentials/src/com/earth2me/essentials/commands/Commandkit.java index 67f0fafd0..514a5acca 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandkit.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandkit.java @@ -4,6 +4,7 @@ import com.earth2me.essentials.*; import static com.earth2me.essentials.I18n._; import java.util.*; import org.bukkit.Server; +import org.bukkit.command.CommandSender; public class Commandkit extends EssentialsCommand @@ -18,39 +19,75 @@ public class Commandkit extends EssentialsCommand { if (args.length < 1) { - final String kitList = Kit.listKits(ess, user); - if (kitList.length() > 0) - { - user.sendMessage(_("kits", kitList)); - } - else - { - user.sendMessage(_("noKits")); - } + listKits(user); throw new NoChargeException(); } + else if (args.length > 1 && user.isAuthorized("essentials.kit.others")) + { + final User userTo = getPlayer(server, args, 1, true); + final String kitName = args[0].toLowerCase(Locale.ENGLISH); + giveKit(userTo, user, kitName); + } else { final String kitName = args[0].toLowerCase(Locale.ENGLISH); + giveKit(user, user, kitName); + } + } + + @Override + public void run(final Server server, final CommandSender sender, final String commandLabel, final String[] args) throws Exception + { + if (args.length < 2) + { + listKits(sender); + throw new NoChargeException(); + } + else + { + final User userTo = getPlayer(server, args, 1, true); + final String kitName = args[0].toLowerCase(Locale.ENGLISH); + final Map<String, Object> kit = ess.getSettings().getKit(kitName); + final List<String> items = Kit.getItems(userTo, kit); + Kit.expandItems(ess, userTo, items); - if (!user.isAuthorized("essentials.kit." + kitName)) - { - throw new Exception(_("noKitPermission", "essentials.kit." + kitName)); - } + sender.sendMessage(_("kitGive", kitName)); + } + } - final List<String> items = Kit.getItems(user, kit); + private void listKits(CommandSender sender) throws Exception + { + final String kitList = Kit.listKits(ess, null); + if (kitList.length() > 0) + { + sender.sendMessage(_("kits", kitList)); + } + else + { + sender.sendMessage(_("noKits")); + } + } - Kit.checkTime(user, kitName, kit); + private void giveKit(User userTo, User userFrom, String kitName) throws Exception + { + final Map<String, Object> kit = ess.getSettings().getKit(kitName); - final Trade charge = new Trade("kit-" + kitName, ess); - charge.isAffordableFor(user); + if (!userFrom.isAuthorized("essentials.kit." + kitName)) + { + throw new Exception(_("noKitPermission", "essentials.kit." + kitName)); + } - Kit.expandItems(ess, user, items); + final List<String> items = Kit.getItems(userTo, kit); - charge.charge(user); - user.sendMessage(_("kitGive", kitName)); + Kit.checkTime(userFrom, kitName, kit); - } + final Trade charge = new Trade("kit-" + kitName, ess); + charge.isAffordableFor(userFrom); + + Kit.expandItems(ess, userTo, items); + + charge.charge(userFrom); + userTo.sendMessage(_("kitGive", kitName)); } } diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandpowertool.java b/Essentials/src/com/earth2me/essentials/commands/Commandpowertool.java index ca03364b2..d1d0fb582 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandpowertool.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandpowertool.java @@ -51,26 +51,18 @@ public class Commandpowertool extends EssentialsCommand { user.sendMessage(_("powerToolList", Util.joinList(powertools), itemName)); } - return; + throw new NoChargeException(); } if (command.startsWith("r:")) { - try + command = command.substring(2); + if (!powertools.contains(command)) { - command = command.substring(2); - if (!powertools.contains(command)) - { - throw new Exception(_("powerToolNoSuchCommandAssigned", command, itemName)); - } - - powertools.remove(command); - user.sendMessage(_("powerToolRemove", command, itemName)); - } - catch (Exception e) - { - user.sendMessage(e.getMessage()); - return; + throw new Exception(_("powerToolNoSuchCommandAssigned", command, itemName)); } + + powertools.remove(command); + user.sendMessage(_("powerToolRemove", command, itemName)); } else { @@ -85,7 +77,6 @@ public class Commandpowertool extends EssentialsCommand { throw new Exception(_("powerToolAlreadySet", command, itemName)); } - } else if (powertools != null && !powertools.isEmpty()) { @@ -110,6 +101,11 @@ public class Commandpowertool extends EssentialsCommand user.sendMessage(_("powerToolRemoveAll", itemName)); } + if (!user.arePowerToolsEnabled()) + { + user.setPowerToolsEnabled(true); + user.sendMessage(_("powerToolsEnabled")); + } user.setPowertool(itemStack, powertools); } } diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandptime.java b/Essentials/src/com/earth2me/essentials/commands/Commandptime.java index b16cbdc34..738b8db1a 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandptime.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandptime.java @@ -79,7 +79,7 @@ public class Commandptime extends EssentialsCommand } catch (NumberFormatException e) { - throw new NotEnoughArgumentsException(); + throw new NotEnoughArgumentsException(e); } } diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandremove.java b/Essentials/src/com/earth2me/essentials/commands/Commandremove.java index d245d1239..912434f08 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandremove.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandremove.java @@ -47,7 +47,7 @@ public class Commandremove extends EssentialsCommand } catch (NumberFormatException e) { - throw new Exception(_("numberRequired")); + throw new Exception(_("numberRequired"), e); } } @@ -57,7 +57,7 @@ public class Commandremove extends EssentialsCommand } catch (IllegalArgumentException e) { - throw new NotEnoughArgumentsException(); //TODO: translate and list types + throw new NotEnoughArgumentsException(e); //TODO: translate and list types } removeEntities(user, world, toRemove, radius); @@ -84,7 +84,7 @@ public class Commandremove extends EssentialsCommand } catch (IllegalArgumentException e) { - throw new NotEnoughArgumentsException(); //TODO: translate and list types + throw new NotEnoughArgumentsException(e); //TODO: translate and list types } removeEntities(sender, world, toRemove, 0); } @@ -92,8 +92,9 @@ public class Commandremove extends EssentialsCommand protected void removeEntities(final CommandSender sender, final World world, final ToRemove toRemove, int radius) throws Exception { int removed = 0; - if (radius > 0) { - radius*=radius; + if (radius > 0) + { + radius *= radius; } for (Chunk chunk : world.getLoadedChunks()) { diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandrepair.java b/Essentials/src/com/earth2me/essentials/commands/Commandrepair.java index 8d1278fd0..d621109f7 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandrepair.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandrepair.java @@ -53,6 +53,8 @@ public class Commandrepair extends EssentialsCommand } else if (args[0].equalsIgnoreCase("all")) { + final Trade charge = new Trade("repair-all", ess); + charge.isAffordableFor(user); final List<String> repaired = new ArrayList<String>(); repairItems(user.getInventory().getContents(), user, repaired); @@ -69,6 +71,7 @@ public class Commandrepair extends EssentialsCommand { user.sendMessage(_("repair", Util.joinList(repaired))); } + charge.charge(user); } else @@ -102,7 +105,7 @@ public class Commandrepair extends EssentialsCommand continue; } final String itemName = item.getType().toString().toLowerCase(Locale.ENGLISH); - final Trade charge = new Trade("repair-" + itemName.replace('_', '-'), ess); + final Trade charge = new Trade("repair-" + itemName.replace('_', '-'), "repair-item", ess); try { charge.isAffordableFor(user); diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandseen.java b/Essentials/src/com/earth2me/essentials/commands/Commandseen.java index 38abb2dab..75f04da33 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandseen.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandseen.java @@ -3,6 +3,7 @@ package com.earth2me.essentials.commands; import static com.earth2me.essentials.I18n._; import com.earth2me.essentials.User; import com.earth2me.essentials.Util; +import org.bukkit.Location; import org.bukkit.Server; import org.bukkit.command.CommandSender; @@ -17,16 +18,16 @@ public class Commandseen extends EssentialsCommand @Override protected void run(final Server server, final CommandSender sender, final String commandLabel, final String[] args) throws Exception { - seen(server, sender, args, true); + seen(server, sender, args, true, true); } @Override protected void run(final Server server, final User user, final String commandLabel, final String[] args) throws Exception { - seen(server, user, args, user.isAuthorized("essentials.seen.banreason")); + seen(server, user, args, user.isAuthorized("essentials.seen.banreason"), user.isAuthorized("essentials.seen.extra")); } - protected void seen(final Server server, final CommandSender sender, final String[] args, final boolean show) throws Exception + protected void seen(final Server server, final CommandSender sender, final String[] args, final boolean showBan, final boolean extra) throws Exception { if (args.length < 1) { @@ -37,6 +38,10 @@ public class Commandseen extends EssentialsCommand User player = getPlayer(server, args, 0); player.setDisplayNick(); sender.sendMessage(_("seenOnline", player.getDisplayName(), Util.formatDateDiff(player.getLastLogin()))); + if (extra) + { + sender.sendMessage(_("whoisIPAddress", player.getAddress().getAddress().toString())); + } } catch (NoSuchFieldException e) { @@ -46,10 +51,16 @@ public class Commandseen extends EssentialsCommand throw new Exception(_("playerNotFound")); } player.setDisplayNick(); - sender.sendMessage(_("seenOffline", player.getDisplayName(), Util.formatDateDiff(player.getLastLogout()))); + sender.sendMessage(_("seenOffline", player.getName(), Util.formatDateDiff(player.getLastLogout()))); if (player.isBanned()) { - sender.sendMessage(_("whoisBanned", show ? player.getBanReason() : _("true"))); + sender.sendMessage(_("whoisBanned", showBan ? player.getBanReason() : _("true"))); + } + if (extra) + { + sender.sendMessage(_("whoisIPAddress", player.getLastLoginAddress())); + final Location loc = player.getLastLocation(); + sender.sendMessage(_("whoisLocation", loc.getWorld().getName(), loc.getBlockX(), loc.getBlockY(), loc.getBlockZ())); } } } diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandsethome.java b/Essentials/src/com/earth2me/essentials/commands/Commandsethome.java index ec19ca678..d59ac4a31 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandsethome.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandsethome.java @@ -77,7 +77,7 @@ public class Commandsethome extends EssentialsCommand { user.setHome(); } - user.sendMessage(_("homeSet")); + 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/Commandspawnmob.java b/Essentials/src/com/earth2me/essentials/commands/Commandspawnmob.java index fdaa0eb9e..2546a76dd 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandspawnmob.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandspawnmob.java @@ -103,7 +103,7 @@ public class Commandspawnmob extends EssentialsCommand } catch (MobException e) { - throw new Exception(_("unableToSpawnMob")); + throw new Exception(_("unableToSpawnMob"), e); } if (mountType != null) @@ -129,7 +129,7 @@ public class Commandspawnmob extends EssentialsCommand } catch (MobException e) { - throw new Exception(_("unableToSpawnMob")); + throw new Exception(_("unableToSpawnMob"), e); } spawnedMob.setPassenger(spawnedMount); } @@ -164,7 +164,7 @@ public class Commandspawnmob extends EssentialsCommand } catch (MobException e) { - throw new Exception(_("unableToSpawnMob")); + throw new Exception(_("unableToSpawnMob"), e); } spawnedMob.setPassenger(spawnedMount); } diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandtime.java b/Essentials/src/com/earth2me/essentials/commands/Commandtime.java index c49f34fbd..8e5b7c017 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandtime.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandtime.java @@ -3,6 +3,7 @@ package com.earth2me.essentials.commands; import com.earth2me.essentials.DescParseTickFormat; import static com.earth2me.essentials.I18n._; import com.earth2me.essentials.User; +import com.earth2me.essentials.Util; import java.util.*; import org.bukkit.Server; import org.bukkit.World; @@ -19,16 +20,23 @@ public class Commandtime extends EssentialsCommand @Override public void run(final Server server, final CommandSender sender, final String commandLabel, final String[] args) throws Exception { + final List<String> argList = new ArrayList<String>(Arrays.asList(args)); + if ((argList.remove("set") || argList.remove("add")) && Util.isInt(argList.get(0))) + { + ess.getLogger().info("debug edited 0" + argList.get(0).toString()); + } + final String[] validArgs = argList.toArray(new String[0]); + // Which World(s) are we interested in? String worldSelector = null; - if (args.length == 2) + if (validArgs.length == 2) { - worldSelector = args[1]; + worldSelector = validArgs[1]; } final Set<World> worlds = getWorlds(server, sender, worldSelector); // If no arguments we are reading the time - if (args.length == 0) + if (validArgs.length == 0) { getWorldsTime(sender, worlds); return; @@ -45,11 +53,11 @@ public class Commandtime extends EssentialsCommand long ticks; try { - ticks = DescParseTickFormat.parse(args[0]); + ticks = DescParseTickFormat.parse(validArgs[0]); } catch (NumberFormatException e) { - throw new NotEnoughArgumentsException(); + throw new NotEnoughArgumentsException(e); } setWorldsTime(sender, worlds, ticks); diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandtpo.java b/Essentials/src/com/earth2me/essentials/commands/Commandtpo.java index 53204114e..4d7ced478 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandtpo.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandtpo.java @@ -34,6 +34,7 @@ public class Commandtpo extends EssentialsCommand } user.sendMessage(_("teleporting")); user.getTeleport().now(player, false, TeleportCause.COMMAND); + break; default: if (!user.isAuthorized("essentials.tp.others")) diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandtppos.java b/Essentials/src/com/earth2me/essentials/commands/Commandtppos.java index 226fa44e3..75910cd85 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandtppos.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandtppos.java @@ -5,6 +5,7 @@ import com.earth2me.essentials.Trade; import com.earth2me.essentials.User; import org.bukkit.Location; import org.bukkit.Server; +import org.bukkit.command.CommandSender; import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; @@ -41,4 +42,30 @@ public class Commandtppos extends EssentialsCommand user.getTeleport().teleport(location, charge, TeleportCause.COMMAND); throw new NoChargeException(); } + + @Override + public void run(final Server server, final CommandSender sender, final String commandLabel, final String[] args) throws Exception + { + if (args.length < 4) + { + throw new NotEnoughArgumentsException(); + } + + User user = ess.getUser(server.getPlayer(args[0])); + final int x = Integer.parseInt(args[1]); + final int y = Integer.parseInt(args[2]); + final int z = Integer.parseInt(args[3]); + final Location location = new Location(user.getWorld(), x, y, z); + if (args.length > 4) + { + location.setYaw((Float.parseFloat(args[4]) + 180 + 360) % 360); + } + if (args.length > 5) + { + location.setPitch(Float.parseFloat(args[5])); + } + sender.sendMessage(_("teleporting")); + user.sendMessage(_("teleporting")); + user.getTeleport().teleport(location, null, TeleportCause.COMMAND); + } }
\ No newline at end of file diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandunban.java b/Essentials/src/com/earth2me/essentials/commands/Commandunban.java index 8bc3ad068..dda1475d0 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandunban.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandunban.java @@ -29,7 +29,7 @@ public class Commandunban extends EssentialsCommand } catch (NoSuchFieldException e) { - throw new Exception(_("playerNotFound")); + throw new Exception(_("playerNotFound"), e); } } } diff --git a/Essentials/src/com/earth2me/essentials/craftbukkit/SetExpFix.java b/Essentials/src/com/earth2me/essentials/craftbukkit/SetExpFix.java index 70d15b856..b788fa7ee 100644 --- a/Essentials/src/com/earth2me/essentials/craftbukkit/SetExpFix.java +++ b/Essentials/src/com/earth2me/essentials/craftbukkit/SetExpFix.java @@ -53,7 +53,7 @@ public class SetExpFix //Without this people would be able to use exp and then still sell it. public static int getTotalExperience(final Player player) { - int exp = (int) (getExpToLevel(player) * player.getExp()); + int exp = (int)Math.round(getExpToLevel(player) * player.getExp()); int currentLevel = player.getLevel(); while (currentLevel > 0) { diff --git a/Essentials/src/com/earth2me/essentials/metrics/MetricsStarter.java b/Essentials/src/com/earth2me/essentials/metrics/MetricsStarter.java index 6380b7f6c..0ea692cc9 100644 --- a/Essentials/src/com/earth2me/essentials/metrics/MetricsStarter.java +++ b/Essentials/src/com/earth2me/essentials/metrics/MetricsStarter.java @@ -4,6 +4,7 @@ import com.earth2me.essentials.IEssentials; import com.earth2me.essentials.metrics.Metrics.Graph; import com.earth2me.essentials.metrics.Metrics.Plotter; import com.earth2me.essentials.register.payment.Method; +import com.earth2me.essentials.register.payment.methods.VaultEco; import java.util.Locale; import java.util.logging.Level; @@ -150,11 +151,19 @@ public class MetricsStarter implements Runnable final Method method = ess.getPaymentMethod().getMethod(); if (method != null) { - String version = method.getVersion(); - final int dashPosition = version.indexOf('-'); - if (dashPosition > 0) + String version; + if (method instanceof VaultEco) { - version = version.substring(0, dashPosition); + version = ((VaultEco)method).getEconomy(); + } + else + { + version = method.getVersion(); + final int dashPosition = version.indexOf('-'); + if (dashPosition > 0) + { + version = version.substring(0, dashPosition); + } } depGraph.addPlotter(new SimplePlotter(method.getName() + " " + version)); } diff --git a/Essentials/src/com/earth2me/essentials/perm/PermissionsBukkitHandler.java b/Essentials/src/com/earth2me/essentials/perm/PermissionsBukkitHandler.java index b3cc62979..aef6401d9 100644 --- a/Essentials/src/com/earth2me/essentials/perm/PermissionsBukkitHandler.java +++ b/Essentials/src/com/earth2me/essentials/perm/PermissionsBukkitHandler.java @@ -78,6 +78,6 @@ public class PermissionsBukkitHandler extends SuperpermsHandler @Override public boolean canBuild(Player base, String group) { - return base.hasPermission("essentials.build") || base.hasPermission("permissions.build"); + return hasPermission(base, "essentials.build") || hasPermission(base, "permissions.build"); } } diff --git a/Essentials/src/com/earth2me/essentials/perm/PrivilegesHandler.java b/Essentials/src/com/earth2me/essentials/perm/PrivilegesHandler.java index c81f93cbc..6cc97f30e 100644 --- a/Essentials/src/com/earth2me/essentials/perm/PrivilegesHandler.java +++ b/Essentials/src/com/earth2me/essentials/perm/PrivilegesHandler.java @@ -55,7 +55,7 @@ public class PrivilegesHandler extends SuperpermsHandler @Override public boolean canBuild(Player base, String group) { - return base.hasPermission("essentials.build") || base.hasPermission("privileges.build"); + return hasPermission(base, "essentials.build") || hasPermission(base, "privileges.build"); } } diff --git a/Essentials/src/com/earth2me/essentials/register/payment/Method.java b/Essentials/src/com/earth2me/essentials/register/payment/Method.java index a942667e8..c4c9d401a 100644 --- a/Essentials/src/com/earth2me/essentials/register/payment/Method.java +++ b/Essentials/src/com/earth2me/essentials/register/payment/Method.java @@ -33,6 +33,13 @@ public interface Method * @return <code>String</code> Plugin name. */ public String getName(); + + /** + * Returns the reported name of this method. + * + * @return <code>String</code> Plugin name. + */ + public String getLongName(); /** * Returns the actual version of this method. diff --git a/Essentials/src/com/earth2me/essentials/register/payment/methods/BOSE6.java b/Essentials/src/com/earth2me/essentials/register/payment/methods/BOSE6.java index c3b71d4e3..a77a1d3b0 100644 --- a/Essentials/src/com/earth2me/essentials/register/payment/methods/BOSE6.java +++ b/Essentials/src/com/earth2me/essentials/register/payment/methods/BOSE6.java @@ -8,9 +8,8 @@ import org.bukkit.plugin.Plugin; /** * BOSEconomy 6 Implementation of Method * - * @author Nijikokun <nijikokun@shortmail.com> (@nijikokun) - * @copyright (c) 2011 - * @license AOL license <http://aol.nexua.org> + * @author Nijikokun <nijikokun@shortmail.com> (@nijikokun) @copyright (c) 2011 @license AOL license + * <http://aol.nexua.org> */ @SuppressWarnings("deprecation") public class BOSE6 implements Method @@ -30,6 +29,12 @@ public class BOSE6 implements Method } @Override + public String getLongName() + { + return getName(); + } + + @Override public String getVersion() { return "0.6.2"; diff --git a/Essentials/src/com/earth2me/essentials/register/payment/methods/BOSE7.java b/Essentials/src/com/earth2me/essentials/register/payment/methods/BOSE7.java index d21ea6244..7aab8c459 100644 --- a/Essentials/src/com/earth2me/essentials/register/payment/methods/BOSE7.java +++ b/Essentials/src/com/earth2me/essentials/register/payment/methods/BOSE7.java @@ -9,9 +9,8 @@ import org.bukkit.plugin.Plugin; * BOSEconomy 7 Implementation of Method * * @author Acrobot - * @author Nijikokun <nijikokun@shortmail.com> (@nijikokun) - * @copyright (c) 2011 - * @license AOL license <http://aol.nexua.org> + * @author Nijikokun <nijikokun@shortmail.com> (@nijikokun) @copyright (c) 2011 @license AOL license + * <http://aol.nexua.org> */ public class BOSE7 implements Method { @@ -30,6 +29,12 @@ public class BOSE7 implements Method } @Override + public String getLongName() + { + return getName(); + } + + @Override public String getVersion() { return "0.7.0"; diff --git a/Essentials/src/com/earth2me/essentials/register/payment/methods/MCUR.java b/Essentials/src/com/earth2me/essentials/register/payment/methods/MCUR.java index 87d633b5c..92c4f4f19 100644 --- a/Essentials/src/com/earth2me/essentials/register/payment/methods/MCUR.java +++ b/Essentials/src/com/earth2me/essentials/register/payment/methods/MCUR.java @@ -9,9 +9,7 @@ import org.bukkit.plugin.Plugin; /** * MultiCurrency Method implementation. * - * @author Acrobot - * @copyright (c) 2011 - * @license AOL license <http://aol.nexua.org> + * @author Acrobot @copyright (c) 2011 @license AOL license <http://aol.nexua.org> */ public class MCUR implements Method { @@ -30,6 +28,12 @@ public class MCUR implements Method } @Override + public String getLongName() + { + return getName(); + } + + @Override public String getVersion() { return "0.09"; diff --git a/Essentials/src/com/earth2me/essentials/register/payment/methods/VaultEco.java b/Essentials/src/com/earth2me/essentials/register/payment/methods/VaultEco.java index 84ce816cf..f0a8171f3 100644 --- a/Essentials/src/com/earth2me/essentials/register/payment/methods/VaultEco.java +++ b/Essentials/src/com/earth2me/essentials/register/payment/methods/VaultEco.java @@ -34,8 +34,18 @@ public class VaultEco implements Method @Override public String getName() { - - return this.vault.getDescription().getName().concat(" - Economy: ").concat(economy == null ? "NoEco" : economy.getName()); + return this.vault.getDescription().getName(); + } + + public String getEconomy() + { + return economy == null ? "NoEco" : economy.getName(); + } + + @Override + public String getLongName() + { + return getName().concat(" - Economy: ").concat(getEconomy()); } @Override diff --git a/Essentials/src/com/earth2me/essentials/register/payment/methods/iCo4.java b/Essentials/src/com/earth2me/essentials/register/payment/methods/iCo4.java index 52fb36e15..4542f6743 100644 --- a/Essentials/src/com/earth2me/essentials/register/payment/methods/iCo4.java +++ b/Essentials/src/com/earth2me/essentials/register/payment/methods/iCo4.java @@ -9,9 +9,8 @@ import org.bukkit.plugin.Plugin; /** * iConomy 4 Implementation of Method * - * @author Nijikokun <nijikokun@shortmail.com> (@nijikokun) - * @copyright (c) 2011 - * @license AOL license <http://aol.nexua.org> + * @author Nijikokun <nijikokun@shortmail.com> (@nijikokun) @copyright (c) 2011 @license AOL license + * <http://aol.nexua.org> */ public class iCo4 implements Method { @@ -30,6 +29,12 @@ public class iCo4 implements Method } @Override + public String getLongName() + { + return getName(); + } + + @Override public String getVersion() { return "4"; diff --git a/Essentials/src/com/earth2me/essentials/register/payment/methods/iCo5.java b/Essentials/src/com/earth2me/essentials/register/payment/methods/iCo5.java index 3b2fb2f6d..87144fa34 100644 --- a/Essentials/src/com/earth2me/essentials/register/payment/methods/iCo5.java +++ b/Essentials/src/com/earth2me/essentials/register/payment/methods/iCo5.java @@ -12,9 +12,8 @@ import org.bukkit.plugin.Plugin; /** * iConomy 5 Implementation of Method * - * @author Nijikokun <nijikokun@shortmail.com> (@nijikokun) - * @copyright (c) 2011 - * @license AOL license <http://aol.nexua.org> + * @author Nijikokun <nijikokun@shortmail.com> (@nijikokun) @copyright (c) 2011 @license AOL license + * <http://aol.nexua.org> */ public class iCo5 implements Method { @@ -33,6 +32,12 @@ public class iCo5 implements Method } @Override + public String getLongName() + { + return getName(); + } + + @Override public String getVersion() { return "5"; diff --git a/Essentials/src/com/earth2me/essentials/register/payment/methods/iCo6.java b/Essentials/src/com/earth2me/essentials/register/payment/methods/iCo6.java index 1a2950847..ecd1d6aae 100644 --- a/Essentials/src/com/earth2me/essentials/register/payment/methods/iCo6.java +++ b/Essentials/src/com/earth2me/essentials/register/payment/methods/iCo6.java @@ -11,9 +11,8 @@ import org.bukkit.plugin.Plugin; /** * iConomy 6 Implementation of Method * - * @author Nijikokun <nijikokun@shortmail.com> (@nijikokun) - * @copyright (c) 2011 - * @license AOL license <http://aol.nexua.org> + * @author Nijikokun <nijikokun@shortmail.com> (@nijikokun) @copyright (c) 2011 @license AOL license + * <http://aol.nexua.org> */ public class iCo6 implements Method { @@ -32,6 +31,12 @@ public class iCo6 implements Method } @Override + public String getLongName() + { + return getName(); + } + + @Override public String getVersion() { return "6"; diff --git a/Essentials/src/com/earth2me/essentials/signs/SignBlockListener.java b/Essentials/src/com/earth2me/essentials/signs/SignBlockListener.java index 8acca9804..79e5bf2be 100644 --- a/Essentials/src/com/earth2me/essentials/signs/SignBlockListener.java +++ b/Essentials/src/com/earth2me/essentials/signs/SignBlockListener.java @@ -19,16 +19,18 @@ public class SignBlockListener implements Listener { private final transient IEssentials ess; private final static Logger LOGGER = Logger.getLogger("Minecraft"); + private final static int WALL_SIGN = Material.WALL_SIGN.getId(); + private final static int SIGN_POST = Material.SIGN_POST.getId(); public SignBlockListener(IEssentials ess) { this.ess = ess; } - @EventHandler(priority = EventPriority.HIGHEST) + @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void onBlockBreak(final BlockBreakEvent event) { - if (event.isCancelled() || ess.getSettings().areSignsDisabled()) + if (ess.getSettings().areSignsDisabled()) { return; } @@ -42,7 +44,7 @@ public class SignBlockListener implements Listener public boolean protectSignsAndBlocks(final Block block, final Player player) { final int mat = block.getTypeId(); - if (mat == Material.SIGN_POST.getId() || mat == Material.WALL_SIGN.getId()) + if (mat == SIGN_POST || mat == WALL_SIGN) { final Sign csign = (Sign)block.getState(); @@ -76,10 +78,10 @@ public class SignBlockListener implements Listener return false; } - @EventHandler(priority = EventPriority.HIGHEST) + @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void onSignChange(final SignChangeEvent event) { - if (event.isCancelled() || ess.getSettings().areSignsDisabled()) + if (ess.getSettings().areSignsDisabled()) { return; } @@ -107,25 +109,25 @@ public class SignBlockListener implements Listener } } - @EventHandler(priority = EventPriority.LOW) + @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) public void onBlockPlace(final BlockPlaceEvent event) { - if (event.isCancelled() || ess.getSettings().areSignsDisabled()) + if (ess.getSettings().areSignsDisabled()) { return; } final Block against = event.getBlockAgainst(); - if ((against.getType() == Material.WALL_SIGN - || against.getType() == Material.SIGN_POST) + if ((against.getTypeId() == WALL_SIGN + || against.getTypeId() == SIGN_POST) && EssentialsSign.isValidSign(new EssentialsSign.BlockSign(against))) { event.setCancelled(true); return; } final Block block = event.getBlock(); - if (block.getType() == Material.WALL_SIGN - || block.getType() == Material.SIGN_POST) + if (block.getTypeId() == WALL_SIGN + || block.getTypeId() == SIGN_POST) { return; } @@ -141,17 +143,17 @@ public class SignBlockListener implements Listener } } - @EventHandler(priority = EventPriority.LOW) + @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) public void onBlockBurn(final BlockBurnEvent event) { - if (event.isCancelled() || ess.getSettings().areSignsDisabled()) + if (ess.getSettings().areSignsDisabled()) { return; } final Block block = event.getBlock(); - if (((block.getType() == Material.WALL_SIGN - || block.getType() == Material.SIGN_POST) + if (((block.getTypeId() == WALL_SIGN + || block.getTypeId() == SIGN_POST) && EssentialsSign.isValidSign(new EssentialsSign.BlockSign(block))) || EssentialsSign.checkIfBlockBreaksSigns(block)) { @@ -169,17 +171,17 @@ public class SignBlockListener implements Listener } } - @EventHandler(priority = EventPriority.LOW) + @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) public void onBlockIgnite(final BlockIgniteEvent event) { - if (event.isCancelled() || ess.getSettings().areSignsDisabled()) + if (ess.getSettings().areSignsDisabled()) { return; } final Block block = event.getBlock(); - if (((block.getType() == Material.WALL_SIGN - || block.getType() == Material.SIGN_POST) + if (((block.getTypeId() == WALL_SIGN + || block.getTypeId() == SIGN_POST) && EssentialsSign.isValidSign(new EssentialsSign.BlockSign(block))) || EssentialsSign.checkIfBlockBreaksSigns(block)) { @@ -202,8 +204,8 @@ public class SignBlockListener implements Listener { for (Block block : event.getBlocks()) { - if (((block.getType() == Material.WALL_SIGN - || block.getType() == Material.SIGN_POST) + if (((block.getTypeId() == WALL_SIGN + || block.getTypeId() == SIGN_POST) && EssentialsSign.isValidSign(new EssentialsSign.BlockSign(block))) || EssentialsSign.checkIfBlockBreaksSigns(block)) { @@ -228,8 +230,8 @@ public class SignBlockListener implements Listener if (event.isSticky()) { final Block block = event.getBlock(); - if (((block.getType() == Material.WALL_SIGN - || block.getType() == Material.SIGN_POST) + if (((block.getTypeId() == WALL_SIGN + || block.getTypeId() == SIGN_POST) && EssentialsSign.isValidSign(new EssentialsSign.BlockSign(block))) || EssentialsSign.checkIfBlockBreaksSigns(block)) { diff --git a/Essentials/src/com/earth2me/essentials/signs/SignEnchant.java b/Essentials/src/com/earth2me/essentials/signs/SignEnchant.java index 5907442d9..a50ce967a 100644 --- a/Essentials/src/com/earth2me/essentials/signs/SignEnchant.java +++ b/Essentials/src/com/earth2me/essentials/signs/SignEnchant.java @@ -41,7 +41,7 @@ public class SignEnchant extends EssentialsSign } catch (NumberFormatException ex) { - throw new SignException(ex.getMessage()); + throw new SignException(ex.getMessage(), ex); } if (level < 1 || level > enchantment.getMaxLevel()) { @@ -57,7 +57,7 @@ public class SignEnchant extends EssentialsSign } catch (Throwable ex) { - throw new SignException(ex.getMessage()); + throw new SignException(ex.getMessage(), ex); } getTrade(sign, 3, ess); return true; diff --git a/Essentials/src/com/earth2me/essentials/signs/SignEntityListener.java b/Essentials/src/com/earth2me/essentials/signs/SignEntityListener.java index a0446179f..5a6ee177d 100644 --- a/Essentials/src/com/earth2me/essentials/signs/SignEntityListener.java +++ b/Essentials/src/com/earth2me/essentials/signs/SignEntityListener.java @@ -24,8 +24,8 @@ public class SignEntityListener implements Listener { for (Block block : event.blockList()) { - if (((block.getType() == Material.WALL_SIGN - || block.getType() == Material.SIGN_POST) + if (((block.getTypeId() == Material.WALL_SIGN.getId() + || block.getTypeId() == Material.SIGN_POST.getId()) && EssentialsSign.isValidSign(new EssentialsSign.BlockSign(block))) || EssentialsSign.checkIfBlockBreaksSigns(block)) { @@ -43,17 +43,17 @@ public class SignEntityListener implements Listener } } - @EventHandler(priority = EventPriority.LOW) + @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) public void onEntityChangeBlock(final EntityChangeBlockEvent event) { - if (event.isCancelled() || ess.getSettings().areSignsDisabled()) + if (ess.getSettings().areSignsDisabled()) { return; } final Block block = event.getBlock(); - if (((block.getType() == Material.WALL_SIGN - || block.getType() == Material.SIGN_POST) + if (((block.getTypeId() == Material.WALL_SIGN.getId() + || block.getTypeId() == Material.SIGN_POST.getId()) && EssentialsSign.isValidSign(new EssentialsSign.BlockSign(block))) || EssentialsSign.checkIfBlockBreaksSigns(block)) { diff --git a/Essentials/src/com/earth2me/essentials/signs/SignPlayerListener.java b/Essentials/src/com/earth2me/essentials/signs/SignPlayerListener.java index f891c0fdb..561d8dffc 100644 --- a/Essentials/src/com/earth2me/essentials/signs/SignPlayerListener.java +++ b/Essentials/src/com/earth2me/essentials/signs/SignPlayerListener.java @@ -20,10 +20,10 @@ public class SignPlayerListener implements Listener this.ess = ess; } - @EventHandler(priority = EventPriority.LOW) + @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) public void onPlayerInteract(final PlayerInteractEvent event) { - if (event.isCancelled() || ess.getSettings().areSignsDisabled()) + if (ess.getSettings().areSignsDisabled()) { return; } @@ -33,6 +33,7 @@ public class SignPlayerListener implements Listener { return; } + final int mat = block.getTypeId(); if (mat == Material.SIGN_POST.getId() || mat == Material.WALL_SIGN.getId()) { diff --git a/Essentials/src/com/earth2me/essentials/signs/SignTrade.java b/Essentials/src/com/earth2me/essentials/signs/SignTrade.java index 6ea4f5e80..41f9fb2a5 100644 --- a/Essentials/src/com/earth2me/essentials/signs/SignTrade.java +++ b/Essentials/src/com/earth2me/essentials/signs/SignTrade.java @@ -224,7 +224,7 @@ public class SignTrade extends EssentialsSign } catch (SignException e) { - throw new SignException(_("tradeSignEmpty")); + throw new SignException(_("tradeSignEmpty"), e); } } |