Updates the plugin description and the add tab completer
This commit is contained in:
parent
16faa1ddb2
commit
419a79bc9f
@ -30,7 +30,7 @@ public class AddCommand implements CommandExecutor {
|
|||||||
PaidSignManager manager = PaidSigns.getInstance().getSignManager();
|
PaidSignManager manager = PaidSigns.getInstance().getSignManager();
|
||||||
List<String> arguments = Tokenizer.tokenize(String.join(" ", args));
|
List<String> arguments = Tokenizer.tokenize(String.join(" ", args));
|
||||||
|
|
||||||
String id = arguments.get(0);
|
String signName = arguments.get(0);
|
||||||
double cost;
|
double cost;
|
||||||
try {
|
try {
|
||||||
cost = Double.parseDouble(arguments.get(2));
|
cost = Double.parseDouble(arguments.get(2));
|
||||||
@ -49,7 +49,7 @@ public class AddCommand implements CommandExecutor {
|
|||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
PaidSign sign = new PaidSign(id, cost, permission, ignoreCase, ignoreColor);
|
PaidSign sign = new PaidSign(signName, cost, permission, ignoreCase, ignoreColor);
|
||||||
/* TODO: Rewrite the method for comparing if paid signs are duplicated
|
/* TODO: Rewrite the method for comparing if paid signs are duplicated
|
||||||
for (PaidSign similarSign : manager.getPaidSigns(sign.getCleanId(), sign.getLineIndex())) {
|
for (PaidSign similarSign : manager.getPaidSigns(sign.getCleanId(), sign.getLineIndex())) {
|
||||||
if (sign.matches(similarSign)) {
|
if (sign.matches(similarSign)) {
|
||||||
|
@ -1,60 +1,136 @@
|
|||||||
package net.knarcraft.paidsigns.command;
|
package net.knarcraft.paidsigns.command;
|
||||||
|
|
||||||
import net.knarcraft.paidsigns.utility.Tokenizer;
|
import net.knarcraft.paidsigns.utility.Tokenizer;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.command.Command;
|
import org.bukkit.command.Command;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.command.TabCompleter;
|
import org.bukkit.command.TabCompleter;
|
||||||
|
import org.bukkit.permissions.Permission;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.StringJoiner;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The tab completer for the add paid sign command
|
* The tab completer for the add paid sign command
|
||||||
*/
|
*/
|
||||||
public class AddTabCompleter implements TabCompleter {
|
public class AddTabCompleter implements TabCompleter {
|
||||||
|
|
||||||
private static List<String> ids;
|
private static List<String> names;
|
||||||
private static List<String> lines;
|
|
||||||
private static List<String> costs;
|
private static List<String> costs;
|
||||||
|
private static List<String> plugins;
|
||||||
|
private static Map<String, List<String>> permissions;
|
||||||
private static List<String> options;
|
private static List<String> options;
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
@Override
|
@Override
|
||||||
public List<String> onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String alias,
|
public List<String> onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String alias,
|
||||||
@NotNull String[] args) {
|
@NotNull String[] args) {
|
||||||
if (ids == null) {
|
if (names == null) {
|
||||||
initializeValues();
|
initializeValues();
|
||||||
|
loadAvailablePermissions();
|
||||||
}
|
}
|
||||||
List<String> arguments = Tokenizer.tokenize(String.join(" ", args));
|
List<String> arguments = Tokenizer.tokenize(String.join(" ", args));
|
||||||
|
|
||||||
if (arguments.size() < 1) {
|
if (arguments.size() < 1) {
|
||||||
return ids;
|
return names;
|
||||||
} else if (arguments.size() < 2) {
|
} else if (arguments.size() < 2) {
|
||||||
return lines;
|
|
||||||
} else if (arguments.size() < 3) {
|
|
||||||
return costs;
|
return costs;
|
||||||
|
} else if (arguments.size() < 3) {
|
||||||
|
return tabCompletePermission(arguments.get(arguments.size() - 1));
|
||||||
} else if (arguments.size() < 5) {
|
} else if (arguments.size() < 5) {
|
||||||
return options;
|
return options;
|
||||||
}
|
}
|
||||||
return new ArrayList<>();
|
return new ArrayList<>();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the tab complete value for the permission typed
|
||||||
|
*
|
||||||
|
* @param typedNode <p>The full permission node typed by the player</p>
|
||||||
|
* @return <p>All known valid auto-complete options</p>
|
||||||
|
*/
|
||||||
|
private List<String> tabCompletePermission(String typedNode) {
|
||||||
|
List<String> output;
|
||||||
|
if (typedNode.contains(".")) {
|
||||||
|
List<String> matchingPermissions = permissions.get(typedNode.substring(0, typedNode.lastIndexOf(".")));
|
||||||
|
if (matchingPermissions == null) {
|
||||||
|
output = new ArrayList<>();
|
||||||
|
} else {
|
||||||
|
//Filter by the typed text
|
||||||
|
output = filterMatching(matchingPermissions, typedNode);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
output = plugins;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Add previous permissions in the comma-separated lists as a prefix
|
||||||
|
return output;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Find completable strings which match the text typed by the command's sender
|
||||||
|
*
|
||||||
|
* @param values <p>The values to filter</p>
|
||||||
|
* @param typedText <p>The text the player has started typing</p>
|
||||||
|
* @return <p>The given string values which start with the player's typed text</p>
|
||||||
|
*/
|
||||||
|
private List<String> filterMatching(List<String> values, String typedText) {
|
||||||
|
List<String> configValues = new ArrayList<>();
|
||||||
|
for (String value : values) {
|
||||||
|
if (value.toLowerCase().startsWith(typedText.toLowerCase())) {
|
||||||
|
configValues.add(value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return configValues;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Loads all permissions available from bukkit plugins
|
||||||
|
*/
|
||||||
|
private static void loadAvailablePermissions() {
|
||||||
|
plugins = new ArrayList<>();
|
||||||
|
permissions = new HashMap<>();
|
||||||
|
|
||||||
|
for (Permission permission : Bukkit.getPluginManager().getPermissions()) {
|
||||||
|
loadPermission(permission.getName());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Loads a given permission into the proper lists and maps
|
||||||
|
*
|
||||||
|
* @param permissionName <p>The permission to load</p>
|
||||||
|
*/
|
||||||
|
private static void loadPermission(String permissionName) {
|
||||||
|
String[] permissionParts = permissionName.split("\\.");
|
||||||
|
if (permissionParts.length == 1 && !plugins.contains(permissionParts[0])) {
|
||||||
|
plugins.add(permissionParts[0]);
|
||||||
|
} else if (permissionParts.length > 1) {
|
||||||
|
StringJoiner pathJoiner = new StringJoiner(".");
|
||||||
|
for (int j = 0; j < permissionParts.length - 1; j++) {
|
||||||
|
pathJoiner.add(permissionParts[j]);
|
||||||
|
}
|
||||||
|
String path = pathJoiner.toString();
|
||||||
|
List<String> permissionList = permissions.computeIfAbsent(path, k -> new ArrayList<>());
|
||||||
|
permissionList.add(permissionName);
|
||||||
|
|
||||||
|
loadPermission(path);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Initializes the values available for tab completion
|
* Initializes the values available for tab completion
|
||||||
*/
|
*/
|
||||||
private static void initializeValues() {
|
private static void initializeValues() {
|
||||||
ids = new ArrayList<>();
|
names = new ArrayList<>();
|
||||||
ids.add("[Gate]");
|
names.add("sign1");
|
||||||
ids.add("\"[Lift Up]\"");
|
names.add("\"lift up sign\"");
|
||||||
ids.add("\"[Lift Down]\"");
|
names.add("\"lift down sign\"");
|
||||||
|
|
||||||
lines = new ArrayList<>();
|
|
||||||
lines.add("1");
|
|
||||||
lines.add("2");
|
|
||||||
lines.add("3");
|
|
||||||
lines.add("4");
|
|
||||||
|
|
||||||
costs = new ArrayList<>();
|
costs = new ArrayList<>();
|
||||||
costs.add("1");
|
costs.add("1");
|
||||||
|
@ -10,7 +10,11 @@ website: https://git.knarcraft.net
|
|||||||
commands:
|
commands:
|
||||||
addpaidsign:
|
addpaidsign:
|
||||||
description: Used to add a new paid sign
|
description: Used to add a new paid sign
|
||||||
usage: /<command> <id (the text to look for)> <line> <cost> [ignore case] [ignore color]
|
usage: /<command> <name> <cost> [permission] [ignore case] [ignore color]
|
||||||
|
permission: paidsigns.add
|
||||||
|
addpaidsigncondition:
|
||||||
|
description: Used to add a new match condition for a paid sign
|
||||||
|
usage: /<command> <name (of a paid sign)> [executeRegEx] [ignoreCase] [ignoreColor]
|
||||||
permission: paidsigns.add
|
permission: paidsigns.add
|
||||||
removepaidsign:
|
removepaidsign:
|
||||||
description: Used to remove a paid sign
|
description: Used to remove a paid sign
|
||||||
|
Loading…
Reference in New Issue
Block a user