mirror of
https://github.com/Multiverse/Multiverse-Core.git
synced 2025-02-03 06:01:30 +01:00
Removed Licensed CommandManager Code
We want no part in CC NoDeriv Code.
This commit is contained in:
parent
949e70b81c
commit
4d39f2ec56
@ -1,96 +0,0 @@
|
|||||||
package com.onarandombox.MultiverseCore.command;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import org.bukkit.command.CommandSender;
|
|
||||||
|
|
||||||
import com.onarandombox.MultiverseCore.MultiverseCore;
|
|
||||||
|
|
||||||
public abstract class BaseCommand {
|
|
||||||
|
|
||||||
protected MultiverseCore plugin;
|
|
||||||
protected String name;
|
|
||||||
protected String description;
|
|
||||||
protected String usage;
|
|
||||||
protected String permission = "";
|
|
||||||
protected boolean requiresOp;
|
|
||||||
protected int minArgs;
|
|
||||||
protected int maxArgs;
|
|
||||||
protected List<String> identifiers;
|
|
||||||
|
|
||||||
public final String IN_GAME_COMMAND_MSG = "This command needs to be used as a Player in game.";
|
|
||||||
|
|
||||||
public BaseCommand(MultiverseCore plugin) {
|
|
||||||
this.identifiers = new ArrayList<String>();
|
|
||||||
this.plugin = plugin;
|
|
||||||
}
|
|
||||||
|
|
||||||
public abstract void execute(CommandSender sender, String[] args);
|
|
||||||
|
|
||||||
public boolean validate(ArrayList<String> args) {
|
|
||||||
int argsLength = args.size();
|
|
||||||
if ((argsLength == -1 || argsLength >= this.minArgs) && (this.maxArgs == -1 || argsLength <= this.maxArgs)) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getIdentifier(ArrayList<String> allArgs) {
|
|
||||||
// Combines our args to a space separated string
|
|
||||||
String argsString = this.getArgsString(allArgs);
|
|
||||||
|
|
||||||
for (String s : this.identifiers) {
|
|
||||||
String identifier = s.toLowerCase();
|
|
||||||
if (argsString.matches(identifier + "(\\s+.*|\\s*)")) {
|
|
||||||
return identifier;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public ArrayList<String> removeIdentifierArgs(ArrayList<String> allArgs, String identifier) {
|
|
||||||
int identifierLength = identifier.split(" ").length;
|
|
||||||
for (int i = 0; i < identifierLength; i++) {
|
|
||||||
// Since we're pulling from the front, always remove the first element
|
|
||||||
allArgs.remove(0);
|
|
||||||
}
|
|
||||||
return allArgs;
|
|
||||||
}
|
|
||||||
|
|
||||||
private String getArgsString(ArrayList<String> args) {
|
|
||||||
String returnString = "";
|
|
||||||
for (String s : args) {
|
|
||||||
returnString += s + " ";
|
|
||||||
}
|
|
||||||
return returnString.substring(0, returnString.length() - 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<String> getIdentifiers() {
|
|
||||||
return this.identifiers;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setIdentifiers(List<String> identifiers) {
|
|
||||||
this.identifiers = identifiers;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getName() {
|
|
||||||
return this.name;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getDescription() {
|
|
||||||
return this.description;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getUsage() {
|
|
||||||
return this.usage;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isOpRequired() {
|
|
||||||
return this.requiresOp;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getPermission() {
|
|
||||||
return this.permission;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,218 +0,0 @@
|
|||||||
/**
|
|
||||||
* Copyright (C) 2011 DThielke <dave.thielke@gmail.com>
|
|
||||||
*
|
|
||||||
* This work is licensed under the Creative Commons Attribution-NonCommercial-NoDerivs 3.0 Unported License.
|
|
||||||
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/3.0/ or send a letter to
|
|
||||||
* Creative Commons, 171 Second Street, Suite 300, San Francisco, California, 94105, USA.
|
|
||||||
**/
|
|
||||||
|
|
||||||
package com.onarandombox.MultiverseCore.command;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Calendar;
|
|
||||||
import java.util.Iterator;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import org.bukkit.ChatColor;
|
|
||||||
import org.bukkit.command.CommandSender;
|
|
||||||
|
|
||||||
import com.onarandombox.MultiverseCore.MultiverseCore;
|
|
||||||
|
|
||||||
public class CommandManager {
|
|
||||||
|
|
||||||
protected List<BaseCommand> commands;
|
|
||||||
private MultiverseCore plugin;
|
|
||||||
|
|
||||||
// List to hold commands that require approval
|
|
||||||
public List<QueuedCommand> queuedCommands = new ArrayList<QueuedCommand>();
|
|
||||||
|
|
||||||
public CommandManager(MultiverseCore plugin) {
|
|
||||||
this.commands = new ArrayList<BaseCommand>();
|
|
||||||
this.plugin = plugin;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean dispatch(CommandSender sender, ArrayList<String> allArgs) {
|
|
||||||
ArrayList<String> parsedArgs = parseAllQuotedStrings(allArgs);
|
|
||||||
String identifier = null;
|
|
||||||
|
|
||||||
Iterator<BaseCommand> iterator = this.commands.iterator();
|
|
||||||
BaseCommand foundCommand = null;
|
|
||||||
// This loop is pretty neat. It goes until either the iterator has no more
|
|
||||||
// Or until we find an identifier. When we do, we no longer iterate, and the
|
|
||||||
// value left in "foundCommand" is the command we found!
|
|
||||||
while (iterator.hasNext() && identifier == null) {
|
|
||||||
foundCommand = iterator.next();
|
|
||||||
identifier = foundCommand.getIdentifier(parsedArgs);
|
|
||||||
if (identifier != null) {
|
|
||||||
// This method, removeIdentifierArgs mutates parsedArgs
|
|
||||||
foundCommand.removeIdentifierArgs(parsedArgs, identifier);
|
|
||||||
validateAndRunCommand(sender, parsedArgs, foundCommand);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void validateAndRunCommand(CommandSender sender, ArrayList<String> parsedArgs, BaseCommand foundCommand) {
|
|
||||||
if (foundCommand.validate(parsedArgs)) {
|
|
||||||
if (this.plugin.ph.hasPermission(sender, foundCommand.getPermission(), foundCommand.isOpRequired())) {
|
|
||||||
foundCommand.execute(sender, parsedArgs.toArray(new String[parsedArgs.size()]));
|
|
||||||
} else {
|
|
||||||
sender.sendMessage("You do not have permission to use this command. (" + foundCommand.getPermission() + ")");
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
sender.sendMessage(ChatColor.AQUA + "Command: " + ChatColor.WHITE + foundCommand.getName());
|
|
||||||
sender.sendMessage(ChatColor.AQUA + "Description: " + ChatColor.WHITE + foundCommand.getDescription());
|
|
||||||
sender.sendMessage(ChatColor.AQUA + "Usage: " + ChatColor.WHITE + foundCommand.getUsage());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void addCommand(BaseCommand command) {
|
|
||||||
this.commands.add(command);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void removeCommand(BaseCommand command) {
|
|
||||||
this.commands.remove(command);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Deprecated
|
|
||||||
public List<BaseCommand> getCommands() {
|
|
||||||
return this.commands;
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<BaseCommand> getCommands(CommandSender sender) {
|
|
||||||
ArrayList<BaseCommand> playerCommands = new ArrayList<BaseCommand>();
|
|
||||||
for (BaseCommand c : this.commands) {
|
|
||||||
if (this.plugin.ph.hasPermission(sender, c.permission, c.isOpRequired())) {
|
|
||||||
playerCommands.add(c);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return playerCommands;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Combines all quoted strings
|
|
||||||
*
|
|
||||||
* @param args
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
private ArrayList<String> parseAllQuotedStrings(ArrayList<String> args) {
|
|
||||||
// TODO: Allow '
|
|
||||||
ArrayList<String> newArgs = new ArrayList<String>();
|
|
||||||
// Iterate through all command params:
|
|
||||||
// we could have: "Fish dog" the man bear pig "lives today" and maybe "even tomorrow" or "the" next day
|
|
||||||
int start = -1;
|
|
||||||
for (int i = 0; i < args.size(); i++) {
|
|
||||||
|
|
||||||
// If we aren't looking for an end quote, and the first part of a string is a quote
|
|
||||||
if (start == -1 && args.get(i).substring(0, 1).equals("\"")) {
|
|
||||||
start = i;
|
|
||||||
}
|
|
||||||
// Have to keep this seperate for one word quoted strings like: "fish"
|
|
||||||
if (start != -1 && args.get(i).substring(args.get(i).length() - 1, args.get(i).length()).equals("\"")) {
|
|
||||||
// Now we've found the second part of a string, let's parse the quoted one out
|
|
||||||
// Make sure it's i+1, we still want I included
|
|
||||||
newArgs.add(parseQuotedString(args, start, i + 1));
|
|
||||||
// Reset the start to look for more!
|
|
||||||
start = -1;
|
|
||||||
} else if (start == -1) {
|
|
||||||
// This is a word that is NOT enclosed in any quotes, so just add it
|
|
||||||
newArgs.add(args.get(i));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// If the string was ended but had an open quote...
|
|
||||||
if (start != -1) {
|
|
||||||
// ... then we want to close that quote and make that one arg.
|
|
||||||
newArgs.add(parseQuotedString(args, start, args.size()));
|
|
||||||
}
|
|
||||||
|
|
||||||
return newArgs;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Takes a string array and returns a combined string, excluding the stop position, including the start
|
|
||||||
*
|
|
||||||
* @param args
|
|
||||||
* @param start
|
|
||||||
* @param stop
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
private String parseQuotedString(ArrayList<String> args, int start, int stop) {
|
|
||||||
String returnVal = args.get(start);
|
|
||||||
for (int i = start + 1; i < stop; i++) {
|
|
||||||
returnVal += " " + args.get(i);
|
|
||||||
}
|
|
||||||
return returnVal.replace("\"", "");
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the given flag value
|
|
||||||
*
|
|
||||||
* @param flag A param flag, like -s or -g
|
|
||||||
* @param args All arguments to search through
|
|
||||||
* @return A string or null
|
|
||||||
*/
|
|
||||||
public static String getFlag(String flag, String[] args) {
|
|
||||||
int i = 0;
|
|
||||||
try {
|
|
||||||
for (String s : args) {
|
|
||||||
if (s.equalsIgnoreCase(flag)) {
|
|
||||||
return args[i + 1];
|
|
||||||
}
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
} catch (IndexOutOfBoundsException e) {
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
public void queueCommand(CommandSender sender, String commandName, String methodName, String[] args, Class<?>[] paramTypes, String success, String fail) {
|
|
||||||
cancelQueuedCommand(sender);
|
|
||||||
this.queuedCommands.add(new QueuedCommand(methodName, args, paramTypes, sender, Calendar.getInstance(), this.plugin, success, fail));
|
|
||||||
sender.sendMessage("The command " + ChatColor.RED + commandName + ChatColor.WHITE + " has been halted due to the fact that it could break something!");
|
|
||||||
sender.sendMessage("If you still wish to execute " + ChatColor.RED + commandName + ChatColor.WHITE);
|
|
||||||
sender.sendMessage("please type: " + ChatColor.GREEN + "/mvconfirm");
|
|
||||||
sender.sendMessage(ChatColor.GREEN + "/mvconfirm" + ChatColor.WHITE + " will only be available for 10 seconds.");
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Tries to fire off the command
|
|
||||||
*
|
|
||||||
* @param sender
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
public boolean confirmQueuedCommand(CommandSender sender) {
|
|
||||||
for (QueuedCommand com : this.queuedCommands) {
|
|
||||||
if (com.getSender().equals(sender)) {
|
|
||||||
if (com.execute()) {
|
|
||||||
sender.sendMessage(com.getSuccess());
|
|
||||||
return true;
|
|
||||||
} else {
|
|
||||||
sender.sendMessage(com.getFail());
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Cancels(invalidates) a command that has been requested. This is called when a user types something other than 'yes' or when they try to queue a second command Queuing a second command will delete the first command entirely.
|
|
||||||
*
|
|
||||||
* @param sender
|
|
||||||
*/
|
|
||||||
public void cancelQueuedCommand(CommandSender sender) {
|
|
||||||
QueuedCommand c = null;
|
|
||||||
for (QueuedCommand com : this.queuedCommands) {
|
|
||||||
if (com.getSender().equals(sender)) {
|
|
||||||
c = com;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (c != null) {
|
|
||||||
// Each person is allowed at most one queued command.
|
|
||||||
this.queuedCommands.remove(c);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user