mirror of
https://github.com/essentials/Essentials.git
synced 2025-10-01 00:26:48 +02:00
We now first test, if the user could pay it, do the stuff and then charge him. If the command throws an exception, the user will not be charged.
118 lines
3.2 KiB
Java
118 lines
3.2 KiB
Java
package com.earth2me.essentials.commands;
|
|
|
|
import com.earth2me.essentials.ChargeException;
|
|
import com.earth2me.essentials.Trade;
|
|
import java.util.List;
|
|
import org.bukkit.Server;
|
|
import org.bukkit.command.Command;
|
|
import org.bukkit.command.CommandSender;
|
|
import com.earth2me.essentials.IEssentials;
|
|
import com.earth2me.essentials.OfflinePlayer;
|
|
import org.bukkit.entity.Player;
|
|
import com.earth2me.essentials.User;
|
|
import com.earth2me.essentials.Util;
|
|
import java.util.logging.Logger;
|
|
|
|
|
|
public abstract class EssentialsCommand implements IEssentialsCommand
|
|
{
|
|
private final transient String name;
|
|
protected transient IEssentials ess;
|
|
protected final static Logger logger = Logger.getLogger("Minecraft");
|
|
|
|
protected EssentialsCommand(final String name)
|
|
{
|
|
this.name = name;
|
|
}
|
|
|
|
public void setEssentials(final IEssentials ess)
|
|
{
|
|
this.ess = ess;
|
|
}
|
|
|
|
public String getName()
|
|
{
|
|
return name;
|
|
}
|
|
|
|
protected User getPlayer(final Server server, final String[] args, final int pos) throws NoSuchFieldException, NotEnoughArgumentsException
|
|
{
|
|
return getPlayer(server, args, pos, false);
|
|
}
|
|
|
|
protected User getPlayer(final Server server, final String[] args, final int pos, final boolean getOffline) throws NoSuchFieldException, NotEnoughArgumentsException
|
|
{
|
|
if (args.length <= pos)
|
|
{
|
|
throw new NotEnoughArgumentsException();
|
|
}
|
|
final User user = ess.getUser(args[pos]);
|
|
if (user != null)
|
|
{
|
|
if (!getOffline && (user.getBase() instanceof OfflinePlayer || user.isHidden()))
|
|
{
|
|
throw new NoSuchFieldException(Util.i18n("playerNotFound"));
|
|
}
|
|
return user;
|
|
}
|
|
final List<Player> matches = server.matchPlayer(args[pos]);
|
|
|
|
if (!matches.isEmpty())
|
|
{
|
|
for (Player player : matches)
|
|
{
|
|
final User userMatch = ess.getUser(player);
|
|
if (userMatch.getDisplayName().startsWith(args[pos]) && (getOffline || !userMatch.isHidden()))
|
|
{
|
|
return userMatch;
|
|
}
|
|
}
|
|
final User userMatch = ess.getUser(matches.get(0));
|
|
if (getOffline || !userMatch.isHidden())
|
|
{
|
|
return userMatch;
|
|
}
|
|
}
|
|
throw new NoSuchFieldException(Util.i18n("playerNotFound"));
|
|
}
|
|
|
|
@Override
|
|
public final void run(final Server server, final User user, final String commandLabel, final Command cmd, final String[] args) throws Exception
|
|
{
|
|
final Trade charge = new Trade(this.getName(), ess);
|
|
charge.isAffordableFor(user);
|
|
run(server, user, commandLabel, args);
|
|
charge.charge(user);
|
|
}
|
|
|
|
protected void run(final Server server, final User user, final String commandLabel, final String[] args) throws Exception
|
|
{
|
|
run(server, (CommandSender)user.getBase(), commandLabel, args);
|
|
}
|
|
|
|
@Override
|
|
public final void run(final Server server, final CommandSender sender, final String commandLabel, final Command cmd, final String[] args) throws Exception
|
|
{
|
|
run(server, sender, commandLabel, args);
|
|
}
|
|
|
|
protected void run(final Server server, final CommandSender sender, final String commandLabel, final String[] args) throws Exception
|
|
{
|
|
throw new Exception(Util.format("onlyPlayers", commandLabel));
|
|
}
|
|
|
|
public static String getFinalArg(final String[] args, final int start)
|
|
{
|
|
final StringBuilder bldr = new StringBuilder();
|
|
for (int i = start; i < args.length; i++)
|
|
{
|
|
if (i != start)
|
|
{
|
|
bldr.append(" ");
|
|
}
|
|
bldr.append(args[i]);
|
|
}
|
|
return bldr.toString();
|
|
}
|
|
}
|