clean up and close classloader while unload plugin...

Signed-off-by: 502647092 <jtb1@163.com>
This commit is contained in:
502647092 2015-09-24 19:02:44 +08:00
parent acf587b022
commit 464093aade
20 changed files with 406 additions and 320 deletions

View File

@ -19,8 +19,8 @@ import cn.citycraft.Yum.manager.YumManager;
* @author 蒋天蓓 2015年8月21日下午5:14:39
*/
public class Yum extends JavaPlugin {
public YumManager yumgr;
public FileConfig config;
public YumManager yumgr;
@Override
public void onDisable() {
@ -30,16 +30,16 @@ public class Yum extends JavaPlugin {
@Override
public void onEnable() {
HandlerCommand cmdhandler = new HandlerCommand(this);
final HandlerCommand cmdhandler = new HandlerCommand(this);
this.getCommand("yum").setExecutor(cmdhandler);
this.getCommand("yum").setTabCompleter(cmdhandler);
yumgr = new YumManager(this);
YumManager.repo.jsonToCache(config);
new VersionChecker(this);
try {
Metrics metrics = new Metrics(this);
final Metrics metrics = new Metrics(this);
metrics.start();
} catch (IOException e) {
} catch (final IOException e) {
}
}

View File

@ -3,7 +3,6 @@
*/
package cn.citycraft.Yum.api;
/**
* Yum仓库插件API
*

View File

@ -17,19 +17,19 @@ import org.bukkit.command.CommandSender;
* 2015年8月12日下午12:49:34
*/
public abstract class BaseCommand {
private String name;
private String permission;
private String[] aliases;
private String description;
private final String[] aliases;
private final String description;
private int minimumArguments = 0;
private String possibleArguments = "";
private final String name;
private boolean onlyPlayerExecutable = false;
private String permission;
private String possibleArguments = "";
public BaseCommand(String name, String description) {
public BaseCommand(final String name, final String description) {
this(name, description, new String[0]);
}
public BaseCommand(String name, String description, String... aliases) {
public BaseCommand(final String name, final String description, final String... aliases) {
this.name = name;
this.description = description;
this.aliases = aliases;
@ -55,7 +55,7 @@ public abstract class BaseCommand {
* @return 当前命令的别名
*/
public List<String> getCommandList() {
List<String> cmds = new ArrayList<String>();
final List<String> cmds = new ArrayList<String>();
cmds.add(name);
cmds.addAll(Arrays.asList(aliases));
return cmds;
@ -113,9 +113,10 @@ public abstract class BaseCommand {
* - 命令发送者
* @return 是否有权限执行命令
*/
public final boolean hasPermission(CommandSender sender) {
if (permission == null)
public final boolean hasPermission(final CommandSender sender) {
if (permission == null) {
return true;
}
return sender.hasPermission(permission);
}
@ -135,13 +136,17 @@ public abstract class BaseCommand {
* - 命令
* @return 是否匹配
*/
public final boolean isValidTrigger(String name) {
if (this.name.equalsIgnoreCase(name))
public final boolean isValidTrigger(final String name) {
if (this.name.equalsIgnoreCase(name)) {
return true;
if (aliases != null)
for (String alias : aliases)
if (alias.equalsIgnoreCase(name))
}
if (aliases != null) {
for (final String alias : aliases) {
if (alias.equalsIgnoreCase(name)) {
return true;
}
}
}
return false;
}
@ -151,7 +156,7 @@ public abstract class BaseCommand {
* @param minimumArguments
* - 最小参数个数
*/
public void setMinimumArguments(int minimumArguments) {
public void setMinimumArguments(final int minimumArguments) {
this.minimumArguments = minimumArguments;
}
@ -161,7 +166,7 @@ public abstract class BaseCommand {
* @param onlyPlayerExecutable
* - 是否只允许玩家执行
*/
public void setOnlyPlayerExecutable(boolean onlyPlayerExecutable) {
public void setOnlyPlayerExecutable(final boolean onlyPlayerExecutable) {
this.onlyPlayerExecutable = onlyPlayerExecutable;
}
@ -171,7 +176,7 @@ public abstract class BaseCommand {
* @param permission
* - 命令权限
*/
public void setPermission(String permission) {
public void setPermission(final String permission) {
this.permission = permission;
}
@ -181,7 +186,7 @@ public abstract class BaseCommand {
* @param possibleArguments
* - 可能的命令参数
*/
public void setPossibleArguments(String possibleArguments) {
public void setPossibleArguments(final String possibleArguments) {
this.possibleArguments = possibleArguments;
}

View File

@ -22,7 +22,7 @@ public class CommandDelete extends BaseCommand {
/**
* @param name
*/
public CommandDelete(Yum main) {
public CommandDelete(final Yum main) {
super("delete", "删除插件");
this.main = main;
setMinimumArguments(1);
@ -30,15 +30,17 @@ public class CommandDelete extends BaseCommand {
}
@Override
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 (YumManager.plugman.deletePlugin(sender, plugin))
public void execute(final CommandSender sender, final String label, final String[] args) throws CommandException {
final String pluginname = args[0];
final Plugin plugin = Bukkit.getServer().getPluginManager().getPlugin(pluginname);
if (plugin != null) {
if (YumManager.plugman.deletePlugin(sender, plugin)) {
sender.sendMessage("§c删除: §a插件 " + pluginname + " 已从服务器卸载并删除!");
else
} else {
sender.sendMessage("§c删除: §c插件 " + pluginname + " 卸载或删除时发生错误 删除失败!");
else
}
} else {
sender.sendMessage("§c插件 " + pluginname + " 不存在或已卸载!");
}
};
}

View File

@ -24,20 +24,21 @@ public class CommandInfo extends BaseCommand {
/**
* @param name
*/
public CommandInfo(Yum main) {
public CommandInfo(final Yum main) {
super("info", "查看插件详情");
this.main = main;
setPossibleArguments("<插件名称>");
}
@Override
public void execute(CommandSender sender, String label, String[] args) throws CommandException {
if (args.length == 0)
public void execute(final CommandSender sender, final String label, final String[] args) throws CommandException {
if (args.length == 0) {
return;
String pluginname = args[0];
Plugin plugin = main.getServer().getPluginManager().getPlugin(pluginname);
}
final String pluginname = args[0];
final Plugin plugin = main.getServer().getPluginManager().getPlugin(pluginname);
if (plugin != null) {
PluginDescriptionFile desc = plugin.getDescription();
final PluginDescriptionFile desc = plugin.getDescription();
sender.sendMessage("§6插件名称: §3" + plugin.getName());
sender.sendMessage("§6插件版本: §3" + desc.getVersion());
sender.sendMessage("§6插件作者: §3" + StringUtils.join(desc.getAuthors(), " "));
@ -47,7 +48,8 @@ public class CommandInfo extends BaseCommand {
sender.sendMessage("§6插件软依赖: §3" + (desc.getSoftDepend().size() == 0 ? "" : ""));
StringUtil.sendStringArray(sender, desc.getSoftDepend());
sender.sendMessage("§6插件物理路径: §3" + YumManager.plugman.getPluginFile(plugin).getAbsolutePath());
} else
} else {
sender.sendMessage("§4错误: §c插件 " + pluginname + " 不存在或已卸载!");
}
};
}

View File

@ -22,7 +22,7 @@ public class CommandInstall extends BaseCommand {
/**
* @param name
*/
public CommandInstall(Yum main) {
public CommandInstall(final Yum main) {
super("install", "安装插件");
this.main = main;
setMinimumArguments(1);
@ -30,18 +30,20 @@ public class CommandInstall extends BaseCommand {
}
@Override
public void execute(final CommandSender sender, String label, final String[] args) throws CommandException {
public void execute(final CommandSender sender, final String label, final String[] args) throws CommandException {
final String pluginname = args[0];
Plugin plugin = Bukkit.getServer().getPluginManager().getPlugin(pluginname);
if (plugin == null)
final Plugin plugin = Bukkit.getServer().getPluginManager().getPlugin(pluginname);
if (plugin == null) {
Bukkit.getScheduler().runTaskAsynchronously(main, () -> {
if (args.length < 2)
if (args.length < 2) {
YumManager.install(sender, pluginname);
else
} else {
YumManager.install(sender, pluginname, args[1]);
}
});
else
} else {
sender.sendMessage("§c插件已安装在服务器 需要更新请使用yum update " + pluginname + "!");
}
};
}

View File

@ -22,15 +22,16 @@ public class CommandList extends BaseCommand {
/**
* @param name
*/
public CommandList(Yum main) {
public CommandList(final Yum main) {
super("list", "列出已安装插件列表");
this.main = main;
}
@Override
public void execute(CommandSender sender, String label, String[] args) throws CommandException {
public void execute(final CommandSender sender, final String label, final String[] args) throws CommandException {
sender.sendMessage("§6[Yum仓库]§3服务器已安装插件: ");
for (Plugin plugin : Bukkit.getPluginManager().getPlugins())
for (final Plugin plugin : Bukkit.getPluginManager().getPlugins()) {
sender.sendMessage("§6 - " + YumManager.plugman.getFormattedName(plugin, true));
}
};
}

View File

@ -22,7 +22,7 @@ public class CommandLoad extends BaseCommand {
/**
* @param name
*/
public CommandLoad(Yum main) {
public CommandLoad(final Yum main) {
super("load", "载入插件");
this.main = main;
setMinimumArguments(1);
@ -30,12 +30,13 @@ public class CommandLoad extends BaseCommand {
}
@Override
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)
public void execute(final CommandSender sender, final String label, final String[] args) throws CommandException {
final String pluginname = args[0];
final Plugin plugin = Bukkit.getServer().getPluginManager().getPlugin(pluginname);
if (plugin == null) {
YumManager.plugman.load(sender, pluginname);
else
} else {
sender.sendMessage("§c错误: 插件 " + pluginname + " 已加载到服务器!");
}
};
}

View File

@ -22,7 +22,7 @@ public class CommandReload extends BaseCommand {
/**
* @param name
*/
public CommandReload(Yum main) {
public CommandReload(final Yum main) {
super("reload", "重载插件");
this.main = main;
setMinimumArguments(1);
@ -30,16 +30,17 @@ public class CommandReload extends BaseCommand {
}
@Override
public void execute(CommandSender sender, String label, String[] args) throws CommandException {
String pluginname = args[0];
public void execute(final CommandSender sender, final String label, final String[] args) throws CommandException {
final String pluginname = args[0];
if (pluginname.equalsIgnoreCase("all") || pluginname.equalsIgnoreCase("*")) {
YumManager.plugman.reloadAll(sender);
return;
}
Plugin plugin = Bukkit.getServer().getPluginManager().getPlugin(pluginname);
if (plugin != null)
final Plugin plugin = Bukkit.getServer().getPluginManager().getPlugin(pluginname);
if (plugin != null) {
YumManager.plugman.reload(sender, plugin);
else
} else {
sender.sendMessage("§c插件 " + pluginname + " 不存在或已卸载!");
}
};
}

View File

@ -21,7 +21,7 @@ public class CommandRepo extends BaseCommand {
/**
* @param name
*/
public CommandRepo(Yum main) {
public CommandRepo(final Yum main) {
super("repo", "插件源命令");
this.main = main;
setMinimumArguments(1);
@ -29,17 +29,19 @@ public class CommandRepo extends BaseCommand {
}
@Override
public void execute(CommandSender sender, String label, String[] args) throws CommandException {
String cmd = args[0];
public void execute(final CommandSender sender, final String label, final String[] args) throws CommandException {
final String cmd = args[0];
switch (cmd) {
case "add":
if (args.length == 2) {
if (YumManager.repo.addRepositories(sender, args[1]))
if (YumManager.repo.addRepositories(sender, args[1])) {
sender.sendMessage("§6仓库: §a插件信息已缓存!");
else
} else {
sender.sendMessage("§6仓库: §c源地址未找到仓库信息或无法访问!");
} else
}
} else {
sender.sendMessage("§6仓库: §c请输入源地址!");
}
break;
case "list":
sender.sendMessage("§6仓库: §b缓存的插件信息如下 ");

View File

@ -22,7 +22,7 @@ public class CommandUnload extends BaseCommand {
/**
* @param name
*/
public CommandUnload(Yum main) {
public CommandUnload(final Yum main) {
super("unload", "卸载插件");
this.main = main;
setMinimumArguments(1);
@ -30,12 +30,13 @@ public class CommandUnload extends BaseCommand {
}
@Override
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)
public void execute(final CommandSender sender, final String label, final String[] args) throws CommandException {
final String pluginname = args[0];
final Plugin plugin = Bukkit.getServer().getPluginManager().getPlugin(pluginname);
if (plugin != null) {
YumManager.plugman.unload(sender, plugin);
else
} else {
sender.sendMessage("§c插件 " + pluginname + " 不存在或已卸载!");
}
};
}

View File

@ -20,7 +20,7 @@ public class CommandUpdate extends BaseCommand {
/**
* @param name
*/
public CommandUpdate(Yum main) {
public CommandUpdate(final Yum main) {
super("update", "更新插件");
this.main = main;
setMinimumArguments(1);
@ -28,18 +28,20 @@ public class CommandUpdate extends BaseCommand {
}
@Override
public void execute(final CommandSender sender, String label, final String[] args) throws CommandException {
public void execute(final CommandSender sender, final String label, final String[] args) throws CommandException {
final String pluginname = args[0];
final Plugin plugin = Bukkit.getServer().getPluginManager().getPlugin(pluginname);
sender.sendMessage("§a开始更新插件: " + pluginname);
if (plugin != null)
if (plugin != null) {
Bukkit.getScheduler().runTaskAsynchronously(main, () -> {
if (args.length < 2)
if (args.length < 2) {
YumManager.update(sender, plugin);
else
} else {
YumManager.update(sender, plugin, args[1]);
}
});
else
} else {
sender.sendMessage("§c插件未安装或已卸载 需要安装请使用yum install " + pluginname + "!");
}
};
}

View File

@ -20,7 +20,7 @@ public class CommandUpgrade extends BaseCommand {
/**
* @param name
*/
public CommandUpgrade(Yum main) {
public CommandUpgrade(final Yum main) {
super("upgrade", "升级插件");
this.main = main;
setMinimumArguments(1);
@ -28,19 +28,20 @@ public class CommandUpgrade extends BaseCommand {
}
@Override
public void execute(final CommandSender sender, String label, final String[] args) throws CommandException {
public void execute(final CommandSender sender, final String label, final String[] args) throws CommandException {
Bukkit.getScheduler().runTaskAsynchronously(main, () -> {
if (args.length == 0)
if (args.length == 0) {
YumManager.plugman.upgrade(sender);
else {
String pluginname = args[0];
Plugin plugin = Bukkit.getServer().getPluginManager().getPlugin(pluginname);
} else {
final String pluginname = args[0];
final Plugin plugin = Bukkit.getServer().getPluginManager().getPlugin(pluginname);
sender.sendMessage("§a开始升级插件: " + pluginname);
if (plugin != null)
if (plugin != null) {
YumManager.plugman.upgrade(sender, plugin);
else
} else {
sender.sendMessage("§c插件未安装或已卸载 需要安装请使用yum install " + pluginname + "!");
}
}
});
};
}

View File

@ -25,19 +25,19 @@ import cn.citycraft.Yum.manager.YumManager;
* @author 蒋天蓓 2015年8月22日上午8:29:44
*/
public class HandlerCommand implements CommandExecutor, TabCompleter {
/**
* 已注册命令列表(包括别名)
*/
List<String> RegisterCommandList = new ArrayList<String>();
/**
* 命令监听类列表
*/
private List<BaseCommand> commandlist = new ArrayList<BaseCommand>();;
private final List<BaseCommand> commandlist = new ArrayList<BaseCommand>();
/**
* 插件主类
*/
Yum main;
Yum main;;
/**
* 已注册命令列表(包括别名)
*/
List<String> RegisterCommandList = new ArrayList<String>();
/**
* 注册子命令
@ -45,7 +45,7 @@ public class HandlerCommand implements CommandExecutor, TabCompleter {
* @param yum
* - 插件主类
*/
public HandlerCommand(Yum yum) {
public HandlerCommand(final Yum yum) {
this.main = yum;
registerCommand(new CommandList(yum));
registerCommand(new CommandInstall(yum));
@ -70,8 +70,8 @@ public class HandlerCommand implements CommandExecutor, TabCompleter {
* - 数组开始位置
* @return 转移后的数组字符串
*/
public static String[] moveStrings(String[] args, int start) {
String[] ret = new String[args.length - start];
public static String[] moveStrings(final String[] args, final int start) {
final String[] ret = new String[args.length - start];
System.arraycopy(args, start, ret, 0, ret.length);
return ret;
}
@ -82,25 +82,28 @@ public class HandlerCommand implements CommandExecutor, TabCompleter {
* @return - 返回已注册的命令List
*/
public List<String> getRegisterCommands() {
List<String> cmds = new ArrayList<String>();
for (BaseCommand command : commandlist)
final List<String> cmds = new ArrayList<String>();
for (final BaseCommand command : commandlist) {
cmds.addAll(command.getCommandList());
}
return cmds;
}
@Override
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
if (args.length == 0)
return true;
String subcmd = args[0];
if (subcmd.equalsIgnoreCase("help")) {
sender.sendMessage("§6=========YUM插件帮助列表=========");
for (BaseCommand command : commandlist)
sender.sendMessage(String.format("§6/yum §a%1$s %2$s §6- §b%3$s", command.getName(), command.getPossibleArguments(), command.getDescription()));
public boolean onCommand(final CommandSender sender, final Command cmd, final String label, final String[] args) {
if (args.length == 0) {
return true;
}
String[] subargs = moveStrings(args, 1);
for (BaseCommand command : commandlist)
final String subcmd = args[0];
if (subcmd.equalsIgnoreCase("help")) {
sender.sendMessage("§6=========YUM插件帮助列表=========");
for (final BaseCommand command : commandlist) {
sender.sendMessage(String.format("§6/yum §a%1$s %2$s §6- §b%3$s", command.getName(), command.getPossibleArguments(), command.getDescription()));
}
return true;
}
final String[] subargs = moveStrings(args, 1);
for (final BaseCommand command : commandlist) {
if (command.isValidTrigger(subcmd)) {
if (!command.hasPermission(sender)) {
sender.sendMessage("§c你没有此命令的权限!");
@ -110,40 +113,40 @@ public class HandlerCommand implements CommandExecutor, TabCompleter {
sender.sendMessage("§c控制台无法使用此命令!");
return true;
}
if (subargs.length >= command.getMinimumArguments())
if (subargs.length >= command.getMinimumArguments()) {
try {
command.execute(sender, subcmd, subargs);
return true;
} catch (CommandException e) {
} catch (final CommandException e) {
sender.sendMessage(e.getMessage());
}
else
} else {
sender.sendMessage("§c错误的参数 §e使用方法 /yum " + command.getName() + command.getPossibleArguments());
}
}
}
return false;
}
@Override
public List<String> onTabComplete(CommandSender sender, Command command, String label, String[] args) {
public List<String> onTabComplete(final CommandSender sender, final Command command, final String label, final String[] args) {
if (sender.isOp() || sender.hasPermission("yum.admin") || sender.hasPermission("yum." + args[0])) {
List<String> completions = new ArrayList<>();
final List<String> completions = new ArrayList<>();
if (args.length == 1) {
String partialCommand = args[0];
List<String> commands = RegisterCommandList;
final String partialCommand = args[0];
final List<String> commands = RegisterCommandList;
StringUtil.copyPartialMatches(partialCommand, commands, completions);
}
if (args.length == 2) {
String partialPlugin = args[1];
final String partialPlugin = args[1];
List<String> plugins = null;
if (args[0].equalsIgnoreCase("install"))
if (args[0].equalsIgnoreCase("install")) {
plugins = YumManager.repo.getAllPluginName();
else if (args[0].equalsIgnoreCase("repo"))
plugins = Arrays.asList(new String[] { "add",
"list",
"clean",
"update" });
else
} else if (args[0].equalsIgnoreCase("repo")) {
plugins = Arrays.asList(new String[] { "add", "list", "clean", "update" });
} else {
plugins = YumManager.plugman.getPluginNames(false);
}
StringUtil.copyPartialMatches(partialPlugin, plugins, completions);
}
Collections.sort(completions);
@ -158,7 +161,7 @@ public class HandlerCommand implements CommandExecutor, TabCompleter {
* @param command
* - 被注册的命令类
*/
public void registerCommand(BaseCommand command) {
public void registerCommand(final BaseCommand command) {
commandlist.add(command);
}

View File

@ -19,7 +19,7 @@ import org.bukkit.plugin.Plugin;
public class DownloadManager {
Plugin plugin;
public DownloadManager(Plugin main) {
public DownloadManager(final Plugin main) {
this.plugin = main;
}
@ -30,8 +30,8 @@ public class DownloadManager {
* - 地址
* @return 文件名称
*/
public String getFileName(String url) {
int end = url.lastIndexOf('/');
public String getFileName(final String url) {
final int end = url.lastIndexOf('/');
return url.substring(end + 1);
}
@ -42,22 +42,10 @@ public class DownloadManager {
* - 地址
* @return 文件名称
*/
public String getFileName(URL url) {
public String getFileName(final URL url) {
return getFileName(url.getFile());
}
private String getPer(int per) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 11; i++)
if (per > i)
sb.append("==");
else if (per == i)
sb.append("> ");
else
sb.append(" ");
return sb.toString();
}
/**
* 从网络下载文件
*
@ -67,7 +55,7 @@ public class DownloadManager {
* - 下载地址
* @return 是否成功
*/
public boolean run(CommandSender sender, String urlstring) {
public boolean run(final CommandSender sender, final String urlstring) {
return run(sender, urlstring, new File("plugins", getFileName(urlstring)));
}
@ -82,11 +70,11 @@ public class DownloadManager {
* - 保存文件
* @return 是否成功
*/
public boolean run(CommandSender sender, String urlstring, File file) {
public boolean run(final CommandSender sender, final String urlstring, final File file) {
try {
URL url = new URL(urlstring);
final URL url = new URL(urlstring);
return run(sender, url, file);
} catch (MalformedURLException e) {
} catch (final MalformedURLException e) {
sender.sendMessage("§4错误: §c无法识别的URL地址...");
sender.sendMessage("§4地址: §c" + urlstring);
return false;
@ -104,15 +92,16 @@ public class DownloadManager {
* - 保存文件
* @return 是否成功
*/
public boolean run(CommandSender sender, URL url, File file) {
public boolean run(CommandSender sender, final URL url, final File file) {
BufferedInputStream in = null;
FileOutputStream fout = null;
if (sender == null)
if (sender == null) {
sender = Bukkit.getConsoleSender();
}
try {
sender.sendMessage("§6开始下载: §3" + getFileName(url));
sender.sendMessage("§6下载地址: §3" + url.toString());
int fileLength = url.openConnection().getContentLength();
final int fileLength = url.openConnection().getContentLength();
if (fileLength < 0) {
sender.sendMessage("§6下载: §c文件 " + file.getName() + " 获取长度错误(可能是网络问题)!");
sender.sendMessage("§6文件: §c " + file.getName() + " 下载失败!");
@ -124,38 +113,42 @@ public class DownloadManager {
file.getParentFile().mkdirs();
sender.sendMessage("§6创建新目录: §d" + file.getParentFile().getAbsolutePath());
}
if (file.exists())
if (file.exists()) {
file.delete();
}
file.createNewFile();
sender.sendMessage("§6创建新文件: §d" + file.getAbsolutePath());
fout = new FileOutputStream(file);
byte[] data = new byte[1024];
final byte[] data = new byte[1024];
long downloaded = 0L;
int count;
long time = System.currentTimeMillis();
while ((count = in.read(data)) != -1) {
downloaded += count;
fout.write(data, 0, count);
int percent = (int) (downloaded * 100L / fileLength);
if (percent % 10 == 0)
final int percent = (int) (downloaded * 100L / fileLength);
if (percent % 10 == 0) {
if (fileLength < 102400 || System.currentTimeMillis() - time > 1000) {
sender.sendMessage(String.format("§6已下载: §a" + getPer(percent / 10) + " %s%%", percent));
time = System.currentTimeMillis();
}
}
}
sender.sendMessage("§6文件: §a " + file.getName() + " 下载完成!");
return true;
} catch (Exception ex) {
} catch (final Exception ex) {
sender.sendMessage("§6异常: §c" + ex.getMessage());
sender.sendMessage("§6文件: §c" + file.getName() + " 下载失败!");
return false;
} finally {
try {
if (in != null)
if (in != null) {
in.close();
if (fout != null)
}
if (fout != null) {
fout.close();
} catch (Exception ex) {
}
} catch (final Exception ex) {
}
}
}
@ -167,7 +160,7 @@ public class DownloadManager {
* - 下载地址
* @return 是否成功
*/
public boolean run(String urlstring) {
public boolean run(final String urlstring) {
return run(null, urlstring);
}
@ -180,7 +173,7 @@ public class DownloadManager {
* - 保存文件
* @return 是否成功
*/
public boolean run(String urlstring, File file) {
public boolean run(final String urlstring, final File file) {
return run(null, urlstring, file);
}
@ -193,8 +186,22 @@ public class DownloadManager {
* - 保存文件
* @return 是否成功
*/
public boolean run(URL url, File file) {
public boolean run(final URL url, final File file) {
return run(null, url, file);
}
private String getPer(final int per) {
final StringBuilder sb = new StringBuilder();
for (int i = 0; i < 11; i++) {
if (per > i) {
sb.append("==");
} else if (per == i) {
sb.append("> ");
} else {
sb.append(" ");
}
}
return sb.toString();
}
}

View File

@ -7,9 +7,9 @@ import cn.citycraft.Yum.manager.Repositories.TagInfo;
public class PluginInfo {
public Plugin plugin;
public String url;
public String repo;
public List<TagInfo> tags;
public String url;
public String getFileName() {
return String.format("%1$s-%2$s.jar", plugin.artifactId, plugin.version);
@ -19,14 +19,16 @@ public class PluginInfo {
return getMavenUrl(null);
}
public String getMavenUrl(String version) {
public String getMavenUrl(final String version) {
String ver = version;
if (ver == null && tags != null)
for (TagInfo tagInfo : tags)
if (ver == null && tags != null) {
for (final TagInfo tagInfo : tags) {
if (tagInfo.tag.equalsIgnoreCase("1.7.10")) {
ver = tagInfo.version;
break;
}
}
}
return String.format(url + (url.endsWith("/") ? "" : "/") + "%1$s/%2$s/%3$s/%2$s-%3$s.jar", plugin.groupId.replace(".", "/"), plugin.artifactId, ver == null ? plugin.version : ver);
}
}

View File

@ -37,7 +37,7 @@ import cn.citycraft.PluginHelper.utils.StringUtil;
public class PluginsManager {
Plugin main;
public PluginsManager(Plugin plugin) {
public PluginsManager(final Plugin plugin) {
this.main = plugin;
}
@ -50,7 +50,7 @@ public class PluginsManager {
* - 插件
* @return 是否成功
*/
public boolean deletePlugin(CommandSender sender, Plugin plugin) {
public boolean deletePlugin(final CommandSender sender, final Plugin plugin) {
return unload(sender, plugin) && getPluginFile(plugin).delete();
}
@ -61,7 +61,7 @@ public class PluginsManager {
* - 插件
* @return 是否成功
*/
public boolean deletePlugin(Plugin plugin) {
public boolean deletePlugin(final Plugin plugin) {
return deletePlugin(Bukkit.getConsoleSender(), plugin);
}
@ -71,19 +71,22 @@ public class PluginsManager {
* @param plugin
* - 插件
*/
public void disable(Plugin plugin) {
if ((plugin != null) && (plugin.isEnabled()))
public void disable(final Plugin plugin) {
if ((plugin != null) && (plugin.isEnabled())) {
Bukkit.getPluginManager().disablePlugin(plugin);
}
}
/**
* 关闭所有插件
*/
public void disableAll() {
for (Plugin plugin : Bukkit.getPluginManager().getPlugins())
if (!isIgnored(plugin))
for (final Plugin plugin : Bukkit.getPluginManager().getPlugins()) {
if (!isIgnored(plugin)) {
disable(plugin);
}
}
}
/**
* 启用插件
@ -91,19 +94,22 @@ public class PluginsManager {
* @param plugin
* - 插件
*/
public void enable(Plugin plugin) {
if ((plugin != null) && (!plugin.isEnabled()))
public void enable(final Plugin plugin) {
if ((plugin != null) && (!plugin.isEnabled())) {
Bukkit.getPluginManager().enablePlugin(plugin);
}
}
/**
* 启用所有插件
*/
public void enableAll() {
for (Plugin plugin : Bukkit.getPluginManager().getPlugins())
if (!isIgnored(plugin))
for (final Plugin plugin : Bukkit.getPluginManager().getPlugins()) {
if (!isIgnored(plugin)) {
enable(plugin);
}
}
}
/**
* 获得格式化的插件名称
@ -112,7 +118,7 @@ public class PluginsManager {
* - 插件
* @return 格式化的插件名称
*/
public String getFormattedName(Plugin plugin) {
public String getFormattedName(final Plugin plugin) {
return getFormattedName(plugin, false);
}
@ -125,11 +131,12 @@ public class PluginsManager {
* - 是否包括版本
* @return 格式化的插件名称
*/
public String getFormattedName(Plugin plugin, boolean includeVersions) {
ChatColor color = plugin.isEnabled() ? ChatColor.GREEN : ChatColor.RED;
public String getFormattedName(final Plugin plugin, final boolean includeVersions) {
final ChatColor color = plugin.isEnabled() ? ChatColor.GREEN : ChatColor.RED;
String pluginName = color + plugin.getName();
if (includeVersions)
if (includeVersions) {
pluginName = pluginName + " (" + plugin.getDescription().getVersion() + ")";
}
return pluginName;
}
@ -140,7 +147,7 @@ public class PluginsManager {
* - 名称
* @return 插件
*/
public Plugin getPluginByName(String name) {
public Plugin getPluginByName(final String name) {
return Bukkit.getPluginManager().getPlugin(name);
}
@ -151,7 +158,7 @@ public class PluginsManager {
* - 名称
* @return 插件
*/
public Plugin getPluginByName(String[] args, int start) {
public Plugin getPluginByName(final String[] args, final int start) {
return getPluginByName(StringUtil.consolidateStrings(args, start));
}
@ -162,22 +169,23 @@ public class PluginsManager {
* - 插件
* @return 插件的绝对路径
*/
public File getPluginFile(Plugin plugin) {
public File getPluginFile(final Plugin plugin) {
File file = null;
ClassLoader cl = plugin.getClass().getClassLoader();
final ClassLoader cl = plugin.getClass().getClassLoader();
if ((cl instanceof URLClassLoader)) {
@SuppressWarnings("resource")
URLClassLoader ucl = (URLClassLoader) cl;
URL url = ucl.getURLs()[0];
final URLClassLoader ucl = (URLClassLoader) cl;
final URL url = ucl.getURLs()[0];
file = new File(url.getFile());
}
return file;
}
public List<String> getPluginNames(boolean fullName) {
List<String> plugins = new ArrayList<String>();
for (Plugin plugin : Bukkit.getPluginManager().getPlugins())
public List<String> getPluginNames(final boolean fullName) {
final List<String> plugins = new ArrayList<String>();
for (final Plugin plugin : Bukkit.getPluginManager().getPlugins()) {
plugins.add(fullName ? plugin.getDescription().getFullName() : plugin.getName());
}
return plugins;
}
@ -188,10 +196,11 @@ public class PluginsManager {
* - 插件名称
* @return 插件版本
*/
public String getPluginVersion(String name) {
Plugin plugin = getPluginByName(name);
if ((plugin != null) && (plugin.getDescription() != null))
public String getPluginVersion(final String name) {
final Plugin plugin = getPluginByName(name);
if ((plugin != null) && (plugin.getDescription() != null)) {
return plugin.getDescription().getVersion();
}
return null;
}
@ -202,21 +211,23 @@ public class PluginsManager {
* - 插件
* @return 插件命令
*/
public String getUsages(Plugin plugin) {
List<String> parsedCommands = new ArrayList<String>();
public String getUsages(final Plugin plugin) {
final List<String> parsedCommands = new ArrayList<String>();
Map<String, Map<String, Object>> commands = plugin.getDescription().getCommands();
final Map<String, Map<String, Object>> commands = plugin.getDescription().getCommands();
if (commands != null) {
Iterator<Entry<String, Map<String, Object>>> commandsIt = commands.entrySet().iterator();
final Iterator<Entry<String, Map<String, Object>>> commandsIt = commands.entrySet().iterator();
while (commandsIt.hasNext()) {
Entry<String, Map<String, Object>> thisEntry = commandsIt.next();
if (thisEntry != null)
final Entry<String, Map<String, Object>> thisEntry = commandsIt.next();
if (thisEntry != null) {
parsedCommands.add(thisEntry.getKey());
}
}
if (parsedCommands.isEmpty())
}
if (parsedCommands.isEmpty()) {
return null;
}
return Joiner.on(", ").join(parsedCommands);
}
@ -227,7 +238,7 @@ public class PluginsManager {
* - 插件
* @return 是否
*/
public boolean isIgnored(Plugin plugin) {
public boolean isIgnored(final Plugin plugin) {
return isIgnored(plugin.getName());
}
@ -238,10 +249,12 @@ public class PluginsManager {
* - 插件名称
* @return 是否
*/
public boolean isIgnored(String plugin) {
for (String name : new ArrayList<String>())
if (name.equalsIgnoreCase(plugin))
public boolean isIgnored(final String plugin) {
for (final String name : new ArrayList<String>()) {
if (name.equalsIgnoreCase(plugin)) {
return true;
}
}
return false;
}
@ -254,15 +267,17 @@ public class PluginsManager {
* - 插件名称
* @return 是否成功
*/
public boolean load(CommandSender sender, String name) {
public boolean load(CommandSender sender, final String name) {
Plugin target = null;
String filename = null;
if (sender == null)
if (sender == null) {
sender = Bukkit.getConsoleSender();
if (!name.endsWith(".jar"))
}
if (!name.endsWith(".jar")) {
filename = name + ".jar";
File pluginDir = new File("plugins");
File updateDir = new File(pluginDir, "update");
}
final File pluginDir = new File("plugins");
final File updateDir = new File(pluginDir, "update");
if (!pluginDir.isDirectory()) {
sender.sendMessage("§c插件目录不存在或IO错误!");
return false;
@ -272,15 +287,17 @@ public class PluginsManager {
if (!pluginFile.isFile() && !new File(updateDir, filename).isFile()) {
pluginFile = null;
for (File file : pluginDir.listFiles())
if (file.getName().endsWith(".jar"))
for (final File file : pluginDir.listFiles()) {
if (file.getName().endsWith(".jar")) {
try {
PluginDescriptionFile desc = main.getPluginLoader().getPluginDescription(file);
final PluginDescriptionFile desc = main.getPluginLoader().getPluginDescription(file);
if (desc.getName().equalsIgnoreCase(name)) {
pluginFile = file;
break;
}
} catch (InvalidDescriptionException e) {
} catch (final InvalidDescriptionException e) {
}
}
}
if (pluginFile == null) {
sender.sendMessage("§6载入: §c在插件目录和更新目录均未找到 " + name + " 插件 请确认文件是否存在!");
@ -290,19 +307,19 @@ public class PluginsManager {
try {
target = Bukkit.getPluginManager().loadPlugin(pluginFile);
} catch (InvalidDescriptionException e) {
} catch (final InvalidDescriptionException e) {
sender.sendMessage("§4异常: §c" + e.getMessage());
sender.sendMessage("§c插件: " + name + " 的plugin.yml文件存在错误!");
return false;
} catch (UnsupportedClassVersionError e) {
} catch (final UnsupportedClassVersionError e) {
sender.sendMessage("§4异常: §c" + e.getMessage());
sender.sendMessage("§c服务器或JAVA的版本低于插件: " + name + " 所需要的版本!!");
return false;
} catch (InvalidPluginException e) {
} catch (final InvalidPluginException e) {
sender.sendMessage("§4异常: §c" + e.getMessage());
sender.sendMessage("§c文件: " + name + " 不是一个可载入的插件!");
return false;
} catch (UnknownDependencyException e) {
} catch (final UnknownDependencyException e) {
sender.sendMessage("§4异常: §c" + e.getMessage());
sender.sendMessage("§c插件: " + name + " 缺少部分依赖项目!");
return false;
@ -321,7 +338,7 @@ public class PluginsManager {
* - 插件名称
* @return 是否成功
*/
public boolean load(String name) {
public boolean load(final String name) {
return load(Bukkit.getConsoleSender(), name);
}
@ -334,9 +351,10 @@ public class PluginsManager {
* - 插件
* @return 是否成功
*/
public boolean reload(CommandSender sender, Plugin plugin) {
if (plugin != null)
public boolean reload(final CommandSender sender, final Plugin plugin) {
if (plugin != null) {
return unload(sender, plugin) && load(sender, plugin.getName());
}
return false;
}
@ -349,9 +367,10 @@ public class PluginsManager {
* - 插件
* @return 是否成功
*/
public boolean reload(CommandSender sender, String name) {
if (name != null)
public boolean reload(final CommandSender sender, final String name) {
if (name != null) {
return unload(sender, name) && load(sender, name);
}
return false;
}
@ -362,7 +381,7 @@ public class PluginsManager {
* - 插件
* @return 是否成功
*/
public boolean reload(Plugin plugin) {
public boolean reload(final Plugin plugin) {
return reload(Bukkit.getConsoleSender(), plugin);
}
@ -370,19 +389,23 @@ public class PluginsManager {
* 重载所有插件
*/
public void reloadAll() {
for (Plugin plugin : Bukkit.getPluginManager().getPlugins())
if (!isIgnored(plugin))
for (final Plugin plugin : Bukkit.getPluginManager().getPlugins()) {
if (!isIgnored(plugin)) {
reload(plugin);
}
}
}
/**
* 重载所有插件
*/
public void reloadAll(CommandSender sender) {
for (Plugin plugin : Bukkit.getPluginManager().getPlugins())
if (!isIgnored(plugin))
public void reloadAll(final CommandSender sender) {
for (final Plugin plugin : Bukkit.getPluginManager().getPlugins()) {
if (!isIgnored(plugin)) {
reload(sender, plugin);
}
}
}
/**
* 卸载插件
@ -393,7 +416,7 @@ public class PluginsManager {
* - 插件
* @return 是否成功
*/
public boolean unload(CommandSender sender, Plugin plugin) {
public boolean unload(final CommandSender sender, final Plugin plugin) {
return unload(sender, plugin.getName());
}
@ -407,10 +430,11 @@ public class PluginsManager {
* @return 是否成功
*/
@SuppressWarnings("unchecked")
public boolean unload(CommandSender sender, String name) {
if (sender == null)
public boolean unload(CommandSender sender, final String name) {
if (sender == null) {
sender = Bukkit.getConsoleSender();
PluginManager pluginManager = Bukkit.getPluginManager();
}
final PluginManager pluginManager = Bukkit.getPluginManager();
SimpleCommandMap commandMap = null;
List<Plugin> plugins = null;
Map<String, Plugin> lookupNames = null;
@ -420,26 +444,26 @@ public class PluginsManager {
return false;
}
try {
Field pluginsField = pluginManager.getClass().getDeclaredField("plugins");
final Field pluginsField = pluginManager.getClass().getDeclaredField("plugins");
pluginsField.setAccessible(true);
plugins = (List<Plugin>) pluginsField.get(pluginManager);
Field lookupNamesField = pluginManager.getClass().getDeclaredField("lookupNames");
final Field lookupNamesField = pluginManager.getClass().getDeclaredField("lookupNames");
lookupNamesField.setAccessible(true);
lookupNames = (Map<String, Plugin>) lookupNamesField.get(pluginManager);
Field commandMapField = pluginManager.getClass().getDeclaredField("commandMap");
final Field commandMapField = pluginManager.getClass().getDeclaredField("commandMap");
commandMapField.setAccessible(true);
commandMap = (SimpleCommandMap) commandMapField.get(pluginManager);
Field knownCommandsField = SimpleCommandMap.class.getDeclaredField("knownCommands");
final Field knownCommandsField = SimpleCommandMap.class.getDeclaredField("knownCommands");
knownCommandsField.setAccessible(true);
knownCommands = (Map<String, Command>) knownCommandsField.get(commandMap);
} catch (Exception e) {
} catch (final Exception e) {
sender.sendMessage("§4异常: §c" + e.getMessage() + " 插件 " + name + " 卸载失败!");
return false;
}
for (Plugin next : pluginManager.getPlugins())
for (final Plugin next : pluginManager.getPlugins()) {
if (next.getName().equals(name)) {
pluginManager.disablePlugin(next);
if ((plugins != null) && (plugins.contains(next))) {
@ -453,10 +477,10 @@ public class PluginsManager {
}
if (commandMap != null) {
for (Iterator<Map.Entry<String, Command>> it = knownCommands.entrySet().iterator(); it.hasNext();) {
Map.Entry<String, Command> entry = it.next();
for (final Iterator<Map.Entry<String, Command>> it = knownCommands.entrySet().iterator(); it.hasNext();) {
final Map.Entry<String, Command> entry = it.next();
if ((entry.getValue() instanceof PluginCommand)) {
PluginCommand command = (PluginCommand) entry.getValue();
final PluginCommand command = (PluginCommand) entry.getValue();
if (command.getPlugin() == next) {
command.unregister(commandMap);
it.remove();
@ -465,6 +489,13 @@ public class PluginsManager {
}
sender.sendMessage("§6卸载: §a注销插件 " + name + " 的所有命令!");
}
final ClassLoader cl = next.getClass().getClassLoader();
try {
((URLClassLoader) cl).close();
} catch (final IOException ex) {
}
System.gc();
}
}
sender.sendMessage("§6卸载: §a插件 " + name + " 已成功卸载!");
return true;
@ -477,7 +508,7 @@ public class PluginsManager {
* - 卸载插件
* @return 是否成功
*/
public boolean unload(Plugin plugin) {
public boolean unload(final Plugin plugin) {
return unload(Bukkit.getConsoleSender(), plugin);
}
@ -486,7 +517,7 @@ public class PluginsManager {
*
* @return 是否成功
*/
public boolean upgrade(CommandSender sender) {
public boolean upgrade(final CommandSender sender) {
sender.sendMessage("§6升级: §a开始升级 服务器更新 目录下的所有插件!");
return upgrade(sender, null, null);
}
@ -500,31 +531,33 @@ public class PluginsManager {
* - 更新目录
* @return 是否成功
*/
public boolean upgrade(CommandSender sender, File directory, Plugin plugin) {
public boolean upgrade(final CommandSender sender, final File directory, final Plugin plugin) {
boolean result = false;
PluginLoader loader = main.getPluginLoader();
final PluginLoader loader = main.getPluginLoader();
File updateDirectory;
if (directory == null || !directory.isDirectory())
if (directory == null || !directory.isDirectory()) {
updateDirectory = Bukkit.getServer().getUpdateFolderFile();
else
} else {
updateDirectory = directory;
}
try {
sender.sendMessage("§6升级: §b从 " + updateDirectory.getCanonicalPath() + " 文件夹检索插件插件!");
} catch (SecurityException | IOException e1) {
sender.sendMessage("§4异常: §c文件夹 " + updateDirectory.getName() + " 权限不足或IO错误!");
return false;
}
for (File file : updateDirectory.listFiles()) {
for (final File file : updateDirectory.listFiles()) {
PluginDescriptionFile description = null;
try {
description = loader.getPluginDescription(file);
String name = description.getName();
if (plugin != null && !name.equals(plugin.getName()))
final String name = description.getName();
if (plugin != null && !name.equals(plugin.getName())) {
continue;
}
result = true;
sender.sendMessage("§6升级: §a开始升级 " + name + " 插件!");
reload(sender, name);
} catch (InvalidDescriptionException e) {
} catch (final InvalidDescriptionException e) {
sender.sendMessage("§4异常: §c" + e.getMessage());
sender.sendMessage("§4文件: §c" + file.getName() + " 的plugin.yml文件存在错误!");
}
@ -538,7 +571,7 @@ public class PluginsManager {
*
* @return 是否成功
*/
public boolean upgrade(CommandSender sender, Plugin plugin) {
public boolean upgrade(final CommandSender sender, final Plugin plugin) {
return upgrade(sender, null, plugin);
}
@ -547,7 +580,7 @@ public class PluginsManager {
*
* @return 是否成功
*/
public boolean upgrade(File directory) {
public boolean upgrade(final File directory) {
Bukkit.getConsoleSender().sendMessage("§6升级: §a开始升级 " + directory.getName() + " 目录下的所有插件!");
return upgrade(Bukkit.getConsoleSender(), directory, null);
}

View File

@ -15,22 +15,22 @@ import java.util.List;
public class Repositories {
public class PackageInfo {
public String name;
public String url;
public List<Plugin> plugins = new ArrayList<>();
public String url;
}
public class Plugin {
public String groupId;
public String artifactId;
public String description;
public String version;
public String groupId;
public List<TagInfo> tags;
public String version;
}
public class Repository {
public String id;
public String url;
public String type;
public String url;
}
public class TagInfo {

View File

@ -32,37 +32,40 @@ import cn.citycraft.Yum.manager.Repositories.Repository;;
*/
public class RepositoryManager {
Gson gson;
List<String> repos;
org.bukkit.plugin.Plugin main;
HashMap<String, PluginInfo> plugins;
org.bukkit.plugin.Plugin main;
List<String> repos;
public RepositoryManager(org.bukkit.plugin.Plugin plugin) {
public RepositoryManager(final org.bukkit.plugin.Plugin plugin) {
this.main = plugin;
gson = new Gson();
plugins = new HashMap<String, PluginInfo>();
repos = new ArrayList<String>();
}
public boolean addPackage(CommandSender sender, String urlstring) {
String json = getHtml(urlstring);
if (json.isEmpty())
public boolean addPackage(final CommandSender sender, final String urlstring) {
final String json = getHtml(urlstring);
if (json.isEmpty()) {
return false;
PackageInfo pkg = jsonToPackage(json);
if (pkg == null)
}
final PackageInfo pkg = jsonToPackage(json);
if (pkg == null) {
return false;
}
updatePackage(sender, pkg);
return true;
}
public boolean addRepositories(CommandSender sender, String urlstring) {
if (urlstring.isEmpty())
public boolean addRepositories(final CommandSender sender, final String urlstring) {
if (urlstring.isEmpty()) {
return false;
}
repos.add(urlstring);
return updateRepositories(sender, urlstring);
}
public void cacheToJson(FileConfiguration config) {
public void cacheToJson(final FileConfiguration config) {
config.set("repocache", gson.toJson(repos));
config.set("plugincache", gson.toJson(plugins));
}
@ -72,97 +75,106 @@ public class RepositoryManager {
}
public List<PluginInfo> getAllPlugin() {
List<PluginInfo> li = new ArrayList<PluginInfo>();
for (Entry<String, PluginInfo> plugin : plugins.entrySet())
final List<PluginInfo> li = new ArrayList<PluginInfo>();
for (final Entry<String, PluginInfo> plugin : plugins.entrySet()) {
li.add(plugin.getValue());
}
return li;
}
public List<String> getAllPluginName() {
List<String> li = new ArrayList<String>();
for (Entry<String, PluginInfo> plugin : plugins.entrySet())
final List<String> li = new ArrayList<String>();
for (final Entry<String, PluginInfo> plugin : plugins.entrySet()) {
li.add(plugin.getValue().plugin.artifactId);
}
return li;
}
public List<String> getAllPluginsInfo() {
List<String> li = new ArrayList<String>();
for (Entry<String, PluginInfo> plugin : plugins.entrySet()) {
Plugin pl = plugin.getValue().plugin;
final List<String> li = new ArrayList<String>();
for (final Entry<String, PluginInfo> plugin : plugins.entrySet()) {
final Plugin pl = plugin.getValue().plugin;
li.add(String.format("§d%s §a%s(%s) §6- §e%s", plugin.getValue().repo, pl.artifactId, pl.version, pl.description));
}
return li;
}
public String getHtml(String urlstring) {
public String getHtml(final String urlstring) {
String html = "";
try {
URL url = new URL(urlstring);
BufferedReader br = new BufferedReader(new InputStreamReader(url.openStream(), Charsets.UTF_8));
final URL url = new URL(urlstring);
final BufferedReader br = new BufferedReader(new InputStreamReader(url.openStream(), Charsets.UTF_8));
String line;
while ((line = br.readLine()) != null)
while ((line = br.readLine()) != null) {
html += line;
}
return html;
} catch (IOException e) {
} catch (final IOException e) {
return null;
}
}
public PluginInfo getPlugin(String name) {
for (Entry<String, PluginInfo> plugin : plugins.entrySet())
if (plugin.getValue().plugin.artifactId.equalsIgnoreCase(name))
public PluginInfo getPlugin(final String name) {
for (final Entry<String, PluginInfo> plugin : plugins.entrySet()) {
if (plugin.getValue().plugin.artifactId.equalsIgnoreCase(name)) {
return plugin.getValue();
}
}
return null;
}
public List<PluginInfo> getPluginInfo(String name) {
List<PluginInfo> li = new ArrayList<PluginInfo>();
for (Entry<String, PluginInfo> plugin : plugins.entrySet())
if (plugin.getValue().plugin.artifactId.equalsIgnoreCase(name))
public List<PluginInfo> getPluginInfo(final String name) {
final List<PluginInfo> li = new ArrayList<PluginInfo>();
for (final Entry<String, PluginInfo> plugin : plugins.entrySet()) {
if (plugin.getValue().plugin.artifactId.equalsIgnoreCase(name)) {
li.add(plugin.getValue());
}
}
return li;
}
public PluginInfo getPluginInfo(String groupId, String artifactId) {
public PluginInfo getPluginInfo(final String groupId, final String artifactId) {
return plugins.get(groupId + "." + artifactId);
}
public boolean jsonToCache(FileConfiguration config) {
String repocache = config.getString("repocache");
String plugincache = config.getString("plugincache");
public boolean jsonToCache(final FileConfiguration config) {
final String repocache = config.getString("repocache");
final String plugincache = config.getString("plugincache");
try {
if (!repocache.isEmpty())
if (!repocache.isEmpty()) {
repos = gson.fromJson(repocache, new TypeToken<List<String>>() {
}.getType());
if (!plugincache.isEmpty())
}
if (!plugincache.isEmpty()) {
plugins = gson.fromJson(plugincache, new TypeToken<HashMap<String, PluginInfo>>() {
}.getType());
}
return true;
} catch (JsonSyntaxException e) {
} catch (final JsonSyntaxException e) {
return false;
}
}
public PackageInfo jsonToPackage(String json) {
public PackageInfo jsonToPackage(final String json) {
try {
return gson.fromJson(json, PackageInfo.class);
} catch (JsonSyntaxException e) {
} catch (final JsonSyntaxException e) {
return null;
}
}
public List<Repository> jsonToRepositories(String json) {
public List<Repository> jsonToRepositories(final String json) {
try {
return gson.fromJson(json, new TypeToken<List<Repository>>() {
}.getType());
} catch (JsonSyntaxException e) {
} catch (final JsonSyntaxException e) {
return new ArrayList<Repository>();
}
}
public void updatePackage(CommandSender sender, PackageInfo pkg) {
for (Plugin plugin : pkg.plugins) {
PluginInfo pi = new PluginInfo();
public void updatePackage(final CommandSender sender, final PackageInfo pkg) {
for (final Plugin plugin : pkg.plugins) {
final PluginInfo pi = new PluginInfo();
pi.plugin = plugin;
pi.url = pkg.url;
pi.repo = pkg.name;
@ -171,29 +183,36 @@ public class RepositoryManager {
sender.sendMessage("§6仓库: §e" + pkg.name + " §a更新成功!");
}
public boolean updateRepositories(CommandSender sender) {
public boolean updateRepositories(final CommandSender sender) {
plugins.clear();
for (String string : repos)
if (updateRepositories(sender, string))
for (final String string : repos) {
if (updateRepositories(sender, string)) {
sender.sendMessage("§6源: §e" + string + " §a更新成功!");
else
} else {
sender.sendMessage("§6源: §e" + string + " §c更新失败!");
}
}
return true;
}
public boolean updateRepositories(CommandSender sender, String urlstring) {
if (sender == null)
if (sender == null) {
sender = Bukkit.getConsoleSender();
if (!urlstring.endsWith("repo.info"))
}
if (!urlstring.endsWith("repo.info")) {
urlstring = urlstring + "/repo.info";
String json = getHtml(urlstring);
if (json.isEmpty())
}
final String json = getHtml(urlstring);
if (json.isEmpty()) {
return false;
List<Repository> lrepo = jsonToRepositories(json);
if (lrepo.isEmpty())
}
final List<Repository> lrepo = jsonToRepositories(json);
if (lrepo.isEmpty()) {
return false;
for (Repository repository : lrepo)
}
for (final Repository repository : lrepo) {
addPackage(sender, repository.url);
}
return true;
}
}

View File

@ -19,38 +19,41 @@ public class YumManager {
Plugin plugin;
public YumManager(Plugin plugin) {
public YumManager(final Plugin plugin) {
this.plugin = plugin;
plugman = new PluginsManager(plugin);
download = new DownloadManager(plugin);
repo = new RepositoryManager(plugin);
}
public static boolean install(CommandSender sender, String pluginname) {
public static boolean install(final CommandSender sender, final String pluginname) {
return install(sender, pluginname, null);
}
public static boolean install(CommandSender sender, String pluginname, String version) {
PluginInfo pi = repo.getPlugin(pluginname);
if (pi != null)
if (download.run(sender, pi.getMavenUrl(version)))
public static boolean install(final CommandSender sender, final String pluginname, final String version) {
final PluginInfo pi = repo.getPlugin(pluginname);
if (pi != null) {
if (download.run(sender, pi.getMavenUrl(version))) {
return plugman.load(sender, pluginname);
}
}
return false;
}
public static boolean update(CommandSender sender, Plugin plugin) {
public static boolean update(final CommandSender sender, final Plugin plugin) {
return update(sender, plugin, null);
}
public static boolean update(CommandSender sender, Plugin plugin, String version) {
PluginInfo pi = repo.getPlugin(plugin.getName());
public static boolean update(final CommandSender sender, final Plugin plugin, final String version) {
final PluginInfo pi = repo.getPlugin(plugin.getName());
if (pi != null) {
if (download.run(sender, pi.getMavenUrl(version), new File(Bukkit.getUpdateFolderFile(), plugman.getPluginFile(plugin).getName()))) {
sender.sendMessage("§6更新: §a已下载插件 " + plugin.getName() + " 到update文件夹 重启后自动更新(或使用upgrade直接升级)!");
return true;
}
} else
} else {
sender.sendMessage("§6更新: §c仓库缓存中未找到插件 " + plugin.getName());
}
return false;
}
}