mirror of
https://github.com/IntellectualSites/PlotSquared.git
synced 2024-11-26 23:26:45 +01:00
Implement missing flag subcommands
This commit is contained in:
parent
1e7e019d25
commit
ff554560d9
@ -2,9 +2,15 @@ package com.github.intellectualsites.plotsquared.plot.commands;
|
|||||||
|
|
||||||
import com.github.intellectualsites.plotsquared.commands.Command;
|
import com.github.intellectualsites.plotsquared.commands.Command;
|
||||||
import com.github.intellectualsites.plotsquared.commands.CommandDeclaration;
|
import com.github.intellectualsites.plotsquared.commands.CommandDeclaration;
|
||||||
|
import com.github.intellectualsites.plotsquared.plot.PlotSquared;
|
||||||
|
import com.github.intellectualsites.plotsquared.plot.config.CaptionUtility;
|
||||||
import com.github.intellectualsites.plotsquared.plot.config.Captions;
|
import com.github.intellectualsites.plotsquared.plot.config.Captions;
|
||||||
|
import com.github.intellectualsites.plotsquared.plot.config.Settings;
|
||||||
|
import com.github.intellectualsites.plotsquared.plot.flags.FlagParseException;
|
||||||
import com.github.intellectualsites.plotsquared.plot.flags.GlobalFlagContainer;
|
import com.github.intellectualsites.plotsquared.plot.flags.GlobalFlagContainer;
|
||||||
import com.github.intellectualsites.plotsquared.plot.flags.PlotFlag;
|
import com.github.intellectualsites.plotsquared.plot.flags.PlotFlag;
|
||||||
|
import com.github.intellectualsites.plotsquared.plot.flags.types.IntegerFlag;
|
||||||
|
import com.github.intellectualsites.plotsquared.plot.flags.types.ListFlag;
|
||||||
import com.github.intellectualsites.plotsquared.plot.object.Location;
|
import com.github.intellectualsites.plotsquared.plot.object.Location;
|
||||||
import com.github.intellectualsites.plotsquared.plot.object.Plot;
|
import com.github.intellectualsites.plotsquared.plot.object.Plot;
|
||||||
import com.github.intellectualsites.plotsquared.plot.object.PlotMessage;
|
import com.github.intellectualsites.plotsquared.plot.object.PlotMessage;
|
||||||
@ -12,23 +18,82 @@ import com.github.intellectualsites.plotsquared.plot.object.PlotPlayer;
|
|||||||
import com.github.intellectualsites.plotsquared.plot.object.RunnableVal2;
|
import com.github.intellectualsites.plotsquared.plot.object.RunnableVal2;
|
||||||
import com.github.intellectualsites.plotsquared.plot.object.RunnableVal3;
|
import com.github.intellectualsites.plotsquared.plot.object.RunnableVal3;
|
||||||
import com.github.intellectualsites.plotsquared.plot.util.MainUtil;
|
import com.github.intellectualsites.plotsquared.plot.util.MainUtil;
|
||||||
|
import com.github.intellectualsites.plotsquared.plot.util.MathMan;
|
||||||
import com.github.intellectualsites.plotsquared.plot.util.Permissions;
|
import com.github.intellectualsites.plotsquared.plot.util.Permissions;
|
||||||
import com.github.intellectualsites.plotsquared.plot.util.StringComparison;
|
import com.github.intellectualsites.plotsquared.plot.util.StringComparison;
|
||||||
|
import com.github.intellectualsites.plotsquared.plot.util.StringMan;
|
||||||
|
import com.github.intellectualsites.plotsquared.plot.util.helpmenu.HelpMenu;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
|
import javax.annotation.Nonnull;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
@CommandDeclaration(command = "flag", aliases = {"f",
|
@CommandDeclaration(command = "flag", aliases = {"f",
|
||||||
"flag"}, usage = "/plot flag <set|remove|add|list|info> <flag> <value>",
|
"flag"}, usage = "/plot flag <set|remove|add|list|info> <flag> <value>", description = "Manage plot flags", category = CommandCategory.SETTINGS, requiredType = RequiredType.NONE, permission = "plots.flag")
|
||||||
description = "Manage plot flags",
|
@SuppressWarnings("unused") public final class FlagCommand extends SubCommand {
|
||||||
category = CommandCategory.SETTINGS,
|
|
||||||
requiredType = RequiredType.NONE,
|
|
||||||
permission = "plots.flag")
|
|
||||||
public class FlagCommand extends SubCommand {
|
|
||||||
|
|
||||||
@Override public boolean onCommand(PlotPlayer player, String[] args) {
|
private static boolean checkPermValue(@Nonnull final PlotPlayer player,
|
||||||
MainUtil.sendMessage(player, Captions.COMMAND_SYNTAX, getUsage());
|
@NotNull final PlotFlag<?, ?> flag, @NotNull String key, @NotNull String value) {
|
||||||
return false;
|
key = key.toLowerCase();
|
||||||
|
value = value.toLowerCase();
|
||||||
|
String perm = CaptionUtility
|
||||||
|
.format(Captions.PERMISSION_SET_FLAG_KEY_VALUE.getTranslated(), key.toLowerCase(),
|
||||||
|
value.toLowerCase());
|
||||||
|
if (flag instanceof IntegerFlag && MathMan.isInteger(value)) {
|
||||||
|
try {
|
||||||
|
int numeric = Integer.parseInt(value);
|
||||||
|
perm = perm.substring(0, perm.length() - value.length() - 1);
|
||||||
|
if (numeric > 0) {
|
||||||
|
int checkRange = PlotSquared.get().getPlatform().equalsIgnoreCase("bukkit") ?
|
||||||
|
numeric :
|
||||||
|
Settings.Limit.MAX_PLOTS;
|
||||||
|
final boolean result = player.hasPermissionRange(perm, checkRange) >= numeric;
|
||||||
|
if (!result) {
|
||||||
|
MainUtil.sendMessage(player, Captions.NO_PERMISSION, CaptionUtility
|
||||||
|
.format(Captions.PERMISSION_SET_FLAG_KEY_VALUE.getTranslated(),
|
||||||
|
key.toLowerCase(), value.toLowerCase()));
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
} catch (NumberFormatException ignore) {
|
||||||
|
}
|
||||||
|
} else if (flag instanceof ListFlag) {
|
||||||
|
final ListFlag<?, ?> listFlag = (ListFlag<?, ?>) flag;
|
||||||
|
try {
|
||||||
|
PlotFlag<? extends List<?>, ?> parsedFlag = listFlag.parse(value);
|
||||||
|
for (final Object entry : parsedFlag.getValue()) {
|
||||||
|
final String permission = CaptionUtility
|
||||||
|
.format(Captions.PERMISSION_SET_FLAG_KEY_VALUE.getTranslated(),
|
||||||
|
key.toLowerCase(), entry.toString().toLowerCase());
|
||||||
|
final boolean result = Permissions.hasPermission(player, permission);
|
||||||
|
if (!result) {
|
||||||
|
MainUtil.sendMessage(player, Captions.NO_PERMISSION, CaptionUtility
|
||||||
|
.format(Captions.PERMISSION_SET_FLAG_KEY_VALUE.getTranslated(),
|
||||||
|
key.toLowerCase(), value.toLowerCase()));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (final Exception e) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
final boolean result = Permissions.hasPermission(player, perm);
|
||||||
|
if (!result) {
|
||||||
|
MainUtil.sendMessage(player, Captions.NO_PERMISSION, CaptionUtility
|
||||||
|
.format(Captions.PERMISSION_SET_FLAG_KEY_VALUE.getTranslated(), key.toLowerCase(),
|
||||||
|
value.toLowerCase()));
|
||||||
|
}
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -36,7 +101,7 @@ public class FlagCommand extends SubCommand {
|
|||||||
*
|
*
|
||||||
* @return true if the player is allowed to modify the flags at their current location
|
* @return true if the player is allowed to modify the flags at their current location
|
||||||
*/
|
*/
|
||||||
private boolean checkRequirements(final PlotPlayer player) {
|
private static boolean checkRequirements(@NotNull final PlotPlayer player) {
|
||||||
final Location location = player.getLocation();
|
final Location location = player.getLocation();
|
||||||
final Plot plot = location.getPlotAbs();
|
final Plot plot = location.getPlotAbs();
|
||||||
if (plot == null) {
|
if (plot == null) {
|
||||||
@ -47,8 +112,10 @@ public class FlagCommand extends SubCommand {
|
|||||||
sendMessage(player, Captions.PLOT_NOT_CLAIMED);
|
sendMessage(player, Captions.PLOT_NOT_CLAIMED);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (!plot.isOwner(player.getUUID()) && !Permissions.hasPermission(player, Captions.PERMISSION_SET_FLAG_OTHER)) {
|
if (!plot.isOwner(player.getUUID()) && !Permissions
|
||||||
MainUtil.sendMessage(player, Captions.NO_PERMISSION, Captions.PERMISSION_SET_FLAG_OTHER);
|
.hasPermission(player, Captions.PERMISSION_SET_FLAG_OTHER)) {
|
||||||
|
MainUtil
|
||||||
|
.sendMessage(player, Captions.NO_PERMISSION, Captions.PERMISSION_SET_FLAG_OTHER);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
@ -59,17 +126,19 @@ public class FlagCommand extends SubCommand {
|
|||||||
* be found, a flag suggestion may be sent to the player.
|
* be found, a flag suggestion may be sent to the player.
|
||||||
*
|
*
|
||||||
* @param player Player executing the command
|
* @param player Player executing the command
|
||||||
* @param arg String to extract flag from
|
* @param arg String to extract flag from
|
||||||
* @return The flag, if found, else null
|
* @return The flag, if found, else null
|
||||||
*/
|
*/
|
||||||
@Nullable private PlotFlag<?, ?> getFlag(final PlotPlayer player, final String arg) {
|
@Nullable private static PlotFlag<?, ?> getFlag(@NotNull final PlotPlayer player,
|
||||||
|
@NotNull final String arg) {
|
||||||
if (arg != null && arg.length() > 0) {
|
if (arg != null && arg.length() > 0) {
|
||||||
final PlotFlag<?,?> flag = GlobalFlagContainer.getInstance().getFlagFromString(arg);
|
final PlotFlag<?, ?> flag = GlobalFlagContainer.getInstance().getFlagFromString(arg);
|
||||||
if (flag == null) {
|
if (flag == null) {
|
||||||
boolean suggested = false;
|
boolean suggested = false;
|
||||||
try {
|
try {
|
||||||
final StringComparison<PlotFlag<?, ?>> stringComparison =
|
final StringComparison<PlotFlag<?, ?>> stringComparison =
|
||||||
new StringComparison<>(arg, GlobalFlagContainer.getInstance().getFlagMap().values());
|
new StringComparison<>(arg,
|
||||||
|
GlobalFlagContainer.getInstance().getFlagMap().values());
|
||||||
final String best = stringComparison.getBestMatch();
|
final String best = stringComparison.getBestMatch();
|
||||||
if (best != null) {
|
if (best != null) {
|
||||||
MainUtil.sendMessage(player, Captions.NOT_VALID_FLAG_SUGGESTED, best);
|
MainUtil.sendMessage(player, Captions.NOT_VALID_FLAG_SUGGESTED, best);
|
||||||
@ -86,61 +155,204 @@ public class FlagCommand extends SubCommand {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override public Collection<Command> tab(PlotPlayer player, String[] args, boolean space) {
|
@Override public boolean onCommand(final PlotPlayer player, final String[] args) {
|
||||||
|
new HelpMenu(player).setCategory(CommandCategory.SETTINGS).setCommands(this.getCommands())
|
||||||
|
.generateMaxPages()
|
||||||
|
.generatePage(0, getParent().toString()).render();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override public Collection<Command> tab(final PlotPlayer player, final String[] args,
|
||||||
|
final boolean space) {
|
||||||
return tabOf(player, args, space, getUsage());
|
return tabOf(player, args, space, getUsage());
|
||||||
}
|
}
|
||||||
|
|
||||||
@CommandDeclaration(command = "set", aliases = {"s", "set"},
|
@CommandDeclaration(command = "set", aliases = {"s",
|
||||||
usage = "/plot flag set <flag> <value>",
|
"set"}, usage = "/plot flag set <flag> <value>", description = "Set a plot flag", category = CommandCategory.SETTINGS, requiredType = RequiredType.NONE, permission = "plots.set.flag")
|
||||||
description = "Set a plot flag",
|
public void set(final Command command, final PlotPlayer player, final String[] args,
|
||||||
category = CommandCategory.SETTINGS,
|
final RunnableVal3<Command, Runnable, Runnable> confirm,
|
||||||
requiredType = RequiredType.NONE,
|
final RunnableVal2<Command, CommandResult> whenDone) {
|
||||||
permission = "plots.flag.set")
|
|
||||||
public void set(Command command, PlotPlayer player, String[] args,
|
|
||||||
RunnableVal3<Command, Runnable, Runnable> confirm,
|
|
||||||
RunnableVal2<Command, CommandResult> whenDone) {
|
|
||||||
if (!checkRequirements(player)) {
|
if (!checkRequirements(player)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (args.length < 2) {
|
||||||
|
MainUtil.sendMessage(player, Captions.COMMAND_SYNTAX, "/plot flag set <flag> <value>");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
final PlotFlag<?, ?> plotFlag = getFlag(player, args[0]);
|
||||||
|
if (plotFlag == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
final String value = StringMan.join(Arrays.copyOfRange(args, 1, args.length), " ");
|
||||||
|
if (!checkPermValue(player, plotFlag, args[0], value)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
final PlotFlag<?, ?> parsed;
|
||||||
|
try {
|
||||||
|
parsed = plotFlag.parse(value);
|
||||||
|
} catch (final FlagParseException e) {
|
||||||
|
Captions.FLAG_PARSE_EXCEPTION
|
||||||
|
.send(player, e.getFlag().getName(), e.getValue(), e.getErrorMessage());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
player.getLocation().getPlotAbs().setFlag(parsed);
|
||||||
|
MainUtil.sendMessage(player, Captions.FLAG_ADDED);
|
||||||
}
|
}
|
||||||
|
|
||||||
@CommandDeclaration(command = "add", aliases = {"a", "add"},
|
@CommandDeclaration(command = "add", aliases = {"a",
|
||||||
usage = "/plot flag add <flag> <value>",
|
"add"}, usage = "/plot flag add <flag> <value>", description = "Add a plot flag value", category = CommandCategory.SETTINGS, requiredType = RequiredType.NONE, permission = "plots.flag.add")
|
||||||
description = "Add a plot flag value",
|
public void add(final Command command, PlotPlayer player, final String[] args,
|
||||||
category = CommandCategory.SETTINGS,
|
final RunnableVal3<Command, Runnable, Runnable> confirm,
|
||||||
requiredType = RequiredType.NONE,
|
final RunnableVal2<Command, CommandResult> whenDone) {
|
||||||
permission = "plots.flag.add")
|
|
||||||
public void add(Command command, PlotPlayer player, String[] args,
|
|
||||||
RunnableVal3<Command, Runnable, Runnable> confirm,
|
|
||||||
RunnableVal2<Command, CommandResult> whenDone) {
|
|
||||||
if (!checkRequirements(player)) {
|
if (!checkRequirements(player)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (args.length < 3) {
|
||||||
|
MainUtil.sendMessage(player, Captions.COMMAND_SYNTAX, "/plot flag add <flag> <values>");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
final PlotFlag flag = getFlag(player, args[0]);
|
||||||
|
if (flag == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
for (String entry : args[1].split(",")) {
|
||||||
|
if (!checkPermValue(player, flag, args[0], entry)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
final String value = StringMan.join(Arrays.copyOfRange(args, 1, args.length), " ");
|
||||||
|
final PlotFlag parsed;
|
||||||
|
try {
|
||||||
|
parsed = flag.parse(value);
|
||||||
|
} catch (FlagParseException e) {
|
||||||
|
Captions.FLAG_PARSE_EXCEPTION
|
||||||
|
.send(player, e.getFlag().getName(), e.getValue(), e.getErrorMessage());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
boolean result = player.getLocation().getPlotAbs()
|
||||||
|
.setFlag(flag.merge(parsed.getValue()));
|
||||||
|
if (!result) {
|
||||||
|
MainUtil.sendMessage(player, Captions.FLAG_NOT_ADDED);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
MainUtil.sendMessage(player, Captions.FLAG_ADDED);
|
||||||
}
|
}
|
||||||
|
|
||||||
@CommandDeclaration(command = "list", aliases = {"l", "list", "flags"},
|
@CommandDeclaration(command = "remove", aliases = {"r", "remove",
|
||||||
usage = "/plot flag list",
|
"delete"}, usage = "/plot flag remove <flag> [values]", description = "Remove a flag", category = CommandCategory.SETTINGS, requiredType = RequiredType.NONE, permission = "plots.flag.add")
|
||||||
description = "List all available plot flags",
|
public void remove(final Command command, PlotPlayer player, final String[] args,
|
||||||
category = CommandCategory.SETTINGS,
|
final RunnableVal3<Command, Runnable, Runnable> confirm,
|
||||||
requiredType = RequiredType.NONE,
|
final RunnableVal2<Command, CommandResult> whenDone) {
|
||||||
permission = "plots.flag.list")
|
|
||||||
public void list(Command command, PlotPlayer player, String[] args,
|
|
||||||
RunnableVal3<Command, Runnable, Runnable> confirm,
|
|
||||||
RunnableVal2<Command, CommandResult> whenDone) {
|
|
||||||
if (!checkRequirements(player)) {
|
if (!checkRequirements(player)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (args.length != 1 && args.length != 2) {
|
||||||
|
MainUtil.sendMessage(player, Captions.COMMAND_SYNTAX, "/plot flag remove <flag> [values]");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
final PlotFlag<?, ?> flag = getFlag(player, args[0]);
|
||||||
|
if (flag == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!Permissions.hasPermission(player,
|
||||||
|
CaptionUtility.format(Captions.PERMISSION_SET_FLAG_KEY.getTranslated(), args[0].toLowerCase()))) {
|
||||||
|
if (args.length != 2) {
|
||||||
|
MainUtil.sendMessage(player, Captions.NO_PERMISSION, CaptionUtility
|
||||||
|
.format(Captions.PERMISSION_SET_FLAG_KEY.getTranslated(), args[0].toLowerCase()));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
final Plot plot = player.getLocation().getPlotAbs();
|
||||||
|
if (args.length == 2 && flag instanceof ListFlag) {
|
||||||
|
String value = StringMan.join(Arrays.copyOfRange(args, 1, args.length), " ");
|
||||||
|
final ListFlag<?, ?> listFlag = (ListFlag<?, ?>) flag;
|
||||||
|
final List<?> list = plot.getFlag((Class<? extends ListFlag<?, ?>>) listFlag.getClass());
|
||||||
|
final PlotFlag<? extends List<?>, ?> parsedFlag;
|
||||||
|
try {
|
||||||
|
parsedFlag = listFlag.parse(value);
|
||||||
|
} catch (final FlagParseException e) {
|
||||||
|
Captions.FLAG_PARSE_EXCEPTION
|
||||||
|
.send(player, e.getFlag().getName(), e.getValue(), e.getErrorMessage());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (parsedFlag.getValue().isEmpty()) {
|
||||||
|
MainUtil.sendMessage(player, Captions.FLAG_NOT_REMOVED);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (list.removeAll(parsedFlag.getValue())) {
|
||||||
|
if (list.isEmpty()) {
|
||||||
|
if (plot.removeFlag(flag)) {
|
||||||
|
MainUtil.sendMessage(player, Captions.FLAG_REMOVED);
|
||||||
|
return;
|
||||||
|
} else {
|
||||||
|
MainUtil.sendMessage(player, Captions.FLAG_NOT_REMOVED);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
MainUtil.sendMessage(player, Captions.FLAG_REMOVED);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
MainUtil.sendMessage(player, Captions.FLAG_NOT_REMOVED);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// TODO reimplement somewhere else: DBFunc.setFlags(plot, plot.getFlags());
|
||||||
|
return;
|
||||||
|
} else {
|
||||||
|
boolean result = plot.removeFlag(flag);
|
||||||
|
if (!result) {
|
||||||
|
MainUtil.sendMessage(player, Captions.FLAG_NOT_REMOVED);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* TODO reimplement, maybe handle it with events?
|
||||||
|
if (flag == Flags.TIME) {
|
||||||
|
player.setTime(Long.MAX_VALUE);
|
||||||
|
} else if (flag == Flags.WEATHER) {
|
||||||
|
player.setWeather(PlotWeather.RESET);
|
||||||
|
}*/
|
||||||
|
MainUtil.sendMessage(player, Captions.FLAG_REMOVED);
|
||||||
}
|
}
|
||||||
|
|
||||||
@CommandDeclaration(command = "info", aliases = {"i", "info"},
|
@CommandDeclaration(command = "list", aliases = {"l", "list",
|
||||||
usage = "/plot flag info <flag>",
|
"flags"}, usage = "/plot flag list", description = "List all available plot flags", category = CommandCategory.SETTINGS, requiredType = RequiredType.NONE, permission = "plots.flag.list")
|
||||||
description = "View information about a flag",
|
public void list(final Command command, final PlotPlayer player, final String[] args,
|
||||||
category = CommandCategory.SETTINGS,
|
final RunnableVal3<Command, Runnable, Runnable> confirm,
|
||||||
requiredType = RequiredType.NONE,
|
final RunnableVal2<Command, CommandResult> whenDone) {
|
||||||
permission = "plots.flag.info")
|
if (!checkRequirements(player)) {
|
||||||
public void info(Command command, PlotPlayer player, String[] args,
|
return;
|
||||||
RunnableVal3<Command, Runnable, Runnable> confirm,
|
}
|
||||||
RunnableVal2<Command, CommandResult> whenDone) {
|
|
||||||
|
final Map<String, ArrayList<String>> flags = new HashMap<>();
|
||||||
|
for (PlotFlag<?, ?> plotFlag : GlobalFlagContainer.getInstance().getRecognizedPlotFlags()) {
|
||||||
|
final String category = plotFlag.getFlagCategory().getTranslated();
|
||||||
|
final Collection<String> flagList = flags.computeIfAbsent(category, k -> new ArrayList<>());
|
||||||
|
flagList.add(plotFlag.getName());
|
||||||
|
}
|
||||||
|
|
||||||
|
for (final Map.Entry<String, ArrayList<String>> entry : flags.entrySet()) {
|
||||||
|
Collections.sort(entry.getValue());
|
||||||
|
PlotMessage plotMessage = new PlotMessage(entry.getKey() + ": ").color(Captions.FLAG_INFO_COLOR_KEY.getTranslated());
|
||||||
|
final Iterator<String> flagIterator = entry.getValue().iterator();
|
||||||
|
while (flagIterator.hasNext()) {
|
||||||
|
final String flag = flagIterator.next();
|
||||||
|
plotMessage = plotMessage.text(flag).command("/plot flag info " + flag)
|
||||||
|
.color(Captions.FLAG_INFO_COLOR_VALUE.getTranslated())
|
||||||
|
.tooltip(new PlotMessage(Captions.FLAG_LIST_SEE_INFO.getTranslated())
|
||||||
|
.color(Captions.FLAG_INFO_COLOR_VALUE.getTranslated()));
|
||||||
|
if (flagIterator.hasNext()) {
|
||||||
|
plotMessage = plotMessage.text(", ")
|
||||||
|
.color(Captions.FLAG_INFO_COLOR_VALUE.getTranslated());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
plotMessage.send(player);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@CommandDeclaration(command = "info", aliases = {"i",
|
||||||
|
"info"}, usage = "/plot flag info <flag>", description = "View information about a flag", category = CommandCategory.SETTINGS, requiredType = RequiredType.NONE, permission = "plots.flag.info")
|
||||||
|
public void info(final Command command, final PlotPlayer player, final String[] args,
|
||||||
|
final RunnableVal3<Command, Runnable, Runnable> confirm,
|
||||||
|
final RunnableVal2<Command, CommandResult> whenDone) {
|
||||||
if (!checkRequirements(player)) {
|
if (!checkRequirements(player)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -156,7 +368,8 @@ public class FlagCommand extends SubCommand {
|
|||||||
.color(Captions.FLAG_INFO_COLOR_VALUE.getTranslated()).send(player);
|
.color(Captions.FLAG_INFO_COLOR_VALUE.getTranslated()).send(player);
|
||||||
// Flag category
|
// Flag category
|
||||||
new PlotMessage(Captions.FLAG_INFO_CATEGORY.getTranslated())
|
new PlotMessage(Captions.FLAG_INFO_CATEGORY.getTranslated())
|
||||||
.color(Captions.FLAG_INFO_COLOR_KEY.getTranslated()).text(plotFlag.getFlagCategory().getTranslated())
|
.color(Captions.FLAG_INFO_COLOR_KEY.getTranslated())
|
||||||
|
.text(plotFlag.getFlagCategory().getTranslated())
|
||||||
.color(Captions.FLAG_INFO_COLOR_VALUE.getTranslated()).send(player);
|
.color(Captions.FLAG_INFO_COLOR_VALUE.getTranslated()).send(player);
|
||||||
// Flag description
|
// Flag description
|
||||||
new PlotMessage(Captions.FLAG_INFO_DESCRIPTION.getTranslated())
|
new PlotMessage(Captions.FLAG_INFO_DESCRIPTION.getTranslated())
|
||||||
@ -166,8 +379,9 @@ public class FlagCommand extends SubCommand {
|
|||||||
// Flag example
|
// Flag example
|
||||||
new PlotMessage(Captions.FLAG_INFO_EXAMPLE.getTranslated())
|
new PlotMessage(Captions.FLAG_INFO_EXAMPLE.getTranslated())
|
||||||
.color(Captions.FLAG_INFO_COLOR_KEY.getTranslated()).text(plotFlag.getExample())
|
.color(Captions.FLAG_INFO_COLOR_KEY.getTranslated()).text(plotFlag.getExample())
|
||||||
.color(Captions.FLAG_INFO_COLOR_VALUE.getTranslated()).suggest("/plot flag set " +
|
.color(Captions.FLAG_INFO_COLOR_VALUE.getTranslated())
|
||||||
plotFlag.getName() + " " + plotFlag.getExample()).send(player);
|
.suggest("/plot flag set " + plotFlag.getName() + " " + plotFlag.getExample())
|
||||||
|
.send(player);
|
||||||
// Default value
|
// Default value
|
||||||
final String defaultValue = player.getLocation().getPlotArea().getFlagContainer()
|
final String defaultValue = player.getLocation().getPlotArea().getFlagContainer()
|
||||||
.getFlagErased(plotFlag.getClass()).toString();
|
.getFlagErased(plotFlag.getClass()).toString();
|
||||||
|
@ -86,7 +86,8 @@ public class MainCommand extends Command {
|
|||||||
new DebugRoadRegen();
|
new DebugRoadRegen();
|
||||||
new Trust();
|
new Trust();
|
||||||
new DebugExec();
|
new DebugExec();
|
||||||
new FlagCmd();
|
// new FlagCmd();
|
||||||
|
new FlagCommand();
|
||||||
new Target();
|
new Target();
|
||||||
new DebugFixFlags();
|
new DebugFixFlags();
|
||||||
new Move();
|
new Move();
|
||||||
|
@ -529,6 +529,8 @@ public enum Captions implements Caption {
|
|||||||
FLAG_ADDED("$4Successfully added flag", "Flag"),
|
FLAG_ADDED("$4Successfully added flag", "Flag"),
|
||||||
FLAG_TUTORIAL_USAGE("$1Have an admin set the flag: $2%s", "CommandConfig"),
|
FLAG_TUTORIAL_USAGE("$1Have an admin set the flag: $2%s", "CommandConfig"),
|
||||||
FLAG_LIST_ENTRY("$2%s: $1%s", "Flag"),
|
FLAG_LIST_ENTRY("$2%s: $1%s", "Flag"),
|
||||||
|
FLAG_LIST_SEE_INFO("Click to view information about the flag", "Flag"),
|
||||||
|
FLAG_PARSE_EXCEPTION("$2Failed to parse flag '%s', value '%s': %s", "Flag"),
|
||||||
//</editor-fold>
|
//</editor-fold>
|
||||||
//<editor-fold desc="Flag">
|
//<editor-fold desc="Flag">
|
||||||
FLAG_INFO_COLOR_KEY("$1", "Flag"),
|
FLAG_INFO_COLOR_KEY("$1", "Flag"),
|
||||||
|
@ -1107,10 +1107,20 @@ public class Plot {
|
|||||||
* @param flag the flag to remove
|
* @param flag the flag to remove
|
||||||
* @return success
|
* @return success
|
||||||
*/
|
*/
|
||||||
public boolean removeFlag(Class<? extends PlotFlag<?, >> flag) {
|
public boolean removeFlag(Class<? extends PlotFlag> flag) {
|
||||||
return FlagManager.removePlotFlag(this, flag);
|
return FlagManager.removePlotFlag(this, flag);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove a flag from this plot
|
||||||
|
*
|
||||||
|
* @param flag the flag to remove
|
||||||
|
* @return success
|
||||||
|
*/
|
||||||
|
public boolean removeFlag(PlotFlag<?, ?> flag) {
|
||||||
|
return this.removeFlag(flag.getClass());
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Delete a plot (use null for the runnable if you don't need to be notified on completion)
|
* Delete a plot (use null for the runnable if you don't need to be notified on completion)
|
||||||
*
|
*
|
||||||
|
@ -26,6 +26,11 @@ public class HelpMenu {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public HelpMenu setCommands(final List<Command> commands) {
|
||||||
|
this.commands = commands;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
public HelpMenu getCommands() {
|
public HelpMenu getCommands() {
|
||||||
this.commands =
|
this.commands =
|
||||||
MainCommand.getInstance().getCommands(this.commandCategory, this.commandCaller);
|
MainCommand.getInstance().getCommands(this.commandCategory, this.commandCaller);
|
||||||
|
Loading…
Reference in New Issue
Block a user