Extract user match looping

This commit is contained in:
KHobbits 2013-09-28 17:21:16 +01:00
parent e6b76cadbc
commit 03368e45df
14 changed files with 381 additions and 386 deletions

View file

@ -26,6 +26,7 @@ import com.earth2me.essentials.commands.EssentialsCommand;
import com.earth2me.essentials.commands.IEssentialsCommand; import com.earth2me.essentials.commands.IEssentialsCommand;
import com.earth2me.essentials.commands.NoChargeException; import com.earth2me.essentials.commands.NoChargeException;
import com.earth2me.essentials.commands.NotEnoughArgumentsException; import com.earth2me.essentials.commands.NotEnoughArgumentsException;
import com.earth2me.essentials.commands.QuietAbortException;
import com.earth2me.essentials.metrics.Metrics; import com.earth2me.essentials.metrics.Metrics;
import com.earth2me.essentials.metrics.MetricsListener; import com.earth2me.essentials.metrics.MetricsListener;
import com.earth2me.essentials.metrics.MetricsStarter; import com.earth2me.essentials.metrics.MetricsStarter;
@ -510,6 +511,10 @@ public class Essentials extends JavaPlugin implements net.ess3.api.IEssentials
{ {
return true; return true;
} }
catch (QuietAbortException ex)
{
return true;
}
catch (NotEnoughArgumentsException ex) catch (NotEnoughArgumentsException ex)
{ {
sender.sendMessage(command.getDescription()); sender.sendMessage(command.getDescription());

View file

@ -152,7 +152,7 @@ public class User extends UserData implements Comparable<User>, IReplyTo, net.es
} }
@Override @Override
public void payUser(final User reciever, final BigDecimal value) throws Exception public void payUser(final User reciever, final BigDecimal value) throws ChargeException
{ {
if (value.signum() == 0) if (value.signum() == 0)
{ {
@ -167,7 +167,7 @@ public class User extends UserData implements Comparable<User>, IReplyTo, net.es
} }
else else
{ {
throw new Exception(_("notEnoughMoney")); throw new ChargeException(_("notEnoughMoney"));
} }
} }

View file

@ -1,5 +1,6 @@
package com.earth2me.essentials.commands; package com.earth2me.essentials.commands;
import com.earth2me.essentials.ChargeException;
import static com.earth2me.essentials.I18n._; import static com.earth2me.essentials.I18n._;
import com.earth2me.essentials.User; import com.earth2me.essentials.User;
import com.earth2me.essentials.utils.NumberUtil; import com.earth2me.essentials.utils.NumberUtil;
@ -7,11 +8,13 @@ import java.math.BigDecimal;
import java.util.Locale; import java.util.Locale;
import org.bukkit.Server; import org.bukkit.Server;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
public class Commandeco extends EssentialsCommand public class Commandeco extends EssentialsLoopCommand
{ {
Commandeco.EcoCommands cmd;
BigDecimal amount;
public Commandeco() public Commandeco()
{ {
super("eco"); super("eco");
@ -25,11 +28,8 @@ public class Commandeco extends EssentialsCommand
throw new NotEnoughArgumentsException(); throw new NotEnoughArgumentsException();
} }
Commandeco.EcoCommands cmd;
BigDecimal startingBalance = ess.getSettings().getStartingBalance(); BigDecimal startingBalance = ess.getSettings().getStartingBalance();
BigDecimal amount;
BigDecimal broadcast = null;
BigDecimal broadcastAll = null;
try try
{ {
cmd = Commandeco.EcoCommands.valueOf(args[0].toUpperCase(Locale.ENGLISH)); cmd = Commandeco.EcoCommands.valueOf(args[0].toUpperCase(Locale.ENGLISH));
@ -40,55 +40,24 @@ public class Commandeco extends EssentialsCommand
throw new NotEnoughArgumentsException(ex); throw new NotEnoughArgumentsException(ex);
} }
loopOfflinePlayers(server, sender, false, args[1], args);
if (cmd == Commandeco.EcoCommands.RESET || cmd == Commandeco.EcoCommands.SET)
{
if (args[1].contentEquals("**")) if (args[1].contentEquals("**"))
{ {
for (String sUser : ess.getUserMap().getAllUniqueUsers()) server.broadcastMessage(_("resetBalAll", NumberUtil.displayCurrency(amount, ess)));
{
final User player = ess.getUser(sUser);
switch (cmd)
{
case GIVE:
player.giveMoney(amount);
break;
case TAKE:
take(amount, player, null);
break;
case RESET:
case SET:
set(amount, player, null);
broadcastAll = amount;
break;
}
}
} }
else if (args[1].contentEquals("*")) else if (args[1].contentEquals("*"))
{ {
for (Player onlinePlayer : server.getOnlinePlayers()) server.broadcastMessage(_("resetBal", NumberUtil.displayCurrency(amount, ess)));
{ }
final User player = ess.getUser(onlinePlayer); }
switch (cmd) }
{
case GIVE:
player.giveMoney(amount);
break;
case TAKE: @Override
take(amount, player, null); protected void updatePlayer(final Server server, final CommandSender sender, final User player, final String[] args) throws NotEnoughArgumentsException, ChargeException
break;
case RESET:
case SET:
set(amount, player, null);
broadcast = amount;
break;
}
}
}
else
{ {
final User player = getPlayer(server, args, 1, true, true);
switch (cmd) switch (cmd)
{ {
case GIVE: case GIVE:
@ -106,17 +75,7 @@ public class Commandeco extends EssentialsCommand
} }
} }
if (broadcast != null) private void take(BigDecimal amount, final User player, final CommandSender sender) throws ChargeException
{
server.broadcastMessage(_("resetBal", NumberUtil.displayCurrency(broadcast, ess)));
}
if (broadcastAll != null)
{
server.broadcastMessage(_("resetBalAll", NumberUtil.displayCurrency(broadcastAll, ess)));
}
}
private void take(BigDecimal amount, final User player, final CommandSender sender) throws Exception
{ {
BigDecimal money = player.getMoney(); BigDecimal money = player.getMoney();
BigDecimal minBalance = ess.getSettings().getMinMoney(); BigDecimal minBalance = ess.getSettings().getMinMoney();
@ -131,7 +90,7 @@ public class Commandeco extends EssentialsCommand
} }
else else
{ {
throw new Exception(_("insufficientFunds")); throw new ChargeException(_("insufficientFunds"));
} }
} }

View file

@ -2,13 +2,12 @@ package com.earth2me.essentials.commands;
import static com.earth2me.essentials.I18n._; import static com.earth2me.essentials.I18n._;
import com.earth2me.essentials.User; import com.earth2me.essentials.User;
import java.util.List;
import org.bukkit.Server; import org.bukkit.Server;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
public class Commandext extends EssentialsCommand public class Commandext extends EssentialsLoopCommand
{ {
public Commandext() public Commandext()
{ {
@ -23,7 +22,7 @@ public class Commandext extends EssentialsCommand
throw new NotEnoughArgumentsException(); throw new NotEnoughArgumentsException();
} }
extinguishPlayers(server, sender, args[0]); loopOnlinePlayers(server, sender, true, args[0], null);
} }
@Override @Override
@ -31,7 +30,7 @@ public class Commandext extends EssentialsCommand
{ {
if (args.length < 1) if (args.length < 1)
{ {
user.setFireTicks(0); extPlayer(user.getBase());
user.sendMessage(_("extinguish")); user.sendMessage(_("extinguish"));
return; return;
} }
@ -41,28 +40,18 @@ public class Commandext extends EssentialsCommand
throw new PlayerNotFoundException(); throw new PlayerNotFoundException();
} }
extinguishPlayers(server, user.getBase(), args[0]); loopOnlinePlayers(server, user.getBase(), true, args[0], null);
} }
private void extinguishPlayers(final Server server, final CommandSender sender, final String name) throws Exception @Override
protected void updatePlayer(final Server server, final CommandSender sender, final User player, final String[] args)
{ {
boolean skipHidden = sender instanceof Player && !ess.getUser(sender).isAuthorized("essentials.vanish.interact"); extPlayer(player.getBase());
boolean foundUser = false; sender.sendMessage(_("extinguishOthers", player.getDisplayName()));
final List<Player> matchedPlayers = server.matchPlayer(name); }
for (Player matchPlayer : matchedPlayers)
private void extPlayer(final Player player)
{ {
final User player = ess.getUser(matchPlayer); player.setFireTicks(0);
if (skipHidden && player.isHidden())
{
continue;
}
foundUser = true;
matchPlayer.setFireTicks(0);
sender.sendMessage(_("extinguishOthers", matchPlayer.getDisplayName()));
}
if (!foundUser)
{
throw new PlayerNotFoundException();
}
} }
} }

View file

@ -2,14 +2,13 @@ package com.earth2me.essentials.commands;
import static com.earth2me.essentials.I18n._; import static com.earth2me.essentials.I18n._;
import com.earth2me.essentials.User; import com.earth2me.essentials.User;
import java.util.List;
import org.bukkit.Server; import org.bukkit.Server;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.entity.FoodLevelChangeEvent; import org.bukkit.event.entity.FoodLevelChangeEvent;
public class Commandfeed extends EssentialsCommand public class Commandfeed extends EssentialsLoopCommand
{ {
public Commandfeed() public Commandfeed()
{ {
@ -19,33 +18,18 @@ public class Commandfeed extends EssentialsCommand
@Override @Override
protected void run(final Server server, final User user, final String commandLabel, final String[] args) throws Exception protected void run(final Server server, final User user, final String commandLabel, final String[] args) throws Exception
{ {
if (args.length > 0 && user.isAuthorized("essentials.feed.others"))
{
if (args[0].trim().length() < 2)
{
throw new PlayerNotFoundException();
}
if (!user.isAuthorized("essentials.feed.cooldown.bypass")) if (!user.isAuthorized("essentials.feed.cooldown.bypass"))
{ {
user.healCooldown(); user.healCooldown();
} }
feedOtherPlayers(server, user.getBase(), args[0]);
if (args.length > 0 && user.isAuthorized("essentials.feed.others"))
{
loopOnlinePlayers(server, user.getBase(), true, args[0], null);
return; return;
} }
if (!user.isAuthorized("essentials.feed.cooldown.bypass")) feedPlayer(user.getBase());
{
user.healCooldown();
}
try
{
feedPlayer(user.getBase(), user.getBase());
}
catch (QuietAbortException e)
{
//User does not need feeding.
}
user.sendMessage(_("feed")); user.sendMessage(_("feed"));
} }
@ -57,38 +41,24 @@ public class Commandfeed extends EssentialsCommand
throw new NotEnoughArgumentsException(); throw new NotEnoughArgumentsException();
} }
feedOtherPlayers(server, sender, args[0]); loopOnlinePlayers(server, sender, true, args[0], null);
} }
private void feedOtherPlayers(final Server server, final CommandSender sender, final String name) throws PlayerNotFoundException @Override
protected void updatePlayer(final Server server, final CommandSender sender, final User player, final String[] args) throws PlayerExemptException
{ {
boolean skipHidden = sender instanceof Player && !ess.getUser(sender).isAuthorized("essentials.vanish.interact");
boolean foundUser = false;
final List<Player> matchedPlayers = server.matchPlayer(name);
for (Player matchPlayer : matchedPlayers)
{
final User player = ess.getUser(matchPlayer);
if (skipHidden && player.isHidden())
{
continue;
}
foundUser = true;
try try
{ {
feedPlayer(sender, matchPlayer); feedPlayer(player.getBase());
sender.sendMessage(_("feedOther", player.getDisplayName()));
} }
catch (QuietAbortException e) catch (QuietAbortException e)
{ {
//User does not need feeding. //Handle Quietly
}
}
if (!foundUser)
{
throw new PlayerNotFoundException();
} }
} }
private void feedPlayer(CommandSender sender, Player player) throws QuietAbortException private void feedPlayer(final Player player) throws QuietAbortException
{ {
final int amount = 30; final int amount = 30;
@ -101,10 +71,5 @@ public class Commandfeed extends EssentialsCommand
player.setFoodLevel(flce.getFoodLevel() > 20 ? 20 : flce.getFoodLevel()); player.setFoodLevel(flce.getFoodLevel() > 20 ? 20 : flce.getFoodLevel());
player.setSaturation(10); player.setSaturation(10);
if (!sender.equals(player))
{
sender.sendMessage(_("feedOther", player.getDisplayName()));
}
} }
} }

View file

@ -2,7 +2,6 @@ package com.earth2me.essentials.commands;
import static com.earth2me.essentials.I18n._; import static com.earth2me.essentials.I18n._;
import com.earth2me.essentials.User; import com.earth2me.essentials.User;
import java.util.List;
import org.bukkit.Server; import org.bukkit.Server;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@ -11,7 +10,7 @@ import org.bukkit.event.entity.EntityRegainHealthEvent.RegainReason;
import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffect;
public class Commandheal extends EssentialsCommand public class Commandheal extends EssentialsLoopCommand
{ {
public Commandheal() public Commandheal()
{ {
@ -21,26 +20,18 @@ public class Commandheal extends EssentialsCommand
@Override @Override
public void run(final Server server, final User user, final String commandLabel, final String[] args) throws Exception public void run(final Server server, final User user, final String commandLabel, final String[] args) throws Exception
{ {
if (!user.isAuthorized("essentials.heal.cooldown.bypass"))
{
user.healCooldown();
}
if (args.length > 0 && user.isAuthorized("essentials.heal.others")) if (args.length > 0 && user.isAuthorized("essentials.heal.others"))
{ {
if (args[0].trim().length() < 2) loopOnlinePlayers(server, user.getBase(), true, args[0], null);
{
throw new PlayerNotFoundException();
}
if (!user.isAuthorized("essentials.heal.cooldown.bypass"))
{
user.healCooldown();
}
healOtherPlayers(server, user.getBase(), args[0]);
return; return;
} }
if (!user.isAuthorized("essentials.heal.cooldown.bypass")) healPlayer(user);
{
user.healCooldown();
}
healPlayer(user.getBase());
} }
@Override @Override
@ -51,43 +42,30 @@ public class Commandheal extends EssentialsCommand
throw new NotEnoughArgumentsException(); throw new NotEnoughArgumentsException();
} }
healOtherPlayers(server, sender, args[0]); loopOnlinePlayers(server, sender, true, args[0], null);
} }
private void healOtherPlayers(final Server server, final CommandSender sender, final String name) throws Exception @Override
protected void updatePlayer(final Server server, final CommandSender sender, final User player, final String[] args) throws PlayerExemptException
{ {
boolean skipHidden = sender instanceof Player && !ess.getUser(sender).isAuthorized("essentials.vanish.interact");
boolean foundUser = false;
final List<Player> matchedPlayers = server.matchPlayer(name);
for (Player matchPlayer : matchedPlayers)
{
final User player = ess.getUser(matchPlayer);
if (skipHidden && player.isHidden())
{
continue;
}
foundUser = true;
try try
{ {
healPlayer(matchPlayer); healPlayer(player);
sender.sendMessage(_("healOther", matchPlayer.getDisplayName())); sender.sendMessage(_("healOther", player.getDisplayName()));
} }
catch (QuietAbortException e) catch (QuietAbortException e)
{ {
//Handle Quietly //Handle Quietly
} }
} }
if (!foundUser)
{
throw new PlayerNotFoundException();
}
}
private void healPlayer(final Player player) throws Exception private void healPlayer(final User user) throws PlayerExemptException, QuietAbortException
{ {
final Player player = user.getBase();
if (player.getHealth() == 0) if (player.getHealth() == 0)
{ {
throw new Exception(_("healDead")); throw new PlayerExemptException(_("healDead"));
} }
final double amount = player.getMaxHealth() - player.getHealth(); final double amount = player.getMaxHealth() - player.getHealth();
@ -107,7 +85,7 @@ public class Commandheal extends EssentialsCommand
player.setHealth(newAmount); player.setHealth(newAmount);
player.setFoodLevel(20); player.setFoodLevel(20);
player.setFireTicks(0); player.setFireTicks(0);
player.sendMessage(_("heal")); user.sendMessage(_("heal"));
for (PotionEffect effect : player.getActivePotionEffects()) for (PotionEffect effect : player.getActivePotionEffects())
{ {
player.removePotionEffect(effect.getType()); player.removePotionEffect(effect.getType());

View file

@ -1,14 +1,14 @@
package com.earth2me.essentials.commands; package com.earth2me.essentials.commands;
import static com.earth2me.essentials.I18n._; import static com.earth2me.essentials.I18n._;
import java.util.List; import com.earth2me.essentials.User;
import org.bukkit.Server; import org.bukkit.Server;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.entity.EntityDamageEvent; import org.bukkit.event.entity.EntityDamageEvent;
public class Commandkill extends EssentialsCommand public class Commandkill extends EssentialsLoopCommand
{ {
public Commandkill() public Commandkill()
{ {
@ -23,24 +23,22 @@ public class Commandkill extends EssentialsCommand
throw new NotEnoughArgumentsException(); throw new NotEnoughArgumentsException();
} }
//TODO: TL this loopOnlinePlayers(server, sender, true, args[0], null);
if (args[0].trim().length() < 2)
{
throw new NotEnoughArgumentsException("You need to specify a player to kill.");
} }
final List<Player> matchedPlayers = server.matchPlayer(args[0]); @Override
for (Player matchPlayer : matchedPlayers) protected void updatePlayer(final Server server, final CommandSender sender, final User user, final String[] args) throws PlayerExemptException
{ {
if (sender instanceof Player && ess.getUser(matchPlayer).isAuthorized("essentials.kill.exempt") && !ess.getUser(sender).isAuthorized("essentials.kill.force")) final Player matchPlayer = user.getBase();
if (sender instanceof Player && user.isAuthorized("essentials.kill.exempt") && !ess.getUser(sender).isAuthorized("essentials.kill.force"))
{ {
throw new Exception(_("killExempt", matchPlayer.getDisplayName())); throw new PlayerExemptException(_("killExempt", matchPlayer.getDisplayName()));
} }
final EntityDamageEvent ede = new EntityDamageEvent(matchPlayer, sender instanceof Player && ((Player)sender).getName().equals(matchPlayer.getName()) ? EntityDamageEvent.DamageCause.SUICIDE : EntityDamageEvent.DamageCause.CUSTOM, Short.MAX_VALUE); final EntityDamageEvent ede = new EntityDamageEvent(matchPlayer, sender instanceof Player && ((Player)sender).getName().equals(matchPlayer.getName()) ? EntityDamageEvent.DamageCause.SUICIDE : EntityDamageEvent.DamageCause.CUSTOM, Short.MAX_VALUE);
server.getPluginManager().callEvent(ede); server.getPluginManager().callEvent(ede);
if (ede.isCancelled() && sender instanceof Player && !ess.getUser(sender).isAuthorized("essentials.kill.force")) if (ede.isCancelled() && sender instanceof Player && !ess.getUser(sender).isAuthorized("essentials.kill.force"))
{ {
continue; return;
} }
matchPlayer.damage(Short.MAX_VALUE); matchPlayer.damage(Short.MAX_VALUE);
@ -52,4 +50,3 @@ public class Commandkill extends EssentialsCommand
sender.sendMessage(_("kill", matchPlayer.getDisplayName())); sender.sendMessage(_("kill", matchPlayer.getDisplayName()));
} }
} }
}

View file

@ -2,15 +2,16 @@ package com.earth2me.essentials.commands;
import static com.earth2me.essentials.I18n._; import static com.earth2me.essentials.I18n._;
import com.earth2me.essentials.User; import com.earth2me.essentials.User;
import java.util.List;
import org.bukkit.Server; import org.bukkit.Server;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.LightningStrike; import org.bukkit.entity.LightningStrike;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
public class Commandlightning extends EssentialsCommand public class Commandlightning extends EssentialsLoopCommand
{ {
int power = 5;
public Commandlightning() public Commandlightning()
{ {
super("lightning"); super("lightning");
@ -19,7 +20,6 @@ public class Commandlightning extends EssentialsCommand
@Override @Override
public void run(final Server server, final CommandSender sender, final String commandLabel, final String[] args) throws Exception public void run(final Server server, final CommandSender sender, final String commandLabel, final String[] args) throws Exception
{ {
User user = null; User user = null;
if (sender instanceof Player) if (sender instanceof Player)
{ {
@ -31,7 +31,6 @@ public class Commandlightning extends EssentialsCommand
} }
} }
int power = 5;
if (args.length > 1) if (args.length > 1)
{ {
try try
@ -42,23 +41,18 @@ public class Commandlightning extends EssentialsCommand
{ {
} }
} }
loopOnlinePlayers(server, sender, true, args[0], null);
if (args[0].trim().length() < 2)
{
throw new PlayerNotFoundException();
} }
final List<Player> matchedPlayers = server.matchPlayer(args[0]); @Override
for (Player matchPlayer : matchedPlayers) protected void updatePlayer(final Server server, final CommandSender sender, final User matchUser, final String[] args)
{ {
User matchUser = ess.getUser(matchPlayer); sender.sendMessage(_("lightningUse", matchUser.getDisplayName()));
sender.sendMessage(_("lightningUse", matchPlayer.getDisplayName())); final LightningStrike strike = matchUser.getBase().getWorld().strikeLightningEffect(matchUser.getBase().getLocation());
final LightningStrike strike = matchPlayer.getWorld().strikeLightningEffect(matchPlayer.getLocation());
if (!matchUser.isGodModeEnabled()) if (!matchUser.isGodModeEnabled())
{ {
matchPlayer.damage(power, strike); matchUser.getBase().damage(power, strike);
} }
if (ess.getSettings().warnOnSmite()) if (ess.getSettings().warnOnSmite())
{ {
@ -66,4 +60,3 @@ public class Commandlightning extends EssentialsCommand
} }
} }
} }
}

View file

@ -4,15 +4,17 @@ import com.earth2me.essentials.Console;
import static com.earth2me.essentials.I18n._; import static com.earth2me.essentials.I18n._;
import com.earth2me.essentials.IReplyTo; import com.earth2me.essentials.IReplyTo;
import com.earth2me.essentials.User; import com.earth2me.essentials.User;
import static com.earth2me.essentials.commands.EssentialsCommand.getFinalArg;
import com.earth2me.essentials.utils.FormatUtil; import com.earth2me.essentials.utils.FormatUtil;
import java.util.List;
import org.bukkit.Server; import org.bukkit.Server;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
public class Commandmsg extends EssentialsCommand public class Commandmsg extends EssentialsLoopCommand
{ {
final String translatedMe = _("me");
public Commandmsg() public Commandmsg()
{ {
super("msg"); super("msg");
@ -41,13 +43,11 @@ public class Commandmsg extends EssentialsCommand
message = FormatUtil.replaceFormat(message); message = FormatUtil.replaceFormat(message);
} }
final String translatedMe = _("me");
final IReplyTo replyTo = sender instanceof Player ? ess.getUser((Player)sender) : Console.getConsoleReplyTo();
final String senderName = sender instanceof Player ? ((Player)sender).getDisplayName() : Console.NAME;
if (args[0].equalsIgnoreCase(Console.NAME)) if (args[0].equalsIgnoreCase(Console.NAME))
{ {
final IReplyTo replyTo = sender instanceof Player ? ess.getUser(sender) : Console.getConsoleReplyTo();
final String senderName = sender instanceof Player ? ((Player)sender).getDisplayName() : Console.NAME;
sender.sendMessage(_("msgFormat", translatedMe, Console.NAME, message)); sender.sendMessage(_("msgFormat", translatedMe, Console.NAME, message));
CommandSender cs = Console.getCommandSender(server); CommandSender cs = Console.getCommandSender(server);
cs.sendMessage(_("msgFormat", senderName, translatedMe, message)); cs.sendMessage(_("msgFormat", senderName, translatedMe, message));
@ -56,38 +56,28 @@ public class Commandmsg extends EssentialsCommand
return; return;
} }
boolean skipHidden = sender instanceof Player && !ess.getUser(sender).isAuthorized("essentials.vanish.interact"); loopOnlinePlayers(server, sender, true, args[0], new String[]{message});
boolean foundUser = false;
final List<Player> matchedPlayers = server.matchPlayer(args[0]);
for (Player matchPlayer : matchedPlayers)
{
final User matchedUser = ess.getUser(matchPlayer);
if (skipHidden && matchedUser.isHidden())
{
continue;
} }
foundUser = true;
@Override
protected void updatePlayer(final Server server, final CommandSender sender, final User matchedUser, final String[] args)
{
final IReplyTo replyTo = sender instanceof Player ? ess.getUser(sender) : Console.getConsoleReplyTo();
final String senderName = sender instanceof Player ? ((Player)sender).getDisplayName() : Console.NAME;
if (matchedUser.isAfk()) if (matchedUser.isAfk())
{ {
sender.sendMessage(_("userAFK", matchPlayer.getDisplayName())); sender.sendMessage(_("userAFK", matchedUser.getDisplayName()));
} }
sender.sendMessage(_("msgFormat", translatedMe, matchPlayer.getDisplayName(), message)); sender.sendMessage(_("msgFormat", translatedMe, matchedUser.getDisplayName(), args[0]));
if (sender instanceof Player && matchedUser.isIgnoredPlayer(ess.getUser(sender))) if (sender instanceof Player && matchedUser.isIgnoredPlayer(ess.getUser(sender)))
{ {
continue; return;
} }
matchedUser.sendMessage(_("msgFormat", senderName, translatedMe, message)); matchedUser.sendMessage(_("msgFormat", senderName, translatedMe, args[0]));
replyTo.setReplyTo(matchPlayer); replyTo.setReplyTo(matchedUser.getBase());
matchedUser.setReplyTo(sender); matchedUser.setReplyTo(sender);
} }
if (!foundUser)
{
throw new PlayerNotFoundException();
}
}
} }

View file

@ -9,7 +9,7 @@ import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
public class Commandnick extends EssentialsCommand public class Commandnick extends EssentialsLoopCommand
{ {
public Commandnick() public Commandnick()
{ {
@ -27,14 +27,16 @@ public class Commandnick extends EssentialsCommand
{ {
throw new Exception(_("nickDisplayName")); throw new Exception(_("nickDisplayName"));
} }
final String[] nickname = formatNickname(user, args[1]).split(" ");
if (args.length > 1 && user.isAuthorized("essentials.nick.others")) if (args.length > 1 && user.isAuthorized("essentials.nick.others"))
{ {
setNickname(server, getPlayer(server, user, args, 0), formatNickname(user, args[1])); loopOfflinePlayers(server, user.getBase(), false, args[0], nickname);
user.sendMessage(_("nickChanged")); user.sendMessage(_("nickChanged"));
} }
else else
{ {
setNickname(server, user, formatNickname(user, args[0])); updatePlayer(server, user.getBase(), user, nickname);
} }
} }
@ -49,54 +51,16 @@ public class Commandnick extends EssentialsCommand
{ {
throw new Exception(_("nickDisplayName")); throw new Exception(_("nickDisplayName"));
} }
if ((args[0].equalsIgnoreCase("*") || args[0].equalsIgnoreCase("all")) && args[1].equalsIgnoreCase("off")) final String[] nickname = formatNickname(null, args[1]).split(" ");
{ loopOfflinePlayers(server, sender, false, args[0], nickname);
resetAllNicknames(server);
}
else
{
setNickname(server, getPlayer(server, args, 0, true, false), formatNickname(null, args[1]));
}
sender.sendMessage(_("nickChanged")); sender.sendMessage(_("nickChanged"));
} }
private String formatNickname(final User user, final String nick) @Override
protected void updatePlayer(final Server server, final CommandSender sender, final User target, final String[] args) throws NotEnoughArgumentsException
{ {
if (user == null) final String nick = args[0];
{ if (target.getName().equalsIgnoreCase(nick))
return FormatUtil.replaceFormat(nick);
}
else
{
return FormatUtil.formatString(user, "essentials.nick", nick);
}
}
private void resetAllNicknames(final Server server)
{
for (Player player : server.getOnlinePlayers())
{
try
{
setNickname(server, ess.getUser(player), "off");
}
catch (Exception ex)
{
}
}
}
private void setNickname(final Server server, final User target, final String nick) throws Exception
{
if (!nick.matches("^[a-zA-Z_0-9\u00a7]+$"))
{
throw new Exception(_("nickNamesAlpha"));
}
else if (nick.length() > ess.getSettings().getMaxNickLength())
{
throw new Exception(_("nickTooLong"));
}
else if (target.getName().equalsIgnoreCase(nick))
{ {
target.setNickname(nick); target.setNickname(nick);
target.setDisplayNick(); target.setDisplayNick();
@ -108,26 +72,47 @@ public class Commandnick extends EssentialsCommand
target.setDisplayNick(); target.setDisplayNick();
target.sendMessage(_("nickNoMore")); target.sendMessage(_("nickNoMore"));
} }
else if (nickInUse(server, target, nick))
{
throw new NotEnoughArgumentsException(_("nickInUse"));
}
else else
{ {
for (Player onlinePlayer : server.getOnlinePlayers()) target.setNickname(nick);
target.setDisplayNick();
target.sendMessage(_("nickSet", target.getDisplayName()));
}
}
private String formatNickname(final User user, final String nick) throws Exception
{
String newNick = user == null ? FormatUtil.replaceFormat(nick) : FormatUtil.formatString(user, "essentials.nick", nick);
if (!newNick.matches("^[a-zA-Z_0-9\u00a7]+$"))
{
throw new Exception(_("nickNamesAlpha"));
}
else if (newNick.length() > ess.getSettings().getMaxNickLength())
{
throw new Exception(_("nickTooLong"));
}
return newNick;
}
private boolean nickInUse(final Server server, final User target, String nick)
{
final String lowerNick = nick.toLowerCase(Locale.ENGLISH);
for (final Player onlinePlayer : server.getOnlinePlayers())
{ {
if (target.getBase() == onlinePlayer) if (target.getBase() == onlinePlayer)
{ {
continue; continue;
} }
String displayName = onlinePlayer.getDisplayName().toLowerCase(Locale.ENGLISH); if (lowerNick.equals(onlinePlayer.getDisplayName().toLowerCase(Locale.ENGLISH))
String name = onlinePlayer.getName().toLowerCase(Locale.ENGLISH); || lowerNick.equals(onlinePlayer.getName().toLowerCase(Locale.ENGLISH)))
String lowerNick = nick.toLowerCase(Locale.ENGLISH);
if (lowerNick.equals(displayName) || lowerNick.equals(name))
{ {
throw new Exception(_("nickInUse")); return true;
} }
} }
return false;
target.setNickname(nick);
target.setDisplayNick();
target.sendMessage(_("nickSet", target.getDisplayName() + "§7."));
}
} }
} }

View file

@ -1,55 +1,39 @@
package com.earth2me.essentials.commands; package com.earth2me.essentials.commands;
import static com.earth2me.essentials.I18n._; import com.earth2me.essentials.ChargeException;
import com.earth2me.essentials.Trade; import com.earth2me.essentials.Trade;
import com.earth2me.essentials.User; import com.earth2me.essentials.User;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.List;
import org.bukkit.Server; import org.bukkit.Server;
import org.bukkit.entity.Player; import org.bukkit.command.CommandSender;
public class Commandpay extends EssentialsCommand public class Commandpay extends EssentialsLoopCommand
{ {
BigDecimal amount;
public Commandpay() public Commandpay()
{ {
super("pay"); super("pay");
} }
@Override @Override
public void run(Server server, User user, String commandLabel, String[] args) throws Exception public void run(final Server server, final User user, final String commandLabel, final String[] args) throws Exception
{ {
if (args.length < 2) if (args.length < 2)
{ {
throw new NotEnoughArgumentsException(); throw new NotEnoughArgumentsException();
} }
//TODO: TL this. amount = new BigDecimal(args[1].replaceAll("[^0-9\\.]", ""));
if (args[0].trim().length() < 2) loopOnlinePlayers(server, user.getBase(), true, args[0], args);
{
throw new NotEnoughArgumentsException("You need to specify a player to pay.");
} }
BigDecimal amount = new BigDecimal(args[1].replaceAll("[^0-9\\.]", "")); @Override
protected void updatePlayer(final Server server, final CommandSender sender, final User player, final String[] args) throws ChargeException
boolean skipHidden = !user.isAuthorized("essentials.vanish.interact");
boolean foundUser = false;
final List<Player> matchedPlayers = server.matchPlayer(args[0]);
for (Player matchPlayer : matchedPlayers)
{ {
User player = ess.getUser(matchPlayer); User user = ess.getUser(sender);
if (skipHidden && player.isHidden())
{
continue;
}
foundUser = true;
user.payUser(player, amount); user.payUser(player, amount);
Trade.log("Command", "Pay", "Player", user.getName(), new Trade(amount, ess), player.getName(), new Trade(amount, ess), user.getLocation(), ess); Trade.log("Command", "Pay", "Player", user.getName(), new Trade(amount, ess), player.getName(), new Trade(amount, ess), user.getLocation(), ess);
} }
if (!foundUser)
{
throw new PlayerNotFoundException();
}
}
} }

View file

@ -43,27 +43,30 @@ public abstract class EssentialsCommand implements IEssentialsCommand
return name; return name;
} }
protected User getPlayer(final Server server, final User user, final String[] args, final int pos) throws NoSuchFieldException, NotEnoughArgumentsException // Get online players - only show vanished if source has permission
{ protected User getPlayer(final Server server, final CommandSender sender, final String[] args, final int pos) throws PlayerNotFoundException, NotEnoughArgumentsException
return getPlayer(server, user, args, pos, user.isAuthorized("essentials.vanish.interact"), false);
}
protected User getPlayer(final Server server, final CommandSender sender, final String[] args, final int pos) throws NoSuchFieldException, NotEnoughArgumentsException
{ {
if (sender instanceof Player) if (sender instanceof Player)
{ {
User user = ess.getUser(sender); User user = ess.getUser(sender);
return getPlayer(server, user, args, pos); return getPlayer(server, user, args, pos);
} }
return getPlayer(server, null, args, pos, true, false); return getPlayer(server, args, pos, true, false);
} }
protected User getPlayer(final Server server, final String[] args, final int pos, boolean getHidden, final boolean getOffline) throws NoSuchFieldException, NotEnoughArgumentsException // Get online players - only show vanished if source has permission
protected User getPlayer(final Server server, final User user, final String[] args, final int pos) throws PlayerNotFoundException, NotEnoughArgumentsException
{
return getPlayer(server, user, args, pos, user.isAuthorized("essentials.vanish.interact"), false);
}
// Get online or offline players, this method allows for raw access
protected User getPlayer(final Server server, final String[] args, final int pos, boolean getHidden, final boolean getOffline) throws PlayerNotFoundException, NotEnoughArgumentsException
{ {
return getPlayer(server, null, args, pos, getHidden, getOffline); return getPlayer(server, null, args, pos, getHidden, getOffline);
} }
private User getPlayer(final Server server, final User sourceUser, final String[] args, final int pos, boolean getHidden, final boolean getOffline) throws NoSuchFieldException, NotEnoughArgumentsException private User getPlayer(final Server server, final User sourceUser, final String[] args, final int pos, boolean getHidden, final boolean getOffline) throws PlayerNotFoundException, NotEnoughArgumentsException
{ {
if (args.length <= pos) if (args.length <= pos)
{ {
@ -73,7 +76,19 @@ public abstract class EssentialsCommand implements IEssentialsCommand
{ {
throw new PlayerNotFoundException(); throw new PlayerNotFoundException();
} }
final User user = ess.getUser(args[pos]); return getPlayer(server, sourceUser, args[pos], getHidden, getOffline);
}
// Get online or offline players, this method allows for raw access
protected User getPlayer(final Server server, final String searchTerm, boolean getHidden, final boolean getOffline) throws PlayerNotFoundException
{
return getPlayer(server, null, searchTerm, getHidden, getOffline);
}
private User getPlayer(final Server server, final User sourceUser, final String searchTerm, boolean getHidden, final boolean getOffline) throws PlayerNotFoundException
{
final User user = ess.getUser(searchTerm);
if (user != null) if (user != null)
{ {
if (!getOffline && !user.isOnline()) if (!getOffline && !user.isOnline())
@ -86,11 +101,11 @@ public abstract class EssentialsCommand implements IEssentialsCommand
} }
return user; return user;
} }
final List<Player> matches = server.matchPlayer(args[pos]); final List<Player> matches = server.matchPlayer(searchTerm);
if (matches.isEmpty()) if (matches.isEmpty())
{ {
final String matchText = args[pos].toLowerCase(Locale.ENGLISH); final String matchText = searchTerm.toLowerCase(Locale.ENGLISH);
for (Player onlinePlayer : server.getOnlinePlayers()) for (Player onlinePlayer : server.getOnlinePlayers())
{ {
final User userMatch = ess.getUser(onlinePlayer); final User userMatch = ess.getUser(onlinePlayer);
@ -109,7 +124,7 @@ public abstract class EssentialsCommand implements IEssentialsCommand
for (Player player : matches) for (Player player : matches)
{ {
final User userMatch = ess.getUser(player); final User userMatch = ess.getUser(player);
if (userMatch.getDisplayName().startsWith(args[pos]) && (getHidden || !userMatch.isHidden() || userMatch.equals(sourceUser))) if (userMatch.getDisplayName().startsWith(searchTerm) && (getHidden || !userMatch.isHidden() || userMatch.equals(sourceUser)))
{ {
return userMatch; return userMatch;
} }

View file

@ -0,0 +1,126 @@
package com.earth2me.essentials.commands;
import com.earth2me.essentials.ChargeException;
import com.earth2me.essentials.User;
import java.util.List;
import org.bukkit.Server;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
public abstract class EssentialsLoopCommand extends EssentialsCommand
{
public EssentialsLoopCommand(String command)
{
super(command);
}
protected void loopOfflinePlayers(final Server server, final CommandSender sender, final boolean multipleStringMatches, final String searchTerm, final String[] commandArgs)
throws PlayerNotFoundException, NotEnoughArgumentsException, PlayerExemptException, ChargeException
{
if (searchTerm.isEmpty())
{
throw new PlayerNotFoundException();
}
if (searchTerm.contentEquals("**"))
{
for (String sUser : ess.getUserMap().getAllUniqueUsers())
{
final User matchedUser = ess.getUser(sUser);
updatePlayer(server, sender, matchedUser, commandArgs);
}
}
else if (searchTerm.contentEquals("*"))
{
boolean skipHidden = sender instanceof Player && !ess.getUser(sender).isAuthorized("essentials.vanish.interact");
for (Player onlinePlayer : server.getOnlinePlayers())
{
final User onlineUser = ess.getUser(onlinePlayer);
if (skipHidden && onlineUser.isHidden())
{
continue;
}
updatePlayer(server, sender, onlineUser, commandArgs);
}
}
else if (multipleStringMatches)
{
if (searchTerm.trim().length() < 3)
{
throw new PlayerNotFoundException();
}
final List<Player> matchedPlayers = server.matchPlayer(searchTerm);
if (matchedPlayers.isEmpty())
{
final User matchedUser = getPlayer(server, searchTerm, true, true);
updatePlayer(server, sender, matchedUser, commandArgs);
}
for (Player matchPlayer : matchedPlayers)
{
final User matchedUser = ess.getUser(matchPlayer);
updatePlayer(server, sender, matchedUser, commandArgs);
}
}
else
{
final User user = getPlayer(server, searchTerm, true, true);
updatePlayer(server, sender, user, commandArgs);
}
}
protected void loopOnlinePlayers(final Server server, final CommandSender sender, final boolean multipleStringMatches, final String searchTerm, final String[] commandArgs)
throws PlayerNotFoundException, NotEnoughArgumentsException, PlayerExemptException, ChargeException
{
if (searchTerm.isEmpty())
{
throw new PlayerNotFoundException();
}
boolean skipHidden = sender instanceof Player && !ess.getUser(sender).isAuthorized("essentials.vanish.interact");
if (searchTerm.contentEquals("**") || searchTerm.contentEquals("*"))
{
for (Player onlinePlayer : server.getOnlinePlayers())
{
final User onlineUser = ess.getUser(onlinePlayer);
if (skipHidden && onlineUser.isHidden())
{
continue;
}
updatePlayer(server, sender, onlineUser, commandArgs);
}
}
else if (multipleStringMatches)
{
if (searchTerm.trim().length() < 2)
{
throw new PlayerNotFoundException();
}
boolean foundUser = false;
final List<Player> matchedPlayers = server.matchPlayer(searchTerm);
for (Player matchPlayer : matchedPlayers)
{
final User player = ess.getUser(matchPlayer);
if (skipHidden && player.isHidden())
{
continue;
}
foundUser = true;
updatePlayer(server, sender, player, commandArgs);
}
if (!foundUser)
{
throw new PlayerNotFoundException();
}
}
else
{
final User player = getPlayer(server, searchTerm, skipHidden, false);
updatePlayer(server, sender, player, commandArgs);
}
}
protected abstract void updatePlayer(Server server, CommandSender sender, User user, String[] args)
throws NotEnoughArgumentsException, PlayerExemptException, ChargeException;
}

View file

@ -0,0 +1,9 @@
package com.earth2me.essentials.commands;
public class PlayerExemptException extends NoSuchFieldException
{
public PlayerExemptException(String message)
{
super(message);
}
}