diff --git a/src/main/java/cn/citycraft/Yum/Yum.java b/src/main/java/cn/citycraft/Yum/Yum.java index d8d0abd..a6f86b8 100644 --- a/src/main/java/cn/citycraft/Yum/Yum.java +++ b/src/main/java/cn/citycraft/Yum/Yum.java @@ -24,20 +24,21 @@ public class Yum extends JavaPlugin { @Override public void onEnable() { + CommandHandler cmdhandler = new CommandHandler(this); + this.getCommand("yum").setExecutor(cmdhandler); + this.getCommand("yum").setTabCompleter(cmdhandler); plugman = new PluginsManager(this); download = new DownloadManager(this); repo = new RepositoryManager(this); config = new FileConfig(this, "config.yml"); repo.jsonToCache(config.getString("cache")); - CommandHandler cmdhandler = new CommandHandler(this); - this.getCommand("yum").setExecutor(cmdhandler); - this.getCommand("yum").setTabCompleter(cmdhandler); - this.getPluginLoader(); } @Override public void onDisable() { - config.set("cache", repo.cacheToJson()); + if (config != null) + config.set("cache", repo.cacheToJson()); + config.save(); } } diff --git a/src/main/java/cn/citycraft/Yum/commands/CommandHandler.java b/src/main/java/cn/citycraft/Yum/commands/CommandHandler.java index fb2c1c9..8ac332d 100644 --- a/src/main/java/cn/citycraft/Yum/commands/CommandHandler.java +++ b/src/main/java/cn/citycraft/Yum/commands/CommandHandler.java @@ -4,6 +4,7 @@ package cn.citycraft.Yum.commands; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collections; import java.util.List; @@ -34,7 +35,7 @@ public class CommandHandler implements CommandExecutor, TabCompleter { */ public static String[] moveStrings(String[] args, int start) { String[] ret = new String[args.length - start]; - System.arraycopy(args, args.length - start, ret, 0, ret.length); + System.arraycopy(args, start, ret, 0, ret.length); return ret; } @@ -128,7 +129,17 @@ public class CommandHandler implements CommandExecutor, TabCompleter { } if (args.length == 2) { String partialPlugin = args[1]; - List plugins = main.plugman.getPluginNames(false); + List plugins = null; + if (args[0].equalsIgnoreCase("install")) + plugins = main.repo.getAllPluginName(); + else if (args[0].equalsIgnoreCase("repo")) + plugins = Arrays.asList(new String[] { + "add", + "list", + "clean" + }); + else + plugins = main.plugman.getPluginNames(false); StringUtil.copyPartialMatches(partialPlugin, plugins, completions); } Collections.sort(completions); diff --git a/src/main/java/cn/citycraft/Yum/commands/CommandLoad.java b/src/main/java/cn/citycraft/Yum/commands/CommandLoad.java index a37aeaf..1ecc190 100644 --- a/src/main/java/cn/citycraft/Yum/commands/CommandLoad.java +++ b/src/main/java/cn/citycraft/Yum/commands/CommandLoad.java @@ -30,10 +30,10 @@ public class CommandLoad extends BaseCommand { public void execute(CommandSender sender, String label, String[] args) throws CommandException { String pluginname = args[0]; Plugin plugin = Bukkit.getServer().getPluginManager().getPlugin(pluginname); - if (plugin != null) { + if (plugin == null) { main.plugman.load(sender, pluginname); } else { - sender.sendMessage("§c插件 " + pluginname + " 不存在或已卸载!"); + sender.sendMessage("§c错误: 插件 " + pluginname + " 已加载到服务器!"); } }; diff --git a/src/main/java/cn/citycraft/Yum/commands/CommandRepo.java b/src/main/java/cn/citycraft/Yum/commands/CommandRepo.java index b469b2a..9122bb6 100644 --- a/src/main/java/cn/citycraft/Yum/commands/CommandRepo.java +++ b/src/main/java/cn/citycraft/Yum/commands/CommandRepo.java @@ -34,12 +34,15 @@ public class CommandRepo extends BaseCommand { main.repo.addRepositories(args[1]); } sender.sendMessage("§6仓库: §a插件信息已缓存!"); + break; case "list": sender.sendMessage("§6仓库: §b缓存的插件信息如下 "); StringUtil.sendStringArray(sender, main.repo.getAllPluginString()); + break; case "clean": main.repo.clean(); sender.sendMessage("§6仓库: §a缓存的插件信息已清理!"); + break; } }; diff --git a/src/main/java/cn/citycraft/Yum/manager/AutoUpdateManager.java b/src/main/java/cn/citycraft/Yum/manager/AutoUpdateManager.java new file mode 100644 index 0000000..d048504 --- /dev/null +++ b/src/main/java/cn/citycraft/Yum/manager/AutoUpdateManager.java @@ -0,0 +1,34 @@ +package cn.citycraft.Yum.manager; + +import org.bukkit.Bukkit; +import org.bukkit.command.CommandSender; +import org.bukkit.plugin.Plugin; + +/** + * 自动更新类 + * + * @author 蒋天蓓 + * 2015年9月1日上午10:59:47 + */ +public class AutoUpdateManager { + Plugin plugin; + DownloadManager download; + PluginsManager plugman; + + public AutoUpdateManager(Plugin plugin) { + this.plugin = plugin; + plugman = new PluginsManager(plugin); + download = new DownloadManager(plugin); + } + + public boolean run(CommandSender sender) { + if (download.run(sender, "下载地址", plugman.getPluginFile(plugin))) { + plugman.reload(sender, plugin); + } + return false; + } + + public boolean run() { + return run(Bukkit.getConsoleSender()); + } +} diff --git a/src/main/java/cn/citycraft/Yum/manager/DownloadManager.java b/src/main/java/cn/citycraft/Yum/manager/DownloadManager.java index b9afd69..6e687b9 100644 --- a/src/main/java/cn/citycraft/Yum/manager/DownloadManager.java +++ b/src/main/java/cn/citycraft/Yum/manager/DownloadManager.java @@ -1,6 +1,3 @@ -/** - * - */ package cn.citycraft.Yum.manager; import java.io.BufferedInputStream; @@ -99,9 +96,8 @@ public class DownloadManager { * @return 是否成功 */ public boolean run(CommandSender sender, String urlstring, File file) { - URL url; try { - url = new URL(urlstring); + URL url = new URL(urlstring); return run(sender, url, file); } catch (MalformedURLException e) { sender.sendMessage("§4错误: §c无法识别的URL地址..."); diff --git a/src/main/java/cn/citycraft/Yum/manager/PluginsManager.java b/src/main/java/cn/citycraft/Yum/manager/PluginsManager.java index edaaf06..591ccd9 100644 --- a/src/main/java/cn/citycraft/Yum/manager/PluginsManager.java +++ b/src/main/java/cn/citycraft/Yum/manager/PluginsManager.java @@ -1,6 +1,3 @@ -/** - * - */ package cn.citycraft.Yum.manager; import java.io.File; @@ -30,7 +27,6 @@ import org.bukkit.plugin.PluginManager; import org.bukkit.plugin.RegisteredListener; import org.bukkit.plugin.UnknownDependencyException; -import cn.citycraft.Yum.Yum; import cn.citycraft.Yum.utils.StringUtil; import com.google.common.base.Joiner; @@ -41,10 +37,10 @@ import com.google.common.base.Joiner; * @author 蒋天蓓 2015年8月21日下午7:03:26 */ public class PluginsManager { - Yum main; + Plugin main; - public PluginsManager(Yum yum) { - this.main = yum; + public PluginsManager(Plugin plugin) { + this.main = plugin; } /** @@ -272,26 +268,23 @@ public class PluginsManager { */ public boolean load(CommandSender sender, String name) { Plugin target = null; - + String filename = null; if (sender == null) { sender = Bukkit.getConsoleSender(); } - if (!name.endsWith(".jar")) { - name = name + ".jar"; + filename = name + ".jar"; } - File pluginDir = new File("plugins"); File updateDir = new File(pluginDir, "update"); - if (!pluginDir.isDirectory()) { sender.sendMessage("§c插件目录不存在或IO错误!"); return false; } - File pluginFile = new File(pluginDir, name); + File pluginFile = new File(pluginDir, filename); - if (!pluginFile.isFile() && !new File(updateDir, name).isFile()) { + if (!pluginFile.isFile() && !new File(updateDir, filename).isFile()) { pluginFile = null; for (File file : pluginDir.listFiles()) { if (file.getName().endsWith(".jar")) { @@ -306,7 +299,7 @@ public class PluginsManager { } } if (pluginFile == null) { - sender.sendMessage("§c在插件目录和更新目录均未找到 " + name + " 插件 请确认文件是否存在!"); + sender.sendMessage("§6载入: §c在插件目录和更新目录均未找到 " + name + " 插件 请确认文件是否存在!"); return false; } } @@ -448,13 +441,12 @@ public class PluginsManager { if (commandMap != null) { for (Iterator> it = knownCommands.entrySet().iterator(); it.hasNext();) { Map.Entry entry = it.next(); - if ((entry.getValue() instanceof PluginCommand)) { PluginCommand command = (PluginCommand) entry.getValue(); if (command.getPlugin() == next) { command.unregister(commandMap); it.remove(); - sender.sendMessage("§6卸载: §a插件 " + name + " 的 " + command.getDescription() + " 命令已卸载!"); + sender.sendMessage("§6卸载: §a插件 " + name + " 的 " + command.getName() + " 命令已卸载!"); } } } diff --git a/src/main/java/cn/citycraft/Yum/repository/Plugin.java b/src/main/java/cn/citycraft/Yum/repository/Plugin.java index c648255..3b4c9ef 100644 --- a/src/main/java/cn/citycraft/Yum/repository/Plugin.java +++ b/src/main/java/cn/citycraft/Yum/repository/Plugin.java @@ -12,5 +12,6 @@ package cn.citycraft.Yum.repository; public class Plugin { public String groupId; public String artifactId; + public String description; public String version; } diff --git a/src/main/java/cn/citycraft/Yum/repository/RepositoryManager.java b/src/main/java/cn/citycraft/Yum/repository/RepositoryManager.java index b24ef13..7b978b9 100644 --- a/src/main/java/cn/citycraft/Yum/repository/RepositoryManager.java +++ b/src/main/java/cn/citycraft/Yum/repository/RepositoryManager.java @@ -25,13 +25,15 @@ import com.google.gson.reflect.TypeToken; * @author 蒋天蓓 */ public class RepositoryManager { - Gson gson = new Gson(); - HashMap plugins = new HashMap(); + Gson gson; + HashMap plugins; Yum main; public RepositoryManager(Yum yum) { this.main = yum; + gson = new Gson(); + plugins = new HashMap(); } public void clean() { @@ -52,7 +54,8 @@ public class RepositoryManager { } public boolean jsonToCache(String json) { - if (json == "") { + if (json == null || json == "") { + plugins = new HashMap(); return false; } try { @@ -127,11 +130,19 @@ public class RepositoryManager { return li; } + public List getAllPluginName() { + List li = new ArrayList(); + for (Entry plugin : plugins.entrySet()) { + li.add(plugin.getValue().plugin.artifactId); + } + return li; + } + public List getAllPluginString() { List li = new ArrayList(); for (Entry plugin : plugins.entrySet()) { Plugin pl = plugin.getValue().plugin; - li.add(String.format("%s %s(%s)", pl.groupId, pl.artifactId, pl.version)); + li.add(String.format("%s %s(%s) - %s", pl.groupId, pl.artifactId, pl.version, pl.description)); } return li; }