diff options
15 files changed, 182 insertions, 99 deletions
diff --git a/Essentials/src/com/earth2me/essentials/Essentials.java b/Essentials/src/com/earth2me/essentials/Essentials.java index efe9e44e1..ee9926abe 100644 --- a/Essentials/src/com/earth2me/essentials/Essentials.java +++ b/Essentials/src/com/earth2me/essentials/Essentials.java @@ -440,7 +440,7 @@ public class Essentials extends JavaPlugin implements IEssentials for (Player player : players) { final IUser user = getUser(player); - if (!user.isIgnoringPlayer(sender.getName())) + if (!user.isIgnoringPlayer(sender)) { player.sendMessage(message); } diff --git a/Essentials/src/com/earth2me/essentials/api/IUser.java b/Essentials/src/com/earth2me/essentials/api/IUser.java index 6fc804d93..fa54ffd21 100644 --- a/Essentials/src/com/earth2me/essentials/api/IUser.java +++ b/Essentials/src/com/earth2me/essentials/api/IUser.java @@ -70,9 +70,9 @@ public interface IUser extends Player, IStorageObjectHolder<UserData>, IReload, boolean isGodModeEnabled(); - boolean isIgnoringPlayer(String name); + boolean isIgnoringPlayer(IUser user); - void setIgnoredPlayer(String name, boolean set); + void setIgnoredPlayer(IUser user, boolean set); Location getAfkPosition(); @@ -124,4 +124,6 @@ public interface IUser extends Player, IStorageObjectHolder<UserData>, IReload, void setGodModeEnabled(boolean set); + void setVanished(boolean set); + } diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandexp.java b/Essentials/src/com/earth2me/essentials/commands/Commandexp.java index f5b9c3053..081ef6bc3 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandexp.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandexp.java @@ -2,9 +2,10 @@ package com.earth2me.essentials.commands; import static com.earth2me.essentials.I18n._;
import com.earth2me.essentials.api.IUser;
-import com.earth2me.essentials.utils.Util;
import com.earth2me.essentials.craftbukkit.SetExpFix;
import com.earth2me.essentials.permissions.Permissions;
+import com.earth2me.essentials.utils.Util;
+import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@@ -13,6 +14,7 @@ public class Commandexp extends EssentialsCommand @Override
public void run(final IUser user, final String commandLabel, final String[] args) throws Exception
{
+
if (args.length == 0)
{
showExp(user, user);
@@ -21,68 +23,106 @@ public class Commandexp extends EssentialsCommand {
if (args.length == 3 && Permissions.EXP_SET_OTHERS.isAuthorized(user))
{
- boolean foundUser = false;
- for (Player matchPlayer : server.matchPlayer(args[1]))
- {
- IUser target = ess.getUser(matchPlayer);
- setExp(user, target, args[2], false);
- foundUser = true;
- }
- if (foundUser == false)
- {
- throw new NoSuchFieldException(_("playerNotFound"));
- }
- return;
+ expMatch(user, args[1], args[2], false);
+ }
+ else
+ {
+ setExp(user, user, args[1], false);
}
- setExp(user, user, args[1], false);
}
else if (args[0].equalsIgnoreCase("give") && Permissions.EXP_GIVE.isAuthorized(user))
{
if (args.length == 3 && Permissions.EXP_GIVE_OTHERS.isAuthorized(user))
{
- boolean foundUser = false;
- for (Player matchPlayer : server.matchPlayer(args[1]))
- {
- IUser target = ess.getUser(matchPlayer);
- setExp(user, target, args[2], true);
- foundUser = true;
- }
- if (foundUser == false)
- {
- throw new NoSuchFieldException(_("playerNotFound"));
- }
- return;
+ expMatch(user, args[1], args[2], true);
+ }
+ else
+ {
+ setExp(user, user, args[1], true);
}
- setExp(user, user, args[1], true);
}
else
{
- String search = args[0].trim();
+ String match = args[0].trim();
if (args.length == 2)
{
- search = args[1].trim();
+ match = args[1].trim();
}
- if (search.equalsIgnoreCase("show") || !Permissions.EXP_OTHERS.isAuthorized(user))
+ if (match.equalsIgnoreCase("show") || !Permissions.EXP_OTHERS.isAuthorized(user))
{
showExp(user, user);
- return;
}
- for (Player matchPlayer : server.matchPlayer(search))
+ else
{
- IUser target = ess.getUser(matchPlayer);
- showExp(user, target);
+ showMatch(user, match);
}
}
}
- private void showExp(final IUser user, final IUser target)
+
+ public void run(final CommandSender sender, final String commandLabel, final String[] args) throws Exception
+ {
+ if (args.length < 1)
+ {
+ throw new NotEnoughArgumentsException();
+ }
+ else if (args.length > 2 && args[0].equalsIgnoreCase("set"))
+ {
+ expMatch(sender, args[1], args[2], false);
+ }
+ else if (args.length > 2 && args[0].equalsIgnoreCase("give"))
+ {
+ expMatch(sender, args[1], args[2], true);
+ }
+ else
+ {
+ String match = args[0].trim();
+ if (args.length == 2)
+ {
+ match = args[1].trim();
+ }
+ showMatch(sender, match);
+ }
+ }
+
+ private void showMatch(final CommandSender sender, final String match) throws NotEnoughArgumentsException
+ {
+ boolean foundUser = false;
+ for (Player matchPlayer : server.matchPlayer(match))
+ {
+ foundUser = true;
+ final IUser target = ess.getUser(matchPlayer);
+ showExp(sender, target);
+ }
+ if (!foundUser)
+ {
+ throw new NotEnoughArgumentsException(_("playerNotFound"));
+ }
+ }
+
+ private void expMatch(final CommandSender sender, final String match, final String amount, final boolean toggle) throws NotEnoughArgumentsException
+ {
+ boolean foundUser = false;
+ for (Player matchPlayer : server.matchPlayer(match))
+ {
+ final IUser target = ess.getUser(matchPlayer);
+ setExp(sender, target, amount, toggle);
+ foundUser = true;
+ }
+ if (!foundUser)
+ {
+ throw new NotEnoughArgumentsException(_("playerNotFound"));
+ }
+ }
+
+ private void showExp(final CommandSender sender, final IUser target)
{
final int totalExp = SetExpFix.getTotalExperience(target);
final int expLeft = (int)Util.roundDouble(((((3.5 * target.getLevel()) + 6.7) - (totalExp - ((1.75 * (target.getLevel() * target.getLevel())) + (5.00 * target.getLevel())))) + 1));
- user.sendMessage(_("exp", target.getDisplayName(), SetExpFix.getTotalExperience(target), target.getLevel(), expLeft));
+ sender.sendMessage(_("exp", target.getDisplayName(), SetExpFix.getTotalExperience(target), target.getLevel(), expLeft));
}
- private void setExp(final IUser user, final IUser target, final String strAmount, final boolean give)
+ private void setExp(final CommandSender sender, final IUser target, final String strAmount, final boolean give)
{
Long amount = Long.parseLong(strAmount);
if (give)
@@ -94,6 +134,6 @@ public class Commandexp extends EssentialsCommand amount = (long)Integer.MAX_VALUE;
}
SetExpFix.setTotalExperience(target, amount.intValue());
- user.sendMessage(_("expSet", target.getDisplayName(), amount));
+ sender.sendMessage(_("expSet", target.getDisplayName(), amount));
}
-}
+}
\ No newline at end of file diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandhat.java b/Essentials/src/com/earth2me/essentials/commands/Commandhat.java index 7be212373..91108225c 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandhat.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandhat.java @@ -2,6 +2,7 @@ package com.earth2me.essentials.commands; import static com.earth2me.essentials.I18n._; import com.earth2me.essentials.api.IUser; +import com.earth2me.essentials.craftbukkit.InventoryWorkaround; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.PlayerInventory; @@ -12,24 +13,45 @@ public class Commandhat extends EssentialsCommand @Override protected void run(IUser user, String commandLabel, String[] args) throws Exception { - if (user.getItemInHand().getType() != Material.AIR) + if (args.length > 0 && (args[0].contains("rem") || args[0].contains("off") || args[0].equalsIgnoreCase("0"))) { - final ItemStack hand = user.getItemInHand(); - if (hand.getType().getMaxDurability() == 0) + final PlayerInventory inv = user.getInventory(); + final ItemStack head = inv.getHelmet(); + if (head == null || head.getType() == Material.AIR) { - final PlayerInventory inv = user.getInventory(); - final ItemStack head = inv.getHelmet(); - inv.removeItem(hand); - inv.setHelmet(hand); - inv.setItemInHand(head); - user.sendMessage(_("hatPlaced")); - } else { - user.sendMessage(_("hatArmor")); + user.sendMessage(_("hatEmpty")); + } + else + { + final ItemStack air = new ItemStack(Material.AIR); + inv.setHelmet(air); + InventoryWorkaround.addItem(user.getInventory(), true, head); + user.sendMessage(_("hatRemoved")); } } else { - user.sendMessage(_("hatFail")); + if (user.getItemInHand().getType() != Material.AIR) + { + final ItemStack hand = user.getItemInHand(); + if (hand.getType().getMaxDurability() == 0) + { + final PlayerInventory inv = user.getInventory(); + final ItemStack head = inv.getHelmet(); + inv.removeItem(hand); + inv.setHelmet(hand); + inv.setItemInHand(head); + user.sendMessage(_("hatPlaced")); + } + else + { + user.sendMessage(_("hatArmor")); + } + } + else + { + user.sendMessage(_("hatFail")); + } } } } diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandignore.java b/Essentials/src/com/earth2me/essentials/commands/Commandignore.java index 9b3ff71cc..9b06cfa64 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandignore.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandignore.java @@ -26,16 +26,16 @@ public class Commandignore extends EssentialsCommand { throw new Exception(_("playerNotFound")); } - final String name = player.getName(); + user.acquireWriteLock(); - if (user.isIgnoringPlayer(name)) + if (user.isIgnoringPlayer(player)) { - user.setIgnoredPlayer(name, false); + user.setIgnoredPlayer(player, false); user.sendMessage(_("unignorePlayer", player.getName())); } else { - user.setIgnoredPlayer(name, true); + user.setIgnoredPlayer(player, true); user.sendMessage(_("ignorePlayer", player.getName())); } } diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandmail.java b/Essentials/src/com/earth2me/essentials/commands/Commandmail.java index db39d1c01..1454345da 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandmail.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandmail.java @@ -52,7 +52,7 @@ public class Commandmail extends EssentialsCommand { throw new Exception(_("playerNeverOnServer", args[1])); } - if (!u.isIgnoringPlayer(user.getName())) + if (!u.isIgnoringPlayer(user)) { final String mail = Util.sanitizeString(Util.stripFormat(getFinalArg(args, 2))); u.addMail(user.getName() + ": " + mail); diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandmsg.java b/Essentials/src/com/earth2me/essentials/commands/Commandmsg.java index c6b42f16c..7da2b9675 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandmsg.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandmsg.java @@ -86,7 +86,7 @@ public class Commandmsg extends EssentialsCommand { sender.sendMessage(_("msgFormat", translatedMe, matchedPlayer.getDisplayName(), message)); final IUser matchedUser = ess.getUser(matchedPlayer); - if (sender instanceof Player && (matchedUser.isIgnoringPlayer(((Player)sender).getName()) || matchedUser.isHidden())) + if (sender instanceof Player && (matchedUser.isIgnoringPlayer(ess.getUser(sender)) || matchedUser.isHidden())) { continue; } diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandtpa.java b/Essentials/src/com/earth2me/essentials/commands/Commandtpa.java index 6e5f7ec53..f6003316d 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandtpa.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandtpa.java @@ -32,7 +32,7 @@ public class Commandtpa extends EssentialsCommand { throw new Exception(_("noPerm", "essentials.world." + player.getWorld().getName())); } - if (!player.isIgnoringPlayer(user.getName())) + if (!player.isIgnoringPlayer(user)) { player.requestTeleport(user, false); player.sendMessage(_("teleportRequest", user.getDisplayName())); diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandvanish.java b/Essentials/src/com/earth2me/essentials/commands/Commandvanish.java index 5eadcc286..9e8997a7c 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandvanish.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandvanish.java @@ -2,8 +2,6 @@ package com.earth2me.essentials.commands; import static com.earth2me.essentials.I18n._; import com.earth2me.essentials.api.IUser; -import com.earth2me.essentials.permissions.Permissions; -import org.bukkit.entity.Player; public class Commandvanish extends EssentialsCommand @@ -11,14 +9,29 @@ public class Commandvanish extends EssentialsCommand @Override protected void run(IUser user, String commandLabel, String[] args) throws Exception { - user.toggleVanished(); - if (user.isVanished()) + if (args.length < 1) { - user.sendMessage(_("unvanished")); + user.toggleVanished(); + if (user.isVanished()) + { + user.sendMessage(_("vanished")); + } + else + { + user.sendMessage(_("unvanished")); + } } else { - user.sendMessage(_("unvanished")); + if (args[0].contains("on") || args[0].contains("ena") || args[0].equalsIgnoreCase("1")) + { + user.setVanished(true); + } + else + { + user.setVanished(false); + } + user.sendMessage(user.isVanished() ? _("vanished") : _("unvanished")); } - } + } } diff --git a/Essentials/src/com/earth2me/essentials/listener/EssentialsPlayerListener.java b/Essentials/src/com/earth2me/essentials/listener/EssentialsPlayerListener.java index 3702290ae..d6f539f70 100644 --- a/Essentials/src/com/earth2me/essentials/listener/EssentialsPlayerListener.java +++ b/Essentials/src/com/earth2me/essentials/listener/EssentialsPlayerListener.java @@ -74,7 +74,7 @@ public class EssentialsPlayerListener implements Listener while (it.hasNext()) { final IUser player = ess.getUser(it.next()); - if (player.isIgnoringPlayer(user.getName())) + if (player.isIgnoringPlayer(user)) { it.remove(); } @@ -147,6 +147,10 @@ public class EssentialsPlayerListener implements Listener @EventHandler(priority = EventPriority.MONITOR) public void onPlayerJoin(final PlayerJoinEvent event) { + if (!event.getPlayer().isOnline()) + { + return; + } ess.getBackup().startTask(); @Cleanup final IUser user = ess.getUser(event.getPlayer()); diff --git a/Essentials/src/com/earth2me/essentials/permissions/Permissions.java b/Essentials/src/com/earth2me/essentials/permissions/Permissions.java index ddfa78348..05627210b 100644 --- a/Essentials/src/com/earth2me/essentials/permissions/Permissions.java +++ b/Essentials/src/com/earth2me/essentials/permissions/Permissions.java @@ -20,6 +20,7 @@ public enum Permissions implements IPermission BAN_OFFLINE, BREAK_BEDROCK, CHAT_COLOR, + CHAT_IGNORE_EXEMPT, CHAT_SPY, CLEARINVENTORY_OTHERS, DELHOME_OTHERS, diff --git a/Essentials/src/com/earth2me/essentials/user/User.java b/Essentials/src/com/earth2me/essentials/user/User.java index 8207285f7..3e9c6409a 100644 --- a/Essentials/src/com/earth2me/essentials/user/User.java +++ b/Essentials/src/com/earth2me/essentials/user/User.java @@ -741,11 +741,11 @@ public class User extends UserBase implements IUser return teleportInvulnerabilityTimestamp != 0 && teleportInvulnerabilityTimestamp >= System.currentTimeMillis(); } - @Override - public void toggleVanished() + + public void setVanished(boolean set) { - vanished = !vanished; - if (vanished) + vanished = set; + if (set) { for (Player p : ess.getServer().getOnlinePlayers()) { diff --git a/Essentials/src/com/earth2me/essentials/user/UserBase.java b/Essentials/src/com/earth2me/essentials/user/UserBase.java index d8f9f264b..436a9c76f 100644 --- a/Essentials/src/com/earth2me/essentials/user/UserBase.java +++ b/Essentials/src/com/earth2me/essentials/user/UserBase.java @@ -3,7 +3,9 @@ package com.earth2me.essentials.user; import com.earth2me.essentials.utils.Util; import com.earth2me.essentials.api.IEssentials; import com.earth2me.essentials.api.ISettings; +import com.earth2me.essentials.api.IUser; import com.earth2me.essentials.api.InvalidNameException; +import com.earth2me.essentials.permissions.Permissions; import com.earth2me.essentials.storage.AsyncStorageObjectHolder; import com.earth2me.essentials.storage.Location.WorldNotLoadedException; import java.io.File; @@ -328,12 +330,12 @@ public abstract class UserBase extends AsyncStorageObjectHolder<UserData> implem } } - public boolean isIgnoringPlayer(final String name) + public boolean isIgnoringPlayer(final IUser user) { acquireReadLock(); try { - return getData().getIgnore() == null ? false : getData().getIgnore().contains(name.toLowerCase(Locale.ENGLISH)); + return getData().getIgnore() == null ? false : getData().getIgnore().contains(user.getName().toLowerCase(Locale.ENGLISH)) && Permissions.CHAT_IGNORE_EXEMPT.isAuthorized(user); } finally { @@ -341,7 +343,7 @@ public abstract class UserBase extends AsyncStorageObjectHolder<UserData> implem } } - public void setIgnoredPlayer(final String name, final boolean set) + public void setIgnoredPlayer(final IUser user, final boolean set) { acquireWriteLock(); try @@ -352,11 +354,11 @@ public abstract class UserBase extends AsyncStorageObjectHolder<UserData> implem } if (set) { - getData().getIgnore().add(name.toLowerCase(Locale.ENGLISH)); + getData().getIgnore().add(user.getName().toLowerCase(Locale.ENGLISH)); } else { - getData().getIgnore().remove(name.toLowerCase(Locale.ENGLISH)); + getData().getIgnore().remove(user.getName().toLowerCase(Locale.ENGLISH)); } } finally diff --git a/Essentials/src/plugin.yml b/Essentials/src/plugin.yml index 271330f41..f2b897208 100644 --- a/Essentials/src/plugin.yml +++ b/Essentials/src/plugin.yml @@ -137,7 +137,7 @@ commands: aliases: [tgm,godmode,egod,etgm,egodmode] hat: description: Get some cool new headgear - usage: /<command> + usage: /<command> [remove] aliases: [ehat] heal: description: Heals you or the given player. @@ -321,7 +321,7 @@ commands: spawn: description: Teleport to the spawnpoint. usage: /<command> [player] - aliases: [esetspawn] + aliases: [espawn] spawner: description: Change the mob type of a spawner usage: /<command> <mob> @@ -424,7 +424,7 @@ commands: aliases: [eunlimited,ul,unl,eul,eunl] vanish: description: Hide yourself from other players. - usage: /<command> + usage: /<command> [on|off] aliases: [evanish] warp: description: List all warps or warp to the specified location. diff --git a/EssentialsChat/src/com/earth2me/essentials/chat/EssentialsLocalChatEventListener.java b/EssentialsChat/src/com/earth2me/essentials/chat/EssentialsLocalChatEventListener.java index 8788d755d..04c49b698 100644 --- a/EssentialsChat/src/com/earth2me/essentials/chat/EssentialsLocalChatEventListener.java +++ b/EssentialsChat/src/com/earth2me/essentials/chat/EssentialsLocalChatEventListener.java @@ -37,36 +37,35 @@ public class EssentialsLocalChatEventListener implements Listener { String type = _("chatTypeLocal"); final IUser user = ess.getUser(onlinePlayer); - //TODO: remove reference to op - if (user.isIgnoringPlayer(sender.getName()) && !sender.isOp()) + if (user.isIgnoringPlayer(ess.getUser(sender))) { continue; } if (!user.equals(sender)) { - if (Permissions.CHAT_SPY.isAuthorized(user)) + boolean abort = false; + final Location playerLoc = user.getLocation(); + if (playerLoc.getWorld() != world) { - type = type.concat(_("chatTypeSpy")); + abort = true; } - else + final double delta = playerLoc.distanceSquared(loc); + + if (delta > event.getRadius()) { - final Location playerLoc = user.getLocation(); - if (playerLoc.getWorld() != world) - { - continue; - } - final double delta = playerLoc.distanceSquared(loc); + abort = true; + } - if (delta > event.getRadius()) + if (abort) + { + if (ChatPermissions.getPermission("spy").isAuthorized(user)) { - continue; + type = type.concat(_("chatTypeSpy")); } } - - final String message = type.concat(String.format(event.getFormat(), sender.getDisplayName(), event.getMessage())); - user.sendMessage(message); } + final String message = type.concat(String.format(event.getFormat(), sender.getDisplayName(), event.getMessage())); + user.sendMessage(message); } - } -}
\ No newline at end of file +} |