diff --git a/pom.xml b/pom.xml
index 689d5a4..1179c1b 100644
--- a/pom.xml
+++ b/pom.xml
@@ -3,7 +3,7 @@
4.0.0
cn.citycraft
Yum
- 1.4
+ 1.5
Yum
Minecraft 服务器插件管理系统
diff --git a/src/main/java/cn/citycraft/Yum/Yum.java b/src/main/java/cn/citycraft/Yum/Yum.java
index 3829cde..2f1298c 100644
--- a/src/main/java/cn/citycraft/Yum/Yum.java
+++ b/src/main/java/cn/citycraft/Yum/Yum.java
@@ -8,9 +8,19 @@ import java.io.IOException;
import org.bukkit.plugin.java.JavaPlugin;
import org.mcstats.Metrics;
+import cn.citycraft.PluginHelper.commands.HandlerSubCommand;
import cn.citycraft.PluginHelper.config.FileConfig;
import cn.citycraft.PluginHelper.utils.VersionChecker;
-import cn.citycraft.Yum.commands.HandlerCommand;
+import cn.citycraft.Yum.commands.CommandDelete;
+import cn.citycraft.Yum.commands.CommandInfo;
+import cn.citycraft.Yum.commands.CommandInstall;
+import cn.citycraft.Yum.commands.CommandList;
+import cn.citycraft.Yum.commands.CommandLoad;
+import cn.citycraft.Yum.commands.CommandReload;
+import cn.citycraft.Yum.commands.CommandRepo;
+import cn.citycraft.Yum.commands.CommandUnload;
+import cn.citycraft.Yum.commands.CommandUpdate;
+import cn.citycraft.Yum.commands.CommandUpgrade;
import cn.citycraft.Yum.manager.YumManager;
/**
@@ -22,6 +32,22 @@ public class Yum extends JavaPlugin {
public FileConfig config;
public YumManager yumgr;
+ public void initCommands() {
+ final HandlerSubCommand cmdhandler = new HandlerSubCommand(this);
+ cmdhandler.registerCommand(new CommandList(this));
+ cmdhandler.registerCommand(new CommandInstall(this));
+ cmdhandler.registerCommand(new CommandUpdate(this));
+ cmdhandler.registerCommand(new CommandDelete(this));
+ cmdhandler.registerCommand(new CommandInfo(this));
+ cmdhandler.registerCommand(new CommandRepo(this));
+ cmdhandler.registerCommand(new CommandReload(this));
+ cmdhandler.registerCommand(new CommandLoad(this));
+ cmdhandler.registerCommand(new CommandUnload(this));
+ cmdhandler.registerCommand(new CommandUpgrade(this));
+ this.getCommand("yum").setExecutor(cmdhandler);
+ this.getCommand("yum").setTabCompleter(cmdhandler);
+ }
+
@Override
public void onDisable() {
YumManager.repo.cacheToJson(config);
@@ -30,9 +56,7 @@ public class Yum extends JavaPlugin {
@Override
public void onEnable() {
- final HandlerCommand cmdhandler = new HandlerCommand(this);
- this.getCommand("yum").setExecutor(cmdhandler);
- this.getCommand("yum").setTabCompleter(cmdhandler);
+ this.initCommands();
yumgr = new YumManager(this);
YumManager.repo.jsonToCache(config);
new VersionChecker(this);
diff --git a/src/main/java/cn/citycraft/Yum/api/YumApi.java b/src/main/java/cn/citycraft/Yum/api/YumApi.java
index d3e251a..ac0bbda 100644
--- a/src/main/java/cn/citycraft/Yum/api/YumApi.java
+++ b/src/main/java/cn/citycraft/Yum/api/YumApi.java
@@ -6,7 +6,8 @@ package cn.citycraft.Yum.api;
/**
* Yum仓库插件API
*
- * @author 蒋天蓓 2015年8月22日下午4:43:41
+ * @author 蒋天蓓
+ * @since 2015年8月22日下午4:43:41
*/
public class YumApi {
diff --git a/src/main/java/cn/citycraft/Yum/commands/BaseCommand.java b/src/main/java/cn/citycraft/Yum/commands/BaseCommand.java
deleted file mode 100644
index 14d4429..0000000
--- a/src/main/java/cn/citycraft/Yum/commands/BaseCommand.java
+++ /dev/null
@@ -1,193 +0,0 @@
-/**
- *
- */
-package cn.citycraft.Yum.commands;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-import org.bukkit.command.CommandException;
-import org.bukkit.command.CommandSender;
-
-/**
- * 基础命令类
- *
- * @author 蒋天蓓
- * 2015年8月12日下午12:49:34
- */
-public abstract class BaseCommand {
- private final String[] aliases;
- private final String description;
- private int minimumArguments = 0;
- private final String name;
- private boolean onlyPlayerExecutable = false;
- private String permission;
- private String possibleArguments = "";
-
- public BaseCommand(final String name, final String description) {
- this(name, description, new String[0]);
- }
-
- public BaseCommand(final String name, final String description, final String... aliases) {
- this.name = name;
- this.description = description;
- this.aliases = aliases;
- }
-
- /**
- * 执行命令参数
- *
- * @param sender
- * - 命令发送者
- * @param label
- * - 命令
- * @param args
- * - 命令附加参数
- * @throws CommandException
- * - 命令异常
- */
- public abstract void execute(CommandSender sender, String label, String[] args) throws CommandException;
-
- /**
- * 获得当前命令的别名
- *
- * @return 当前命令的别名
- */
- public List getCommandList() {
- final List cmds = new ArrayList();
- cmds.add(name);
- cmds.addAll(Arrays.asList(aliases));
- return cmds;
- }
-
- /**
- * 获得命令描述
- *
- * @return 命令描述
- */
- public String getDescription() {
- return description;
- }
-
- /**
- * 获得最小参数个数
- *
- * @return 最小参数个数
- */
- public int getMinimumArguments() {
- return minimumArguments;
- }
-
- /**
- * 获取命令名称
- *
- * @return 命令名称
- */
- public String getName() {
- return name;
- }
-
- /**
- * 获得命令权限
- *
- * @return 目录命令权限
- */
- public String getPermission() {
- return permission;
- }
-
- /**
- * 获得可能的参数
- *
- * @return
- */
- public String getPossibleArguments() {
- return possibleArguments;
- }
-
- /**
- * 检查Sender权限
- *
- * @param sender
- * - 命令发送者
- * @return 是否有权限执行命令
- */
- public final boolean hasPermission(final CommandSender sender) {
- if (permission == null) {
- return true;
- }
- return sender.hasPermission(permission);
- }
-
- /**
- * 是否只有玩家才能执行此命令
- *
- * @return 是否为玩家命令
- */
- public boolean isOnlyPlayerExecutable() {
- return onlyPlayerExecutable;
- }
-
- /**
- * 命令匹配检测
- *
- * @param name
- * - 命令
- * @return 是否匹配
- */
- public final boolean isValidTrigger(final String name) {
- if (this.name.equalsIgnoreCase(name)) {
- return true;
- }
- if (aliases != null) {
- for (final String alias : aliases) {
- if (alias.equalsIgnoreCase(name)) {
- return true;
- }
- }
- }
- return false;
- }
-
- /**
- * 设置命令的最小参数个数
- *
- * @param minimumArguments
- * - 最小参数个数
- */
- public void setMinimumArguments(final int minimumArguments) {
- this.minimumArguments = minimumArguments;
- }
-
- /**
- * 设置是否只允许玩家执行
- *
- * @param onlyPlayerExecutable
- * - 是否只允许玩家执行
- */
- public void setOnlyPlayerExecutable(final boolean onlyPlayerExecutable) {
- this.onlyPlayerExecutable = onlyPlayerExecutable;
- }
-
- /**
- * 设置命令权限
- *
- * @param permission
- * - 命令权限
- */
- public void setPermission(final String permission) {
- this.permission = permission;
- }
-
- /**
- * 设置可能的命令参数
- *
- * @param possibleArguments
- * - 可能的命令参数
- */
- public void setPossibleArguments(final String possibleArguments) {
- this.possibleArguments = possibleArguments;
- }
-
-}
diff --git a/src/main/java/cn/citycraft/Yum/commands/CommandDelete.java b/src/main/java/cn/citycraft/Yum/commands/CommandDelete.java
index fb23202..e5f7d51 100644
--- a/src/main/java/cn/citycraft/Yum/commands/CommandDelete.java
+++ b/src/main/java/cn/citycraft/Yum/commands/CommandDelete.java
@@ -4,10 +4,12 @@
package cn.citycraft.Yum.commands;
import org.bukkit.Bukkit;
+import org.bukkit.command.Command;
import org.bukkit.command.CommandException;
import org.bukkit.command.CommandSender;
import org.bukkit.plugin.Plugin;
+import cn.citycraft.PluginHelper.commands.BaseCommand;
import cn.citycraft.Yum.Yum;
import cn.citycraft.Yum.manager.YumManager;
@@ -23,14 +25,15 @@ public class CommandDelete extends BaseCommand {
* @param name
*/
public CommandDelete(final Yum main) {
- super("delete", "删除插件");
+ super("delete", "remove");
this.main = main;
setMinimumArguments(1);
+ setDescription("删除插件");
setPossibleArguments("<插件名称>");
}
@Override
- public void execute(final CommandSender sender, final String label, final String[] args) throws CommandException {
+ public void execute(final CommandSender sender, final Command command, final String label, final String[] args) throws CommandException {
final String pluginname = args[0];
final Plugin plugin = Bukkit.getServer().getPluginManager().getPlugin(pluginname);
if (plugin != null) {
@@ -42,5 +45,5 @@ public class CommandDelete extends BaseCommand {
} else {
sender.sendMessage("§c插件 " + pluginname + " 不存在或已卸载!");
}
- };
+ }
}
diff --git a/src/main/java/cn/citycraft/Yum/commands/CommandInfo.java b/src/main/java/cn/citycraft/Yum/commands/CommandInfo.java
index 586c165..9994793 100644
--- a/src/main/java/cn/citycraft/Yum/commands/CommandInfo.java
+++ b/src/main/java/cn/citycraft/Yum/commands/CommandInfo.java
@@ -4,11 +4,13 @@
package cn.citycraft.Yum.commands;
import org.apache.commons.lang.StringUtils;
+import org.bukkit.command.Command;
import org.bukkit.command.CommandException;
import org.bukkit.command.CommandSender;
import org.bukkit.plugin.Plugin;
import org.bukkit.plugin.PluginDescriptionFile;
+import cn.citycraft.PluginHelper.commands.BaseCommand;
import cn.citycraft.PluginHelper.utils.StringUtil;
import cn.citycraft.Yum.Yum;
import cn.citycraft.Yum.manager.YumManager;
@@ -25,16 +27,15 @@ public class CommandInfo extends BaseCommand {
* @param name
*/
public CommandInfo(final Yum main) {
- super("info", "查看插件详情");
+ super("info");
this.main = main;
+ setMinimumArguments(1);
+ setDescription("查看插件详情");
setPossibleArguments("<插件名称>");
}
@Override
- public void execute(final CommandSender sender, final String label, final String[] args) throws CommandException {
- if (args.length == 0) {
- return;
- }
+ public void execute(final CommandSender sender, final Command command, final String label, final String[] args) throws CommandException {
final String pluginname = args[0];
final Plugin plugin = main.getServer().getPluginManager().getPlugin(pluginname);
if (plugin != null) {
diff --git a/src/main/java/cn/citycraft/Yum/commands/CommandInstall.java b/src/main/java/cn/citycraft/Yum/commands/CommandInstall.java
index 031172b..56272f4 100644
--- a/src/main/java/cn/citycraft/Yum/commands/CommandInstall.java
+++ b/src/main/java/cn/citycraft/Yum/commands/CommandInstall.java
@@ -4,10 +4,12 @@
package cn.citycraft.Yum.commands;
import org.bukkit.Bukkit;
+import org.bukkit.command.Command;
import org.bukkit.command.CommandException;
import org.bukkit.command.CommandSender;
import org.bukkit.plugin.Plugin;
+import cn.citycraft.PluginHelper.commands.BaseCommand;
import cn.citycraft.Yum.Yum;
import cn.citycraft.Yum.manager.YumManager;
@@ -23,14 +25,15 @@ public class CommandInstall extends BaseCommand {
* @param name
*/
public CommandInstall(final Yum main) {
- super("install", "安装插件");
+ super("install");
this.main = main;
setMinimumArguments(1);
+ setDescription("安装插件");
setPossibleArguments("<插件名称>");
}
@Override
- public void execute(final CommandSender sender, final String label, final String[] args) throws CommandException {
+ public void execute(final CommandSender sender, final Command command, final String label, final String[] args) throws CommandException {
final String pluginname = args[0];
final Plugin plugin = Bukkit.getServer().getPluginManager().getPlugin(pluginname);
if (plugin == null) {
@@ -45,8 +48,7 @@ public class CommandInstall extends BaseCommand {
}
});
} else {
- sender.sendMessage("§c插件已安装在服务器 需要更新请使用yum update " + pluginname + "!");
+ sender.sendMessage("§c插件" + pluginname + "已安装在服务器 需要更新请使用yum update " + pluginname + "!");
}
-
- };
+ }
}
diff --git a/src/main/java/cn/citycraft/Yum/commands/CommandList.java b/src/main/java/cn/citycraft/Yum/commands/CommandList.java
index 6acf2f0..45762c9 100644
--- a/src/main/java/cn/citycraft/Yum/commands/CommandList.java
+++ b/src/main/java/cn/citycraft/Yum/commands/CommandList.java
@@ -4,10 +4,12 @@
package cn.citycraft.Yum.commands;
import org.bukkit.Bukkit;
+import org.bukkit.command.Command;
import org.bukkit.command.CommandException;
import org.bukkit.command.CommandSender;
import org.bukkit.plugin.Plugin;
+import cn.citycraft.PluginHelper.commands.BaseCommand;
import cn.citycraft.Yum.Yum;
import cn.citycraft.Yum.manager.YumManager;
@@ -23,12 +25,13 @@ public class CommandList extends BaseCommand {
* @param name
*/
public CommandList(final Yum main) {
- super("list", "列出已安装插件列表");
+ super("list");
this.main = main;
+ setDescription("列出已安装插件列表");
}
@Override
- public void execute(final CommandSender sender, final String label, final String[] args) throws CommandException {
+ public void execute(final CommandSender sender, final Command command, final String label, final String[] args) throws CommandException {
sender.sendMessage("§6[Yum仓库]§3服务器已安装插件: ");
for (final Plugin plugin : Bukkit.getPluginManager().getPlugins()) {
sender.sendMessage("§6 - " + YumManager.plugman.getFormattedName(plugin, true));
diff --git a/src/main/java/cn/citycraft/Yum/commands/CommandLoad.java b/src/main/java/cn/citycraft/Yum/commands/CommandLoad.java
index a1effbe..9366ebe 100644
--- a/src/main/java/cn/citycraft/Yum/commands/CommandLoad.java
+++ b/src/main/java/cn/citycraft/Yum/commands/CommandLoad.java
@@ -4,10 +4,12 @@
package cn.citycraft.Yum.commands;
import org.bukkit.Bukkit;
+import org.bukkit.command.Command;
import org.bukkit.command.CommandException;
import org.bukkit.command.CommandSender;
import org.bukkit.plugin.Plugin;
+import cn.citycraft.PluginHelper.commands.BaseCommand;
import cn.citycraft.Yum.Yum;
import cn.citycraft.Yum.manager.YumManager;
@@ -23,14 +25,15 @@ public class CommandLoad extends BaseCommand {
* @param name
*/
public CommandLoad(final Yum main) {
- super("load", "载入插件");
+ super("load");
this.main = main;
setMinimumArguments(1);
+ setDescription("载入插件");
setPossibleArguments("<插件名称>");
}
@Override
- public void execute(final CommandSender sender, final String label, final String[] args) throws CommandException {
+ public void execute(final CommandSender sender, final Command command, final String label, final String[] args) throws CommandException {
final String pluginname = args[0];
final Plugin plugin = Bukkit.getServer().getPluginManager().getPlugin(pluginname);
if (plugin == null) {
diff --git a/src/main/java/cn/citycraft/Yum/commands/CommandReload.java b/src/main/java/cn/citycraft/Yum/commands/CommandReload.java
index 4a34be4..faf27ec 100644
--- a/src/main/java/cn/citycraft/Yum/commands/CommandReload.java
+++ b/src/main/java/cn/citycraft/Yum/commands/CommandReload.java
@@ -4,10 +4,12 @@
package cn.citycraft.Yum.commands;
import org.bukkit.Bukkit;
+import org.bukkit.command.Command;
import org.bukkit.command.CommandException;
import org.bukkit.command.CommandSender;
import org.bukkit.plugin.Plugin;
+import cn.citycraft.PluginHelper.commands.BaseCommand;
import cn.citycraft.Yum.Yum;
import cn.citycraft.Yum.manager.YumManager;
@@ -23,14 +25,15 @@ public class CommandReload extends BaseCommand {
* @param name
*/
public CommandReload(final Yum main) {
- super("reload", "重载插件");
+ super("reload");
this.main = main;
setMinimumArguments(1);
+ setDescription("重载插件");
setPossibleArguments("<插件名称|all|*>");
}
@Override
- public void execute(final CommandSender sender, final String label, final String[] args) throws CommandException {
+ public void execute(final CommandSender sender, final Command command, final String label, final String[] args) throws CommandException {
final String pluginname = args[0];
if (pluginname.equalsIgnoreCase("all") || pluginname.equalsIgnoreCase("*")) {
YumManager.plugman.reloadAll(sender);
diff --git a/src/main/java/cn/citycraft/Yum/commands/CommandRepo.java b/src/main/java/cn/citycraft/Yum/commands/CommandRepo.java
index cd75433..1154d17 100644
--- a/src/main/java/cn/citycraft/Yum/commands/CommandRepo.java
+++ b/src/main/java/cn/citycraft/Yum/commands/CommandRepo.java
@@ -3,9 +3,11 @@
*/
package cn.citycraft.Yum.commands;
+import org.bukkit.command.Command;
import org.bukkit.command.CommandException;
import org.bukkit.command.CommandSender;
+import cn.citycraft.PluginHelper.commands.BaseCommand;
import cn.citycraft.PluginHelper.utils.StringUtil;
import cn.citycraft.Yum.Yum;
import cn.citycraft.Yum.manager.YumManager;
@@ -22,14 +24,15 @@ public class CommandRepo extends BaseCommand {
* @param name
*/
public CommandRepo(final Yum main) {
- super("repo", "插件源命令");
+ super("repo");
this.main = main;
setMinimumArguments(1);
+ setDescription("插件源命令");
setPossibleArguments(" <仓库名称>");
}
@Override
- public void execute(final CommandSender sender, final String label, final String[] args) throws CommandException {
+ public void execute(final CommandSender sender, final Command command, final String label, final String[] args) throws CommandException {
final String cmd = args[0];
switch (cmd) {
case "add":
diff --git a/src/main/java/cn/citycraft/Yum/commands/CommandUnload.java b/src/main/java/cn/citycraft/Yum/commands/CommandUnload.java
index 7e925bb..19dd8b9 100644
--- a/src/main/java/cn/citycraft/Yum/commands/CommandUnload.java
+++ b/src/main/java/cn/citycraft/Yum/commands/CommandUnload.java
@@ -4,10 +4,12 @@
package cn.citycraft.Yum.commands;
import org.bukkit.Bukkit;
+import org.bukkit.command.Command;
import org.bukkit.command.CommandException;
import org.bukkit.command.CommandSender;
import org.bukkit.plugin.Plugin;
+import cn.citycraft.PluginHelper.commands.BaseCommand;
import cn.citycraft.Yum.Yum;
import cn.citycraft.Yum.manager.YumManager;
@@ -23,14 +25,15 @@ public class CommandUnload extends BaseCommand {
* @param name
*/
public CommandUnload(final Yum main) {
- super("unload", "卸载插件");
+ super("unload");
this.main = main;
setMinimumArguments(1);
+ setDescription("卸载插件");
setPossibleArguments("<插件名称>");
}
@Override
- public void execute(final CommandSender sender, final String label, final String[] args) throws CommandException {
+ public void execute(final CommandSender sender, final Command command, final String label, final String[] args) throws CommandException {
final String pluginname = args[0];
final Plugin plugin = Bukkit.getServer().getPluginManager().getPlugin(pluginname);
if (plugin != null) {
diff --git a/src/main/java/cn/citycraft/Yum/commands/CommandUpdate.java b/src/main/java/cn/citycraft/Yum/commands/CommandUpdate.java
index 82c39cd..05b6b6a 100644
--- a/src/main/java/cn/citycraft/Yum/commands/CommandUpdate.java
+++ b/src/main/java/cn/citycraft/Yum/commands/CommandUpdate.java
@@ -4,10 +4,12 @@
package cn.citycraft.Yum.commands;
import org.bukkit.Bukkit;
+import org.bukkit.command.Command;
import org.bukkit.command.CommandException;
import org.bukkit.command.CommandSender;
import org.bukkit.plugin.Plugin;
+import cn.citycraft.PluginHelper.commands.BaseCommand;
import cn.citycraft.Yum.Yum;
import cn.citycraft.Yum.manager.YumManager;
@@ -21,14 +23,15 @@ public class CommandUpdate extends BaseCommand {
* @param name
*/
public CommandUpdate(final Yum main) {
- super("update", "更新插件");
+ super("update");
this.main = main;
setMinimumArguments(1);
+ setDescription("更新插件");
setPossibleArguments("<插件名称> [插件版本]");
}
@Override
- public void execute(final CommandSender sender, final String label, final String[] args) throws CommandException {
+ public void execute(final CommandSender sender, final Command command, final String label, final String[] args) throws CommandException {
final String pluginname = args[0];
final Plugin plugin = Bukkit.getServer().getPluginManager().getPlugin(pluginname);
sender.sendMessage("§a开始更新插件: " + pluginname);
@@ -44,7 +47,7 @@ public class CommandUpdate extends BaseCommand {
}
});
} else {
- sender.sendMessage("§c插件未安装或已卸载 需要安装请使用yum install " + pluginname + "!");
+ sender.sendMessage("§c插件" + pluginname + "未安装或已卸载 需要安装请使用/yum install " + pluginname + "!");
}
};
}
diff --git a/src/main/java/cn/citycraft/Yum/commands/CommandUpgrade.java b/src/main/java/cn/citycraft/Yum/commands/CommandUpgrade.java
index 5ceb359..e69e12f 100644
--- a/src/main/java/cn/citycraft/Yum/commands/CommandUpgrade.java
+++ b/src/main/java/cn/citycraft/Yum/commands/CommandUpgrade.java
@@ -4,10 +4,12 @@
package cn.citycraft.Yum.commands;
import org.bukkit.Bukkit;
+import org.bukkit.command.Command;
import org.bukkit.command.CommandException;
import org.bukkit.command.CommandSender;
import org.bukkit.plugin.Plugin;
+import cn.citycraft.PluginHelper.commands.BaseCommand;
import cn.citycraft.Yum.Yum;
import cn.citycraft.Yum.manager.YumManager;
@@ -21,13 +23,14 @@ public class CommandUpgrade extends BaseCommand {
* @param name
*/
public CommandUpgrade(final Yum main) {
- super("upgrade", "升级插件");
+ super("upgrade");
this.main = main;
+ setDescription("升级插件");
setPossibleArguments("[插件名称]");
}
@Override
- public void execute(final CommandSender sender, final String label, final String[] args) throws CommandException {
+ public void execute(final CommandSender sender, final Command command, final String label, final String[] args) throws CommandException {
Bukkit.getScheduler().runTaskAsynchronously(main, new Runnable() {
@Override
public void run() {
diff --git a/src/main/java/cn/citycraft/Yum/commands/HandlerCommand.java b/src/main/java/cn/citycraft/Yum/commands/HandlerCommand.java
deleted file mode 100644
index 70f8b95..0000000
--- a/src/main/java/cn/citycraft/Yum/commands/HandlerCommand.java
+++ /dev/null
@@ -1,168 +0,0 @@
-/**
- *
- */
-package cn.citycraft.Yum.commands;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-
-import org.bukkit.command.Command;
-import org.bukkit.command.CommandException;
-import org.bukkit.command.CommandExecutor;
-import org.bukkit.command.CommandSender;
-import org.bukkit.command.TabCompleter;
-import org.bukkit.entity.Player;
-import org.bukkit.util.StringUtil;
-
-import cn.citycraft.Yum.Yum;
-import cn.citycraft.Yum.manager.YumManager;
-
-/**
- * 子命令处理类
- *
- * @author 蒋天蓓 2015年8月22日上午8:29:44
- */
-public class HandlerCommand implements CommandExecutor, TabCompleter {
- /**
- * 命令监听类列表
- */
- private final List commandlist = new ArrayList();
-
- /**
- * 插件主类
- */
- Yum main;;
- /**
- * 已注册命令列表(包括别名)
- */
- List RegisterCommandList = new ArrayList();
-
- /**
- * 注册子命令
- *
- * @param yum
- * - 插件主类
- */
- public HandlerCommand(final Yum yum) {
- this.main = yum;
- registerCommand(new CommandList(yum));
- registerCommand(new CommandInstall(yum));
- registerCommand(new CommandUpdate(yum));
- registerCommand(new CommandDelete(yum));
- registerCommand(new CommandInfo(yum));
- registerCommand(new CommandRepo(yum));
- registerCommand(new CommandReload(yum));
- registerCommand(new CommandLoad(yum));
- registerCommand(new CommandUnload(yum));
- registerCommand(new CommandUpgrade(yum));
-
- RegisterCommandList = getRegisterCommands();
- }
-
- /**
- * 转移数组
- *
- * @param args
- * - 原数组
- * @param start
- * - 数组开始位置
- * @return 转移后的数组字符串
- */
- public static String[] moveStrings(final String[] args, final int start) {
- final String[] ret = new String[args.length - start];
- System.arraycopy(args, start, ret, 0, ret.length);
- return ret;
- }
-
- /**
- * 获得已注册的命令列表
- *
- * @return - 返回已注册的命令List
- */
- public List getRegisterCommands() {
- final List cmds = new ArrayList();
- for (final BaseCommand command : commandlist) {
- cmds.addAll(command.getCommandList());
- }
- return cmds;
- }
-
- @Override
- public boolean onCommand(final CommandSender sender, final Command cmd, final String label, final String[] args) {
- if (args.length == 0) {
- return true;
- }
- final String subcmd = args[0];
- if (subcmd.equalsIgnoreCase("help")) {
- sender.sendMessage("§6=========YUM插件帮助列表=========");
- for (final BaseCommand command : commandlist) {
- sender.sendMessage(String.format("§6/yum §a%1$s %2$s §6- §b%3$s", command.getName(), command.getPossibleArguments(), command.getDescription()));
- }
- return true;
- }
- final String[] subargs = moveStrings(args, 1);
- for (final BaseCommand command : commandlist) {
- if (command.isValidTrigger(subcmd)) {
- if (!command.hasPermission(sender)) {
- sender.sendMessage("§c你没有此命令的权限!");
- return true;
- }
- if (command.isOnlyPlayerExecutable() && !(sender instanceof Player)) {
- sender.sendMessage("§c控制台无法使用此命令!");
- return true;
- }
- if (subargs.length >= command.getMinimumArguments()) {
- try {
- command.execute(sender, subcmd, subargs);
- return true;
- } catch (final CommandException e) {
- sender.sendMessage(e.getMessage());
- }
- } else {
- sender.sendMessage("§c错误的参数 §e使用方法 /yum " + command.getName() + command.getPossibleArguments());
- }
- }
- }
- return false;
- }
-
- @Override
- public List onTabComplete(final CommandSender sender, final Command command, final String label, final String[] args) {
- if (sender.isOp() || sender.hasPermission("yum.admin") || sender.hasPermission("yum." + args[0])) {
- final List completions = new ArrayList<>();
- if (args.length == 1) {
- final String partialCommand = args[0];
- final List commands = RegisterCommandList;
- StringUtil.copyPartialMatches(partialCommand, commands, completions);
- }
- if (args.length == 2) {
- final String partialPlugin = args[1];
- List plugins = null;
- if (args[0].equalsIgnoreCase("install")) {
- plugins = YumManager.repo.getAllPluginName();
- } else if (args[0].equalsIgnoreCase("repo")) {
- plugins = Arrays.asList(new String[] { "add", "list", "clean", "update" });
- } else {
- plugins = YumManager.plugman.getPluginNames(false);
- }
- StringUtil.copyPartialMatches(partialPlugin, plugins, completions);
- }
- Collections.sort(completions);
- return completions;
- }
- return null;
- }
-
- /**
- * 注册命令
- *
- * @param command
- * - 被注册的命令类
- */
- public void registerCommand(final BaseCommand command) {
- commandlist.add(command);
- }
-
-}