Ajout d'une classe abstraite pour les commandes Bungee et Spigot
This commit is contained in:
parent
a6bccfc17a
commit
87a0326932
141
src/fr/pandacube/java/util/commands/AbstractCommand.java
Normal file
141
src/fr/pandacube/java/util/commands/AbstractCommand.java
Normal file
@ -0,0 +1,141 @@
|
||||
package fr.pandacube.java.util.commands;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
public class AbstractCommand {
|
||||
|
||||
public final String commandName;
|
||||
|
||||
public AbstractCommand(String cmdName) {
|
||||
commandName = cmdName;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* Concatène les chaines de caractères passés dans <code>args</code> (avec
|
||||
* <code>" "</code> comme séparateur), en ommettant
|
||||
* celles qui se trouvent avant <code>index</code>.<br/>
|
||||
* Par exemple :
|
||||
* </p>
|
||||
* <code>
|
||||
* getLastParams(new String[] {"test", "bouya", "chaka", "bukkit"}, 1);
|
||||
* </code>
|
||||
* <p>
|
||||
* retournera la chaine "bouya chaka bukkit"
|
||||
*
|
||||
* @param args liste des arguments d'une commandes.<br/>
|
||||
* Le premier élément est l'argument qui suit le nom de la commande.
|
||||
* Usuellement, ce paramètre correspond au paramètre
|
||||
* <code>args</code> de la méthode onCommand
|
||||
* @param index
|
||||
* @return
|
||||
*/
|
||||
public static String getLastParams(String[] args, int index) {
|
||||
if (index < 0 || index >= args.length) return null;
|
||||
return String.join(" ", Arrays.copyOfRange(args, index, args.length));
|
||||
}
|
||||
|
||||
/**
|
||||
* <i>Prends en charge les tokens avec des espaces, mais retourne les
|
||||
* propositions complètes</i>
|
||||
*
|
||||
* @param token
|
||||
* @param allProposal
|
||||
* @return
|
||||
*/
|
||||
public static List<String> getTabProposalFromToken(String token, Collection<String> allProposal) {
|
||||
List<String> ret = new ArrayList<String>();
|
||||
|
||||
for (String s : allProposal)
|
||||
if (s.toLowerCase().startsWith(token.toLowerCase())) ret.add(s);
|
||||
|
||||
if (ret.isEmpty()) ret.addAll(allProposal);
|
||||
|
||||
ret.sort(null); // String implents Comparable
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
|
||||
public static final TabProposal TAB_NO_PROPOSAL = () -> Collections.emptyList();
|
||||
|
||||
public static TabProposal TAB_PROPOSAL(Collection<String> proposals) {
|
||||
return () -> proposals;
|
||||
}
|
||||
|
||||
public static TabProposal TAB_INTEGERS(int startIncluded, int endIncluded) {
|
||||
List<String> proposals = new ArrayList<>(endIncluded - startIncluded + 1);
|
||||
for (int i = startIncluded; i <= endIncluded; i++) {
|
||||
proposals.add(Integer.toString(i));
|
||||
}
|
||||
return () -> proposals;
|
||||
}
|
||||
|
||||
public static TabProposal TAB_PROPOSAL_LAST_PARAMS(String[] args, int index, Collection<String> proposals) {
|
||||
String lastParamToken = getLastParams(args, index);
|
||||
String[] splittedToken = lastParamToken.split(" ", -1);
|
||||
int currentTokenPosition = splittedToken.length - 1;
|
||||
String[] previousTokens = Arrays.copyOf(splittedToken, currentTokenPosition);
|
||||
|
||||
List<String> currentTokenProposal = new ArrayList<>();
|
||||
for (String p : proposals) {
|
||||
String[] splittedProposal = p.split(" ", -1);
|
||||
if (splittedProposal.length <= currentTokenPosition)
|
||||
continue;
|
||||
if (!Arrays.equals(Arrays.copyOf(splittedToken, currentTokenPosition), previousTokens))
|
||||
continue;
|
||||
if (splittedProposal[currentTokenPosition].isEmpty())
|
||||
continue;
|
||||
|
||||
currentTokenProposal.add(splittedProposal[currentTokenPosition]);
|
||||
}
|
||||
|
||||
return () -> currentTokenProposal;
|
||||
}
|
||||
|
||||
@FunctionalInterface
|
||||
public interface TabProposal {
|
||||
public abstract Collection<String> getProposal();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Throw an instance of this exception to indicate to the plugin command handler
|
||||
* that the user has missused the command. The message, if provided, must indicate
|
||||
* the reason of the mussusage of the command. It will be displayed on the screen
|
||||
* with eventually indication of how to use the command (help command for example).
|
||||
* If a {@link Throwable} cause is provided, it will be relayed to the plugin {@link Logger}.
|
||||
*
|
||||
*/
|
||||
public static class BadCommandUsage extends RuntimeException {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
public BadCommandUsage() {
|
||||
super();
|
||||
}
|
||||
|
||||
public BadCommandUsage(Throwable cause) {
|
||||
super(cause);
|
||||
}
|
||||
|
||||
public BadCommandUsage(String message) {
|
||||
super(message);
|
||||
}
|
||||
|
||||
public BadCommandUsage(String message, Throwable cause) {
|
||||
super(message, cause);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
Loading…
Reference in New Issue
Block a user