diff --git a/.classpath b/.classpath index 31491b9..1921f5d 100644 --- a/.classpath +++ b/.classpath @@ -21,5 +21,11 @@ + + + + + + diff --git a/pom.xml b/pom.xml index db315c0..db1f72d 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 cn.citycraft Yum - 1.9.7 + 2.0 Yum Minecraft 服务器插件管理系统 @@ -54,8 +54,9 @@ - http://ci.citycraft.cn:8080 - &c去除离线缓存 修复版本更新模块... + http://hs.yumc.pw:8080 + &a全新 2.0 版本 震撼发布... + &a精简大量代码...;&a服务器启动后自动检查可更新插件...;&a优化检测流程... DEBUG UTF-8 diff --git a/src/main/java/cn/citycraft/Yum/Yum.java b/src/main/java/cn/citycraft/Yum/Yum.java index e3451c8..81aa50f 100644 --- a/src/main/java/cn/citycraft/Yum/Yum.java +++ b/src/main/java/cn/citycraft/Yum/Yum.java @@ -3,13 +3,14 @@ */ package cn.citycraft.Yum; +import org.bukkit.Bukkit; import org.bukkit.plugin.java.JavaPlugin; import cn.citycraft.PluginHelper.config.FileConfig; import cn.citycraft.PluginHelper.utils.VersionChecker; import cn.citycraft.Yum.api.YumAPI; +import cn.citycraft.Yum.commands.FileCommand; import cn.citycraft.Yum.commands.YumCommand; -import cn.citycraft.Yum.file.commands.FileCommand; /** * MC插件仓库 @@ -26,12 +27,12 @@ public class Yum extends JavaPlugin { new YumCommand(this); new FileCommand(this); new VersionChecker(this); - YumAPI.updaterepo(); + YumAPI.updaterepo(Bukkit.getConsoleSender()); + YumAPI.updatecheck(Bukkit.getConsoleSender()); } @Override public void onLoad() { config = new FileConfig(this); } - } diff --git a/src/main/java/cn/citycraft/Yum/api/YumAPI.java b/src/main/java/cn/citycraft/Yum/api/YumAPI.java index bf4b07d..5712f80 100644 --- a/src/main/java/cn/citycraft/Yum/api/YumAPI.java +++ b/src/main/java/cn/citycraft/Yum/api/YumAPI.java @@ -25,11 +25,8 @@ import cn.citycraft.Yum.manager.RepositoryManager; */ public class YumAPI { private static DownloadManager download; - private static Plugin main; - private static PluginsManager plugman; - private static RepositoryManager repo; /** @@ -82,6 +79,26 @@ public class YumAPI { return repo; } + public static List getUpdateList(final CommandSender sender) { + final List ulist = new ArrayList<>(); + try { + for (final Entry updateplugin : UpdatePlugin.getUpdateList().entrySet()) { + ulist.add(updateplugin.getValue()); + } + UpdatePlugin.clearList(); + } catch (final Exception | Error e) { + try { + final Map updatelist = UpdatePlugin.getList(); + ulist.addAll(updatelist.keySet()); + UpdatePlugin.getList().clear(); + } catch (final Exception | Error e2) { + sender.sendMessage("§4错误: §c无法检索全体更新列表!"); + sender.sendMessage("§4异常: §c" + e2.getMessage()); + } + } + return ulist; + } + /** * 安装新插件 * @@ -226,32 +243,40 @@ public class YumAPI { * 命令发送者 */ public static void updateall(final CommandSender sender) { - final List ulist = new ArrayList<>(); - try { - for (final Entry updateplugin : UpdatePlugin.getUpdateList().entrySet()) { - ulist.add(updateplugin.getValue()); + main.getServer().getScheduler().runTaskAsynchronously(main, new Runnable() { + @Override + public void run() { + final List ulist = getUpdateList(sender); + if (ulist.size() > 0) { + for (final Plugin updateplugin : ulist) { + sender.sendMessage("§d一键更新: §a开始更新" + updateplugin.getName() + "!"); + updatefromyum(sender, updateplugin, null, true); + } + sender.sendMessage("§d一键更新: §e已下载所有需要升级的插件到 服务器更新 文件夹"); + sender.sendMessage("§d一键更新: §e插件将在重启后自动更新(或使用§b/yum upgrade§e直接升级)!"); + } else { + sender.sendMessage("§6更新: §e未找到需要更新且可以用Yum处理的插件!"); + } } - UpdatePlugin.clearList(); - } catch (final Exception | Error e) { - try { - final Map updatelist = UpdatePlugin.getList(); - ulist.addAll(updatelist.keySet()); - UpdatePlugin.getList().clear(); - } catch (final Exception | Error e2) { - sender.sendMessage("§4错误: §c无法检索全体更新列表!"); - sender.sendMessage("§4异常: §c" + e2.getMessage()); + }); + } + + /** + * 检查是否有可更新插件 + * + * @param sender + * 命令发送者 + */ + public static void updatecheck(final CommandSender sender) { + main.getServer().getScheduler().runTaskLaterAsynchronously(main, new Runnable() { + @Override + public void run() { + final List ulist = getUpdateList(sender); + if (ulist.size() > 0) { + sender.sendMessage("§6[§bYum§6]§e自动更新: §a发现" + ulist.size() + " 个可更新插件 请使用 §b/yum ua §a更新所有插件!"); + } } - } - if (ulist.size() > 0) { - for (final Plugin updateplugin : ulist) { - sender.sendMessage("§d一键更新: §a开始更新" + updateplugin.getName() + "!"); - updatefromyum(sender, updateplugin, null, true); - } - sender.sendMessage("§d一键更新: §e已下载所有需要升级的插件到 服务器更新 文件夹"); - sender.sendMessage("§d一键更新: §e插件将在重启后自动更新(或使用§b/yum upgrade§e直接升级)!"); - } else { - sender.sendMessage("§6更新: §e未找到需要更新且可以用Yum处理的插件!"); - } + }, 100); } /** @@ -300,7 +325,6 @@ public class YumAPI { if (pi != null) { final File pFile = new File(Bukkit.getUpdateFolderFile(), plugman.getPluginFile(plugin).getName()); if (download.run(sender, pi.getUrl(sender, version), pFile)) { - if (!oneKeyUpdate) { sender.sendMessage("§6更新: §e已下载 " + plugin.getName() + " 插件到服务器更新文件夹"); sender.sendMessage("§6更新: §e插件将在重启后自动更新(或使用§b/yum upgrade§e直接升级)!"); @@ -316,11 +340,11 @@ public class YumAPI { /** * 更新Yum源数据 */ - public static void updaterepo() { + public static void updaterepo(final CommandSender sender) { main.getServer().getScheduler().runTaskAsynchronously(main, new Runnable() { @Override public void run() { - repo.updateRepositories(Bukkit.getConsoleSender()); + repo.updateRepositories(sender); } }); } diff --git a/src/main/java/cn/citycraft/Yum/commands/CommandDelete.java b/src/main/java/cn/citycraft/Yum/commands/CommandDelete.java deleted file mode 100644 index 1aabe72..0000000 --- a/src/main/java/cn/citycraft/Yum/commands/CommandDelete.java +++ /dev/null @@ -1,49 +0,0 @@ -/** - * - */ -package cn.citycraft.Yum.commands; - -import org.apache.commons.lang.StringUtils; -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.api.YumAPI; - -/** - * 插件删除命令类 - * - * @author 喵♂呜 - * @since 2015年8月12日下午2:04:05 - */ -public class CommandDelete extends BaseCommand { - Yum main; - - public CommandDelete(final Yum main) { - super("del"); - this.main = main; - setMinimumArguments(1); - setDescription("删除插件"); - setPossibleArguments("<插件名称>"); - } - - @Override - 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) { - final String version = StringUtils.substring(plugin.getDescription().getVersion(), 0, 15); - if (YumAPI.getPlugman().deletePlugin(sender, plugin)) { - sender.sendMessage("§c删除: §a插件 §6" + pluginname + " §a版本 §d" + version + " §a已从服务器卸载并删除!"); - } else { - sender.sendMessage("§c删除: §c插件 " + pluginname + " 卸载或删除时发生错误 删除失败!"); - } - } else { - sender.sendMessage("§c插件 " + pluginname + " 不存在或已卸载!"); - } - } -} diff --git a/src/main/java/cn/citycraft/Yum/commands/CommandFullDelete.java b/src/main/java/cn/citycraft/Yum/commands/CommandFullDelete.java deleted file mode 100644 index 0673004..0000000 --- a/src/main/java/cn/citycraft/Yum/commands/CommandFullDelete.java +++ /dev/null @@ -1,49 +0,0 @@ -/** - * - */ -package cn.citycraft.Yum.commands; - -import org.apache.commons.lang.StringUtils; -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.api.YumAPI; - -/** - * 插件删除命令类 - * - * @author 喵♂呜 - * @since 2015年8月12日下午2:04:05 - */ -public class CommandFullDelete extends BaseCommand { - Yum main; - - public CommandFullDelete(final Yum main) { - super("fdel"); - this.main = main; - setMinimumArguments(1); - setDescription("删除插件以及数据文件夹"); - setPossibleArguments("<插件名称>"); - } - - @Override - 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) { - final String version = StringUtils.substring(plugin.getDescription().getVersion(), 0, 15); - if (YumAPI.getPlugman().fullDeletePlugin(sender, plugin)) { - sender.sendMessage("§c删除: §a插件 §6" + pluginname + " §a版本 §d" + version + " §a已从服务器卸载并删除!"); - } else { - sender.sendMessage("§c删除: §c插件 " + pluginname + " 卸载或删除时发生错误 删除失败!"); - } - } 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 deleted file mode 100644 index 3a8b7b4..0000000 --- a/src/main/java/cn/citycraft/Yum/commands/CommandInfo.java +++ /dev/null @@ -1,82 +0,0 @@ -/** - * - */ -package cn.citycraft.Yum.commands; - -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -import org.apache.commons.lang.StringUtils; -import org.bukkit.command.Command; -import org.bukkit.command.CommandException; -import org.bukkit.command.CommandSender; -import org.bukkit.permissions.Permission; -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.api.YumAPI; - -/** - * 插件删除命令类 - * - * @author 喵♂呜 - * @since 2015年8月12日下午2:04:05 - */ -public class CommandInfo extends BaseCommand { - Yum main; - - /** - * @param name - */ - public CommandInfo(final Yum main) { - super(); - this.main = main; - setMinimumArguments(1); - setDescription("查看插件详情"); - setPossibleArguments("<插件名称>"); - } - - @Override - 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) { - final PluginDescriptionFile desc = plugin.getDescription(); - sender.sendMessage("§6插件名称: §3" + plugin.getName()); - sender.sendMessage("§6插件版本: §3" + StringUtils.substring(plugin.getDescription().getVersion(), 0, 15)); - sender.sendMessage("§6插件作者: §3" + StringUtils.join(desc.getAuthors(), " ")); - sender.sendMessage("§6插件描述: §3" + (desc.getDescription() == null ? "无" : desc.getDescription())); - sender.sendMessage("§6插件依赖: §3" + (desc.getDepend().isEmpty() ? "无" : "")); - StringUtil.sendStringArray(sender, desc.getDepend(), "§6 - §a"); - sender.sendMessage("§6插件软依赖: §3" + (desc.getSoftDepend().isEmpty() ? "无" : "")); - StringUtil.sendStringArray(sender, desc.getSoftDepend(), "§6 - §a"); - final Map> clist = desc.getCommands(); - if (clist != null) { - sender.sendMessage("§6插件注册命令: §3" + (clist.isEmpty() ? "无" : "")); - StringUtil.sendStringArray(sender, clist.keySet(), "§6 - §a"); - } - final List plist = desc.getPermissions(); - if (plist != null) { - sender.sendMessage("§6插件注册权限: " + (plist.isEmpty() ? "无" : "")); - for (final Permission perm : plist) { - sender.sendMessage("§6 - §a" + perm.getName() + "§6 - §e" + (perm.getDescription().isEmpty() ? "无描述" : perm.getDescription())); - } - } - sender.sendMessage("§6插件物理路径: §3" + YumAPI.getPlugman().getPluginFile(plugin).getAbsolutePath()); - } else { - sender.sendMessage("§4错误: §c插件 " + pluginname + " 不存在或已卸载!"); - } - } - - @Override - public List onTabComplete(final CommandSender sender, final Command command, final String label, final String[] args) { - if (!args[0].equalsIgnoreCase("install") && !args[0].equalsIgnoreCase("repo")) { - return StringUtil.copyPartialMatches(args[1], YumAPI.getPlugman().getPluginNames(false), new ArrayList()); - } - return null; - } -} diff --git a/src/main/java/cn/citycraft/Yum/commands/CommandInstall.java b/src/main/java/cn/citycraft/Yum/commands/CommandInstall.java deleted file mode 100644 index 9dde41f..0000000 --- a/src/main/java/cn/citycraft/Yum/commands/CommandInstall.java +++ /dev/null @@ -1,67 +0,0 @@ -/** - * - */ -package cn.citycraft.Yum.commands; - -import java.util.ArrayList; -import java.util.List; - -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.PluginHelper.utils.StringUtil; -import cn.citycraft.Yum.Yum; -import cn.citycraft.Yum.api.YumAPI; - -/** - * 插件安装命令类 - * - * @author 喵♂呜 - * @since 2015年8月12日下午2:04:05 - */ -public class CommandInstall extends BaseCommand { - Yum main; - - /** - * @param name - */ - public CommandInstall(final Yum main) { - super("i"); - this.main = main; - setMinimumArguments(1); - setDescription("安装插件"); - setPossibleArguments("<插件名称>"); - } - - @Override - 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) { - Bukkit.getScheduler().runTaskAsynchronously(main, new Runnable() { - @Override - public void run() { - if (args.length < 2) { - YumAPI.installfromyum(sender, pluginname); - } else { - YumAPI.installfromyum(sender, pluginname, args[1]); - } - } - }); - } else { - sender.sendMessage("§c插件" + pluginname + "已安装在服务器 需要更新请使用yum update " + pluginname + "!"); - } - } - - @Override - public List onTabComplete(final CommandSender sender, final Command command, final String label, final String[] args) { - if (args[0].equalsIgnoreCase("install")) { - return StringUtil.copyPartialMatches(args[1], YumAPI.getRepo().getAllPluginName(), new ArrayList()); - } - return null; - } -} diff --git a/src/main/java/cn/citycraft/Yum/commands/CommandList.java b/src/main/java/cn/citycraft/Yum/commands/CommandList.java deleted file mode 100644 index 591ee37..0000000 --- a/src/main/java/cn/citycraft/Yum/commands/CommandList.java +++ /dev/null @@ -1,41 +0,0 @@ -/** - * - */ -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.api.YumAPI; - -/** - * 插件查看命令类 - * - * @author 喵♂呜 - * @since 2015年8月12日下午2:04:05 - */ -public class CommandList extends BaseCommand { - Yum main; - - /** - * @param name - */ - public CommandList(final Yum main) { - super("l"); - this.main = main; - setDescription("列出已安装插件列表"); - } - - @Override - 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- " + YumAPI.getPlugman().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 deleted file mode 100644 index 664a4b9..0000000 --- a/src/main/java/cn/citycraft/Yum/commands/CommandLoad.java +++ /dev/null @@ -1,46 +0,0 @@ -/** - * - */ -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.api.YumAPI; - -/** - * 插件删除命令类 - * - * @author 喵♂呜 - * @since 2015年8月12日下午2:04:05 - */ -public class CommandLoad extends BaseCommand { - Yum main; - - /** - * @param name - */ - public CommandLoad(final Yum main) { - super(); - this.main = main; - setMinimumArguments(1); - setDescription("载入插件"); - setPossibleArguments("<插件名称>"); - } - - @Override - 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) { - YumAPI.getPlugman().load(sender, pluginname); - } else { - sender.sendMessage("§c错误: 插件 " + pluginname + " 已加载到服务器!"); - } - }; -} diff --git a/src/main/java/cn/citycraft/Yum/commands/CommandReload.java b/src/main/java/cn/citycraft/Yum/commands/CommandReload.java deleted file mode 100644 index 3016b97..0000000 --- a/src/main/java/cn/citycraft/Yum/commands/CommandReload.java +++ /dev/null @@ -1,50 +0,0 @@ -/** - * - */ -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.api.YumAPI; - -/** - * 插件删除命令类 - * - * @author 喵♂呜 - * @since 2015年8月12日下午2:04:05 - */ -public class CommandReload extends BaseCommand { - Yum main; - - /** - * @param name - */ - public CommandReload(final Yum main) { - super(); - this.main = main; - setMinimumArguments(1); - setDescription("重载插件"); - setPossibleArguments("<插件名称|all|*>"); - } - - @Override - 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("*")) { - YumAPI.getPlugman().reloadAll(sender); - return; - } - final Plugin plugin = Bukkit.getServer().getPluginManager().getPlugin(pluginname); - if (plugin != null) { - YumAPI.getPlugman().reload(sender, plugin); - } else { - 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 deleted file mode 100644 index b7dd82d..0000000 --- a/src/main/java/cn/citycraft/Yum/commands/CommandRepo.java +++ /dev/null @@ -1,109 +0,0 @@ -/** - * - */ -package cn.citycraft.Yum.commands; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -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.api.YumAPI; -import cn.citycraft.Yum.manager.RepoSerialization.Repositories; - -/** - * 插件删除命令类 - * - * @author 喵♂呜 - * @since 2015年8月12日下午2:04:05 - */ -public class CommandRepo extends BaseCommand { - Yum main; - - /** - * @param name - */ - public CommandRepo(final Yum main) { - super("r"); - this.main = main; - setMinimumArguments(1); - setDescription("插件源命令"); - setPossibleArguments(" <仓库名称>"); - } - - @Override - public void execute(final CommandSender sender, final Command command, final String label, final String[] args) throws CommandException { - main.getServer().getScheduler().runTaskAsynchronously(main, new Runnable() { - @Override - public void run() { - final String cmd = args[0]; - switch (cmd) { - case "add": - if (args.length == 2) { - if (YumAPI.getRepo().addRepositories(sender, args[1])) { - final String reponame = YumAPI.getRepo().getRepoCache(args[1]).name; - sender.sendMessage("§6仓库: §a源仓库 §e" + reponame + " §a的插件信息已缓存!"); - } else { - sender.sendMessage("§6仓库: §c源地址未找到仓库信息或当前地址已缓存!"); - } - } else { - sender.sendMessage("§6仓库: §c请输入需要添加的源地址!"); - } - break; - case "del": - if (args.length == 2) { - final Repositories delrepo = YumAPI.getRepo().getRepoCache(args[1]); - if (delrepo != null) { - YumAPI.getRepo().delRepositories(sender, args[1]); - sender.sendMessage("§6仓库: §a源仓库 §e" + delrepo.name + " §c已删除 §a请使用 §b/yum repo update §a更新缓存!"); - } else { - 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缓存的插件信息如下 "); - StringUtil.sendStringArray(sender, YumAPI.getRepo().getAllPluginsInfo()); - break; - case "all": - sender.sendMessage("§6仓库: §b缓存的仓库信息如下 "); - StringUtil.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; - } - } - }); - } - - @Override - public List onTabComplete(final CommandSender sender, final Command command, final String label, final String[] args) { - if (args[0].equalsIgnoreCase("repo")) { - if (args.length == 2) { - return StringUtil.copyPartialMatches(args[1], Arrays.asList(new String[] { "add", "all", "list", "delall", "clean", "update", "del" }), new ArrayList()); - } - if (args.length == 3 && (args[1] == "add" || args[1] == "del")) { - return StringUtil.copyPartialMatches(args[2], YumAPI.getRepo().getRepos().keySet(), new ArrayList()); - } - } - return null; - } -} diff --git a/src/main/java/cn/citycraft/Yum/commands/CommandUnload.java b/src/main/java/cn/citycraft/Yum/commands/CommandUnload.java deleted file mode 100644 index 405b725..0000000 --- a/src/main/java/cn/citycraft/Yum/commands/CommandUnload.java +++ /dev/null @@ -1,46 +0,0 @@ -/** - * - */ -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.api.YumAPI; - -/** - * 插件删除命令类 - * - * @author 喵♂呜 - * @since 2015年8月12日下午2:04:05 - */ -public class CommandUnload extends BaseCommand { - Yum main; - - /** - * @param name - */ - public CommandUnload(final Yum main) { - super(); - this.main = main; - setMinimumArguments(1); - setDescription("卸载插件"); - setPossibleArguments("<插件名称>"); - } - - @Override - 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) { - YumAPI.getPlugman().unload(sender, plugin); - } else { - sender.sendMessage("§c插件 " + pluginname + " 不存在或已卸载!"); - } - }; -} diff --git a/src/main/java/cn/citycraft/Yum/commands/CommandUpdate.java b/src/main/java/cn/citycraft/Yum/commands/CommandUpdate.java deleted file mode 100644 index 9e19ea0..0000000 --- a/src/main/java/cn/citycraft/Yum/commands/CommandUpdate.java +++ /dev/null @@ -1,62 +0,0 @@ -/** - * - */ -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.api.YumAPI; - -/** - * @author 喵♂呜 - * @since 2015年8月12日下午2:04:05 - */ -public class CommandUpdate extends BaseCommand { - Yum main; - - public CommandUpdate(final Yum main) { - super("u"); - this.main = main; - setMinimumArguments(0); - setDescription("更新插件或缓存"); - setPossibleArguments("[插件名称] [插件版本]"); - } - - @Override - public void execute(final CommandSender sender, final Command command, final String label, final String[] args) throws CommandException { - switch (args.length) { - case 0: - YumAPI.getRepo().updateRepositories(sender); - sender.sendMessage("§6仓库: §a仓库缓存数据已更新!"); - break; - case 1: - case 2: - final String pluginname = args[0]; - final Plugin plugin = Bukkit.getServer().getPluginManager().getPlugin(pluginname); - sender.sendMessage("§a开始更新插件: " + pluginname); - if (plugin != null) { - Bukkit.getScheduler().runTaskAsynchronously(main, new Runnable() { - @Override - public void run() { - if (args.length < 2) { - YumAPI.updatefromyum(sender, plugin); - } else { - YumAPI.updatefromyum(sender, plugin, args[1]); - } - } - }); - } else { - sender.sendMessage("§c插件" + pluginname + "未安装或已卸载 需要安装请使用/yum install " + pluginname + "!"); - } - break; - default: - sendHelp(sender, label); - } - } -} diff --git a/src/main/java/cn/citycraft/Yum/commands/CommandUpdateAll.java b/src/main/java/cn/citycraft/Yum/commands/CommandUpdateAll.java deleted file mode 100644 index c5e3fdd..0000000 --- a/src/main/java/cn/citycraft/Yum/commands/CommandUpdateAll.java +++ /dev/null @@ -1,38 +0,0 @@ -/** - * - */ -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 cn.citycraft.PluginHelper.commands.BaseCommand; -import cn.citycraft.Yum.Yum; -import cn.citycraft.Yum.api.YumAPI; - -/** - * @author 喵♂呜 - * @since 2015年8月12日下午2:04:05 - */ -public class CommandUpdateAll extends BaseCommand { - Yum main; - - public CommandUpdateAll(final Yum main) { - super("ua"); - this.main = main; - setDescription("更新所有可更新插件"); - } - - @Override - public void execute(final CommandSender sender, final Command command, final String label, final String[] args) throws CommandException { - sender.sendMessage("§d开始更新服务器可更新插件"); - Bukkit.getScheduler().runTaskAsynchronously(main, new Runnable() { - @Override - public void run() { - YumAPI.updateall(sender); - } - }); - }; -} diff --git a/src/main/java/cn/citycraft/Yum/commands/CommandUpgrade.java b/src/main/java/cn/citycraft/Yum/commands/CommandUpgrade.java deleted file mode 100644 index df9fa10..0000000 --- a/src/main/java/cn/citycraft/Yum/commands/CommandUpgrade.java +++ /dev/null @@ -1,53 +0,0 @@ -/** - * - */ -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.api.YumAPI; - -/** - * @author 喵♂呜 - * @since 2015年8月12日下午2:04:05 - */ -public class CommandUpgrade extends BaseCommand { - Yum main; - - /** - * @param name - */ - public CommandUpgrade(final Yum main) { - super("ug"); - this.main = main; - setDescription("升级插件"); - setPossibleArguments("[插件名称]"); - } - - @Override - 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() { - if (args.length == 0) { - YumAPI.getPlugman().upgrade(sender); - } else { - final String pluginname = args[0]; - final Plugin plugin = Bukkit.getServer().getPluginManager().getPlugin(pluginname); - sender.sendMessage("§a开始升级插件: " + pluginname); - if (plugin != null) { - YumAPI.upgrade(sender, plugin); - } else { - sender.sendMessage("§c插件未安装或已卸载 需要安装请使用yum install " + pluginname + "!"); - } - } - } - }); - }; -} diff --git a/src/main/java/cn/citycraft/Yum/commands/FileCommand.java b/src/main/java/cn/citycraft/Yum/commands/FileCommand.java new file mode 100644 index 0000000..1214925 --- /dev/null +++ b/src/main/java/cn/citycraft/Yum/commands/FileCommand.java @@ -0,0 +1,149 @@ +package cn.citycraft.Yum.commands; + +import java.io.File; + +import org.bukkit.Bukkit; +import org.bukkit.command.CommandSender; + +import cn.citycraft.PluginHelper.commands.HandlerCommand; +import cn.citycraft.PluginHelper.commands.HandlerCommands; +import cn.citycraft.PluginHelper.commands.InvokeCommandEvent; +import cn.citycraft.PluginHelper.commands.InvokeSubCommand; +import cn.citycraft.PluginHelper.utils.FileUtil; +import cn.citycraft.Yum.Yum; +import cn.citycraft.Yum.api.YumAPI; +import cn.citycraft.Yum.manager.DownloadManager; + +/** + * File命令基类 + * + * @since 2016年1月9日 上午10:02:39 + * @author 喵♂呜 + */ +public class FileCommand implements HandlerCommands { + Yum plugin; + DownloadManager dl; + + public FileCommand(final Yum yum) { + plugin = yum; + dl = YumAPI.getDownload(); + final InvokeSubCommand cmdhandler = new InvokeSubCommand(yum, "file"); + cmdhandler.setAllCommandOnlyConsole(yum.config.getBoolean("onlyFileCommandConsole", true)); + cmdhandler.registerCommands(this); + } + + @HandlerCommand(name = "delete", aliases = { "del" }, minimumArguments = 1, description = "删除文件(服务器JAR为根目录)", possibleArguments = "<文件相对目录>") + public void delete(final InvokeCommandEvent e) { + final String[] args = e.getArgs(); + final String fpath = args[0]; + final File file = new File(fpath); + final CommandSender sender = e.getSender(); + if (!file.exists()) { + sender.sendMessage("§c文件 " + file.getAbsolutePath() + " 不存在!"); + } else { + if (file.isDirectory()) { + sender.sendMessage("§e" + file.getAbsolutePath() + " §c是一个目录 请使用file rm!"); + return; + } + try { + sender.sendMessage("§d文件 §e" + file.getAbsolutePath() + " " + (file.delete() ? "§a删除成功!" : "§c删除失败!")); + } catch (final Exception ex) { + sender.sendMessage("§d文件 §e" + file.getAbsolutePath() + " 删除失败: " + ex.getMessage()); + } + } + } + + @HandlerCommand(name = "download", aliases = { "d" }, minimumArguments = 1, description = "下载文件(默认保存到服务器更新文件夹)", possibleArguments = "<下载地址> [保存文件路径]") + public void download(final InvokeCommandEvent e) { + final String[] args = e.getArgs(); + String urlstr = args[0]; + if (!urlstr.startsWith("http")) { + urlstr = "http://" + urlstr; + } + File file = null; + if (args.length == 2) { + file = new File(args[1]); + } else { + file = new File(Bukkit.getUpdateFolderFile(), dl.getFileName(urlstr)); + } + dl.run(e.getSender(), urlstr, file); + } + + @HandlerCommand(name = "ls", aliases = { "l" }, minimumArguments = 1, description = "列出当前目录(服务器JAR为根目录)", possibleArguments = "<相对目录>") + public void ls(final InvokeCommandEvent e) { + final String[] args = e.getArgs(); + final CommandSender sender = e.getSender(); + File dir = new File("."); + if (args.length == 1) { + dir = new File(args[0]); + } + if (!dir.isDirectory()) { + sender.sendMessage("§6路径: §e " + dir.getAbsolutePath() + " §c不是一个目录!"); + return; + } + final StringBuffer sb = new StringBuffer(); + for (final File file : dir.listFiles()) { + if (file.isDirectory()) { + sb.append("§b"); + } else { + sb.append("§a"); + } + sb.append(file.getName() + " "); + } + final String filelist = sb.toString(); + if (filelist.isEmpty()) { + sender.sendMessage("§6目录: §e" + dir.getAbsolutePath() + " §c下没有文件或文件夹!"); + } else { + sender.sendMessage("§6目录: §e" + dir.getAbsolutePath() + " §a存在如下文件!"); + sender.sendMessage(sb.toString()); + } + } + + @HandlerCommand(name = "rename", aliases = { "rn" }, minimumArguments = 2, description = "重命名文件(服务器JAR为根目录)", possibleArguments = "<文件相对路径> <文件名称>") + public void rename(final InvokeCommandEvent e) { + final String[] args = e.getArgs(); + final CommandSender sender = e.getSender(); + final String fpath = args[0]; + final File file = new File(fpath); + if (!file.exists()) { + sender.sendMessage("§c文件 " + file.getAbsolutePath() + " 不存在!"); + } else { + try { + final File newFile = new File(file.getParentFile(), args[1]); + file.renameTo(newFile); + sender.sendMessage("§a文件 §e" + file.getAbsolutePath() + " §a重命名为 §d" + newFile.getAbsolutePath()); + } catch (final Exception ex) { + sender.sendMessage("§c文件 §e" + file.getAbsolutePath() + " §c重命名失败: " + ex.getMessage()); + } + } + } + + @HandlerCommand(name = "rm", minimumArguments = 1, description = "删除文件夹(服务器JAR为根目录)", possibleArguments = "<相对目录>") + public void rm(final InvokeCommandEvent e) { + final String[] args = e.getArgs(); + final CommandSender sender = e.getSender(); + final String fpath = args[0]; + final File file = new File(fpath); + if (!file.exists()) { + sender.sendMessage("§c目录 " + file.getAbsolutePath() + " 不存在!"); + } else { + if (!file.isDirectory()) { + sender.sendMessage("§d路径 §e" + file.getAbsolutePath() + " §c是一个文件 请使用file delete!"); + return; + } + for (final String name : plugin.config.getStringList("blacklist")) { + if (file.getAbsolutePath().toLowerCase().endsWith(name)) { + sender.sendMessage("§d路径 §e" + file.getAbsolutePath() + " §c不允许被删除!"); + return; + } + } + if (file.listFiles().length != 0 && !(args.length > 1 && args[1].equalsIgnoreCase("-rf"))) { + sender.sendMessage("§d目录 §e" + file.getAbsolutePath() + " §c不为空!"); + sender.sendMessage("§c请使用 §a/file rm " + fpath + " -rf §c强行删除!"); + return; + } + sender.sendMessage("§d目录 §e" + file.getAbsolutePath() + " " + (FileUtil.deleteDir(sender, file) ? "§a删除成功!" : "§c删除失败!")); + } + } + +} diff --git a/src/main/java/cn/citycraft/Yum/commands/YumCommand.java b/src/main/java/cn/citycraft/Yum/commands/YumCommand.java index 581a818..d65887f 100644 --- a/src/main/java/cn/citycraft/Yum/commands/YumCommand.java +++ b/src/main/java/cn/citycraft/Yum/commands/YumCommand.java @@ -1,29 +1,333 @@ package cn.citycraft.Yum.commands; -import cn.citycraft.PluginHelper.commands.HandlerSubCommand; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Map; + +import org.apache.commons.lang.StringUtils; +import org.bukkit.Bukkit; +import org.bukkit.command.CommandSender; +import org.bukkit.permissions.Permission; +import org.bukkit.plugin.Plugin; +import org.bukkit.plugin.PluginDescriptionFile; + +import cn.citycraft.PluginHelper.commands.HandlerCommand; +import cn.citycraft.PluginHelper.commands.HandlerCommands; +import cn.citycraft.PluginHelper.commands.HandlerTabComplete; +import cn.citycraft.PluginHelper.commands.InvokeCommandEvent; +import cn.citycraft.PluginHelper.commands.InvokeSubCommand; +import cn.citycraft.PluginHelper.utils.StringUtil; import cn.citycraft.Yum.Yum; +import cn.citycraft.Yum.api.YumAPI; +import cn.citycraft.Yum.manager.PluginsManager; +import cn.citycraft.Yum.manager.RepoSerialization.Repositories; +import cn.citycraft.Yum.manager.RepositoryManager; /** * Yum命令基类 - * + * * @since 2016年1月9日 上午10:02:24 * @author 喵♂呜 */ -public class YumCommand { +public class YumCommand implements HandlerCommands { + Yum main; + RepositoryManager repo; + PluginsManager plugman; + public YumCommand(final Yum yum) { - final HandlerSubCommand cmdhandler = new HandlerSubCommand(yum, "yum"); + main = yum; + repo = YumAPI.getRepo(); + plugman = YumAPI.getPlugman(); + final InvokeSubCommand cmdhandler = new InvokeSubCommand(yum, "yum"); cmdhandler.setAllCommandOnlyConsole(yum.config.getBoolean("onlyCommandConsole", false)); - cmdhandler.registerCommand(new CommandList(yum)); - cmdhandler.registerCommand(new CommandInstall(yum)); - cmdhandler.registerCommand(new CommandUpdate(yum)); - cmdhandler.registerCommand(new CommandUpdateAll(yum)); - cmdhandler.registerCommand(new CommandDelete(yum)); - cmdhandler.registerCommand(new CommandFullDelete(yum)); - cmdhandler.registerCommand(new CommandInfo(yum)); - cmdhandler.registerCommand(new CommandRepo(yum)); - cmdhandler.registerCommand(new CommandReload(yum)); - cmdhandler.registerCommand(new CommandLoad(yum)); - cmdhandler.registerCommand(new CommandUnload(yum)); - cmdhandler.registerCommand(new CommandUpgrade(yum)); + cmdhandler.registerCommands(this); } + + @HandlerCommand(name = "delete", aliases = { "del" }, minimumArguments = 1, description = "删除插件", possibleArguments = "<插件名称>") + public void delete(final InvokeCommandEvent e) { + final String pluginname = e.getArgs()[0]; + final CommandSender sender = e.getSender(); + final Plugin plugin = Bukkit.getServer().getPluginManager().getPlugin(pluginname); + if (plugin != null) { + final String version = StringUtils.substring(plugin.getDescription().getVersion(), 0, 15); + if (plugman.deletePlugin(sender, plugin)) { + sender.sendMessage("§c删除: §a插件 §6" + pluginname + " §a版本 §d" + version + " §a已从服务器卸载并删除!"); + } else { + sender.sendMessage("§c删除: §c插件 " + pluginname + " 卸载或删除时发生错误 删除失败!"); + } + } else { + sender.sendMessage("§c插件 " + pluginname + " 不存在或已卸载!"); + } + } + + @HandlerCommand(name = "fulldelete", aliases = { "fdel" }, minimumArguments = 1, description = "删除插件以及数据文件夹", possibleArguments = "<插件名称>") + public void fulldelete(final InvokeCommandEvent e) { + final String pluginname = e.getArgs()[0]; + final CommandSender sender = e.getSender(); + final Plugin plugin = Bukkit.getServer().getPluginManager().getPlugin(pluginname); + if (plugin != null) { + final String version = StringUtils.substring(plugin.getDescription().getVersion(), 0, 15); + if (plugman.fullDeletePlugin(sender, plugin)) { + sender.sendMessage("§c删除: §a插件 §6" + pluginname + " §a版本 §d" + version + " §a已从服务器卸载并删除!"); + } else { + sender.sendMessage("§c删除: §c插件 " + pluginname + " 卸载或删除时发生错误 删除失败!"); + } + } else { + sender.sendMessage("§c插件 " + pluginname + " 不存在或已卸载!"); + } + } + + @HandlerCommand(name = "info", minimumArguments = 1, description = "查看插件详情", possibleArguments = "<插件名称>") + public void info(final InvokeCommandEvent e) { + final String pluginname = e.getArgs()[0]; + final CommandSender sender = e.getSender(); + final Plugin plugin = Bukkit.getServer().getPluginManager().getPlugin(pluginname); + if (plugin != null) { + final PluginDescriptionFile desc = plugin.getDescription(); + sender.sendMessage("§6插件名称: §3" + plugin.getName()); + sender.sendMessage("§6插件版本: §3" + StringUtils.substring(plugin.getDescription().getVersion(), 0, 15)); + sender.sendMessage("§6插件作者: §3" + StringUtils.join(desc.getAuthors(), " ")); + sender.sendMessage("§6插件描述: §3" + (desc.getDescription() == null ? "无" : desc.getDescription())); + sender.sendMessage("§6插件依赖: §3" + (desc.getDepend().isEmpty() ? "无" : "")); + StringUtil.sendStringArray(sender, desc.getDepend(), "§6 - §a"); + sender.sendMessage("§6插件软依赖: §3" + (desc.getSoftDepend().isEmpty() ? "无" : "")); + StringUtil.sendStringArray(sender, desc.getSoftDepend(), "§6 - §a"); + final Map> clist = desc.getCommands(); + if (clist != null) { + sender.sendMessage("§6插件注册命令: §3" + (clist.isEmpty() ? "无" : "")); + StringUtil.sendStringArray(sender, clist.keySet(), "§6 - §a"); + } + final List plist = desc.getPermissions(); + if (plist != null) { + sender.sendMessage("§6插件注册权限: " + (plist.isEmpty() ? "无" : "")); + for (final Permission perm : plist) { + sender.sendMessage("§6 - §a" + perm.getName() + "§6 - §e" + (perm.getDescription().isEmpty() ? "无描述" : perm.getDescription())); + } + } + sender.sendMessage("§6插件物理路径: §3" + plugman.getPluginFile(plugin).getAbsolutePath()); + } else { + sender.sendMessage("§4错误: §c插件 " + pluginname + " 不存在或已卸载!"); + } + } + + @HandlerCommand(name = "install", aliases = { "i" }, minimumArguments = 1, description = "安装插件", possibleArguments = "<插件名称>") + public void install(final InvokeCommandEvent e) { + final String[] args = e.getArgs(); + final CommandSender sender = e.getSender(); + final String pluginname = args[0]; + final Plugin plugin = Bukkit.getServer().getPluginManager().getPlugin(pluginname); + if (plugin == null) { + Bukkit.getScheduler().runTaskAsynchronously(main, new Runnable() { + @Override + public void run() { + if (args.length < 2) { + YumAPI.installfromyum(sender, pluginname); + } else { + YumAPI.installfromyum(sender, pluginname, args[1]); + } + } + }); + } else { + sender.sendMessage("§c插件" + pluginname + "已安装在服务器 需要更新请使用yum update " + pluginname + "!"); + } + } + + @HandlerCommand(name = "list", aliases = { "l" }, description = "列出已安装插件列表") + public void list(final InvokeCommandEvent e) { + final CommandSender sender = e.getSender(); + sender.sendMessage("§6[Yum仓库]§3服务器已安装插件: "); + for (final Plugin plugin : Bukkit.getPluginManager().getPlugins()) { + sender.sendMessage("§6- " + plugman.getFormattedName(plugin, true)); + } + } + + @HandlerTabComplete() + public List listtab(final InvokeCommandEvent e) { + final String[] args = e.getArgs(); + if (!args[0].equalsIgnoreCase("install") && !args[0].equalsIgnoreCase("repo")) { + return StringUtil.copyPartialMatches(args[1], plugman.getPluginNames(false), new ArrayList()); + } + if (args[0].equalsIgnoreCase("install")) { + return StringUtil.copyPartialMatches(args[1], repo.getAllPluginName(), new ArrayList()); + } + if (args[0].equalsIgnoreCase("repo")) { + if (args.length == 2) { + return StringUtil.copyPartialMatches(args[1], Arrays.asList(new String[] { "add", "all", "list", "delall", "clean", "update", "del" }), new ArrayList()); + } + if (args.length == 3 && (args[1] == "add" || args[1] == "del")) { + return StringUtil.copyPartialMatches(args[2], repo.getRepos().keySet(), new ArrayList()); + } + } + return null; + } + + @HandlerCommand(name = "load", minimumArguments = 1, description = "载入插件", possibleArguments = "<插件名称>") + public void load(final InvokeCommandEvent e) { + final CommandSender sender = e.getSender(); + final String pluginname = e.getArgs()[0]; + final Plugin plugin = Bukkit.getServer().getPluginManager().getPlugin(pluginname); + if (plugin == null) { + plugman.load(sender, pluginname); + } else { + sender.sendMessage("§c错误: 插件 " + pluginname + " 已加载到服务器!"); + } + } + + @HandlerCommand(name = "reload", aliases = { "re" }, minimumArguments = 1, description = "重载插件", possibleArguments = "<插件名称|all|*>") + public void reload(final InvokeCommandEvent e) { + final CommandSender sender = e.getSender(); + final String pluginname = e.getArgs()[0]; + if (pluginname.equalsIgnoreCase("all") || pluginname.equalsIgnoreCase("*")) { + plugman.reloadAll(sender); + return; + } + final Plugin plugin = Bukkit.getServer().getPluginManager().getPlugin(pluginname); + if (plugin != null) { + plugman.reload(sender, plugin); + } else { + sender.sendMessage("§c插件 " + pluginname + " 不存在或已卸载!"); + } + } + + @HandlerCommand(name = "repo", aliases = { "r" }, minimumArguments = 1, description = "插件源命令", possibleArguments = " <仓库名称>") + public void repo(final InvokeCommandEvent e) { + final String[] args = e.getArgs(); + final CommandSender sender = e.getSender(); + main.getServer().getScheduler().runTaskAsynchronously(main, new Runnable() { + @Override + public void run() { + final String cmd = args[0]; + switch (cmd) { + case "add": + if (args.length == 2) { + if (repo.addRepositories(sender, args[1])) { + final String reponame = repo.getRepoCache(args[1]).name; + sender.sendMessage("§6仓库: §a源仓库 §e" + reponame + " §a的插件信息已缓存!"); + } else { + sender.sendMessage("§6仓库: §c源地址未找到仓库信息或当前地址已缓存!"); + } + } else { + sender.sendMessage("§6仓库: §c请输入需要添加的源地址!"); + } + break; + case "del": + if (args.length == 2) { + final Repositories delrepo = repo.getRepoCache(args[1]); + if (delrepo != null) { + repo.delRepositories(sender, args[1]); + sender.sendMessage("§6仓库: §a源仓库 §e" + delrepo.name + " §c已删除 §a请使用 §b/yum repo update §a更新缓存!"); + } else { + sender.sendMessage("§6仓库: §c源地址未找到!"); + } + } else { + sender.sendMessage("§6仓库: §c请输入需要删除的源地址!"); + } + break; + case "delall": + repo.getRepoCache().getRepos().clear(); + sender.sendMessage("§6仓库: §a缓存的仓库信息已清理!"); + break; + case "list": + sender.sendMessage("§6仓库: §b缓存的插件信息如下 "); + StringUtil.sendStringArray(sender, repo.getAllPluginsInfo()); + break; + case "all": + sender.sendMessage("§6仓库: §b缓存的仓库信息如下 "); + StringUtil.sendStringArray(sender, repo.getRepoCache().getAllRepoInfo()); + break; + case "clean": + repo.clean(); + sender.sendMessage("§6仓库: §a缓存的插件信息已清理!"); + break; + case "update": + repo.updateRepositories(sender); + sender.sendMessage("§6仓库: §a仓库缓存数据已更新!"); + break; + } + } + }); + } + + @HandlerCommand(name = "unload", minimumArguments = 1, description = "卸载插件", possibleArguments = "<插件名称>") + public void unload(final InvokeCommandEvent e) { + final String pluginname = e.getArgs()[0]; + final CommandSender sender = e.getSender(); + final Plugin plugin = Bukkit.getServer().getPluginManager().getPlugin(pluginname); + if (plugin != null) { + plugman.unload(sender, plugin); + } else { + sender.sendMessage("§c插件 " + pluginname + " 不存在或已卸载!"); + } + } + + @HandlerCommand(name = "update", aliases = { "u" }, description = "更新插件或缓存", possibleArguments = "[插件名称] [插件版本]") + public void update(final InvokeCommandEvent e) { + final String[] args = e.getArgs(); + final CommandSender sender = e.getSender(); + final String pluginname = args[0]; + switch (args.length) { + case 0: + repo.updateRepositories(sender); + sender.sendMessage("§6仓库: §a仓库缓存数据已更新!"); + break; + case 1: + case 2: + final Plugin plugin = Bukkit.getServer().getPluginManager().getPlugin(pluginname); + sender.sendMessage("§a开始更新插件: " + pluginname); + if (plugin != null) { + Bukkit.getScheduler().runTaskAsynchronously(main, new Runnable() { + @Override + public void run() { + if (args.length < 2) { + YumAPI.updatefromyum(sender, plugin); + } else { + YumAPI.updatefromyum(sender, plugin, args[1]); + } + } + }); + } else { + sender.sendMessage("§c插件" + pluginname + "未安装或已卸载 需要安装请使用/yum install " + pluginname + "!"); + } + break; + default: + sender.sendMessage("§c命令参数错误!"); + } + } + + @HandlerCommand(name = "updateall", aliases = { "ua" }, description = "更新所有可更新插件") + public void updateall(final InvokeCommandEvent e) { + final CommandSender sender = e.getSender(); + sender.sendMessage("§d开始更新服务器可更新插件"); + Bukkit.getScheduler().runTaskAsynchronously(main, new Runnable() { + @Override + public void run() { + YumAPI.updateall(sender); + } + }); + } + + @HandlerCommand(name = "upgrade", aliases = { "ug" }, description = "升级或载入插件", possibleArguments = "[插件名称]") + public void upgrade(final InvokeCommandEvent e) { + final String[] args = e.getArgs(); + final CommandSender sender = e.getSender(); + Bukkit.getScheduler().runTaskAsynchronously(main, new Runnable() { + @Override + public void run() { + if (args.length == 0) { + plugman.upgrade(sender); + } else { + final String pluginname = args[0]; + final Plugin plugin = Bukkit.getServer().getPluginManager().getPlugin(pluginname); + sender.sendMessage("§a开始升级插件: " + pluginname); + if (plugin != null) { + YumAPI.upgrade(sender, plugin); + } else { + sender.sendMessage("§c插件未安装或已卸载 需要安装请使用yum install " + pluginname + "!"); + } + } + } + }); + } + } diff --git a/src/main/java/cn/citycraft/Yum/file/commands/CommandDelete.java b/src/main/java/cn/citycraft/Yum/file/commands/CommandDelete.java deleted file mode 100644 index 7a79114..0000000 --- a/src/main/java/cn/citycraft/Yum/file/commands/CommandDelete.java +++ /dev/null @@ -1,47 +0,0 @@ -/** - * - */ -package cn.citycraft.Yum.file.commands; - -import java.io.File; - -import org.bukkit.command.Command; -import org.bukkit.command.CommandException; -import org.bukkit.command.CommandSender; - -import cn.citycraft.PluginHelper.commands.BaseCommand; -import cn.citycraft.Yum.Yum; - -/** - * 插件删除命令类 - * - * @author 喵♂呜 - * @since 2015年8月12日下午2:04:05 - */ -public class CommandDelete extends BaseCommand { - public CommandDelete(final Yum main) { - super("del"); - setMinimumArguments(1); - setDescription("删除文件(服务器JAR为根目录)"); - setPossibleArguments("<文件相对目录>"); - } - - @Override - public void execute(final CommandSender sender, final Command command, final String label, final String[] args) throws CommandException { - final String fpath = args[0]; - final File file = new File(fpath); - if (!file.exists()) { - sendMessage(sender, "§c文件 " + file.getAbsolutePath() + " 不存在!"); - } else { - if (file.isDirectory()) { - sendMessage(sender, "§e" + file.getAbsolutePath() + " §c是一个目录 请使用file rm!"); - return; - } - try { - sendMessage(sender, "§d文件 §e" + file.getAbsolutePath() + " " + (file.delete() ? "§a删除成功!" : "§c删除失败!")); - } catch (final Exception e) { - sendMessage(sender, "§d文件 §e" + file.getAbsolutePath() + " 删除失败: " + e.getMessage()); - } - } - } -} diff --git a/src/main/java/cn/citycraft/Yum/file/commands/CommandDownLoad.java b/src/main/java/cn/citycraft/Yum/file/commands/CommandDownLoad.java deleted file mode 100644 index 107996c..0000000 --- a/src/main/java/cn/citycraft/Yum/file/commands/CommandDownLoad.java +++ /dev/null @@ -1,51 +0,0 @@ -/** - * - */ -package cn.citycraft.Yum.file.commands; - -import java.io.File; - -import org.bukkit.Bukkit; -import org.bukkit.command.Command; -import org.bukkit.command.CommandException; -import org.bukkit.command.CommandSender; - -import cn.citycraft.PluginHelper.commands.BaseCommand; -import cn.citycraft.Yum.Yum; -import cn.citycraft.Yum.api.YumAPI; -import cn.citycraft.Yum.manager.DownloadManager; - -/** - * 插件删除命令类 - * - * @author 喵♂呜 - * @since 2015年8月12日下午2:04:05 - */ -public class CommandDownLoad extends BaseCommand { - Yum main; - DownloadManager dl; - - public CommandDownLoad(final Yum main) { - super("d"); - this.main = main; - dl = YumAPI.getDownload(); - setMinimumArguments(1); - setDescription("下载文件(默认保存到服务器更新文件夹)"); - setPossibleArguments("<下载地址> [保存文件路径]"); - } - - @Override - public void execute(final CommandSender sender, final Command command, final String label, final String[] args) throws CommandException { - String urlstr = args[0]; - if (!urlstr.startsWith("http")) { - urlstr = "http://" + urlstr; - } - File file = null; - if (args.length == 2) { - file = new File(args[1]); - } else { - file = new File(Bukkit.getUpdateFolderFile(), dl.getFileName(urlstr)); - } - dl.run(sender, urlstr, file); - } -} diff --git a/src/main/java/cn/citycraft/Yum/file/commands/CommandLs.java b/src/main/java/cn/citycraft/Yum/file/commands/CommandLs.java deleted file mode 100644 index 87c2040..0000000 --- a/src/main/java/cn/citycraft/Yum/file/commands/CommandLs.java +++ /dev/null @@ -1,56 +0,0 @@ -/** - * - */ -package cn.citycraft.Yum.file.commands; - -import java.io.File; - -import org.bukkit.command.Command; -import org.bukkit.command.CommandException; -import org.bukkit.command.CommandSender; - -import cn.citycraft.PluginHelper.commands.BaseCommand; -import cn.citycraft.Yum.Yum; - -/** - * 插件删除命令类 - * - * @author 喵♂呜 - * @since 2015年8月12日下午2:04:05 - */ -public class CommandLs extends BaseCommand { - - public CommandLs(final Yum main) { - super("l"); - setDescription("列出当前目录(服务器JAR为根目录)"); - setPossibleArguments("<相对目录>"); - } - - @Override - public void execute(final CommandSender sender, final Command command, final String label, final String[] args) throws CommandException { - File dir = new File("."); - if (args.length == 1) { - dir = new File(args[0]); - } - if (!dir.isDirectory()) { - sendMessage(sender, "§6路径: §e " + dir.getAbsolutePath() + " §c不是一个目录!"); - return; - } - final StringBuffer sb = new StringBuffer(); - for (final File file : dir.listFiles()) { - if (file.isDirectory()) { - sb.append("§b"); - } else { - sb.append("§a"); - } - sb.append(file.getName() + " "); - } - final String filelist = sb.toString(); - if (filelist.isEmpty()) { - sendMessage(sender, "§6目录: §e" + dir.getAbsolutePath() + " §c下没有文件或文件夹!"); - } else { - sendMessage(sender, "§6目录: §e" + dir.getAbsolutePath() + " §a存在如下文件!"); - sendMessage(sender, sb.toString()); - } - } -} diff --git a/src/main/java/cn/citycraft/Yum/file/commands/CommandRename.java b/src/main/java/cn/citycraft/Yum/file/commands/CommandRename.java deleted file mode 100644 index cfb84df..0000000 --- a/src/main/java/cn/citycraft/Yum/file/commands/CommandRename.java +++ /dev/null @@ -1,45 +0,0 @@ -/** - * - */ -package cn.citycraft.Yum.file.commands; - -import java.io.File; - -import org.bukkit.command.Command; -import org.bukkit.command.CommandException; -import org.bukkit.command.CommandSender; - -import cn.citycraft.PluginHelper.commands.BaseCommand; -import cn.citycraft.Yum.Yum; - -/** - * 插件删除命令类 - * - * @author 喵♂呜 - * @since 2015年8月12日下午2:04:05 - */ -public class CommandRename extends BaseCommand { - public CommandRename(final Yum main) { - super("rn"); - setMinimumArguments(2); - setDescription("重命名文件(服务器JAR为根目录)"); - setPossibleArguments("<文件相对目录> <文件名称>"); - } - - @Override - public void execute(final CommandSender sender, final Command command, final String label, final String[] args) throws CommandException { - final String fpath = args[0]; - final File file = new File(fpath); - if (!file.exists()) { - sendMessage(sender, "§c文件 " + file.getAbsolutePath() + " 不存在!"); - } else { - try { - final File newFile = new File(file.getParentFile(), args[1]); - file.renameTo(newFile); - sendMessage(sender, "§a文件 §e" + file.getAbsolutePath() + " §a重命名为 §d" + newFile.getAbsolutePath()); - } catch (final Exception e) { - sendMessage(sender, "§c文件 §e" + file.getAbsolutePath() + " §c重命名失败: " + e.getMessage()); - } - } - } -} diff --git a/src/main/java/cn/citycraft/Yum/file/commands/CommandRm.java b/src/main/java/cn/citycraft/Yum/file/commands/CommandRm.java deleted file mode 100644 index 0fe9275..0000000 --- a/src/main/java/cn/citycraft/Yum/file/commands/CommandRm.java +++ /dev/null @@ -1,58 +0,0 @@ -/** - * - */ -package cn.citycraft.Yum.file.commands; - -import java.io.File; - -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.FileUtil; -import cn.citycraft.Yum.Yum; - -/** - * 插件删除命令类 - * - * @author 喵♂呜 - * @since 2015年8月12日下午2:04:05 - */ -public class CommandRm extends BaseCommand { - Yum plugin; - - public CommandRm(final Yum main) { - super(); - plugin = main; - setMinimumArguments(1); - setDescription("删除文件夹(服务器JAR为根目录)"); - setPossibleArguments("<文件相对目录>"); - } - - @Override - public void execute(final CommandSender sender, final Command command, final String label, final String[] args) throws CommandException { - final String fpath = args[0]; - final File file = new File(fpath); - if (!file.exists()) { - sendMessage(sender, "§c目录 " + file.getAbsolutePath() + " 不存在!"); - } else { - if (!file.isDirectory()) { - sendMessage(sender, "§d路径 §e" + file.getAbsolutePath() + " §c是一个文件 请使用file delete!"); - return; - } - for (final String name : plugin.config.getStringList("blacklist")) { - if (file.getAbsolutePath().toLowerCase().endsWith(name)) { - sendMessage(sender, "§d路径 §e" + file.getAbsolutePath() + " §c不允许被删除!"); - return; - } - } - if (file.listFiles().length != 0 && !(args.length > 1 && args[1].equalsIgnoreCase("-rf"))) { - sendMessage(sender, "§d目录 §e" + file.getAbsolutePath() + " §c不为空!"); - sendMessage(sender, "§c请使用 §a/file rm " + fpath + " -rf §c强行删除!"); - return; - } - sendMessage(sender, "§d目录 §e" + file.getAbsolutePath() + " " + (FileUtil.deleteDir(sender, file) ? "§a删除成功!" : "§c删除失败!")); - } - } -} diff --git a/src/main/java/cn/citycraft/Yum/file/commands/FileCommand.java b/src/main/java/cn/citycraft/Yum/file/commands/FileCommand.java deleted file mode 100644 index 4274bba..0000000 --- a/src/main/java/cn/citycraft/Yum/file/commands/FileCommand.java +++ /dev/null @@ -1,22 +0,0 @@ -package cn.citycraft.Yum.file.commands; - -import cn.citycraft.PluginHelper.commands.HandlerSubCommand; -import cn.citycraft.Yum.Yum; - -/** - * File命令基类 - * - * @since 2016年1月9日 上午10:02:39 - * @author 喵♂呜 - */ -public class FileCommand { - public FileCommand(final Yum yum) { - final HandlerSubCommand cmdhandler = new HandlerSubCommand(yum, "file"); - cmdhandler.setAllCommandOnlyConsole(yum.config.getBoolean("onlyFileCommandConsole", true)); - cmdhandler.registerCommand(new CommandDownLoad(yum)); - cmdhandler.registerCommand(new CommandDelete(yum)); - cmdhandler.registerCommand(new CommandRename(yum)); - cmdhandler.registerCommand(new CommandRm(yum)); - cmdhandler.registerCommand(new CommandLs(yum)); - } -} diff --git a/src/main/java/cn/citycraft/Yum/manager/PluginInfo.java b/src/main/java/cn/citycraft/Yum/manager/PluginInfo.java index 1f86cb9..2e47a9e 100644 --- a/src/main/java/cn/citycraft/Yum/manager/PluginInfo.java +++ b/src/main/java/cn/citycraft/Yum/manager/PluginInfo.java @@ -1,5 +1,7 @@ package cn.citycraft.Yum.manager; +import java.io.Serializable; + import org.bukkit.Bukkit; import org.bukkit.command.CommandSender; @@ -9,7 +11,7 @@ import cn.citycraft.Yum.manager.RepoSerialization.Plugin; import cn.citycraft.Yum.manager.RepoSerialization.TagInfo; import cn.citycraft.Yum.manager.RepoSerialization.URLType; -public class PluginInfo { +public class PluginInfo implements Serializable { public static final String NMSVersion = Bukkit.getServer().getClass().getPackage().getName().split("\\.")[3]; public String branch; diff --git a/src/main/java/cn/citycraft/Yum/manager/RepoCache.java b/src/main/java/cn/citycraft/Yum/manager/RepoCache.java index 453b790..7a1a3c7 100644 --- a/src/main/java/cn/citycraft/Yum/manager/RepoCache.java +++ b/src/main/java/cn/citycraft/Yum/manager/RepoCache.java @@ -1,5 +1,6 @@ package cn.citycraft.Yum.manager; +import java.io.Serializable; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -11,7 +12,7 @@ import cn.citycraft.PluginHelper.jsonresult.JsonHandle; import cn.citycraft.PluginHelper.utils.IOUtil; import cn.citycraft.Yum.manager.RepoSerialization.Repositories; -public class RepoCache { +public class RepoCache implements Serializable { PluginHelperLogger logger = PluginHelperLogger.getLogger(); Map plugins = new HashMap(); Map repos = new HashMap(); diff --git a/src/main/java/cn/citycraft/Yum/manager/RepoSerialization.java b/src/main/java/cn/citycraft/Yum/manager/RepoSerialization.java index 7a6b794..406d6bc 100644 --- a/src/main/java/cn/citycraft/Yum/manager/RepoSerialization.java +++ b/src/main/java/cn/citycraft/Yum/manager/RepoSerialization.java @@ -3,6 +3,7 @@ */ package cn.citycraft.Yum.manager; +import java.io.Serializable; import java.util.ArrayList; import java.util.List; @@ -13,7 +14,7 @@ import java.util.List; * @since 2015年8月31日下午7:41:53 */ public class RepoSerialization { - public class PackageInfo { + public class PackageInfo implements Serializable { public String name; public List plugins = new ArrayList<>(); public String pom; @@ -21,7 +22,7 @@ public class RepoSerialization { public URLType type; } - public class Plugin { + public class Plugin implements Serializable { public String artifactId; public String branch; public String description; @@ -34,18 +35,18 @@ public class RepoSerialization { public URLType type; } - public class Repositories { + public class Repositories implements Serializable { public String name; public List repos; } - public class Repository { + public class Repository implements Serializable { public String id; public URLType type; public String url; } - public class TagInfo { + public class TagInfo implements Serializable { public String tag; public String version; public URLType type;