diff --git a/.classpath b/.classpath index 3ec578f..eed8a51 100644 --- a/.classpath +++ b/.classpath @@ -1,36 +1,31 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/java/cn/citycraft/Yum/Yum.java b/src/main/java/cn/citycraft/Yum/Yum.java index a718d00..511b8df 100644 --- a/src/main/java/cn/citycraft/Yum/Yum.java +++ b/src/main/java/cn/citycraft/Yum/Yum.java @@ -1,5 +1,5 @@ /** - * + * */ package cn.citycraft.Yum; @@ -14,9 +14,8 @@ import cn.citycraft.Yum.utils.PluginUtil; /** * MC插件仓库 - * - * @author 蒋天蓓 - * 2015年8月21日下午5:14:39 + * + * @author 蒋天蓓 2015年8月21日下午5:14:39 */ public class Yum extends JavaPlugin { @Override @@ -38,22 +37,28 @@ public class Yum extends JavaPlugin { Plugin plugin = this.getServer().getPluginManager().getPlugin(args[1]); switch (args[0]) { case "install": - if (DownloadUtils.download(sender, getDataFolder().getParent(), args[1])) - sender.sendMessage(PluginUtil.load(args[1])); + if (plugin != null) { + if (DownloadUtils.download(sender, args[1])) { + sender.sendMessage(PluginUtil.load(args[1])); + } + } else { + sender.sendMessage("§c插件已安装在服务器!"); + } break; case "remove": if (plugin != null) { sender.sendMessage(PluginUtil.unload(plugin)); } else { - sender.sendMessage("插件不存在或已卸载!"); + sender.sendMessage("§c插件不存在或已卸载!"); } break; case "update": if (plugin != null) { - if (DownloadUtils.download(sender, getDataFolder().getParent(), args[1])) + if (DownloadUtils.download(sender, args[1])) { sender.sendMessage(PluginUtil.load(args[1])); + } } else { - sender.sendMessage("插件不存在或已卸载!"); + sender.sendMessage("§c插件不存在或已卸载!"); } break; } diff --git a/src/main/java/cn/citycraft/Yum/utils/DownloadUtils.java b/src/main/java/cn/citycraft/Yum/utils/DownloadUtils.java index 1443663..cbdbbac 100644 --- a/src/main/java/cn/citycraft/Yum/utils/DownloadUtils.java +++ b/src/main/java/cn/citycraft/Yum/utils/DownloadUtils.java @@ -1,5 +1,5 @@ /** - * + * */ package cn.citycraft.Yum.utils; @@ -12,29 +12,28 @@ import org.bukkit.Bukkit; import org.bukkit.command.CommandSender; /** - * @author 蒋天蓓 - * 2015年8月21日下午6:08:09 - * TODO + * @author 蒋天蓓 2015年8月21日下午6:08:09 TODO */ public class DownloadUtils { - public static boolean download(CommandSender sender, String dir, String pluginname) { + public static boolean download(CommandSender sender, String pluginname) { String url = "http://ci.citycraft.cn:8800/jenkins/job/%1$s/lastSuccessfulBuild/artifact/target/%1$s.jar"; BufferedInputStream in = null; FileOutputStream fout = null; - if (sender == null) + if (sender == null) { sender = Bukkit.getConsoleSender(); + } try { String filename = pluginname + ".jar"; - sender.sendMessage("开始下载: " + pluginname); + sender.sendMessage("§3开始下载: " + pluginname); URL fileUrl = new URL(String.format(url, pluginname)); - sender.sendMessage("下载地址: http://********/" + filename); + sender.sendMessage("§3下载地址: http://********/" + filename); int fileLength = fileUrl.openConnection().getContentLength(); - sender.sendMessage("文件长度: " + fileLength); + sender.sendMessage("§3文件长度: " + fileLength); in = new BufferedInputStream(fileUrl.openStream()); - File file = new File(dir, filename); + File file = new File(new File("plugins"), filename); if (!file.exists()) { file.createNewFile(); - sender.sendMessage("创建新文件: " + filename); + sender.sendMessage("§d创建新文件: " + filename); } fout = new FileOutputStream(file); byte[] data = new byte[1024]; @@ -46,13 +45,15 @@ public class DownloadUtils { fout.write(data, 0, count); double percent = downloaded / fileLength * 10000; if (System.currentTimeMillis() - time > 1000) { - sender.sendMessage(String.format("已下载: ====================> %.2f%%", percent)); + sender.sendMessage(String.format("§a已下载: " + getPer(percent) + " %.2f%%", percent)); time = System.currentTimeMillis(); } } + sender.sendMessage("§a已下载: ====================> 100%"); + sender.sendMessage("§a插件: " + pluginname + "下载完成!"); return true; } catch (Exception ex) { - sender.sendMessage("插件下载失败!"); + sender.sendMessage("§c插件下载失败!"); ex.printStackTrace(); return false; } finally { @@ -65,4 +66,17 @@ public class DownloadUtils { } } } + + private static String getPer(double per) { + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < 10; i++) { + if (per > i) { + sb.append(" "); + } else { + sb.append("=="); + } + } + sb.append(">"); + return sb.toString(); + } } diff --git a/src/main/java/cn/citycraft/Yum/utils/PluginUtil.java b/src/main/java/cn/citycraft/Yum/utils/PluginUtil.java index ca92fa7..a9ae597 100644 --- a/src/main/java/cn/citycraft/Yum/utils/PluginUtil.java +++ b/src/main/java/cn/citycraft/Yum/utils/PluginUtil.java @@ -1,5 +1,5 @@ /** - * + * */ package cn.citycraft.Yum.utils; @@ -32,26 +32,11 @@ import com.google.common.base.Joiner; /** * 插件管理类 - * - * @author 蒋天蓓 - * 2015年8月21日下午7:03:26 + * + * @author 蒋天蓓 2015年8月21日下午7:03:26 */ public class PluginUtil { - public static void enable(Plugin plugin) { - if ((!plugin.isEnabled()) && (plugin != null)) { - Bukkit.getPluginManager().enablePlugin(plugin); - } - } - - public static void enableAll() { - for (Plugin plugin : Bukkit.getPluginManager().getPlugins()) { - if (!isIgnored(plugin)) { - enable(plugin); - } - } - } - public static void disable(Plugin plugin) { if ((plugin.isEnabled()) && (plugin != null)) { Bukkit.getPluginManager().disablePlugin(plugin); @@ -66,6 +51,20 @@ public class PluginUtil { } } + public static void enable(Plugin plugin) { + if ((!plugin.isEnabled()) && (plugin != null)) { + Bukkit.getPluginManager().enablePlugin(plugin); + } + } + + public static void enableAll() { + for (Plugin plugin : Bukkit.getPluginManager().getPlugins()) { + if (!isIgnored(plugin)) { + enable(plugin); + } + } + } + public static String getFormattedName(Plugin plugin) { return getFormattedName(plugin, false); } @@ -73,15 +72,12 @@ public class PluginUtil { public static String getFormattedName(Plugin plugin, boolean includeVersions) { ChatColor color = plugin.isEnabled() ? ChatColor.GREEN : ChatColor.RED; String pluginName = color + plugin.getName(); - if (includeVersions) + if (includeVersions) { pluginName = pluginName + " (" + plugin.getDescription().getVersion() + ")"; + } return pluginName; } - public static Plugin getPluginByName(String[] args, int start) { - return getPluginByName(StringUtil.consolidateStrings(args, start)); - } - public static Plugin getPluginByName(String name) { for (Plugin plugin : Bukkit.getPluginManager().getPlugins()) { if (name.equalsIgnoreCase(plugin.getName())) @@ -90,10 +86,15 @@ public class PluginUtil { return null; } + public static Plugin getPluginByName(String[] args, int start) { + return getPluginByName(StringUtil.consolidateStrings(args, start)); + } + public static List getPluginNames(boolean fullName) { List plugins = new ArrayList(); - for (Plugin plugin : Bukkit.getPluginManager().getPlugins()) + for (Plugin plugin : Bukkit.getPluginManager().getPlugins()) { plugins.add(fullName ? plugin.getDescription().getFullName() : plugin.getName()); + } return plugins; } @@ -118,9 +119,8 @@ public class PluginUtil { } } } - if (parsedCommands.isEmpty()) { - return "没有注册命令!"; - } + if (parsedCommands.isEmpty()) + return "§c没有注册命令!"; return Joiner.on(", ").join(parsedCommands); } @@ -150,23 +150,22 @@ public class PluginUtil { } File pluginFile = new File(pluginDir, name + ".jar"); - if (!pluginFile.isFile()) { - return "插件不存在!"; - } + if (!pluginFile.isFile()) + return "§c在plugins目录未找到 " + name + " 插件 请确认文件是否存在!"; try { target = Bukkit.getPluginManager().loadPlugin(pluginFile); } catch (InvalidDescriptionException e) { e.printStackTrace(); - return "错误的插件信息!"; + return "§c插件 " + name + " 的plugin.yml文件存在错误!"; } catch (InvalidPluginException e) { e.printStackTrace(); - return "错误的插件!"; + return "§c文件 " + name + " 不是一个可载入的插件!"; } target.onLoad(); Bukkit.getPluginManager().enablePlugin(target); - return "插件已载入!"; + return "§a插件 " + name + " 已成功载入到服务器!"; } public static void reload(Plugin plugin) { @@ -226,41 +225,42 @@ public class PluginUtil { commands = (Map) knownCommandsField.get(commandMap); } catch (NoSuchFieldException e) { e.printStackTrace(); - return "插件卸载失败!"; + return "§c插件 " + name + " 卸载失败!"; } catch (IllegalAccessException e) { e.printStackTrace(); - return "插件已失败!"; + return "§c插件 " + name + " 卸载失败!"; } } pluginManager.disablePlugin(plugin); - if ((plugins != null) && (plugins.contains(plugin))) { + if (plugins != null && plugins.contains(plugin)) { plugins.remove(plugin); } - if ((names != null) && (names.containsKey(name))) { + + if (names != null && names.containsKey(name)) { names.remove(name); } - Iterator it; - if ((listeners != null) && (reloadlisteners)) { + + if (listeners != null && reloadlisteners) { for (SortedSet set : listeners.values()) { - for (it = set.iterator(); it.hasNext();) { + for (Iterator it = set.iterator(); it.hasNext();) { RegisteredListener value = it.next(); - if (value.getPlugin() == plugin) + if (value.getPlugin() == plugin) { it.remove(); + } } } } - Iterator> cmdit; if (commandMap != null) { - for (cmdit = commands.entrySet().iterator(); cmdit.hasNext();) { - Map.Entry entry = cmdit.next(); - if ((entry.getValue() instanceof PluginCommand)) { + for (Iterator> it = commands.entrySet().iterator(); it.hasNext();) { + Map.Entry entry = it.next(); + if (entry.getValue() instanceof PluginCommand) { PluginCommand c = (PluginCommand) entry.getValue(); if (c.getPlugin() == plugin) { c.unregister(commandMap); - cmdit.remove(); + it.remove(); } } } @@ -277,6 +277,6 @@ public class PluginUtil { } System.gc(); - return "插件已卸载!"; + return "§a插件 " + name + " 已成功卸载!"; } }