mirror of
https://github.com/EngineHub/WorldGuard.git
synced 2024-12-18 15:17:36 +01:00
Allow /region flag to set group and value at once
The usage for "/region flag" implies both can be set at once: /region flag <id> <flag> [-g group] [value] However if the [-g group] [value] portions are specified, only the group is set and the value is silently ignored. With this commit, both values can be set at once. All other behavior of the "flag" command is preserved. If only the [-g group] part is given, then only the group flag changes and the regular flag's value is unaffected. If neither part is given, then the flag is cleared.
This commit is contained in:
parent
2cbc2f5226
commit
7e419c116e
@ -673,6 +673,7 @@ public void flag(CommandContext args, CommandSender sender) throws CommandExcept
|
||||
String id = args.getString(0);
|
||||
String flagName = args.getString(1);
|
||||
String value = null;
|
||||
RegionGroup groupValue = null;
|
||||
|
||||
if (args.argsLength() >= 3) {
|
||||
value = args.getJoinedStrings(2);
|
||||
@ -771,41 +772,51 @@ public void flag(CommandContext args, CommandSender sender) throws CommandExcept
|
||||
+ "' does not have a group flag!");
|
||||
}
|
||||
|
||||
// Parse the [-g group] separately so entire command can abort if parsing
|
||||
// the [value] part throws an error.
|
||||
try {
|
||||
// If group set to default value then clear the group flag
|
||||
RegionGroup groupValue = groupFlag.parseInput(plugin, sender, group);
|
||||
if (groupValue == groupFlag.getDefault()) {
|
||||
region.setFlag(groupFlag, null);
|
||||
sender.sendMessage(ChatColor.YELLOW
|
||||
+ "Region group flag for '" + foundFlag.getName() + "' reset to default.");
|
||||
} else {
|
||||
region.setFlag(groupFlag, groupValue);
|
||||
sender.sendMessage(ChatColor.YELLOW
|
||||
+ "Region group flag for '" + foundFlag.getName() + "' set.");
|
||||
}
|
||||
groupValue = groupFlag.parseInput(plugin, sender, group);
|
||||
} catch (InvalidFlagFormat e) {
|
||||
throw new CommandException(e.getMessage());
|
||||
}
|
||||
|
||||
} else {
|
||||
if (value != null) {
|
||||
try {
|
||||
setFlag(region, foundFlag, sender, value);
|
||||
} catch (InvalidFlagFormat e) {
|
||||
throw new CommandException(e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
if (value != null) {
|
||||
// Set the flag if [value] was given even if [-g group] was given as well
|
||||
try {
|
||||
setFlag(region, foundFlag, sender, value);
|
||||
} catch (InvalidFlagFormat e) {
|
||||
throw new CommandException(e.getMessage());
|
||||
}
|
||||
|
||||
sender.sendMessage(ChatColor.YELLOW
|
||||
+ "Region flag '" + foundFlag.getName() + "' set.");
|
||||
}
|
||||
|
||||
if (value == null && !args.hasFlag('g')) {
|
||||
// Clear the flag only if neither [value] nor [-g group] was given
|
||||
region.setFlag(foundFlag, null);
|
||||
|
||||
sender.sendMessage(ChatColor.YELLOW
|
||||
+ "Region flag '" + foundFlag.getName() + "' cleared.");
|
||||
}
|
||||
|
||||
if (groupValue != null) {
|
||||
RegionGroupFlag groupFlag = foundFlag.getRegionGroupFlag();
|
||||
|
||||
// If group set to the default, then clear the group flag
|
||||
if (groupValue == groupFlag.getDefault()) {
|
||||
region.setFlag(groupFlag, null);
|
||||
sender.sendMessage(ChatColor.YELLOW
|
||||
+ "Region flag '" + foundFlag.getName() + "' set.");
|
||||
+ "Region group flag for '" + foundFlag.getName() + "' reset to default.");
|
||||
} else {
|
||||
// Clear the flag
|
||||
region.setFlag(foundFlag, null);
|
||||
|
||||
region.setFlag(groupFlag, groupValue);
|
||||
sender.sendMessage(ChatColor.YELLOW
|
||||
+ "Region flag '" + foundFlag.getName() + "' cleared.");
|
||||
+ "Region group flag for '" + foundFlag.getName() + "' set.");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
try {
|
||||
mgr.save();
|
||||
} catch (ProtectionDatabaseException e) {
|
||||
|
Loading…
Reference in New Issue
Block a user