package me.desht.scrollingmenusign.commands;
import java.util.List;
import java.util.UUID;
import me.desht.dhutils.MessagePager;
import me.desht.dhutils.MiscUtil;
import me.desht.scrollingmenusign.SMSException;
import me.desht.scrollingmenusign.ScrollingMenuSign;
import me.desht.scrollingmenusign.variables.SMSVariables;
import me.desht.scrollingmenusign.variables.VariablesManager;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.plugin.Plugin;
public class VarCommand extends SMSAbstractCommand {
public VarCommand() {
super("sms var", 1, 4);
setPermissionNode("scrollingmenusign.commands.var");
setUsage(new String[]{
"/sms var -l [<player>]",
"/sms var [-q] [<player>.]<variable> [<value>]",
"/sms var [-q] -d [<player>.]<variable>",
"/sms var [-q] -i [<player>.]<variable> [<amount>]",
});
setOptions("q", "l", "d", "i");
setQuotedArgs(true);
}
@Override
public boolean execute(Plugin plugin, CommandSender sender, String[] args) {
VariablesManager varMgr = ((ScrollingMenuSign) plugin).getVariablesManager();
if (getBooleanOption("l")) {
listVariables(sender, args, varMgr);
return true;
}
if (args.length == 0) {
showUsage(sender);
return true;
}
String varSpec = args[0];
boolean quiet = getBooleanOption("q");
if (getBooleanOption("d")) {
// delete the variable
varMgr.set(sender, varSpec, null);
if (!quiet)
MiscUtil.statusMessage(sender, "Deleted variable &f" + varSpec + "&-");
} else if (getBooleanOption("i")) {
// add a numeric quantity to the variable
try {
int val = Integer.parseInt(varMgr.get(sender, varSpec));
int incr = args.length >= 2 ? Integer.parseInt(args[1]) : 1;
varMgr.set(sender, varSpec, Integer.toString(val + incr));
if (!quiet)
MiscUtil.statusMessage(sender, varSpec + " = '&e" + (val + incr) + "&f'");
} catch (NumberFormatException e) {
throw new SMSException(e.getMessage() + ": not a number");
}
} else if (args.length >= 2) {
// set the variable
varMgr.set(sender, varSpec, args[1]);
if (!quiet) {
MiscUtil.statusMessage(sender, varSpec + " = '&e" + args[1] + "&f'");
}
} else {
// just display the variable
String def = varMgr.isSet(sender, varSpec) ? "" : " &6(default)";
String val = varMgr.get(sender, varSpec);
MiscUtil.statusMessage(sender, varSpec + " = '&e" + val + "&f'" + def);
}
return true;
}
private void listVariables(CommandSender sender, String[] args, VariablesManager varMgr) {
// list all variables for the player
UUID id;
if (args.length == 0) {
id = sender instanceof Player ? ((Player) sender).getUniqueId() : VariablesManager.GLOBAL_UUID;
} else {
id = varMgr.getIDFromString(args[0]);
}
SMSVariables vars = varMgr.getVariables(id, false);
MessagePager pager = MessagePager.getPager(sender).clear().setParseColours(true);
for (String key : vars.getVariables()) {
pager.add(key + " = '&e" + vars.get(key) + "&-'");
}
pager.showPage();
}
public List<String> onTabComplete(Plugin plugin, CommandSender sender, String[] args) {
showUsage(sender);
return noCompletions(sender);
}
}