diff --git a/pom.xml b/pom.xml index 214cf11..6c5bfae 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 cn.citycraft Yum - 1.8.9 + 1.9 Yum Minecraft 服务器插件管理系统 @@ -55,7 +55,7 @@ http://ci.citycraft.cn:8080 - &a通过检测NMS版本实现多端兼容处理... + &c添加File文件操作命令... Debug UTF-8 diff --git a/src/main/java/cn/citycraft/Yum/Yum.java b/src/main/java/cn/citycraft/Yum/Yum.java index dfc88c9..fda2702 100644 --- a/src/main/java/cn/citycraft/Yum/Yum.java +++ b/src/main/java/cn/citycraft/Yum/Yum.java @@ -9,6 +9,7 @@ import cn.citycraft.PluginHelper.config.FileConfig; import cn.citycraft.PluginHelper.utils.VersionChecker; import cn.citycraft.Yum.api.YumAPI; import cn.citycraft.Yum.commands.YumCommand; +import cn.citycraft.Yum.file.commands.FileCommand; /** * MC插件仓库 @@ -25,8 +26,9 @@ public class Yum extends JavaPlugin { @Override public void onEnable() { - new YumCommand(this); new YumAPI(this); + new YumCommand(this); + new FileCommand(this); YumAPI.getRepo().jsonToCache(config); YumAPI.updaterepo(); new VersionChecker(this); diff --git a/src/main/java/cn/citycraft/Yum/api/YumAPI.java b/src/main/java/cn/citycraft/Yum/api/YumAPI.java index c31f148..f8d3398 100644 --- a/src/main/java/cn/citycraft/Yum/api/YumAPI.java +++ b/src/main/java/cn/citycraft/Yum/api/YumAPI.java @@ -2,6 +2,8 @@ package cn.citycraft.Yum.api; import java.io.File; import java.net.URL; +import java.util.ArrayList; +import java.util.List; import java.util.Map; import java.util.Map.Entry; @@ -34,7 +36,7 @@ public class YumAPI { * 初始化Yum管理中心 * * @param plugin - * - 插件实体 + * 插件实体 */ public YumAPI(final Plugin plugin) { YumAPI.main = plugin; @@ -47,7 +49,7 @@ public class YumAPI { * 删除插件 * * @param plugin - * - 插件实体 + * 插件实体 */ public static void delete(final Plugin plugin) { plugman.deletePlugin(plugin); @@ -84,11 +86,11 @@ public class YumAPI { * 安装新插件 * * @param sender - * - 命令发送者 + * 命令发送者 * @param pluginname - * - 插件名称 + * 插件名称 * @param version - * - 插件版本 + * 插件版本 * @return 是否安装成功 */ public static boolean install(final CommandSender sender, final String pluginname, final String url) { @@ -103,9 +105,9 @@ public class YumAPI { * 安装新插件 * * @param pluginname - * - 插件名称 + * 插件名称 * @param version - * - 插件版本 + * 插件版本 * @return 是否安装成功 */ public static boolean install(final String pluginname, final String url) { @@ -116,9 +118,9 @@ public class YumAPI { * 安装新插件 * * @param sender - * - 命令发送者 + * 命令发送者 * @param pluginname - * - 插件名称 + * 插件名称 * @return 是否安装成功 */ public static boolean installfromyum(final CommandSender sender, final String pluginname) { @@ -129,11 +131,11 @@ public class YumAPI { * 安装新插件 * * @param sender - * - 命令发送者 + * 命令发送者 * @param pluginname - * - 插件名称 + * 插件名称 * @param version - * - 插件版本 + * 插件版本 * @return 是否安装成功 */ public static boolean installfromyum(final CommandSender sender, final String pluginname, final String version) { @@ -148,7 +150,7 @@ public class YumAPI { * 载入插件 * * @param pluginname - * - 插件名称 + * 插件名称 */ public static void load(final File pluginFile) { plugman.load(pluginFile); @@ -158,7 +160,7 @@ public class YumAPI { * 载入插件 * * @param pluginname - * - 插件名称 + * 插件名称 */ public static void load(final String pluginname) { plugman.load(pluginname); @@ -168,7 +170,7 @@ public class YumAPI { * 重载插件 * * @param plugin - * - 插件实体 + * 插件实体 */ public static void reload(final Plugin plugin) { plugman.reload(plugin); @@ -178,7 +180,7 @@ public class YumAPI { * 卸载插件 * * @param plugin - * - 插件实体 + * 插件实体 */ public static void unload(final Plugin plugin) { plugman.unload(plugin); @@ -188,11 +190,11 @@ public class YumAPI { * 更新插件 * * @param sender - * - 命令发送者 + * 命令发送者 * @param plugin - * - 插件实体 + * 插件实体 * @param url - * - 新插件的下载地址 + * 新插件的下载地址 * @return 是否更新成功 */ public static boolean update(final CommandSender sender, final Plugin plugin, final URL url) { @@ -208,9 +210,9 @@ public class YumAPI { * 更新插件 * * @param plugin - * - 插件实体 + * 插件实体 * @param url - * - 新插件的下载地址 + * 新插件的下载地址 * @return 是否更新成功 */ public static boolean update(final Plugin plugin, final URL url) { @@ -221,51 +223,45 @@ public class YumAPI { * 更新支持Yum的插件 * * @param sender - * - 命令发送者 + * 命令发送者 */ public static void updateall(final CommandSender sender) { + final List ulist = new ArrayList<>(); try { - - final Map updatelist = UpdatePlugin.getUpdateList(); - if (updatelist.size() > 0) { - for (final Entry updateplugin : UpdatePlugin.getUpdateList().entrySet()) { - sender.sendMessage("§d一键更新: §a开始更新" + updateplugin.getKey() + "!"); - updatefromyum(sender, updateplugin.getValue(), null); - } - UpdatePlugin.clearList(); - sender.sendMessage("§d一键更新: §e已下载所有需要升级的插件到 服务器更新 文件夹"); - sender.sendMessage("§d一键更新: §e插件将在重启后自动更新(或使用§b/yum upgrade§e直接升级)!"); - } else { - sender.sendMessage("§6更新: §e未找到需要更新且可以用Yum处理的插件!"); + for (final Entry updateplugin : UpdatePlugin.getUpdateList().entrySet()) { + ulist.add(updateplugin.getValue()); } + UpdatePlugin.clearList(); } catch (final Exception | Error e) { try { final Map updatelist = UpdatePlugin.getList(); - if (updatelist.size() > 0) { - for (final Entry updateplugin : UpdatePlugin.getList().entrySet()) { - sender.sendMessage("§d一键更新: §a开始更新" + updateplugin.getKey().getName() + "!"); - updatefromyum(sender, updateplugin.getKey(), null); - } - UpdatePlugin.getList().clear(); - sender.sendMessage("§d一键更新: §e已下载所有需要升级的插件到 服务器更新 文件夹"); - sender.sendMessage("§d一键更新: §e插件将在重启后自动更新(或使用§b/yum upgrade§e直接升级)!"); - } else { - sender.sendMessage("§6更新: §e未找到需要更新且可以用Yum处理的插件!"); - } + ulist.addAll(updatelist.keySet()); + UpdatePlugin.getList().clear(); } catch (final Exception | Error e2) { sender.sendMessage("§4错误: §c无法检索全体更新列表!"); sender.sendMessage("§4异常: §c" + e2.getMessage()); } } + if (ulist.size() > 0) { + for (final Plugin updateplugin : ulist) { + sender.sendMessage("§d一键更新: §a开始更新" + updateplugin.getName() + "!"); + updatefromyum(sender, updateplugin, null, true); + } + UpdatePlugin.getList().clear(); + sender.sendMessage("§d一键更新: §e已下载所有需要升级的插件到 服务器更新 文件夹"); + sender.sendMessage("§d一键更新: §e插件将在重启后自动更新(或使用§b/yum upgrade§e直接升级)!"); + } else { + sender.sendMessage("§6更新: §e未找到需要更新且可以用Yum处理的插件!"); + } } /** * 更新插件 * * @param sender - * - 命令发送者 + * 命令发送者 * @param plugin - * - 插件实体 + * 插件实体 * @return 是否更新成功 */ public static boolean updatefromyum(final CommandSender sender, final Plugin plugin) { @@ -276,19 +272,38 @@ public class YumAPI { * 从Yum内部更新插件 * * @param sender - * - 命令发送者 + * 命令发送者 * @param plugin - * - 插件实体 + * 插件实体 * @param version - * - 插件版本(null则自动获取) + * 插件版本(null则自动获取) * @return */ public static boolean updatefromyum(final CommandSender sender, final Plugin plugin, final String version) { + return updatefromyum(sender, plugin, version, false); + } + + /** + * 从Yum内部更新插件 + * + * @param sender + * 命令发送者 + * @param plugin + * 插件实体 + * @param version + * 插件版本(null则自动获取) + * @param oneKeyUpdate + * 是否一键更新 + * @return + */ + public static boolean updatefromyum(final CommandSender sender, final Plugin plugin, final String version, final boolean oneKeyUpdate) { final PluginInfo pi = repo.getPlugin(plugin.getName()); if (pi != null) { if (download.run(sender, pi.getUrl(sender, version), new File(Bukkit.getUpdateFolderFile(), plugman.getPluginFile(plugin).getName()))) { - sender.sendMessage("§6更新: §e已下载 " + plugin.getName() + " 插件到服务器更新文件夹"); - sender.sendMessage("§6更新: §e插件将在重启后自动更新(或使用§b/yum upgrade§e直接升级)!"); + if (!oneKeyUpdate) { + sender.sendMessage("§6更新: §e已下载 " + plugin.getName() + " 插件到服务器更新文件夹"); + sender.sendMessage("§6更新: §e插件将在重启后自动更新(或使用§b/yum upgrade§e直接升级)!"); + } return true; } } else { @@ -311,9 +326,9 @@ public class YumAPI { /** * @param sender - * - 命令发送者 + * 命令发送者 * @param plugin - * - 插件实体 + * 插件实体 */ public static void upgrade(final CommandSender sender, final Plugin plugin) { plugman.upgrade(sender, plugin); diff --git a/src/main/java/cn/citycraft/Yum/commands/CommandDelete.java b/src/main/java/cn/citycraft/Yum/commands/CommandDelete.java index 92595e4..6c03bd3 100644 --- a/src/main/java/cn/citycraft/Yum/commands/CommandDelete.java +++ b/src/main/java/cn/citycraft/Yum/commands/CommandDelete.java @@ -22,7 +22,7 @@ public class CommandDelete extends BaseCommand { Yum main; public CommandDelete(final Yum main) { - super("d"); + super("del"); this.main = main; setMinimumArguments(1); setDescription("删除插件"); diff --git a/src/main/java/cn/citycraft/Yum/commands/CommandList.java b/src/main/java/cn/citycraft/Yum/commands/CommandList.java index 90fc5f1..e1d9a72 100644 --- a/src/main/java/cn/citycraft/Yum/commands/CommandList.java +++ b/src/main/java/cn/citycraft/Yum/commands/CommandList.java @@ -34,7 +34,7 @@ public class CommandList extends BaseCommand { 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)); + sender.sendMessage("§6- " + YumAPI.getPlugman().getFormattedName(plugin, true)); } }; } diff --git a/src/main/java/cn/citycraft/Yum/file/commands/CommandDelete.java b/src/main/java/cn/citycraft/Yum/file/commands/CommandDelete.java new file mode 100644 index 0000000..f66143b --- /dev/null +++ b/src/main/java/cn/citycraft/Yum/file/commands/CommandDelete.java @@ -0,0 +1,49 @@ +/** + * + */ +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 蒋天蓓 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("删除文件(服务器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 new file mode 100644 index 0000000..e20222e --- /dev/null +++ b/src/main/java/cn/citycraft/Yum/file/commands/CommandDownLoad.java @@ -0,0 +1,52 @@ +/** + * + */ +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 蒋天蓓 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)); + } + if (args.length == 1) { + 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 new file mode 100644 index 0000000..2da840c --- /dev/null +++ b/src/main/java/cn/citycraft/Yum/file/commands/CommandLs.java @@ -0,0 +1,55 @@ +/** + * + */ +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 蒋天蓓 2015年8月12日下午2:04:05 + */ +public class CommandLs extends BaseCommand { + + public CommandLs(final Yum main) { + super(); + 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/CommandRm.java b/src/main/java/cn/citycraft/Yum/file/commands/CommandRm.java new file mode 100644 index 0000000..b6c2e9a --- /dev/null +++ b/src/main/java/cn/citycraft/Yum/file/commands/CommandRm.java @@ -0,0 +1,53 @@ +/** + * + */ +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 蒋天蓓 2015年8月12日下午2:04:05 + */ +public class CommandRm extends BaseCommand { + + public CommandRm(final Yum main) { + super(); + 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; + } + if (file.getAbsolutePath().toLowerCase().endsWith("plugins") || file.getAbsolutePath().toLowerCase().endsWith("world")) { + 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 new file mode 100644 index 0000000..2246397 --- /dev/null +++ b/src/main/java/cn/citycraft/Yum/file/commands/FileCommand.java @@ -0,0 +1,15 @@ +package cn.citycraft.Yum.file.commands; + +import cn.citycraft.PluginHelper.commands.HandlerSubCommand; +import cn.citycraft.Yum.Yum; + +public class FileCommand { + public FileCommand(final Yum yum) { + final HandlerSubCommand cmdhandler = new HandlerSubCommand(yum, "file"); + cmdhandler.setAllCommandOnlyConsole(yum.config.getBoolean("onlyCommandConsole", false)); + cmdhandler.registerCommand(new CommandDownLoad(yum)); + cmdhandler.registerCommand(new CommandDelete(yum)); + cmdhandler.registerCommand(new CommandRm(yum)); + cmdhandler.registerCommand(new CommandLs(yum)); + } +} diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 8f8ee2b..a2ef2b6 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -10,6 +10,11 @@ commands: usage: §6使用§a/yum help§6查看帮助! permission: yum.use permission-message: §c你没有 的权限来执行此命令! + file: + description: MC文件管理命令 + usage: §6使用§a/yum help§6查看帮助! + permission: yum.use + permission-message: §c你没有 的权限来执行此命令! permissions: yum.use: description: 插件管理系统使用权限!