mirror of
https://e.coding.net/circlecloud/Yum.git
synced 2024-11-22 22:38:46 +00:00
add repo manager fix unload error...
Signed-off-by: 502647092 <jtb1@163.com>
This commit is contained in:
parent
f498e3ea3f
commit
dba9a1df20
3
pom.xml
3
pom.xml
@ -3,8 +3,9 @@
|
|||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<groupId>cn.citycraft</groupId>
|
<groupId>cn.citycraft</groupId>
|
||||||
<artifactId>Yum</artifactId>
|
<artifactId>Yum</artifactId>
|
||||||
<version>1.3</version>
|
<version>1.3-bate1</version>
|
||||||
<name>Yum</name>
|
<name>Yum</name>
|
||||||
|
<description>Minecraft 服务器插件管理系统</description>
|
||||||
<build>
|
<build>
|
||||||
<finalName>${project.name}</finalName>
|
<finalName>${project.name}</finalName>
|
||||||
<resources>
|
<resources>
|
||||||
|
@ -7,7 +7,9 @@ import org.bukkit.plugin.java.JavaPlugin;
|
|||||||
|
|
||||||
import cn.citycraft.Yum.commands.CommandHandler;
|
import cn.citycraft.Yum.commands.CommandHandler;
|
||||||
import cn.citycraft.Yum.config.FileConfig;
|
import cn.citycraft.Yum.config.FileConfig;
|
||||||
import cn.citycraft.Yum.utils.DownloadManager;
|
import cn.citycraft.Yum.manager.DownloadManager;
|
||||||
|
import cn.citycraft.Yum.manager.PluginsManager;
|
||||||
|
import cn.citycraft.Yum.repository.RepositoryManager;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* MC插件仓库
|
* MC插件仓库
|
||||||
@ -16,14 +18,26 @@ import cn.citycraft.Yum.utils.DownloadManager;
|
|||||||
*/
|
*/
|
||||||
public class Yum extends JavaPlugin {
|
public class Yum extends JavaPlugin {
|
||||||
public DownloadManager download;
|
public DownloadManager download;
|
||||||
|
public PluginsManager plugman;
|
||||||
|
public RepositoryManager repo;
|
||||||
public FileConfig config;
|
public FileConfig config;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onEnable() {
|
public void onEnable() {
|
||||||
|
plugman = new PluginsManager(this);
|
||||||
download = new DownloadManager(this);
|
download = new DownloadManager(this);
|
||||||
|
repo = new RepositoryManager(this);
|
||||||
config = new FileConfig(this, "config.yml");
|
config = new FileConfig(this, "config.yml");
|
||||||
|
repo.jsonToCache(config.getString("cache"));
|
||||||
CommandHandler cmdhandler = new CommandHandler(this);
|
CommandHandler cmdhandler = new CommandHandler(this);
|
||||||
this.getCommand("yum").setExecutor(cmdhandler);
|
this.getCommand("yum").setExecutor(cmdhandler);
|
||||||
this.getCommand("yum").setTabCompleter(cmdhandler);
|
this.getCommand("yum").setTabCompleter(cmdhandler);
|
||||||
|
this.getPluginLoader();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onDisable() {
|
||||||
|
config.set("cache", repo.cacheToJson());
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -3,12 +3,12 @@
|
|||||||
*/
|
*/
|
||||||
package cn.citycraft.Yum.commands;
|
package cn.citycraft.Yum.commands;
|
||||||
|
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.command.CommandException;
|
import org.bukkit.command.CommandException;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.plugin.Plugin;
|
import org.bukkit.plugin.Plugin;
|
||||||
|
|
||||||
import cn.citycraft.Yum.Yum;
|
import cn.citycraft.Yum.Yum;
|
||||||
import cn.citycraft.Yum.utils.PluginsManager;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 插件删除命令类
|
* 插件删除命令类
|
||||||
@ -16,22 +16,22 @@ import cn.citycraft.Yum.utils.PluginsManager;
|
|||||||
* @author 蒋天蓓 2015年8月12日下午2:04:05
|
* @author 蒋天蓓 2015年8月12日下午2:04:05
|
||||||
*/
|
*/
|
||||||
public class CommandDelete extends BaseCommand {
|
public class CommandDelete extends BaseCommand {
|
||||||
Yum yum;
|
Yum main;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param name
|
* @param name
|
||||||
*/
|
*/
|
||||||
public CommandDelete(Yum main) {
|
public CommandDelete(Yum main) {
|
||||||
super("delete");
|
super("delete");
|
||||||
this.yum = main;
|
this.main = main;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void execute(CommandSender sender, String label, String[] args) throws CommandException {
|
public void execute(CommandSender sender, String label, String[] args) throws CommandException {
|
||||||
String pluginname = args[0];
|
String pluginname = args[0];
|
||||||
Plugin plugin = yum.getServer().getPluginManager().getPlugin(pluginname);
|
Plugin plugin = Bukkit.getServer().getPluginManager().getPlugin(pluginname);
|
||||||
if (plugin != null) {
|
if (plugin != null) {
|
||||||
PluginsManager.deletePlugin(sender, plugin);
|
main.plugman.deletePlugin(sender, plugin);
|
||||||
} else {
|
} else {
|
||||||
sender.sendMessage("§c插件 " + pluginname + " 不存在或已卸载!");
|
sender.sendMessage("§c插件 " + pluginname + " 不存在或已卸载!");
|
||||||
}
|
}
|
||||||
|
@ -16,7 +16,6 @@ import org.bukkit.entity.Player;
|
|||||||
import org.bukkit.util.StringUtil;
|
import org.bukkit.util.StringUtil;
|
||||||
|
|
||||||
import cn.citycraft.Yum.Yum;
|
import cn.citycraft.Yum.Yum;
|
||||||
import cn.citycraft.Yum.utils.PluginsManager;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 子命令处理类
|
* 子命令处理类
|
||||||
@ -51,7 +50,7 @@ public class CommandHandler implements CommandExecutor, TabCompleter {
|
|||||||
/**
|
/**
|
||||||
* 插件主类
|
* 插件主类
|
||||||
*/
|
*/
|
||||||
Yum plugin;
|
Yum main;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 注册子命令
|
* 注册子命令
|
||||||
@ -60,7 +59,7 @@ public class CommandHandler implements CommandExecutor, TabCompleter {
|
|||||||
* - 插件主类
|
* - 插件主类
|
||||||
*/
|
*/
|
||||||
public CommandHandler(Yum yum) {
|
public CommandHandler(Yum yum) {
|
||||||
this.plugin = yum;
|
this.main = yum;
|
||||||
registerCommand(new CommandList(yum));
|
registerCommand(new CommandList(yum));
|
||||||
registerCommand(new CommandInstall(yum));
|
registerCommand(new CommandInstall(yum));
|
||||||
registerCommand(new CommandUpdate(yum));
|
registerCommand(new CommandUpdate(yum));
|
||||||
@ -125,7 +124,7 @@ public class CommandHandler implements CommandExecutor, TabCompleter {
|
|||||||
}
|
}
|
||||||
if (args.length == 2) {
|
if (args.length == 2) {
|
||||||
String partialPlugin = args[1];
|
String partialPlugin = args[1];
|
||||||
List<String> plugins = PluginsManager.getPluginNames(false);
|
List<String> plugins = main.plugman.getPluginNames(false);
|
||||||
StringUtil.copyPartialMatches(partialPlugin, plugins, completions);
|
StringUtil.copyPartialMatches(partialPlugin, plugins, completions);
|
||||||
}
|
}
|
||||||
Collections.sort(completions);
|
Collections.sort(completions);
|
||||||
|
@ -10,7 +10,6 @@ import org.bukkit.plugin.Plugin;
|
|||||||
import org.bukkit.plugin.PluginDescriptionFile;
|
import org.bukkit.plugin.PluginDescriptionFile;
|
||||||
|
|
||||||
import cn.citycraft.Yum.Yum;
|
import cn.citycraft.Yum.Yum;
|
||||||
import cn.citycraft.Yum.utils.PluginsManager;
|
|
||||||
import cn.citycraft.Yum.utils.StringUtil;
|
import cn.citycraft.Yum.utils.StringUtil;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -19,14 +18,14 @@ import cn.citycraft.Yum.utils.StringUtil;
|
|||||||
* @author 蒋天蓓 2015年8月12日下午2:04:05
|
* @author 蒋天蓓 2015年8月12日下午2:04:05
|
||||||
*/
|
*/
|
||||||
public class CommandInfo extends BaseCommand {
|
public class CommandInfo extends BaseCommand {
|
||||||
Yum yum;
|
Yum main;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param name
|
* @param name
|
||||||
*/
|
*/
|
||||||
public CommandInfo(Yum main) {
|
public CommandInfo(Yum main) {
|
||||||
super("info");
|
super("info");
|
||||||
this.yum = main;
|
this.main = main;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -40,7 +39,7 @@ public class CommandInfo extends BaseCommand {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
String pluginname = args[0];
|
String pluginname = args[0];
|
||||||
Plugin plugin = yum.getServer().getPluginManager().getPlugin(pluginname);
|
Plugin plugin = main.getServer().getPluginManager().getPlugin(pluginname);
|
||||||
if (plugin != null) {
|
if (plugin != null) {
|
||||||
PluginDescriptionFile desc = plugin.getDescription();
|
PluginDescriptionFile desc = plugin.getDescription();
|
||||||
sender.sendMessage("§6插件名称: §3" + plugin.getName());
|
sender.sendMessage("§6插件名称: §3" + plugin.getName());
|
||||||
@ -51,7 +50,7 @@ public class CommandInfo extends BaseCommand {
|
|||||||
StringUtil.sendStringArray(sender, desc.getDepend());
|
StringUtil.sendStringArray(sender, desc.getDepend());
|
||||||
sender.sendMessage("§6插件软依赖: §3" + (desc.getSoftDepend().size() == 0 ? "无" : ""));
|
sender.sendMessage("§6插件软依赖: §3" + (desc.getSoftDepend().size() == 0 ? "无" : ""));
|
||||||
StringUtil.sendStringArray(sender, desc.getSoftDepend());
|
StringUtil.sendStringArray(sender, desc.getSoftDepend());
|
||||||
sender.sendMessage("§6插件物理路径: §3" + PluginsManager.getPluginFile(plugin).getAbsolutePath());
|
sender.sendMessage("§6插件物理路径: §3" + main.plugman.getPluginFile(plugin).getAbsolutePath());
|
||||||
} else {
|
} else {
|
||||||
sender.sendMessage("§4错误: §c插件 " + pluginname + " 不存在或已卸载!");
|
sender.sendMessage("§4错误: §c插件 " + pluginname + " 不存在或已卸载!");
|
||||||
}
|
}
|
||||||
|
@ -9,6 +9,7 @@ import org.bukkit.command.CommandSender;
|
|||||||
import org.bukkit.plugin.Plugin;
|
import org.bukkit.plugin.Plugin;
|
||||||
|
|
||||||
import cn.citycraft.Yum.Yum;
|
import cn.citycraft.Yum.Yum;
|
||||||
|
import cn.citycraft.Yum.repository.PluginInfo;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 插件安装命令类
|
* 插件安装命令类
|
||||||
@ -16,14 +17,14 @@ import cn.citycraft.Yum.Yum;
|
|||||||
* @author 蒋天蓓 2015年8月12日下午2:04:05
|
* @author 蒋天蓓 2015年8月12日下午2:04:05
|
||||||
*/
|
*/
|
||||||
public class CommandInstall extends BaseCommand {
|
public class CommandInstall extends BaseCommand {
|
||||||
Yum yum;
|
Yum main;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param name
|
* @param name
|
||||||
*/
|
*/
|
||||||
public CommandInstall(Yum main) {
|
public CommandInstall(Yum main) {
|
||||||
super("install");
|
super("install");
|
||||||
this.yum = main;
|
this.main = main;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -31,10 +32,14 @@ public class CommandInstall extends BaseCommand {
|
|||||||
final String pluginname = args[0];
|
final String pluginname = args[0];
|
||||||
Plugin plugin = Bukkit.getServer().getPluginManager().getPlugin(pluginname);
|
Plugin plugin = Bukkit.getServer().getPluginManager().getPlugin(pluginname);
|
||||||
if (plugin == null) {
|
if (plugin == null) {
|
||||||
Bukkit.getScheduler().runTaskAsynchronously(yum, new Runnable() {
|
Bukkit.getScheduler().runTaskAsynchronously(main, new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
|
PluginInfo pi = main.repo.getPlugin(pluginname);
|
||||||
|
if (pi != null)
|
||||||
|
if (main.download.run(sender, pi.getMavenUrl())) {
|
||||||
|
main.plugman.load(sender, pluginname);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
@ -43,6 +48,24 @@ public class CommandInstall extends BaseCommand {
|
|||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// public static boolean installFromYum(CommandSender sender, String
|
||||||
|
// filename) {
|
||||||
|
// if (sender == null) {
|
||||||
|
// sender = Bukkit.getConsoleSender();
|
||||||
|
// }
|
||||||
|
// File file = new File("plugins/YumCenter", filename + ".jar");
|
||||||
|
// if (!file.exists()) {
|
||||||
|
// sender.sendMessage("§4错误: §c仓库不存在 " + filename + " 插件!");
|
||||||
|
// return false;
|
||||||
|
// }
|
||||||
|
// File pluginfile = new File("plugins", filename + ".jar");
|
||||||
|
// FileUtil.copyFile(file, pluginfile);
|
||||||
|
// if (PluginsManager.load(sender, filename + ".jar")) {
|
||||||
|
// sender.sendMessage("§6安装: §a从Yum仓库安装插件 " + filename + " 成功!");
|
||||||
|
// }
|
||||||
|
// return false;
|
||||||
|
// }
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getMinimumArguments() {
|
public int getMinimumArguments() {
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -9,7 +9,6 @@ import org.bukkit.command.CommandSender;
|
|||||||
import org.bukkit.plugin.Plugin;
|
import org.bukkit.plugin.Plugin;
|
||||||
|
|
||||||
import cn.citycraft.Yum.Yum;
|
import cn.citycraft.Yum.Yum;
|
||||||
import cn.citycraft.Yum.utils.PluginsManager;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 插件查看命令类
|
* 插件查看命令类
|
||||||
@ -17,14 +16,14 @@ import cn.citycraft.Yum.utils.PluginsManager;
|
|||||||
* @author 蒋天蓓 2015年8月12日下午2:04:05
|
* @author 蒋天蓓 2015年8月12日下午2:04:05
|
||||||
*/
|
*/
|
||||||
public class CommandList extends BaseCommand {
|
public class CommandList extends BaseCommand {
|
||||||
Yum plugin;
|
Yum main;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param name
|
* @param name
|
||||||
*/
|
*/
|
||||||
public CommandList(Yum main) {
|
public CommandList(Yum main) {
|
||||||
super("list");
|
super("list");
|
||||||
this.plugin = main;
|
this.main = main;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -36,7 +35,7 @@ public class CommandList extends BaseCommand {
|
|||||||
public void execute(CommandSender sender, String label, String[] args) throws CommandException {
|
public void execute(CommandSender sender, String label, String[] args) throws CommandException {
|
||||||
sender.sendMessage("§6[Yum仓库]§3服务器已安装插件: ");
|
sender.sendMessage("§6[Yum仓库]§3服务器已安装插件: ");
|
||||||
for (Plugin plugin : Bukkit.getPluginManager().getPlugins()) {
|
for (Plugin plugin : Bukkit.getPluginManager().getPlugins()) {
|
||||||
sender.sendMessage("§6 - " + PluginsManager.getFormattedName(plugin, true));
|
sender.sendMessage("§6 - " + main.plugman.getFormattedName(plugin, true));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
55
src/main/java/cn/citycraft/Yum/commands/CommandRepo.java
Normal file
55
src/main/java/cn/citycraft/Yum/commands/CommandRepo.java
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
package cn.citycraft.Yum.commands;
|
||||||
|
|
||||||
|
import org.bukkit.command.CommandException;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
|
||||||
|
import cn.citycraft.Yum.Yum;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 插件删除命令类
|
||||||
|
*
|
||||||
|
* @author 蒋天蓓 2015年8月12日下午2:04:05
|
||||||
|
*/
|
||||||
|
public class CommandRepo extends BaseCommand {
|
||||||
|
Yum main;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param name
|
||||||
|
*/
|
||||||
|
public CommandRepo(Yum main) {
|
||||||
|
super("delete");
|
||||||
|
this.main = main;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void execute(CommandSender sender, String label, String[] args) throws CommandException {
|
||||||
|
String cmd = args[0];
|
||||||
|
switch (cmd) {
|
||||||
|
case "add":
|
||||||
|
if (args.length == 2) {
|
||||||
|
main.repo.addRepositories(args[1]);
|
||||||
|
}
|
||||||
|
case "list":
|
||||||
|
case "clean":
|
||||||
|
main.repo.clean();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getMinimumArguments() {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getPossibleArguments() {
|
||||||
|
return "<add|del|clean|list> <仓库名称>";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isOnlyPlayerExecutable() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
@ -9,19 +9,20 @@ import org.bukkit.command.CommandSender;
|
|||||||
import org.bukkit.plugin.Plugin;
|
import org.bukkit.plugin.Plugin;
|
||||||
|
|
||||||
import cn.citycraft.Yum.Yum;
|
import cn.citycraft.Yum.Yum;
|
||||||
|
import cn.citycraft.Yum.repository.PluginInfo;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author 蒋天蓓 2015年8月12日下午2:04:05
|
* @author 蒋天蓓 2015年8月12日下午2:04:05
|
||||||
*/
|
*/
|
||||||
public class CommandUpdate extends BaseCommand {
|
public class CommandUpdate extends BaseCommand {
|
||||||
Yum yum;
|
Yum main;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param name
|
* @param name
|
||||||
*/
|
*/
|
||||||
public CommandUpdate(Yum main) {
|
public CommandUpdate(Yum main) {
|
||||||
super("update");
|
super("update");
|
||||||
this.yum = main;
|
this.main = main;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -30,10 +31,16 @@ public class CommandUpdate extends BaseCommand {
|
|||||||
final Plugin plugin = Bukkit.getServer().getPluginManager().getPlugin(pluginname);
|
final Plugin plugin = Bukkit.getServer().getPluginManager().getPlugin(pluginname);
|
||||||
sender.sendMessage("§a开始更新插件: " + pluginname);
|
sender.sendMessage("§a开始更新插件: " + pluginname);
|
||||||
if (plugin != null) {
|
if (plugin != null) {
|
||||||
Bukkit.getScheduler().runTaskAsynchronously(yum, new Runnable() {
|
Bukkit.getScheduler().runTaskAsynchronously(main, new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
|
PluginInfo pi = main.repo.getPlugin(pluginname);
|
||||||
|
if (pi != null)
|
||||||
|
if (main.download.run(sender, pi.getMavenUrl())) {
|
||||||
|
if (main.plugman.unload(sender, plugin)) {
|
||||||
|
main.plugman.load(sender, pluginname);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
package cn.citycraft.Yum.utils;
|
package cn.citycraft.Yum.manager;
|
||||||
|
|
||||||
import java.io.BufferedInputStream;
|
import java.io.BufferedInputStream;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
@ -14,7 +14,10 @@ import org.bukkit.command.CommandSender;
|
|||||||
import org.bukkit.plugin.Plugin;
|
import org.bukkit.plugin.Plugin;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author 蒋天蓓 2015年8月21日下午6:08:09 TODO
|
* 下载管理类
|
||||||
|
*
|
||||||
|
* @author 蒋天蓓
|
||||||
|
* 2015年8月21日下午6:08:09
|
||||||
*/
|
*/
|
||||||
public class DownloadManager {
|
public class DownloadManager {
|
||||||
Plugin plugin;
|
Plugin plugin;
|
||||||
@ -23,14 +26,27 @@ public class DownloadManager {
|
|||||||
this.plugin = main;
|
this.plugin = main;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 从地址获得文件名称
|
||||||
|
*
|
||||||
|
* @param url
|
||||||
|
* - 地址
|
||||||
|
* @return 文件名称
|
||||||
|
*/
|
||||||
public String getFileName(String url) {
|
public String getFileName(String url) {
|
||||||
int end = url.lastIndexOf('/');
|
int end = url.lastIndexOf('/');
|
||||||
return url.substring(end + 1);
|
return url.substring(end + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 从地址获得文件名称
|
||||||
|
*
|
||||||
|
* @param url
|
||||||
|
* - 地址
|
||||||
|
* @return 文件名称
|
||||||
|
*/
|
||||||
public String getFileName(URL url) {
|
public String getFileName(URL url) {
|
||||||
int end = url.getFile().lastIndexOf('/');
|
return getFileName(url.getFile());
|
||||||
return url.getFile().substring(end + 1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private String getPer(int per) {
|
private String getPer(int per) {
|
||||||
@ -47,6 +63,41 @@ public class DownloadManager {
|
|||||||
return sb.toString();
|
return sb.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 从网络下载文件
|
||||||
|
*
|
||||||
|
* @param urlstring
|
||||||
|
* - 下载地址
|
||||||
|
* @return 是否成功
|
||||||
|
*/
|
||||||
|
public boolean run(String urlstring) {
|
||||||
|
return run(null, urlstring);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 从网络下载文件
|
||||||
|
*
|
||||||
|
* @param sender
|
||||||
|
* - 命令发送者
|
||||||
|
* @param urlstring
|
||||||
|
* - 下载地址
|
||||||
|
* @return 是否成功
|
||||||
|
*/
|
||||||
|
public boolean run(CommandSender sender, String urlstring) {
|
||||||
|
return run(sender, urlstring, new File("plugins", getFileName(urlstring)));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 从网络下载文件
|
||||||
|
*
|
||||||
|
* @param sender
|
||||||
|
* - 命令发送者
|
||||||
|
* @param urlstring
|
||||||
|
* - 下载地址
|
||||||
|
* @param file
|
||||||
|
* - 保存文件
|
||||||
|
* @return 是否成功
|
||||||
|
*/
|
||||||
public boolean run(CommandSender sender, String urlstring, File file) {
|
public boolean run(CommandSender sender, String urlstring, File file) {
|
||||||
URL url;
|
URL url;
|
||||||
try {
|
try {
|
||||||
@ -58,6 +109,17 @@ public class DownloadManager {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 从网络下载文件
|
||||||
|
*
|
||||||
|
* @param sender
|
||||||
|
* - 命令发送者
|
||||||
|
* @param url
|
||||||
|
* - 下载地址
|
||||||
|
* @param file
|
||||||
|
* - 保存文件
|
||||||
|
* @return 是否成功
|
||||||
|
*/
|
||||||
public boolean run(CommandSender sender, URL url, File file) {
|
public boolean run(CommandSender sender, URL url, File file) {
|
||||||
BufferedInputStream in = null;
|
BufferedInputStream in = null;
|
||||||
FileOutputStream fout = null;
|
FileOutputStream fout = null;
|
||||||
@ -108,10 +170,28 @@ public class DownloadManager {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 从网络下载文件
|
||||||
|
*
|
||||||
|
* @param urlstring
|
||||||
|
* - 下载地址
|
||||||
|
* @param file
|
||||||
|
* - 保存文件
|
||||||
|
* @return 是否成功
|
||||||
|
*/
|
||||||
public boolean run(String urlstring, File file) {
|
public boolean run(String urlstring, File file) {
|
||||||
return run(null, urlstring, file);
|
return run(null, urlstring, file);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 从网络下载文件
|
||||||
|
*
|
||||||
|
* @param url
|
||||||
|
* - 下载地址
|
||||||
|
* @param file
|
||||||
|
* - 保存文件
|
||||||
|
* @return 是否成功
|
||||||
|
*/
|
||||||
public boolean run(URL url, File file) {
|
public boolean run(URL url, File file) {
|
||||||
return run(null, url, file);
|
return run(null, url, file);
|
||||||
}
|
}
|
@ -1,13 +1,10 @@
|
|||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
package cn.citycraft.Yum.utils;
|
package cn.citycraft.Yum.manager;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.FileInputStream;
|
|
||||||
import java.io.FileOutputStream;
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import java.net.URLClassLoader;
|
import java.net.URLClassLoader;
|
||||||
@ -28,10 +25,14 @@ import org.bukkit.event.Event;
|
|||||||
import org.bukkit.plugin.InvalidDescriptionException;
|
import org.bukkit.plugin.InvalidDescriptionException;
|
||||||
import org.bukkit.plugin.InvalidPluginException;
|
import org.bukkit.plugin.InvalidPluginException;
|
||||||
import org.bukkit.plugin.Plugin;
|
import org.bukkit.plugin.Plugin;
|
||||||
|
import org.bukkit.plugin.PluginDescriptionFile;
|
||||||
import org.bukkit.plugin.PluginManager;
|
import org.bukkit.plugin.PluginManager;
|
||||||
import org.bukkit.plugin.RegisteredListener;
|
import org.bukkit.plugin.RegisteredListener;
|
||||||
import org.bukkit.plugin.UnknownDependencyException;
|
import org.bukkit.plugin.UnknownDependencyException;
|
||||||
|
|
||||||
|
import cn.citycraft.Yum.Yum;
|
||||||
|
import cn.citycraft.Yum.utils.StringUtil;
|
||||||
|
|
||||||
import com.google.common.base.Joiner;
|
import com.google.common.base.Joiner;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -40,43 +41,52 @@ import com.google.common.base.Joiner;
|
|||||||
* @author 蒋天蓓 2015年8月21日下午7:03:26
|
* @author 蒋天蓓 2015年8月21日下午7:03:26
|
||||||
*/
|
*/
|
||||||
public class PluginsManager {
|
public class PluginsManager {
|
||||||
|
Yum main;
|
||||||
|
|
||||||
public static boolean copyFile(File src, File des) {
|
public PluginsManager(Yum yum) {
|
||||||
InputStream inStream = null; // 读入原文件
|
this.main = yum;
|
||||||
FileOutputStream fs = null;
|
|
||||||
try {
|
|
||||||
int byteread = 0;
|
|
||||||
if (!src.exists())
|
|
||||||
return false;
|
|
||||||
inStream = new FileInputStream(src); // 读入原文件
|
|
||||||
fs = new FileOutputStream(des);
|
|
||||||
byte[] buffer = new byte[1024];
|
|
||||||
while ((byteread = inStream.read(buffer)) != -1) {
|
|
||||||
fs.write(buffer, 0, byteread);
|
|
||||||
}
|
|
||||||
inStream.close();
|
|
||||||
fs.close();
|
|
||||||
return true;
|
|
||||||
} catch (Exception e) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean deletePlugin(CommandSender sender, Plugin plugin) {
|
/**
|
||||||
|
* 删除插件
|
||||||
|
*
|
||||||
|
* @param sender
|
||||||
|
* - 命令发送者
|
||||||
|
* @param plugin
|
||||||
|
* - 插件
|
||||||
|
* @return 是否成功
|
||||||
|
*/
|
||||||
|
public boolean deletePlugin(CommandSender sender, Plugin plugin) {
|
||||||
return unload(sender, plugin) && getPluginFile(plugin).delete();
|
return unload(sender, plugin) && getPluginFile(plugin).delete();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean deletePlugin(Plugin plugin) {
|
/**
|
||||||
|
* 删除插件
|
||||||
|
*
|
||||||
|
* @param plugin
|
||||||
|
* - 插件
|
||||||
|
* @return 是否成功
|
||||||
|
*/
|
||||||
|
public boolean deletePlugin(Plugin plugin) {
|
||||||
return deletePlugin(Bukkit.getConsoleSender(), plugin);
|
return deletePlugin(Bukkit.getConsoleSender(), plugin);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void disable(Plugin plugin) {
|
/**
|
||||||
|
* 关闭插件
|
||||||
|
*
|
||||||
|
* @param plugin
|
||||||
|
* - 插件
|
||||||
|
*/
|
||||||
|
public void disable(Plugin plugin) {
|
||||||
if ((plugin.isEnabled()) && (plugin != null)) {
|
if ((plugin.isEnabled()) && (plugin != null)) {
|
||||||
Bukkit.getPluginManager().disablePlugin(plugin);
|
Bukkit.getPluginManager().disablePlugin(plugin);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void disableAll() {
|
/**
|
||||||
|
* 关闭所有插件
|
||||||
|
*/
|
||||||
|
public void disableAll() {
|
||||||
for (Plugin plugin : Bukkit.getPluginManager().getPlugins()) {
|
for (Plugin plugin : Bukkit.getPluginManager().getPlugins()) {
|
||||||
if (!isIgnored(plugin)) {
|
if (!isIgnored(plugin)) {
|
||||||
disable(plugin);
|
disable(plugin);
|
||||||
@ -84,13 +94,22 @@ public class PluginsManager {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void enable(Plugin plugin) {
|
/**
|
||||||
|
* 启用插件
|
||||||
|
*
|
||||||
|
* @param plugin
|
||||||
|
* - 插件
|
||||||
|
*/
|
||||||
|
public void enable(Plugin plugin) {
|
||||||
if ((!plugin.isEnabled()) && (plugin != null)) {
|
if ((!plugin.isEnabled()) && (plugin != null)) {
|
||||||
Bukkit.getPluginManager().enablePlugin(plugin);
|
Bukkit.getPluginManager().enablePlugin(plugin);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void enableAll() {
|
/**
|
||||||
|
* 启用所有插件
|
||||||
|
*/
|
||||||
|
public void enableAll() {
|
||||||
for (Plugin plugin : Bukkit.getPluginManager().getPlugins()) {
|
for (Plugin plugin : Bukkit.getPluginManager().getPlugins()) {
|
||||||
if (!isIgnored(plugin)) {
|
if (!isIgnored(plugin)) {
|
||||||
enable(plugin);
|
enable(plugin);
|
||||||
@ -98,11 +117,27 @@ public class PluginsManager {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String getFormattedName(Plugin plugin) {
|
/**
|
||||||
|
* 获得格式化的插件名称
|
||||||
|
*
|
||||||
|
* @param plugin
|
||||||
|
* - 插件
|
||||||
|
* @return 格式化的插件名称
|
||||||
|
*/
|
||||||
|
public String getFormattedName(Plugin plugin) {
|
||||||
return getFormattedName(plugin, false);
|
return getFormattedName(plugin, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String getFormattedName(Plugin plugin, boolean includeVersions) {
|
/**
|
||||||
|
* 获得格式化的插件名称(可带版本)
|
||||||
|
*
|
||||||
|
* @param plugin
|
||||||
|
* - 插件
|
||||||
|
* @param includeVersions
|
||||||
|
* - 是否包括版本
|
||||||
|
* @return 格式化的插件名称
|
||||||
|
*/
|
||||||
|
public String getFormattedName(Plugin plugin, boolean includeVersions) {
|
||||||
ChatColor color = plugin.isEnabled() ? ChatColor.GREEN : ChatColor.RED;
|
ChatColor color = plugin.isEnabled() ? ChatColor.GREEN : ChatColor.RED;
|
||||||
String pluginName = color + plugin.getName();
|
String pluginName = color + plugin.getName();
|
||||||
if (includeVersions) {
|
if (includeVersions) {
|
||||||
@ -111,15 +146,36 @@ public class PluginsManager {
|
|||||||
return pluginName;
|
return pluginName;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Plugin getPluginByName(String name) {
|
/**
|
||||||
|
* 通过名称获得插件
|
||||||
|
*
|
||||||
|
* @param name
|
||||||
|
* - 名称
|
||||||
|
* @return 插件
|
||||||
|
*/
|
||||||
|
public Plugin getPluginByName(String name) {
|
||||||
return Bukkit.getPluginManager().getPlugin(name);
|
return Bukkit.getPluginManager().getPlugin(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Plugin getPluginByName(String[] args, int start) {
|
/**
|
||||||
|
* 通过名称获得插件(处理带空格的插件)
|
||||||
|
*
|
||||||
|
* @param name
|
||||||
|
* - 名称
|
||||||
|
* @return 插件
|
||||||
|
*/
|
||||||
|
public Plugin getPluginByName(String[] args, int start) {
|
||||||
return getPluginByName(StringUtil.consolidateStrings(args, start));
|
return getPluginByName(StringUtil.consolidateStrings(args, start));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static File getPluginFile(Plugin plugin) {
|
/**
|
||||||
|
* 获得插件绝对路径
|
||||||
|
*
|
||||||
|
* @param plugin
|
||||||
|
* - 插件
|
||||||
|
* @return 插件的绝对路径
|
||||||
|
*/
|
||||||
|
public File getPluginFile(Plugin plugin) {
|
||||||
File file = null;
|
File file = null;
|
||||||
ClassLoader cl = plugin.getClass().getClassLoader();
|
ClassLoader cl = plugin.getClass().getClassLoader();
|
||||||
if ((cl instanceof URLClassLoader)) {
|
if ((cl instanceof URLClassLoader)) {
|
||||||
@ -131,7 +187,7 @@ public class PluginsManager {
|
|||||||
return file;
|
return file;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static List<String> getPluginNames(boolean fullName) {
|
public List<String> getPluginNames(boolean fullName) {
|
||||||
List<String> plugins = new ArrayList<String>();
|
List<String> plugins = new ArrayList<String>();
|
||||||
for (Plugin plugin : Bukkit.getPluginManager().getPlugins()) {
|
for (Plugin plugin : Bukkit.getPluginManager().getPlugins()) {
|
||||||
plugins.add(fullName ? plugin.getDescription().getFullName() : plugin.getName());
|
plugins.add(fullName ? plugin.getDescription().getFullName() : plugin.getName());
|
||||||
@ -139,14 +195,28 @@ public class PluginsManager {
|
|||||||
return plugins;
|
return plugins;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String getPluginVersion(String name) {
|
/**
|
||||||
|
* 获得插件版本
|
||||||
|
*
|
||||||
|
* @param name
|
||||||
|
* - 插件名称
|
||||||
|
* @return 插件版本
|
||||||
|
*/
|
||||||
|
public String getPluginVersion(String name) {
|
||||||
Plugin plugin = getPluginByName(name);
|
Plugin plugin = getPluginByName(name);
|
||||||
if ((plugin != null) && (plugin.getDescription() != null))
|
if ((plugin != null) && (plugin.getDescription() != null))
|
||||||
return plugin.getDescription().getVersion();
|
return plugin.getDescription().getVersion();
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String getUsages(Plugin plugin) {
|
/**
|
||||||
|
* 获得插件命令
|
||||||
|
*
|
||||||
|
* @param plugin
|
||||||
|
* - 插件
|
||||||
|
* @return 插件命令
|
||||||
|
*/
|
||||||
|
public String getUsages(Plugin plugin) {
|
||||||
List<String> parsedCommands = new ArrayList<String>();
|
List<String> parsedCommands = new ArrayList<String>();
|
||||||
|
|
||||||
Map<String, Map<String, Object>> commands = plugin.getDescription().getCommands();
|
Map<String, Map<String, Object>> commands = plugin.getDescription().getCommands();
|
||||||
@ -165,28 +235,25 @@ public class PluginsManager {
|
|||||||
return Joiner.on(", ").join(parsedCommands);
|
return Joiner.on(", ").join(parsedCommands);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean installFromYum(CommandSender sender, String filename) {
|
/**
|
||||||
if (sender == null) {
|
* 判断插件是否在忽略列表
|
||||||
sender = Bukkit.getConsoleSender();
|
*
|
||||||
}
|
* @param plugin
|
||||||
File file = new File("plugins/YumCenter", filename + ".jar");
|
* - 插件
|
||||||
if (!file.exists()) {
|
* @return 是否
|
||||||
sender.sendMessage("§4错误: §c仓库不存在 " + filename + " 插件!");
|
*/
|
||||||
return false;
|
public boolean isIgnored(Plugin plugin) {
|
||||||
}
|
|
||||||
File pluginfile = new File("plugins", filename + ".jar");
|
|
||||||
copyFile(file, pluginfile);
|
|
||||||
if (load(sender, filename + ".jar")) {
|
|
||||||
sender.sendMessage("§6安装: §a从Yum仓库安装插件 " + filename + " 成功!");
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean isIgnored(Plugin plugin) {
|
|
||||||
return isIgnored(plugin.getName());
|
return isIgnored(plugin.getName());
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isIgnored(String plugin) {
|
/**
|
||||||
|
* 判断插件是否在忽略列表
|
||||||
|
*
|
||||||
|
* @param plugin
|
||||||
|
* - 插件名称
|
||||||
|
* @return 是否
|
||||||
|
*/
|
||||||
|
public boolean isIgnored(String plugin) {
|
||||||
for (String name : new ArrayList<String>()) {
|
for (String name : new ArrayList<String>()) {
|
||||||
if (name.equalsIgnoreCase(plugin))
|
if (name.equalsIgnoreCase(plugin))
|
||||||
return true;
|
return true;
|
||||||
@ -194,12 +261,16 @@ public class PluginsManager {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean load(CommandSender sender, Plugin plugin) {
|
/**
|
||||||
String filename = getPluginFile(plugin).getName();
|
* 载入插件
|
||||||
return load(sender, filename);
|
*
|
||||||
}
|
* @param sender
|
||||||
|
* - 命令发送者
|
||||||
public static boolean load(CommandSender sender, String name) {
|
* @param name
|
||||||
|
* - 插件名称
|
||||||
|
* @return 是否成功
|
||||||
|
*/
|
||||||
|
public boolean load(CommandSender sender, String name) {
|
||||||
Plugin target = null;
|
Plugin target = null;
|
||||||
|
|
||||||
if (sender == null) {
|
if (sender == null) {
|
||||||
@ -221,20 +292,35 @@ public class PluginsManager {
|
|||||||
File pluginFile = new File(pluginDir, name);
|
File pluginFile = new File(pluginDir, name);
|
||||||
|
|
||||||
if (!pluginFile.isFile() && !new File(updateDir, name).isFile()) {
|
if (!pluginFile.isFile() && !new File(updateDir, name).isFile()) {
|
||||||
sender.sendMessage("§c在插件目录和更新目录未找到 " + name + " 插件 请确认文件是否存在!");
|
pluginFile = null;
|
||||||
return false;
|
for (File file : pluginDir.listFiles()) {
|
||||||
|
if (file.getName().endsWith(".jar")) {
|
||||||
|
try {
|
||||||
|
PluginDescriptionFile desc = main.getPluginLoader().getPluginDescription(file);
|
||||||
|
if (desc.getName().equalsIgnoreCase(name)) {
|
||||||
|
pluginFile = file;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} catch (InvalidDescriptionException e) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (pluginFile == null) {
|
||||||
|
sender.sendMessage("§c在插件目录和更新目录均未找到 " + name + " 插件 请确认文件是否存在!");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
target = Bukkit.getPluginManager().loadPlugin(pluginFile);
|
target = Bukkit.getPluginManager().loadPlugin(pluginFile);
|
||||||
} catch (InvalidDescriptionException e) {
|
} catch (InvalidDescriptionException e) {
|
||||||
sender.sendMessage("§c异常: " + e.getMessage() + " 插件: " + name + " 的plugin.yml文件存在错误!");
|
sender.sendMessage("§4异常: §c" + e.getMessage() + " 插件: " + name + " 的plugin.yml文件存在错误!");
|
||||||
return false;
|
return false;
|
||||||
} catch (InvalidPluginException e) {
|
} catch (InvalidPluginException e) {
|
||||||
sender.sendMessage("§c异常: " + e.getMessage() + " 文件: " + name + " 不是一个可载入的插件!");
|
sender.sendMessage("§4异常: §c" + e.getMessage() + " 文件: " + name + " 不是一个可载入的插件!");
|
||||||
return false;
|
return false;
|
||||||
} catch (UnknownDependencyException e) {
|
} catch (UnknownDependencyException e) {
|
||||||
sender.sendMessage("§c异常: " + e.getMessage() + " 插件: " + name + " 缺少部分依赖项目!");
|
sender.sendMessage("§4异常: §c" + e.getMessage() + " 插件: " + name + " 缺少部分依赖项目!");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -244,25 +330,40 @@ public class PluginsManager {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean load(Plugin plugin) {
|
public boolean load(String name) {
|
||||||
return load(Bukkit.getConsoleSender(), plugin);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean load(String name) {
|
|
||||||
return load(Bukkit.getConsoleSender(), name);
|
return load(Bukkit.getConsoleSender(), name);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean reload(CommandSender sender, Plugin plugin) {
|
/**
|
||||||
|
* 删除重载插件
|
||||||
|
*
|
||||||
|
* @param sender
|
||||||
|
* - 命令发送者
|
||||||
|
* @param plugin
|
||||||
|
* - 插件
|
||||||
|
* @return 是否成功
|
||||||
|
*/
|
||||||
|
public boolean reload(CommandSender sender, Plugin plugin) {
|
||||||
if (plugin != null)
|
if (plugin != null)
|
||||||
return unload(sender, plugin) && load(sender, plugin);
|
return unload(sender, plugin) && load(sender, plugin.getName());
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean reload(Plugin plugin) {
|
/**
|
||||||
|
* 重载插件
|
||||||
|
*
|
||||||
|
* @param plugin
|
||||||
|
* - 插件
|
||||||
|
* @return 是否成功
|
||||||
|
*/
|
||||||
|
public boolean reload(Plugin plugin) {
|
||||||
return reload(Bukkit.getConsoleSender(), plugin);
|
return reload(Bukkit.getConsoleSender(), plugin);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void reloadAll() {
|
/**
|
||||||
|
* 重载所有插件
|
||||||
|
*/
|
||||||
|
public void reloadAll() {
|
||||||
for (Plugin plugin : Bukkit.getPluginManager().getPlugins()) {
|
for (Plugin plugin : Bukkit.getPluginManager().getPlugins()) {
|
||||||
if (!isIgnored(plugin)) {
|
if (!isIgnored(plugin)) {
|
||||||
reload(plugin);
|
reload(plugin);
|
||||||
@ -270,8 +371,17 @@ public class PluginsManager {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 卸载插件
|
||||||
|
*
|
||||||
|
* @param sender
|
||||||
|
* - 命令发送者
|
||||||
|
* @param plugin
|
||||||
|
* - 插件
|
||||||
|
* @return 是否成功
|
||||||
|
*/
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public static boolean unload(CommandSender sender, Plugin plugin) {
|
public boolean unload(CommandSender sender, Plugin plugin) {
|
||||||
String name = plugin.getName();
|
String name = plugin.getName();
|
||||||
if (sender == null) {
|
if (sender == null) {
|
||||||
sender = Bukkit.getConsoleSender();
|
sender = Bukkit.getConsoleSender();
|
||||||
@ -309,7 +419,7 @@ public class PluginsManager {
|
|||||||
knownCommandsField.setAccessible(true);
|
knownCommandsField.setAccessible(true);
|
||||||
knownCommands = (Map<String, Command>) knownCommandsField.get(commandMap);
|
knownCommands = (Map<String, Command>) knownCommandsField.get(commandMap);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
sender.sendMessage("§c异常: " + e.getMessage() + " 插件 " + name + " 卸载失败!");
|
sender.sendMessage("§4异常: §c" + e.getMessage() + " 插件 " + name + " 卸载失败!");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -333,6 +443,7 @@ public class PluginsManager {
|
|||||||
if (command.getPlugin() == next) {
|
if (command.getPlugin() == next) {
|
||||||
command.unregister(commandMap);
|
command.unregister(commandMap);
|
||||||
it.remove();
|
it.remove();
|
||||||
|
sender.sendMessage("§6卸载: §a插件: " + name + " 的命令!");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -345,6 +456,7 @@ public class PluginsManager {
|
|||||||
RegisteredListener value = it.next();
|
RegisteredListener value = it.next();
|
||||||
if (value.getPlugin().getName().equals(name)) {
|
if (value.getPlugin().getName().equals(name)) {
|
||||||
it.remove();
|
it.remove();
|
||||||
|
sender.sendMessage("§6卸载: §a插件: " + name + " 的监听器!");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -353,6 +465,7 @@ public class PluginsManager {
|
|||||||
if ((cl instanceof URLClassLoader)) {
|
if ((cl instanceof URLClassLoader)) {
|
||||||
try {
|
try {
|
||||||
((URLClassLoader) cl).close();
|
((URLClassLoader) cl).close();
|
||||||
|
sender.sendMessage("§6卸载: §a插件: " + name + " 的类加载器!");
|
||||||
} catch (IOException ex) {
|
} catch (IOException ex) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -360,7 +473,14 @@ public class PluginsManager {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean unload(Plugin plugin) {
|
/**
|
||||||
|
* 卸载插件
|
||||||
|
*
|
||||||
|
* @param plugin
|
||||||
|
* - 卸载插件
|
||||||
|
* @return 是否成功
|
||||||
|
*/
|
||||||
|
public boolean unload(Plugin plugin) {
|
||||||
return unload(Bukkit.getConsoleSender(), plugin);
|
return unload(Bukkit.getConsoleSender(), plugin);
|
||||||
}
|
}
|
||||||
}
|
}
|
19
src/main/java/cn/citycraft/Yum/repository/Package.java
Normal file
19
src/main/java/cn/citycraft/Yum/repository/Package.java
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
package cn.citycraft.Yum.repository;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TODO
|
||||||
|
*
|
||||||
|
* @author 蒋天蓓
|
||||||
|
* 2015年8月31日下午7:42:22
|
||||||
|
*/
|
||||||
|
public class Package {
|
||||||
|
public String name;
|
||||||
|
public String url;
|
||||||
|
public List<Plugin> plugins = new ArrayList<>();
|
||||||
|
}
|
16
src/main/java/cn/citycraft/Yum/repository/Plugin.java
Normal file
16
src/main/java/cn/citycraft/Yum/repository/Plugin.java
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
package cn.citycraft.Yum.repository;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TODO
|
||||||
|
*
|
||||||
|
* @author 蒋天蓓
|
||||||
|
* 2015年8月31日下午7:42:54
|
||||||
|
*/
|
||||||
|
public class Plugin {
|
||||||
|
public String groupId;
|
||||||
|
public String artifactId;
|
||||||
|
public String version;
|
||||||
|
}
|
20
src/main/java/cn/citycraft/Yum/repository/PluginInfo.java
Normal file
20
src/main/java/cn/citycraft/Yum/repository/PluginInfo.java
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
package cn.citycraft.Yum.repository;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TODO
|
||||||
|
*
|
||||||
|
* @author 蒋天蓓
|
||||||
|
* 2015年8月31日下午7:43:19
|
||||||
|
*/
|
||||||
|
public class PluginInfo {
|
||||||
|
public Plugin plugin;
|
||||||
|
public String url;
|
||||||
|
|
||||||
|
public String getMavenUrl() {
|
||||||
|
return String.format(url + "/%1$s/%2$s/%3$s/%2$s-%3$s.jar", plugin.groupId.replace(".", "/"), plugin.artifactId, plugin.version);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getFileName() {
|
||||||
|
return String.format("%1$s-%2$s.jar", plugin.artifactId, plugin.version);
|
||||||
|
}
|
||||||
|
}
|
16
src/main/java/cn/citycraft/Yum/repository/Repository.java
Normal file
16
src/main/java/cn/citycraft/Yum/repository/Repository.java
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
package cn.citycraft.Yum.repository;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TODO
|
||||||
|
*
|
||||||
|
* @author 蒋天蓓
|
||||||
|
* 2015年8月31日下午7:41:53
|
||||||
|
*/
|
||||||
|
public class Repository {
|
||||||
|
public String id;
|
||||||
|
public String url;
|
||||||
|
public String type;
|
||||||
|
}
|
147
src/main/java/cn/citycraft/Yum/repository/RepositoryManager.java
Normal file
147
src/main/java/cn/citycraft/Yum/repository/RepositoryManager.java
Normal file
@ -0,0 +1,147 @@
|
|||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
package cn.citycraft.Yum.repository;
|
||||||
|
|
||||||
|
import java.io.BufferedReader;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStreamReader;
|
||||||
|
import java.net.URL;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map.Entry;
|
||||||
|
|
||||||
|
import cn.citycraft.Yum.Yum;
|
||||||
|
|
||||||
|
import com.google.common.base.Charsets;
|
||||||
|
import com.google.gson.Gson;
|
||||||
|
import com.google.gson.JsonSyntaxException;
|
||||||
|
import com.google.gson.reflect.TypeToken;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 仓库管理类
|
||||||
|
*
|
||||||
|
* @author 蒋天蓓
|
||||||
|
*/
|
||||||
|
public class RepositoryManager {
|
||||||
|
Gson gson = new Gson();
|
||||||
|
HashMap<String, PluginInfo> plugins = new HashMap<String, PluginInfo>();
|
||||||
|
|
||||||
|
Yum main;
|
||||||
|
|
||||||
|
public RepositoryManager(Yum yum) {
|
||||||
|
this.main = yum;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void clean() {
|
||||||
|
plugins.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void update(Package pkg) {
|
||||||
|
for (Plugin plugin : pkg.plugins) {
|
||||||
|
PluginInfo pi = new PluginInfo();
|
||||||
|
pi.plugin = plugin;
|
||||||
|
pi.url = pkg.url;
|
||||||
|
plugins.put(plugin.groupId + plugin.artifactId, pi);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public String cacheToJson() {
|
||||||
|
return gson.toJson(plugins);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean jsonToCache(String json) {
|
||||||
|
if (json == "") {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
plugins = gson.fromJson(json, new TypeToken<HashMap<String, PluginInfo>>() {
|
||||||
|
}.getType());
|
||||||
|
return true;
|
||||||
|
} catch (JsonSyntaxException e) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean addRepositories(String urlstring) {
|
||||||
|
String json = getHtml(urlstring);
|
||||||
|
if (json == "") {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
List<Repository> lrepo = jsonToRepositories(json);
|
||||||
|
if (lrepo == null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
for (Repository repository : lrepo) {
|
||||||
|
addPackage(repository.url);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean addPackage(String urlstring) {
|
||||||
|
String json = getHtml(urlstring);
|
||||||
|
if (json == "") {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
Package pkg = jsonToPackage(json);
|
||||||
|
if (pkg == null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
update(pkg);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getHtml(String urlstring) {
|
||||||
|
String html = "";
|
||||||
|
try {
|
||||||
|
URL url = new URL(urlstring);
|
||||||
|
BufferedReader br = new BufferedReader(new InputStreamReader(url.openStream(), Charsets.UTF_8));
|
||||||
|
String line;
|
||||||
|
while ((line = br.readLine()) != null) {
|
||||||
|
html += line;
|
||||||
|
}
|
||||||
|
return html;
|
||||||
|
} catch (IOException e) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public PluginInfo getPluginInfo(String groupId, String artifactId) {
|
||||||
|
return plugins.get(groupId + artifactId);
|
||||||
|
}
|
||||||
|
|
||||||
|
public PluginInfo getPlugin(String name) {
|
||||||
|
for (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))
|
||||||
|
li.add(plugin.getValue());
|
||||||
|
}
|
||||||
|
return li;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<Repository> jsonToRepositories(String json) {
|
||||||
|
try {
|
||||||
|
return gson.fromJson(json, new TypeToken<List<Repository>>() {
|
||||||
|
}.getType());
|
||||||
|
} catch (JsonSyntaxException e) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public Package jsonToPackage(String json) {
|
||||||
|
try {
|
||||||
|
return gson.fromJson(json, Package.class);
|
||||||
|
} catch (JsonSyntaxException e) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
36
src/main/java/cn/citycraft/Yum/sql/MySQLHelper.java
Normal file
36
src/main/java/cn/citycraft/Yum/sql/MySQLHelper.java
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
package cn.citycraft.Yum.sql;
|
||||||
|
|
||||||
|
// import java.sql.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 数据库操作类
|
||||||
|
*
|
||||||
|
* @author 蒋天蓓 2015年7月14日下午3:25:06
|
||||||
|
*/
|
||||||
|
public class MySQLHelper extends SQLHelper {
|
||||||
|
|
||||||
|
private static String drivername = "com.mysql.jdbc.Driver";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 初始化连接信息
|
||||||
|
*
|
||||||
|
* @param host
|
||||||
|
* - 域名
|
||||||
|
* @param port
|
||||||
|
* - 端口
|
||||||
|
* @param dbname
|
||||||
|
* - 数据库
|
||||||
|
* @param username
|
||||||
|
* - 用户名
|
||||||
|
* @param password
|
||||||
|
* - 密码
|
||||||
|
*/
|
||||||
|
public MySQLHelper(String host, String port, String dbname, String username, String password) {
|
||||||
|
super(password, password, drivername, getUrl(host, port, dbname));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String getUrl(String host, String port, String dbaName) {
|
||||||
|
String Encode = "?&useUnicode=true&characterEncoding=utf-8";
|
||||||
|
return "jdbc:mysql://" + host + ":" + port + "/" + dbaName + Encode;
|
||||||
|
}
|
||||||
|
}
|
428
src/main/java/cn/citycraft/Yum/sql/SQLHelper.java
Normal file
428
src/main/java/cn/citycraft/Yum/sql/SQLHelper.java
Normal file
@ -0,0 +1,428 @@
|
|||||||
|
package cn.citycraft.Yum.sql;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 数据库连接、选择、更新、删除演示
|
||||||
|
*/
|
||||||
|
// import java.sql.*;
|
||||||
|
import java.io.BufferedReader;
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileReader;
|
||||||
|
import java.sql.Connection;
|
||||||
|
import java.sql.DatabaseMetaData;
|
||||||
|
import java.sql.DriverManager;
|
||||||
|
import java.sql.PreparedStatement;
|
||||||
|
import java.sql.ResultSet;
|
||||||
|
import java.sql.SQLException;
|
||||||
|
import java.sql.Statement;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Map.Entry;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author 蒋天蓓 2015年7月14日下午3:25:06 数据库操作类
|
||||||
|
*/
|
||||||
|
public abstract class SQLHelper {
|
||||||
|
|
||||||
|
// ///////////////////////////////////////———–>>>数据成员 and 构造函数
|
||||||
|
protected Connection dbconn = null;
|
||||||
|
protected Statement dbstate = null;
|
||||||
|
protected ResultSet dbresult = null;
|
||||||
|
|
||||||
|
protected String username;
|
||||||
|
protected String password;
|
||||||
|
protected String url;
|
||||||
|
|
||||||
|
protected String drivername;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 初始化连接信息
|
||||||
|
*
|
||||||
|
* @param username
|
||||||
|
* - 用户名
|
||||||
|
* @param password
|
||||||
|
* - 密码
|
||||||
|
* @param drivername
|
||||||
|
* - 驱动名称
|
||||||
|
* @param url
|
||||||
|
* - 数据库地址
|
||||||
|
*/
|
||||||
|
public SQLHelper(String username, String password, String drivername, String url) {
|
||||||
|
try {
|
||||||
|
Class.forName(drivername).newInstance();
|
||||||
|
} catch (Exception e) {
|
||||||
|
}
|
||||||
|
this.username = username;
|
||||||
|
this.password = password;
|
||||||
|
this.drivername = drivername;
|
||||||
|
this.url = url;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建数据表
|
||||||
|
*
|
||||||
|
* @param tableName
|
||||||
|
* - 表名
|
||||||
|
* @param fields
|
||||||
|
* - 字段参数
|
||||||
|
* @param Conditions
|
||||||
|
* -附加值
|
||||||
|
* @return 运行结果
|
||||||
|
*/
|
||||||
|
public boolean createTables(String tableName, HashMap<String, String> fields, String Conditions) {
|
||||||
|
if (!dbConnection())
|
||||||
|
return false;
|
||||||
|
String kv = "";
|
||||||
|
for (Entry<String, String> kvs : fields.entrySet()) {
|
||||||
|
kv += "`" + kvs.getKey() + "` " + kvs.getValue() + " NOT NULL , ";
|
||||||
|
}
|
||||||
|
kv = kv.substring(0, kv.length() - 2);// 根据String的索引提取子串
|
||||||
|
String sql = "CREATE TABLE `" + tableName + "` ( " + kv + (Conditions == "" ? "" : " , " + Conditions)
|
||||||
|
+ " ) ENGINE = InnoDB DEFAULT CHARSET=UTF8";
|
||||||
|
try {
|
||||||
|
PreparedStatement state = dbconn.prepareStatement(sql);
|
||||||
|
state.executeUpdate();
|
||||||
|
state.close();
|
||||||
|
return true;
|
||||||
|
} catch (final Exception e) {
|
||||||
|
print("数据库操作出错: " + e.getMessage());
|
||||||
|
print("SQL查询语句: " + sql);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 断开数据库
|
||||||
|
*
|
||||||
|
* @return bool值,成功返回true,失败返回false
|
||||||
|
*/
|
||||||
|
public boolean dbClose() {
|
||||||
|
try {
|
||||||
|
dbconn.close();
|
||||||
|
return true;
|
||||||
|
} catch (Exception e) {
|
||||||
|
print("数据库操作出错: " + e.getMessage());
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}// end dbClose()
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 连接到数据库
|
||||||
|
*
|
||||||
|
* @return 是否成功
|
||||||
|
*/
|
||||||
|
public boolean dbConnection() {
|
||||||
|
try {
|
||||||
|
dbconn = DriverManager.getConnection(url, username, password);
|
||||||
|
dbstate = dbconn.createStatement();
|
||||||
|
return true;
|
||||||
|
} catch (Exception e) {
|
||||||
|
print("数据库操作出错: " + e.getMessage());// 得到出错信息
|
||||||
|
print("登录URL: " + url); // 发生错误时,将连接数据库信息打印出来
|
||||||
|
print("登录账户: " + username);
|
||||||
|
print("登录密码: " + password);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 对数据库表中的记录进行删除操作
|
||||||
|
*
|
||||||
|
* @param tableName
|
||||||
|
* @param condition
|
||||||
|
* @return bool值,表示删除成功或者失败。
|
||||||
|
*/
|
||||||
|
public boolean dbDelete(String tableName, HashMap<String, String> selConditions) {// ——–>>>删除操作
|
||||||
|
if (!dbConnection())
|
||||||
|
return false;
|
||||||
|
String selCondition = "";
|
||||||
|
if (selConditions != null && !selConditions.isEmpty()) {
|
||||||
|
for (Entry<String, String> kvs : selConditions.entrySet()) {
|
||||||
|
selCondition += kvs.getKey() + "='" + kvs.getValue() + "', ";
|
||||||
|
}
|
||||||
|
selCondition = " WHERE " + selCondition.substring(0, selCondition.length() - 2);// 根据String的索引提取子串
|
||||||
|
}
|
||||||
|
String sql = "DELETE FROM `" + tableName + "` " + selCondition;
|
||||||
|
try {
|
||||||
|
dbstate.executeUpdate(sql);
|
||||||
|
return true;
|
||||||
|
} catch (Exception e) {
|
||||||
|
print("数据库操作出错: " + e.getMessage());
|
||||||
|
print("SQL查询语句: " + sql);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}// end dbDelete(…)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 判断数据库某个值是否存在!
|
||||||
|
*
|
||||||
|
* @param tableName
|
||||||
|
* 数据库表名
|
||||||
|
* @param fieles
|
||||||
|
* 字段名
|
||||||
|
* @param selCondition
|
||||||
|
* 选择条件
|
||||||
|
* @return 首个符合条件的结果
|
||||||
|
*/
|
||||||
|
public boolean dbExist(String tableName, HashMap<String, String> selConditions) {
|
||||||
|
if (!dbConnection())
|
||||||
|
return false;
|
||||||
|
String selCondition = "";
|
||||||
|
if (selConditions != null && !selConditions.isEmpty()) {
|
||||||
|
for (Entry<String, String> kvs : selConditions.entrySet()) {
|
||||||
|
selCondition += kvs.getKey() + "='" + kvs.getValue() + "', ";
|
||||||
|
}
|
||||||
|
selCondition = " WHERE " + selCondition.substring(0, selCondition.length() - 2);// 根据String的索引提取子串
|
||||||
|
}
|
||||||
|
String sql = "SELECT * FROM " + tableName + selCondition;
|
||||||
|
try {
|
||||||
|
dbresult = dbstate.executeQuery(sql);
|
||||||
|
return dbresult.next();
|
||||||
|
} catch (Exception e) {
|
||||||
|
print("数据库操作出错: " + e.getMessage());
|
||||||
|
print("SQL查询语句: " + sql);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 对数据库表进行插入操作
|
||||||
|
*
|
||||||
|
* @param tabName
|
||||||
|
* - 表名
|
||||||
|
* @param values
|
||||||
|
* - 带键值的HashMap
|
||||||
|
* @return bool值,成功返回true,失败返回false
|
||||||
|
*/
|
||||||
|
public boolean dbInsert(String tabName, HashMap<String, String> values) {
|
||||||
|
if (!dbConnection())
|
||||||
|
return false;
|
||||||
|
String sql = "";
|
||||||
|
String insertFields = "";
|
||||||
|
String insertValues = "";
|
||||||
|
for (Entry<String, String> kvs : values.entrySet()) {
|
||||||
|
insertFields += "`" + kvs.getKey() + "`, ";
|
||||||
|
insertValues += "'" + kvs.getValue() + "', ";
|
||||||
|
}
|
||||||
|
insertFields = insertFields.substring(0, insertFields.length() - 2);
|
||||||
|
insertValues = insertValues.substring(0, insertValues.length() - 2);
|
||||||
|
sql += "INSERT INTO `" + tabName + "` (" + insertFields + ") VALUES" + "(" + insertValues + ")";
|
||||||
|
try {
|
||||||
|
dbstate.executeUpdate(sql);
|
||||||
|
return true;
|
||||||
|
} catch (Exception e) {
|
||||||
|
print("数据库操作出错: " + e.getMessage());
|
||||||
|
print("SQL查询语句: " + sql);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
}// end dbInsert(…)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 对数据库表进行选择操作!
|
||||||
|
*
|
||||||
|
* @param tableName
|
||||||
|
* 数据库表名
|
||||||
|
* @param fieles
|
||||||
|
* 字段名
|
||||||
|
* @param selCondition
|
||||||
|
* 选择条件
|
||||||
|
* @return 一个含有map的List(列表)
|
||||||
|
*/
|
||||||
|
@SuppressWarnings({
|
||||||
|
"rawtypes",
|
||||||
|
"unchecked"
|
||||||
|
})
|
||||||
|
public List dbSelect(String tableName, List<String> fields, String selCondition) {
|
||||||
|
if (!dbConnection())
|
||||||
|
return null;
|
||||||
|
List mapInList = new ArrayList();
|
||||||
|
String selFields = "";
|
||||||
|
for (int i = 0; i < fields.size(); ++i) {
|
||||||
|
selFields += fields.get(i) + ", ";
|
||||||
|
}
|
||||||
|
String selFieldsTem = selFields.substring(0, selFields.length() - 2);// 根据String的索引提取子串
|
||||||
|
String sql = "SELECT " + selFieldsTem + " FROM `" + tableName + "`" + selCondition == "" ? "" : " WHERE " + selCondition;
|
||||||
|
try {
|
||||||
|
dbstate = dbconn.createStatement();
|
||||||
|
try {
|
||||||
|
dbresult = dbstate.executeQuery(sql);
|
||||||
|
} catch (Exception e) {
|
||||||
|
print("数据库操作出错: " + e.getMessage());
|
||||||
|
print("SQL查询语句: " + sql);
|
||||||
|
}
|
||||||
|
while (dbresult.next()) {
|
||||||
|
Map selResult = new HashMap();
|
||||||
|
for (String col : fields) {
|
||||||
|
selResult.put(col, dbresult.getString(col));
|
||||||
|
}
|
||||||
|
mapInList.add(selResult);
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
print("数据库操作出错: " + e.getMessage());
|
||||||
|
print("SQL查询语句: " + sql);
|
||||||
|
}
|
||||||
|
return mapInList;
|
||||||
|
}// end String dbSelect(…)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 对数据库表进行选择操作!
|
||||||
|
*
|
||||||
|
* @param tableName
|
||||||
|
* 数据库表名
|
||||||
|
* @param fieles
|
||||||
|
* 字段名
|
||||||
|
* @param selCondition
|
||||||
|
* 选择条件
|
||||||
|
* @return 首个符合条件的结果
|
||||||
|
*/
|
||||||
|
public String dbSelectFirst(String tableName, String fields, HashMap<String, String> selConditions) {
|
||||||
|
if (!dbConnection())
|
||||||
|
return null;
|
||||||
|
String selFieldsTem = fields;
|
||||||
|
String selCondition = "";
|
||||||
|
if (selConditions != null && !selConditions.isEmpty()) {
|
||||||
|
for (Entry<String, String> kvs : selConditions.entrySet()) {
|
||||||
|
selCondition += kvs.getKey() + "='" + kvs.getValue() + "', ";
|
||||||
|
}
|
||||||
|
selCondition = " WHERE " + selCondition.substring(0, selCondition.length() - 2);// 根据String的索引提取子串
|
||||||
|
}
|
||||||
|
String sql = "SELECT " + selFieldsTem + " FROM " + tableName + selCondition + " limit 1";
|
||||||
|
try {
|
||||||
|
dbresult = dbstate.executeQuery(sql);
|
||||||
|
if (dbresult.next())
|
||||||
|
return dbresult.getString(fields);
|
||||||
|
} catch (Exception e) {
|
||||||
|
print("数据库操作出错: " + e.getMessage());
|
||||||
|
print("SQL查询语句: " + sql);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 对数据库表中记录进行更新操作
|
||||||
|
*
|
||||||
|
* @param tabName
|
||||||
|
* @param reCount
|
||||||
|
* @return bool值,成功返回true,失败返回false
|
||||||
|
*/
|
||||||
|
@SuppressWarnings({
|
||||||
|
"rawtypes"
|
||||||
|
})
|
||||||
|
public boolean dbUpdate(String tabName, HashMap reCount, String upCondition) {
|
||||||
|
if (!dbConnection())
|
||||||
|
return false;
|
||||||
|
String Values = "";
|
||||||
|
Iterator keyValues = reCount.entrySet().iterator();
|
||||||
|
for (int i = 0; i < reCount.size(); ++i) {
|
||||||
|
Map.Entry entry = (Map.Entry) keyValues.next();
|
||||||
|
Object key = entry.getKey();
|
||||||
|
Object value = entry.getValue();
|
||||||
|
Values += key + "='" + value + "'" + ", ";
|
||||||
|
}
|
||||||
|
String updateValues = Values.substring(0, Values.length() - 2);
|
||||||
|
String sql = "UPDATE `" + tabName + "` SET " + updateValues + " " + upCondition;
|
||||||
|
try {
|
||||||
|
dbstate.executeUpdate(sql);
|
||||||
|
return true;
|
||||||
|
} catch (Exception e) {
|
||||||
|
print("数据库操作出错: " + e.getMessage());
|
||||||
|
print("SQL查询语句: " + sql);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}// end dbUpdate(…)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 判断数据表是否存在
|
||||||
|
*
|
||||||
|
* @param table
|
||||||
|
* - 表名
|
||||||
|
* @return 是否存在
|
||||||
|
*/
|
||||||
|
public boolean isTableExists(final String table) {
|
||||||
|
try {
|
||||||
|
if (!dbConnection())
|
||||||
|
return false;
|
||||||
|
final DatabaseMetaData dbm = dbconn.getMetaData();
|
||||||
|
final ResultSet tables = dbm.getTables(null, null, table, null);
|
||||||
|
return tables.next();
|
||||||
|
} catch (final SQLException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void print(String str)// 简化输出
|
||||||
|
{
|
||||||
|
System.out.println(str);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 运行SQL语句
|
||||||
|
*
|
||||||
|
* @param sql
|
||||||
|
* - SQL语句
|
||||||
|
* @return 运行结果
|
||||||
|
*/
|
||||||
|
public boolean runSql(String sql) {
|
||||||
|
if (!dbConnection())
|
||||||
|
return false;
|
||||||
|
try {
|
||||||
|
PreparedStatement state = dbconn.prepareStatement(sql);
|
||||||
|
state.executeUpdate();
|
||||||
|
state.close();
|
||||||
|
return true;
|
||||||
|
} catch (final Exception e) {
|
||||||
|
print("数据库操作出错: " + e.getMessage());
|
||||||
|
print("SQL语句: " + sql);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 运行SQL文件
|
||||||
|
*
|
||||||
|
* @param sql
|
||||||
|
* - SQL文件
|
||||||
|
* @return 运行结果
|
||||||
|
*/
|
||||||
|
public boolean runSqlfile(File file) {
|
||||||
|
BufferedReader br = null;
|
||||||
|
Statement state = null;
|
||||||
|
String sql = null;
|
||||||
|
if (!file.exists())
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (!dbConnection())
|
||||||
|
return false;
|
||||||
|
|
||||||
|
try {
|
||||||
|
print("执行SQL文件: " + file.getName() + " ...");
|
||||||
|
br = new BufferedReader(new FileReader(file));
|
||||||
|
state = dbconn.createStatement();
|
||||||
|
while ((sql = br.readLine()) != null) {
|
||||||
|
if (sql != "") {
|
||||||
|
try {
|
||||||
|
state.executeUpdate(sql);
|
||||||
|
} catch (Exception e) {
|
||||||
|
print("数据库操作出错: " + e.getMessage());
|
||||||
|
print("SQL语句: " + sql);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
} catch (Exception e) {
|
||||||
|
print("执行SQL文件 " + file.getName() + "出错: " + e.getMessage());
|
||||||
|
return false;
|
||||||
|
} finally {
|
||||||
|
try {
|
||||||
|
state.close();
|
||||||
|
br.close();
|
||||||
|
} catch (Exception e) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
39
src/main/java/cn/citycraft/Yum/sql/SQLiteHelper.java
Normal file
39
src/main/java/cn/citycraft/Yum/sql/SQLiteHelper.java
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
package cn.citycraft.Yum.sql;
|
||||||
|
|
||||||
|
// import java.sql.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 数据库操作类
|
||||||
|
*
|
||||||
|
* @author 蒋天蓓 2015年7月14日下午3:25:06
|
||||||
|
*/
|
||||||
|
public class SQLiteHelper extends SQLHelper {
|
||||||
|
|
||||||
|
private static String drivername = "org.sqlite.JDBC";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 初始化连接信息
|
||||||
|
*
|
||||||
|
* @param host
|
||||||
|
* - 域名
|
||||||
|
* @param port
|
||||||
|
* - 端口
|
||||||
|
* @param dbname
|
||||||
|
* - 数据库
|
||||||
|
* @param username
|
||||||
|
* - 用户名
|
||||||
|
* @param password
|
||||||
|
* - 密码
|
||||||
|
*/
|
||||||
|
public SQLiteHelper(String filepath, String username, String password) {
|
||||||
|
super(password, password, drivername, getUrl(filepath));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String getUrl(String filepath) {
|
||||||
|
return "jdbc:sqlite:" + filepath;
|
||||||
|
}
|
||||||
|
//
|
||||||
|
// Class.forName("org.sqlite.JDBC");
|
||||||
|
// Connection conn =
|
||||||
|
// DriverManager.getConnection("jdbc:sqlite:filename");//filename为你的SQLite数据名称
|
||||||
|
}
|
47
src/main/java/cn/citycraft/Yum/utils/FileUtil.java
Normal file
47
src/main/java/cn/citycraft/Yum/utils/FileUtil.java
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
package cn.citycraft.Yum.utils;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileInputStream;
|
||||||
|
import java.io.FileOutputStream;
|
||||||
|
import java.io.InputStream;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 文件处理工具
|
||||||
|
*
|
||||||
|
* @author 蒋天蓓
|
||||||
|
* 2015年8月31日上午9:09:54
|
||||||
|
*/
|
||||||
|
public class FileUtil {
|
||||||
|
/**
|
||||||
|
* 复制文件
|
||||||
|
*
|
||||||
|
* @param src
|
||||||
|
* - 源文件
|
||||||
|
* @param des
|
||||||
|
* - 目标文件
|
||||||
|
* @return 是否成功
|
||||||
|
*/
|
||||||
|
public static boolean copyFile(File src, File des) {
|
||||||
|
InputStream inStream = null;
|
||||||
|
FileOutputStream fs = null;
|
||||||
|
try {
|
||||||
|
int byteread = 0;
|
||||||
|
if (!src.exists())
|
||||||
|
return false;
|
||||||
|
inStream = new FileInputStream(src); // 读入原文件
|
||||||
|
fs = new FileOutputStream(des);
|
||||||
|
byte[] buffer = new byte[1024];
|
||||||
|
while ((byteread = inStream.read(buffer)) != -1) {
|
||||||
|
fs.write(buffer, 0, byteread); // 写入到目标文件
|
||||||
|
}
|
||||||
|
inStream.close();
|
||||||
|
fs.close();
|
||||||
|
return true;
|
||||||
|
} catch (Exception e) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,13 +0,0 @@
|
|||||||
/**
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
package cn.citycraft.Yum.utils;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 仓库管理类
|
|
||||||
*
|
|
||||||
* @author 蒋天蓓
|
|
||||||
*/
|
|
||||||
public class RepositoryManager {
|
|
||||||
|
|
||||||
}
|
|
@ -8,9 +8,10 @@ import java.util.Collection;
|
|||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* 字符串工具
|
||||||
|
*
|
||||||
* @author 蒋天蓓
|
* @author 蒋天蓓
|
||||||
* 2015年8月22日下午12:41:59
|
* 2015年8月22日下午12:41:59
|
||||||
* TODO
|
|
||||||
*/
|
*/
|
||||||
public class StringUtil {
|
public class StringUtil {
|
||||||
/**
|
/**
|
||||||
@ -31,9 +32,17 @@ public class StringUtil {
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void sendStringArray(CommandSender player, Collection<String> msg) {
|
/**
|
||||||
|
* 给玩家或控制台发送消息组
|
||||||
|
*
|
||||||
|
* @param sender
|
||||||
|
* - 接收消息的玩家
|
||||||
|
* @param msg
|
||||||
|
* - 消息组
|
||||||
|
*/
|
||||||
|
public static void sendStringArray(CommandSender sender, Collection<String> msg) {
|
||||||
for (String string : msg) {
|
for (String string : msg) {
|
||||||
player.sendMessage("§6 - §3" + string);
|
sender.sendMessage("§6 - §3" + string);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
name: ${project.artifactId}
|
name: ${project.artifactId}
|
||||||
|
description: ${project.description}
|
||||||
main: ${project.groupId}.${project.artifactId}.${project.artifactId}
|
main: ${project.groupId}.${project.artifactId}.${project.artifactId}
|
||||||
version: ${project.version}
|
version: ${project.version}
|
||||||
auther: 喵♂呜
|
auther: 喵♂呜
|
||||||
|
Loading…
Reference in New Issue
Block a user