diff --git a/pom.xml b/pom.xml
index 61dbb7d..30624ab 100644
--- a/pom.xml
+++ b/pom.xml
@@ -3,7 +3,7 @@
4.0.0
Yum
- 2.8.3
+ 2.9.0
jar
Minecraft 服务器插件管理系统
@@ -16,8 +16,9 @@
- §a补丁包 2.8.3 版本
+ §a补丁包 2.9.0 版本
+ §619-09-30 §cfix: tabComplete error;
§619-08-28 §cfix: knownCommands not compatible;
§cfix: async event on primary thread;
§619-08-26 §cfix: 修复不兼容 1.14.4 的问题;
diff --git a/src/main/java/pw/yumc/Yum/commands/FileCommand.java b/src/main/java/pw/yumc/Yum/commands/FileCommand.java
index 3746858..9868e9d 100644
--- a/src/main/java/pw/yumc/Yum/commands/FileCommand.java
+++ b/src/main/java/pw/yumc/Yum/commands/FileCommand.java
@@ -49,7 +49,7 @@ public class FileCommand implements Executor {
public FileCommand(Yum yum) {
plugin = yum;
- new CommandSub("file", this, PluginTabComplete.instence);
+ new CommandSub("file", this, PluginTabComplete.INSTANCE);
}
@Cmd(aliases = "cp", minimumArguments = 2)
diff --git a/src/main/java/pw/yumc/Yum/commands/MonitorCommand.java b/src/main/java/pw/yumc/Yum/commands/MonitorCommand.java
index 8a3367f..a73e4d0 100644
--- a/src/main/java/pw/yumc/Yum/commands/MonitorCommand.java
+++ b/src/main/java/pw/yumc/Yum/commands/MonitorCommand.java
@@ -70,7 +70,7 @@ public class MonitorCommand implements Executor {
private double um = 1000000.00;
public MonitorCommand(Yum yum) {
- new CommandSub("monitor", this, PluginTabComplete.instence);
+ new CommandSub("monitor", this, PluginTabComplete.INSTANCE);
}
@Cmd(aliases = "c", minimumArguments = 1)
@@ -116,7 +116,7 @@ public class MonitorCommand implements Executor {
@Cmd(aliases = "e", minimumArguments = 1)
@Help(value = "查看插件事件能耗", possibleArguments = "[插件名称]")
@Async
- public void event(CommandSender sender, String pname) throws InstantiationException, IllegalAccessException, NoSuchFieldException {
+ public void event(CommandSender sender, String pname) throws IllegalAccessException, NoSuchFieldException {
Plugin plugin = Bukkit.getPluginManager().getPlugin(pname);
if (plugin == null) {
sender.sendMessage(String.format(p_n_f, pname));
diff --git a/src/main/java/pw/yumc/Yum/commands/NetCommand.java b/src/main/java/pw/yumc/Yum/commands/NetCommand.java
index 713e42b..adc19e9 100644
--- a/src/main/java/pw/yumc/Yum/commands/NetCommand.java
+++ b/src/main/java/pw/yumc/Yum/commands/NetCommand.java
@@ -28,7 +28,7 @@ public class NetCommand implements Executor {
private String p_n_f = prefix + "§c插件 §b%s §c不存在!";
public NetCommand(Yum yum) {
- new CommandSub("net", this, PluginTabComplete.instence);
+ new CommandSub("net", this, PluginTabComplete.INSTANCE);
}
public static void addNetCount(String pname) {
diff --git a/src/main/java/pw/yumc/Yum/commands/PluginTabComplete.java b/src/main/java/pw/yumc/Yum/commands/PluginTabComplete.java
index fc34bde..30d0b4b 100644
--- a/src/main/java/pw/yumc/Yum/commands/PluginTabComplete.java
+++ b/src/main/java/pw/yumc/Yum/commands/PluginTabComplete.java
@@ -9,28 +9,36 @@ import org.bukkit.command.CommandSender;
import pw.yumc.Yum.api.YumAPI;
import pw.yumc.YumCore.commands.annotation.Tab;
import pw.yumc.YumCore.commands.interfaces.Executor;
-import pw.yumc.YumCore.kit.StrKit;
/**
- *
- * @since 2016年7月7日 上午8:36:47
* @author 喵♂呜
+ * @since 2016年7月7日 上午8:36:47
*/
public class PluginTabComplete implements Executor {
- public static PluginTabComplete instence = new PluginTabComplete();
+ public static PluginTabComplete INSTANCE = new PluginTabComplete();
@Tab
- public List listtab(CommandSender sender, String label, String[] args) {
- if (args.length > 1 && args[0].equalsIgnoreCase("install") || args[0].equalsIgnoreCase("i")) {
- return StrKit.copyPartialMatches(args[1], YumAPI.getRepo().getAllPluginName(), new ArrayList());
- } else if (args[0].equalsIgnoreCase("repo") || args[0].equalsIgnoreCase("r")) {
- if (args.length == 2) { return StrKit.copyPartialMatches(args[1], Arrays.asList("add", "all", "list", "delall", "clean", "update", "del"), new ArrayList()); }
- if (args.length == 3 && ("add".equals(args[1]) || "del".equals(args[1]))) { return StrKit.copyPartialMatches(args[2], YumAPI.getRepo().getRepos().keySet(), new ArrayList()); }
- } else if (args[0].equalsIgnoreCase("bukkitrepo") || args[0].equalsIgnoreCase("br")) {
- return StrKit.copyPartialMatches(args[1], Arrays.asList("look", "install"), new ArrayList());
- } else {
- return StrKit.copyPartialMatches(args[args.length - 1], YumAPI.getPlugman().getPluginNames(false), new ArrayList());
+ public List listTab(CommandSender sender, String label, String[] args) {
+ if (args.length > 0) {
+ switch (args[0]) {
+ case "install":
+ case "i":
+ return YumAPI.getRepo().getAllPluginName();
+ case "repo":
+ case "r":
+ if (args.length == 2) {
+ return Arrays.asList("add", "all", "list", "delall", "clean", "update", "del");
+ }
+ if (args.length == 3) {
+ return new ArrayList<>(YumAPI.getRepo().getRepos().keySet());
+ }
+ break;
+ case "bukkitrepo":
+ case "br":
+ return Arrays.asList("look", "install");
+ default:
+ }
}
- return null;
+ return YumAPI.getPlugman().getPluginNames(false);
}
}
diff --git a/src/main/java/pw/yumc/Yum/commands/YumCommand.java b/src/main/java/pw/yumc/Yum/commands/YumCommand.java
index 43d6640..d3b7b84 100644
--- a/src/main/java/pw/yumc/Yum/commands/YumCommand.java
+++ b/src/main/java/pw/yumc/Yum/commands/YumCommand.java
@@ -38,30 +38,30 @@ import pw.yumc.YumCore.tellraw.Tellraw;
/**
* Yum命令基类
*
- * @since 2016年1月9日 上午10:02:24
* @author 喵♂呜
+ * @since 2016年1月9日 上午10:02:24
*/
public class YumCommand implements Executor {
private String prefix = "§6[§bYum §a插件管理§6] ";
- private String searchlimit = prefix + "§c为保证搜索速度和准确性 关键词必须大于 3 个字符!";
+ private String searchLimit = prefix + "§c为保证搜索速度和准确性 关键词必须大于 3 个字符!";
private String searching = prefix + "§a正在从 §eBukkitDev §a获取 §b%s §a的相关数据...";
- private String not_found_from_bukkit = prefix + "§c未在 §eBukkitDev §c搜索到 §b%s §c的相关插件!";
+ private String notFoundFromBukkit = prefix + "§c未在 §eBukkitDev §c搜索到 §b%s §c的相关插件!";
private String result = prefix + "§6关键词 §b%s §6的搜索结果如下:";
- private String bukkitlistprefix = " §6插件ID §3插件名称 §d发布类型 §a操作";
- private String bukkitlist = "§6- §e%-6s §b%-25s §d%-10s";
+ private String bukkitListPrefix = " §6插件ID §3插件名称 §d发布类型 §a操作";
+ private String bukkitList = "§6- §e%-6s §b%-25s §d%-10s";
private String fsearching = prefix + "§a正在从 §eBukkitDev §a获取ID §b%s §a的文件列表...";
- private String not_found_id_from_bukkit = prefix + "§c未在 §eBukkitDev §c搜索到ID为 §b%s §c的相关插件!";
- private String filelistprefix = " §6插件名称 §3游戏版本 §d发布类型 §a操作";
- private String filelist = "§6- §b%-20s §3%-15s §d%-10s";
+ private String notFoundIdFromBukkit = prefix + "§c未在 §eBukkitDev §c搜索到ID为 §b%s §c的相关插件!";
+ private String fileListPrefix = " §6插件名称 §3游戏版本 §d发布类型 §a操作";
+ private String fileList = "§6- §b%-20s §3%-15s §d%-10s";
private String del = "§c删除: §a插件 §b%s §a版本 §d%s §a已从服务器卸载并删除!";
private String delFailed = "§c删除: §a插件 §b%s §c卸载或删除时发生错误 删除失败!";
private String look = "§6查看";
private String install = "§a安装";
- private String install_tip = "§a点击安装";
+ private String installTip = "§a点击安装";
private String update = "§a更新";
private String unload = "§d卸载";
private String reload = "§6重载";
@@ -73,7 +73,7 @@ public class YumCommand implements Executor {
public YumCommand(Yum yum) {
main = yum;
- new CommandSub("yum", this, PluginTabComplete.instence);
+ new CommandSub("yum", this, PluginTabComplete.INSTANCE);
}
@Async
@@ -81,73 +81,71 @@ public class YumCommand implements Executor {
@Help(value = "从BukkitDev查看安装插件", possibleArguments = "<操作符> <项目ID|项目名称> [地址]")
public void bukkitrepo(final CommandSender sender, final String opt, final String id, String url) {
switch (opt) {
- case "look": {
- sender.sendMessage(String.format(fsearching, id));
- List lf = Files.parseList(HttpKit.get(String.format(BukkitDev.PLUGIN, id)));
- if (lf.isEmpty()) {
- sender.sendMessage(String.format(not_found_id_from_bukkit, id));
- return;
- }
- sender.sendMessage(filelistprefix);
- for (int i = 0; i < lf.size() || i < 8; i++) {
- Files f = lf.get(i);
- Tellraw tr = Tellraw.create();
- tr.text(String.format(filelist, f.name, f.gameVersion, f.releaseType));
- tr.then(" ");
- tr.then(install).command(String.format("/yum br ai %s %s", f.name, f.downloadUrl));
- tr.tip(install_tip);
- tr.send(sender);
- }
- break;
- }
- case "ai": {
- if (url == null) { return; }
- File file = new File(Bukkit.getUpdateFolderFile(), YumAPI.getDownload().getFileName(url));
- YumAPI.getDownload().run(sender, url, file, new One() {
- @Override
- public void run(File file) {
- if (file.getName().endsWith(".zip")) {
- try {
- ZipKit.unzip(file, Bukkit.getUpdateFolderFile(), ".jar");
- file.delete();
- } catch (IOException e) {
- sender.sendMessage(unzip_error);
- }
- }
- YumAPI.upgrade(sender);
+ case "look": {
+ sender.sendMessage(String.format(fsearching, id));
+ List lf = Files.parseList(HttpKit.get(String.format(BukkitDev.PLUGIN, id)));
+ if (lf.isEmpty()) {
+ sender.sendMessage(String.format(notFoundIdFromBukkit, id));
+ return;
}
- });
- break;
- }
- case "i":
- case "install": {
- sender.sendMessage(String.format(fsearching, id));
- List lf = Files.parseList(HttpKit.get(String.format(BukkitDev.PLUGIN, id)));
- if (lf.isEmpty()) {
- sender.sendMessage(String.format(not_found_id_from_bukkit, id));
- return;
- }
- Files f = lf.get(0);
- url = f.downloadUrl;
- File file = new File(Bukkit.getUpdateFolderFile(), YumAPI.getDownload().getFileName(url));
- YumAPI.getDownload().run(sender, url, file, new One() {
- @Override
- public void run(File file) {
- if (file.getName().endsWith(".zip")) {
- try {
- ZipKit.unzip(file, Bukkit.getUpdateFolderFile(), ".jar");
- } catch (IOException e) {
- sender.sendMessage(unzip_error);
- }
- }
- YumAPI.upgrade(sender);
+ sender.sendMessage(fileListPrefix);
+ for (int i = 0; i < lf.size() || i < 8; i++) {
+ Files f = lf.get(i);
+ Tellraw tr = Tellraw.create();
+ tr.text(String.format(fileList, f.name, f.gameVersion, f.releaseType));
+ tr.then(" ");
+ tr.then(install).command(String.format("/yum br ai %s %s", f.name, f.downloadUrl));
+ tr.tip(installTip);
+ tr.send(sender);
}
- });
- break;
- }
- default:
- break;
-
+ break;
+ }
+ case "ai": {
+ if (url == null) { return; }
+ File file = new File(Bukkit.getUpdateFolderFile(), YumAPI.getDownload().getFileName(url));
+ YumAPI.getDownload().run(sender, url, file, new One() {
+ @Override
+ public void run(File file) {
+ if (file.getName().endsWith(".zip")) {
+ try {
+ ZipKit.unzip(file, Bukkit.getUpdateFolderFile(), ".jar");
+ file.delete();
+ } catch (IOException e) {
+ sender.sendMessage(unzip_error);
+ }
+ }
+ YumAPI.upgrade(sender);
+ }
+ });
+ break;
+ }
+ case "i":
+ case "install": {
+ sender.sendMessage(String.format(fsearching, id));
+ List lf = Files.parseList(HttpKit.get(String.format(BukkitDev.PLUGIN, id)));
+ if (lf.isEmpty()) {
+ sender.sendMessage(String.format(notFoundIdFromBukkit, id));
+ return;
+ }
+ Files f = lf.get(0);
+ url = f.downloadUrl;
+ File file = new File(Bukkit.getUpdateFolderFile(), YumAPI.getDownload().getFileName(url));
+ YumAPI.getDownload().run(sender, url, file, new One() {
+ @Override
+ public void run(File file) {
+ if (file.getName().endsWith(".zip")) {
+ try {
+ ZipKit.unzip(file, Bukkit.getUpdateFolderFile(), ".jar");
+ } catch (IOException e) {
+ sender.sendMessage(unzip_error);
+ }
+ }
+ YumAPI.upgrade(sender);
+ }
+ });
+ break;
+ }
+ default:
}
}
@@ -334,51 +332,51 @@ public class YumCommand implements Executor {
@Async
public void repo(CommandSender sender, String cmd, String arg1) {
switch (cmd) {
- case "add":
- if (arg1 != null) {
- if (YumAPI.getRepo().addRepositories(sender, arg1)) {
- String reponame = YumAPI.getRepo().getRepoCache(arg1).name;
- sender.sendMessage("§6仓库: §a源仓库 §e" + reponame + " §a的插件信息已缓存!");
+ case "add":
+ if (arg1 != null) {
+ if (YumAPI.getRepo().addRepositories(sender, arg1)) {
+ String reponame = YumAPI.getRepo().getRepoCache(arg1).name;
+ sender.sendMessage("§6仓库: §a源仓库 §e" + reponame + " §a的插件信息已缓存!");
+ } else {
+ sender.sendMessage("§6仓库: §c源地址未找到仓库信息或当前地址已缓存!");
+ }
} else {
- sender.sendMessage("§6仓库: §c源地址未找到仓库信息或当前地址已缓存!");
+ sender.sendMessage("§6仓库: §c请输入需要添加的源地址!");
}
- } else {
- sender.sendMessage("§6仓库: §c请输入需要添加的源地址!");
- }
- break;
- case "del":
- if (arg1 != null) {
- Repositories delrepo = YumAPI.getRepo().getRepoCache(arg1);
- if (delrepo != null) {
- YumAPI.getRepo().delRepositories(sender, arg1);
- sender.sendMessage("§6仓库: §a源仓库 §e" + delrepo.name + " §c已删除 §a请使用 §b/yum repo update §a更新缓存!");
+ break;
+ case "del":
+ if (arg1 != null) {
+ Repositories delrepo = YumAPI.getRepo().getRepoCache(arg1);
+ if (delrepo != null) {
+ YumAPI.getRepo().delRepositories(sender, arg1);
+ sender.sendMessage("§6仓库: §a源仓库 §e" + delrepo.name + " §c已删除 §a请使用 §b/yum repo update §a更新缓存!");
+ } else {
+ sender.sendMessage("§6仓库: §c源地址未找到!");
+ }
} else {
- sender.sendMessage("§6仓库: §c源地址未找到!");
+ sender.sendMessage("§6仓库: §c请输入需要删除的源地址!");
}
- } else {
- sender.sendMessage("§6仓库: §c请输入需要删除的源地址!");
- }
- break;
- case "delall":
- YumAPI.getRepo().getRepoCache().getRepos().clear();
- sender.sendMessage("§6仓库: §a缓存的仓库信息已清理!");
- break;
- case "list":
- sender.sendMessage("§6仓库: §b缓存的插件信息如下 ");
- sendStringArray(sender, YumAPI.getRepo().getAllPluginsInfo());
- break;
- case "all":
- sender.sendMessage("§6仓库: §b缓存的仓库信息如下 ");
- sendStringArray(sender, YumAPI.getRepo().getRepoCache().getAllRepoInfo());
- break;
- case "clean":
- YumAPI.getRepo().clean();
- sender.sendMessage("§6仓库: §a缓存的插件信息已清理!");
- break;
- case "update":
- YumAPI.getRepo().updateRepositories(sender);
- sender.sendMessage("§6仓库: §a仓库缓存数据已更新!");
- break;
+ break;
+ case "delall":
+ YumAPI.getRepo().getRepoCache().getRepos().clear();
+ sender.sendMessage("§6仓库: §a缓存的仓库信息已清理!");
+ break;
+ case "list":
+ sender.sendMessage("§6仓库: §b缓存的插件信息如下 ");
+ sendStringArray(sender, YumAPI.getRepo().getAllPluginsInfo());
+ break;
+ case "all":
+ sender.sendMessage("§6仓库: §b缓存的仓库信息如下 ");
+ sendStringArray(sender, YumAPI.getRepo().getRepoCache().getAllRepoInfo());
+ break;
+ case "clean":
+ YumAPI.getRepo().clean();
+ sender.sendMessage("§6仓库: §a缓存的插件信息已清理!");
+ break;
+ case "update":
+ YumAPI.getRepo().updateRepositories(sender);
+ sender.sendMessage("§6仓库: §a仓库缓存数据已更新!");
+ break;
}
}
@@ -388,20 +386,20 @@ public class YumCommand implements Executor {
@Async
public void search(CommandSender sender, String pname) {
if (pname.length() < 3) {
- sender.sendMessage(searchlimit);
+ sender.sendMessage(searchLimit);
return;
}
sender.sendMessage(String.format(searching, pname));
List list = Projects.parseList(HttpKit.get(String.format(BukkitDev.SEARCH, pname.toLowerCase())));
if (list.isEmpty()) {
- sender.sendMessage(String.format(not_found_from_bukkit, pname));
+ sender.sendMessage(String.format(notFoundFromBukkit, pname));
return;
}
sender.sendMessage(String.format(result, pname));
- sender.sendMessage(bukkitlistprefix);
+ sender.sendMessage(bukkitListPrefix);
for (Projects p : list) {
Tellraw fm = Tellraw.create();
- fm.text(String.format(bukkitlist, p.id, p.name, p.stage));
+ fm.text(String.format(bukkitList, p.id, p.name, p.stage));
fm.then(" ");
fm.then(look).cmd_tip("/yum br look " + p.id, look);
fm.send(sender);
@@ -432,23 +430,23 @@ public class YumCommand implements Executor {
}
String[] args = argstring.split(" ");
switch (args.length) {
- case 1:
- case 2:
- String pluginname = args[0];
- Plugin plugin = Bukkit.getServer().getPluginManager().getPlugin(pluginname);
- sender.sendMessage("§a开始更新插件: " + pluginname);
- if (plugin != null) {
- if (args.length < 2) {
- YumAPI.updateFromYum(sender, plugin);
+ case 1:
+ case 2:
+ String pluginname = args[0];
+ Plugin plugin = Bukkit.getServer().getPluginManager().getPlugin(pluginname);
+ sender.sendMessage("§a开始更新插件: " + pluginname);
+ if (plugin != null) {
+ if (args.length < 2) {
+ YumAPI.updateFromYum(sender, plugin);
+ } else {
+ YumAPI.updateFromYum(sender, plugin, args[1]);
+ }
} else {
- YumAPI.updateFromYum(sender, plugin, args[1]);
+ sender.sendMessage("§c插件" + pluginname + "未安装或已卸载 需要安装请使用 §b/yum install " + pluginname + "!");
}
- } else {
- sender.sendMessage("§c插件" + pluginname + "未安装或已卸载 需要安装请使用 §b/yum install " + pluginname + "!");
- }
- break;
- default:
- sender.sendMessage("§c命令参数错误!");
+ break;
+ default:
+ sender.sendMessage("§c命令参数错误!");
}
}
@@ -477,18 +475,18 @@ public class YumCommand implements Executor {
* 发生实体消息
*
* @param sender
- * 命令发送者
+ * 命令发送者
* @param prefix
- * 实体前缀
+ * 实体前缀
* @param map
- * 实体
+ * 实体
* @param key
- * 实体Key
+ * 实体Key
*/
private void sendEntry(CommandSender sender, String prefix, Map map, String key) {
Object value = map.get(key);
if (value != null) {
- sender.sendMessage(prefix + (String) value);
+ sender.sendMessage(prefix + value);
}
}
@@ -496,13 +494,13 @@ public class YumCommand implements Executor {
* 发生实体消息
*
* @param sender
- * 命令发送者
+ * 命令发送者
* @param prefix
- * 实体前缀
+ * 实体前缀
* @param map
- * 实体
+ * 实体
* @param key
- * 实体Key
+ * 实体Key
*/
private void sendEntryList(CommandSender sender, String prefix, Map map, String key) {
List values = (List) map.get(key);
@@ -517,9 +515,9 @@ public class YumCommand implements Executor {
* 给玩家或控制台发送消息组
*
* @param sender
- * 接收消息的玩家
+ * 接收消息的玩家
* @param msg
- * 消息组
+ * 消息组
*/
public static void sendStringArray(CommandSender sender, Collection msg) {
for (String string : msg) {
@@ -531,11 +529,11 @@ public class YumCommand implements Executor {
* 给玩家或控制台发送消息组
*
* @param sender
- * 接收消息的玩家
+ * 接收消息的玩家
* @param msg
- * 消息组
+ * 消息组
* @param prefix
- * 消息前缀
+ * 消息前缀
*/
public static void sendStringArray(CommandSender sender, Collection msg, String prefix) {
for (String string : msg) {
@@ -547,13 +545,13 @@ public class YumCommand implements Executor {
* 给玩家或控制台发送消息组
*
* @param sender
- * 接收消息的玩家
+ * 接收消息的玩家
* @param msg
- * 消息组
+ * 消息组
* @param prefix
- * 消息前缀
+ * 消息前缀
* @param suffix
- * 消息后缀
+ * 消息后缀
*/
public static void sendStringArray(CommandSender sender, Collection msg, String prefix, String suffix) {
for (String string : msg) {