mirror of
https://e.coding.net/circlecloud/Yum.git
synced 2024-11-22 14:28: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>
|
||||
<groupId>cn.citycraft</groupId>
|
||||
<artifactId>Yum</artifactId>
|
||||
<version>1.3</version>
|
||||
<version>1.3-bate1</version>
|
||||
<name>Yum</name>
|
||||
<description>Minecraft 服务器插件管理系统</description>
|
||||
<build>
|
||||
<finalName>${project.name}</finalName>
|
||||
<resources>
|
||||
|
@ -7,7 +7,9 @@ import org.bukkit.plugin.java.JavaPlugin;
|
||||
|
||||
import cn.citycraft.Yum.commands.CommandHandler;
|
||||
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插件仓库
|
||||
@ -16,14 +18,26 @@ import cn.citycraft.Yum.utils.DownloadManager;
|
||||
*/
|
||||
public class Yum extends JavaPlugin {
|
||||
public DownloadManager download;
|
||||
public PluginsManager plugman;
|
||||
public RepositoryManager repo;
|
||||
public FileConfig config;
|
||||
|
||||
@Override
|
||||
public void onEnable() {
|
||||
plugman = new PluginsManager(this);
|
||||
download = new DownloadManager(this);
|
||||
repo = new RepositoryManager(this);
|
||||
config = new FileConfig(this, "config.yml");
|
||||
repo.jsonToCache(config.getString("cache"));
|
||||
CommandHandler cmdhandler = new CommandHandler(this);
|
||||
this.getCommand("yum").setExecutor(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;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.command.CommandException;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
|
||||
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
|
||||
*/
|
||||
public class CommandDelete extends BaseCommand {
|
||||
Yum yum;
|
||||
Yum main;
|
||||
|
||||
/**
|
||||
* @param name
|
||||
*/
|
||||
public CommandDelete(Yum main) {
|
||||
super("delete");
|
||||
this.yum = main;
|
||||
this.main = main;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void execute(CommandSender sender, String label, String[] args) throws CommandException {
|
||||
String pluginname = args[0];
|
||||
Plugin plugin = yum.getServer().getPluginManager().getPlugin(pluginname);
|
||||
Plugin plugin = Bukkit.getServer().getPluginManager().getPlugin(pluginname);
|
||||
if (plugin != null) {
|
||||
PluginsManager.deletePlugin(sender, plugin);
|
||||
main.plugman.deletePlugin(sender, plugin);
|
||||
} else {
|
||||
sender.sendMessage("§c插件 " + pluginname + " 不存在或已卸载!");
|
||||
}
|
||||
|
@ -16,7 +16,6 @@ import org.bukkit.entity.Player;
|
||||
import org.bukkit.util.StringUtil;
|
||||
|
||||
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) {
|
||||
this.plugin = yum;
|
||||
this.main = yum;
|
||||
registerCommand(new CommandList(yum));
|
||||
registerCommand(new CommandInstall(yum));
|
||||
registerCommand(new CommandUpdate(yum));
|
||||
@ -125,7 +124,7 @@ public class CommandHandler implements CommandExecutor, TabCompleter {
|
||||
}
|
||||
if (args.length == 2) {
|
||||
String partialPlugin = args[1];
|
||||
List<String> plugins = PluginsManager.getPluginNames(false);
|
||||
List<String> plugins = main.plugman.getPluginNames(false);
|
||||
StringUtil.copyPartialMatches(partialPlugin, plugins, completions);
|
||||
}
|
||||
Collections.sort(completions);
|
||||
|
@ -10,7 +10,6 @@ import org.bukkit.plugin.Plugin;
|
||||
import org.bukkit.plugin.PluginDescriptionFile;
|
||||
|
||||
import cn.citycraft.Yum.Yum;
|
||||
import cn.citycraft.Yum.utils.PluginsManager;
|
||||
import cn.citycraft.Yum.utils.StringUtil;
|
||||
|
||||
/**
|
||||
@ -19,14 +18,14 @@ import cn.citycraft.Yum.utils.StringUtil;
|
||||
* @author 蒋天蓓 2015年8月12日下午2:04:05
|
||||
*/
|
||||
public class CommandInfo extends BaseCommand {
|
||||
Yum yum;
|
||||
Yum main;
|
||||
|
||||
/**
|
||||
* @param name
|
||||
*/
|
||||
public CommandInfo(Yum main) {
|
||||
super("info");
|
||||
this.yum = main;
|
||||
this.main = main;
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -40,7 +39,7 @@ public class CommandInfo extends BaseCommand {
|
||||
return;
|
||||
}
|
||||
String pluginname = args[0];
|
||||
Plugin plugin = yum.getServer().getPluginManager().getPlugin(pluginname);
|
||||
Plugin plugin = main.getServer().getPluginManager().getPlugin(pluginname);
|
||||
if (plugin != null) {
|
||||
PluginDescriptionFile desc = plugin.getDescription();
|
||||
sender.sendMessage("§6插件名称: §3" + plugin.getName());
|
||||
@ -51,7 +50,7 @@ public class CommandInfo extends BaseCommand {
|
||||
StringUtil.sendStringArray(sender, desc.getDepend());
|
||||
sender.sendMessage("§6插件软依赖: §3" + (desc.getSoftDepend().size() == 0 ? "无" : ""));
|
||||
StringUtil.sendStringArray(sender, desc.getSoftDepend());
|
||||
sender.sendMessage("§6插件物理路径: §3" + PluginsManager.getPluginFile(plugin).getAbsolutePath());
|
||||
sender.sendMessage("§6插件物理路径: §3" + main.plugman.getPluginFile(plugin).getAbsolutePath());
|
||||
} else {
|
||||
sender.sendMessage("§4错误: §c插件 " + pluginname + " 不存在或已卸载!");
|
||||
}
|
||||
|
@ -9,6 +9,7 @@ import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
|
||||
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
|
||||
*/
|
||||
public class CommandInstall extends BaseCommand {
|
||||
Yum yum;
|
||||
Yum main;
|
||||
|
||||
/**
|
||||
* @param name
|
||||
*/
|
||||
public CommandInstall(Yum main) {
|
||||
super("install");
|
||||
this.yum = main;
|
||||
this.main = main;
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -31,10 +32,14 @@ public class CommandInstall extends BaseCommand {
|
||||
final String pluginname = args[0];
|
||||
Plugin plugin = Bukkit.getServer().getPluginManager().getPlugin(pluginname);
|
||||
if (plugin == null) {
|
||||
Bukkit.getScheduler().runTaskAsynchronously(yum, new Runnable() {
|
||||
Bukkit.getScheduler().runTaskAsynchronously(main, new Runnable() {
|
||||
@Override
|
||||
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 {
|
||||
@ -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
|
||||
public int getMinimumArguments() {
|
||||
return 1;
|
||||
|
@ -9,7 +9,6 @@ import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
|
||||
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
|
||||
*/
|
||||
public class CommandList extends BaseCommand {
|
||||
Yum plugin;
|
||||
Yum main;
|
||||
|
||||
/**
|
||||
* @param name
|
||||
*/
|
||||
public CommandList(Yum main) {
|
||||
super("list");
|
||||
this.plugin = main;
|
||||
this.main = main;
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -36,7 +35,7 @@ public class CommandList extends BaseCommand {
|
||||
public void execute(CommandSender sender, String label, String[] args) throws CommandException {
|
||||
sender.sendMessage("§6[Yum仓库]§3服务器已安装插件: ");
|
||||
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 cn.citycraft.Yum.Yum;
|
||||
import cn.citycraft.Yum.repository.PluginInfo;
|
||||
|
||||
/**
|
||||
* @author 蒋天蓓 2015年8月12日下午2:04:05
|
||||
*/
|
||||
public class CommandUpdate extends BaseCommand {
|
||||
Yum yum;
|
||||
Yum main;
|
||||
|
||||
/**
|
||||
* @param name
|
||||
*/
|
||||
public CommandUpdate(Yum main) {
|
||||
super("update");
|
||||
this.yum = main;
|
||||
this.main = main;
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -30,10 +31,16 @@ public class CommandUpdate extends BaseCommand {
|
||||
final Plugin plugin = Bukkit.getServer().getPluginManager().getPlugin(pluginname);
|
||||
sender.sendMessage("§a开始更新插件: " + pluginname);
|
||||
if (plugin != null) {
|
||||
Bukkit.getScheduler().runTaskAsynchronously(yum, new Runnable() {
|
||||
Bukkit.getScheduler().runTaskAsynchronously(main, new Runnable() {
|
||||
@Override
|
||||
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 {
|
||||
|
@ -1,7 +1,7 @@
|
||||
/**
|
||||
*
|
||||
*/
|
||||
package cn.citycraft.Yum.utils;
|
||||
package cn.citycraft.Yum.manager;
|
||||
|
||||
import java.io.BufferedInputStream;
|
||||
import java.io.File;
|
||||
@ -14,7 +14,10 @@ import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
|
||||
/**
|
||||
* @author 蒋天蓓 2015年8月21日下午6:08:09 TODO
|
||||
* 下载管理类
|
||||
*
|
||||
* @author 蒋天蓓
|
||||
* 2015年8月21日下午6:08:09
|
||||
*/
|
||||
public class DownloadManager {
|
||||
Plugin plugin;
|
||||
@ -23,14 +26,27 @@ public class DownloadManager {
|
||||
this.plugin = main;
|
||||
}
|
||||
|
||||
/**
|
||||
* 从地址获得文件名称
|
||||
*
|
||||
* @param url
|
||||
* - 地址
|
||||
* @return 文件名称
|
||||
*/
|
||||
public String getFileName(String url) {
|
||||
int end = url.lastIndexOf('/');
|
||||
return url.substring(end + 1);
|
||||
}
|
||||
|
||||
/**
|
||||
* 从地址获得文件名称
|
||||
*
|
||||
* @param url
|
||||
* - 地址
|
||||
* @return 文件名称
|
||||
*/
|
||||
public String getFileName(URL url) {
|
||||
int end = url.getFile().lastIndexOf('/');
|
||||
return url.getFile().substring(end + 1);
|
||||
return getFileName(url.getFile());
|
||||
}
|
||||
|
||||
private String getPer(int per) {
|
||||
@ -47,6 +63,41 @@ public class DownloadManager {
|
||||
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) {
|
||||
URL url;
|
||||
try {
|
||||
@ -58,6 +109,17 @@ public class DownloadManager {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 从网络下载文件
|
||||
*
|
||||
* @param sender
|
||||
* - 命令发送者
|
||||
* @param url
|
||||
* - 下载地址
|
||||
* @param file
|
||||
* - 保存文件
|
||||
* @return 是否成功
|
||||
*/
|
||||
public boolean run(CommandSender sender, URL url, File file) {
|
||||
BufferedInputStream in = null;
|
||||
FileOutputStream fout = null;
|
||||
@ -108,10 +170,28 @@ public class DownloadManager {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 从网络下载文件
|
||||
*
|
||||
* @param urlstring
|
||||
* - 下载地址
|
||||
* @param file
|
||||
* - 保存文件
|
||||
* @return 是否成功
|
||||
*/
|
||||
public boolean run(String urlstring, File file) {
|
||||
return run(null, urlstring, file);
|
||||
}
|
||||
|
||||
/**
|
||||
* 从网络下载文件
|
||||
*
|
||||
* @param url
|
||||
* - 下载地址
|
||||
* @param file
|
||||
* - 保存文件
|
||||
* @return 是否成功
|
||||
*/
|
||||
public boolean run(URL url, File 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.FileInputStream;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.lang.reflect.Field;
|
||||
import java.net.URL;
|
||||
import java.net.URLClassLoader;
|
||||
@ -28,10 +25,14 @@ import org.bukkit.event.Event;
|
||||
import org.bukkit.plugin.InvalidDescriptionException;
|
||||
import org.bukkit.plugin.InvalidPluginException;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
import org.bukkit.plugin.PluginDescriptionFile;
|
||||
import org.bukkit.plugin.PluginManager;
|
||||
import org.bukkit.plugin.RegisteredListener;
|
||||
import org.bukkit.plugin.UnknownDependencyException;
|
||||
|
||||
import cn.citycraft.Yum.Yum;
|
||||
import cn.citycraft.Yum.utils.StringUtil;
|
||||
|
||||
import com.google.common.base.Joiner;
|
||||
|
||||
/**
|
||||
@ -40,43 +41,52 @@ import com.google.common.base.Joiner;
|
||||
* @author 蒋天蓓 2015年8月21日下午7:03:26
|
||||
*/
|
||||
public class PluginsManager {
|
||||
Yum main;
|
||||
|
||||
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;
|
||||
}
|
||||
public PluginsManager(Yum yum) {
|
||||
this.main = yum;
|
||||
}
|
||||
|
||||
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();
|
||||
}
|
||||
|
||||
public static boolean deletePlugin(Plugin plugin) {
|
||||
/**
|
||||
* 删除插件
|
||||
*
|
||||
* @param plugin
|
||||
* - 插件
|
||||
* @return 是否成功
|
||||
*/
|
||||
public boolean deletePlugin(Plugin plugin) {
|
||||
return deletePlugin(Bukkit.getConsoleSender(), plugin);
|
||||
}
|
||||
|
||||
public static void disable(Plugin plugin) {
|
||||
/**
|
||||
* 关闭插件
|
||||
*
|
||||
* @param plugin
|
||||
* - 插件
|
||||
*/
|
||||
public void disable(Plugin plugin) {
|
||||
if ((plugin.isEnabled()) && (plugin != null)) {
|
||||
Bukkit.getPluginManager().disablePlugin(plugin);
|
||||
}
|
||||
}
|
||||
|
||||
public static void disableAll() {
|
||||
/**
|
||||
* 关闭所有插件
|
||||
*/
|
||||
public void disableAll() {
|
||||
for (Plugin plugin : Bukkit.getPluginManager().getPlugins()) {
|
||||
if (!isIgnored(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)) {
|
||||
Bukkit.getPluginManager().enablePlugin(plugin);
|
||||
}
|
||||
}
|
||||
|
||||
public static void enableAll() {
|
||||
/**
|
||||
* 启用所有插件
|
||||
*/
|
||||
public void enableAll() {
|
||||
for (Plugin plugin : Bukkit.getPluginManager().getPlugins()) {
|
||||
if (!isIgnored(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);
|
||||
}
|
||||
|
||||
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;
|
||||
String pluginName = color + plugin.getName();
|
||||
if (includeVersions) {
|
||||
@ -111,15 +146,36 @@ public class PluginsManager {
|
||||
return pluginName;
|
||||
}
|
||||
|
||||
public static Plugin getPluginByName(String name) {
|
||||
/**
|
||||
* 通过名称获得插件
|
||||
*
|
||||
* @param name
|
||||
* - 名称
|
||||
* @return 插件
|
||||
*/
|
||||
public Plugin getPluginByName(String 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));
|
||||
}
|
||||
|
||||
public static File getPluginFile(Plugin plugin) {
|
||||
/**
|
||||
* 获得插件绝对路径
|
||||
*
|
||||
* @param plugin
|
||||
* - 插件
|
||||
* @return 插件的绝对路径
|
||||
*/
|
||||
public File getPluginFile(Plugin plugin) {
|
||||
File file = null;
|
||||
ClassLoader cl = plugin.getClass().getClassLoader();
|
||||
if ((cl instanceof URLClassLoader)) {
|
||||
@ -131,7 +187,7 @@ public class PluginsManager {
|
||||
return file;
|
||||
}
|
||||
|
||||
public static List<String> getPluginNames(boolean fullName) {
|
||||
public List<String> getPluginNames(boolean fullName) {
|
||||
List<String> plugins = new ArrayList<String>();
|
||||
for (Plugin plugin : Bukkit.getPluginManager().getPlugins()) {
|
||||
plugins.add(fullName ? plugin.getDescription().getFullName() : plugin.getName());
|
||||
@ -139,14 +195,28 @@ public class PluginsManager {
|
||||
return plugins;
|
||||
}
|
||||
|
||||
public static String getPluginVersion(String name) {
|
||||
/**
|
||||
* 获得插件版本
|
||||
*
|
||||
* @param name
|
||||
* - 插件名称
|
||||
* @return 插件版本
|
||||
*/
|
||||
public String getPluginVersion(String name) {
|
||||
Plugin plugin = getPluginByName(name);
|
||||
if ((plugin != null) && (plugin.getDescription() != null))
|
||||
return plugin.getDescription().getVersion();
|
||||
return null;
|
||||
}
|
||||
|
||||
public static String getUsages(Plugin plugin) {
|
||||
/**
|
||||
* 获得插件命令
|
||||
*
|
||||
* @param plugin
|
||||
* - 插件
|
||||
* @return 插件命令
|
||||
*/
|
||||
public String getUsages(Plugin plugin) {
|
||||
List<String> parsedCommands = new ArrayList<String>();
|
||||
|
||||
Map<String, Map<String, Object>> commands = plugin.getDescription().getCommands();
|
||||
@ -165,28 +235,25 @@ public class PluginsManager {
|
||||
return Joiner.on(", ").join(parsedCommands);
|
||||
}
|
||||
|
||||
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");
|
||||
copyFile(file, pluginfile);
|
||||
if (load(sender, filename + ".jar")) {
|
||||
sender.sendMessage("§6安装: §a从Yum仓库安装插件 " + filename + " 成功!");
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public static boolean isIgnored(Plugin plugin) {
|
||||
/**
|
||||
* 判断插件是否在忽略列表
|
||||
*
|
||||
* @param plugin
|
||||
* - 插件
|
||||
* @return 是否
|
||||
*/
|
||||
public boolean isIgnored(Plugin plugin) {
|
||||
return isIgnored(plugin.getName());
|
||||
}
|
||||
|
||||
public static boolean isIgnored(String plugin) {
|
||||
/**
|
||||
* 判断插件是否在忽略列表
|
||||
*
|
||||
* @param plugin
|
||||
* - 插件名称
|
||||
* @return 是否
|
||||
*/
|
||||
public boolean isIgnored(String plugin) {
|
||||
for (String name : new ArrayList<String>()) {
|
||||
if (name.equalsIgnoreCase(plugin))
|
||||
return true;
|
||||
@ -194,12 +261,16 @@ public class PluginsManager {
|
||||
return false;
|
||||
}
|
||||
|
||||
public static boolean load(CommandSender sender, Plugin plugin) {
|
||||
String filename = getPluginFile(plugin).getName();
|
||||
return load(sender, filename);
|
||||
}
|
||||
|
||||
public static boolean load(CommandSender sender, String name) {
|
||||
/**
|
||||
* 载入插件
|
||||
*
|
||||
* @param sender
|
||||
* - 命令发送者
|
||||
* @param name
|
||||
* - 插件名称
|
||||
* @return 是否成功
|
||||
*/
|
||||
public boolean load(CommandSender sender, String name) {
|
||||
Plugin target = null;
|
||||
|
||||
if (sender == null) {
|
||||
@ -221,20 +292,35 @@ public class PluginsManager {
|
||||
File pluginFile = new File(pluginDir, name);
|
||||
|
||||
if (!pluginFile.isFile() && !new File(updateDir, name).isFile()) {
|
||||
sender.sendMessage("§c在插件目录和更新目录未找到 " + name + " 插件 请确认文件是否存在!");
|
||||
return false;
|
||||
pluginFile = null;
|
||||
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 {
|
||||
target = Bukkit.getPluginManager().loadPlugin(pluginFile);
|
||||
} catch (InvalidDescriptionException e) {
|
||||
sender.sendMessage("§c异常: " + e.getMessage() + " 插件: " + name + " 的plugin.yml文件存在错误!");
|
||||
sender.sendMessage("§4异常: §c" + e.getMessage() + " 插件: " + name + " 的plugin.yml文件存在错误!");
|
||||
return false;
|
||||
} catch (InvalidPluginException e) {
|
||||
sender.sendMessage("§c异常: " + e.getMessage() + " 文件: " + name + " 不是一个可载入的插件!");
|
||||
sender.sendMessage("§4异常: §c" + e.getMessage() + " 文件: " + name + " 不是一个可载入的插件!");
|
||||
return false;
|
||||
} catch (UnknownDependencyException e) {
|
||||
sender.sendMessage("§c异常: " + e.getMessage() + " 插件: " + name + " 缺少部分依赖项目!");
|
||||
sender.sendMessage("§4异常: §c" + e.getMessage() + " 插件: " + name + " 缺少部分依赖项目!");
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -244,25 +330,40 @@ public class PluginsManager {
|
||||
return true;
|
||||
}
|
||||
|
||||
public static boolean load(Plugin plugin) {
|
||||
return load(Bukkit.getConsoleSender(), plugin);
|
||||
}
|
||||
|
||||
public static boolean load(String name) {
|
||||
public boolean load(String 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)
|
||||
return unload(sender, plugin) && load(sender, plugin);
|
||||
return unload(sender, plugin) && load(sender, plugin.getName());
|
||||
return false;
|
||||
}
|
||||
|
||||
public static boolean reload(Plugin plugin) {
|
||||
/**
|
||||
* 重载插件
|
||||
*
|
||||
* @param plugin
|
||||
* - 插件
|
||||
* @return 是否成功
|
||||
*/
|
||||
public boolean reload(Plugin plugin) {
|
||||
return reload(Bukkit.getConsoleSender(), plugin);
|
||||
}
|
||||
|
||||
public static void reloadAll() {
|
||||
/**
|
||||
* 重载所有插件
|
||||
*/
|
||||
public void reloadAll() {
|
||||
for (Plugin plugin : Bukkit.getPluginManager().getPlugins()) {
|
||||
if (!isIgnored(plugin)) {
|
||||
reload(plugin);
|
||||
@ -270,8 +371,17 @@ public class PluginsManager {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 卸载插件
|
||||
*
|
||||
* @param sender
|
||||
* - 命令发送者
|
||||
* @param plugin
|
||||
* - 插件
|
||||
* @return 是否成功
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
public static boolean unload(CommandSender sender, Plugin plugin) {
|
||||
public boolean unload(CommandSender sender, Plugin plugin) {
|
||||
String name = plugin.getName();
|
||||
if (sender == null) {
|
||||
sender = Bukkit.getConsoleSender();
|
||||
@ -309,7 +419,7 @@ public class PluginsManager {
|
||||
knownCommandsField.setAccessible(true);
|
||||
knownCommands = (Map<String, Command>) knownCommandsField.get(commandMap);
|
||||
} catch (Exception e) {
|
||||
sender.sendMessage("§c异常: " + e.getMessage() + " 插件 " + name + " 卸载失败!");
|
||||
sender.sendMessage("§4异常: §c" + e.getMessage() + " 插件 " + name + " 卸载失败!");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@ -333,6 +443,7 @@ public class PluginsManager {
|
||||
if (command.getPlugin() == next) {
|
||||
command.unregister(commandMap);
|
||||
it.remove();
|
||||
sender.sendMessage("§6卸载: §a插件: " + name + " 的命令!");
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -345,6 +456,7 @@ public class PluginsManager {
|
||||
RegisteredListener value = it.next();
|
||||
if (value.getPlugin().getName().equals(name)) {
|
||||
it.remove();
|
||||
sender.sendMessage("§6卸载: §a插件: " + name + " 的监听器!");
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -353,6 +465,7 @@ public class PluginsManager {
|
||||
if ((cl instanceof URLClassLoader)) {
|
||||
try {
|
||||
((URLClassLoader) cl).close();
|
||||
sender.sendMessage("§6卸载: §a插件: " + name + " 的类加载器!");
|
||||
} catch (IOException ex) {
|
||||
}
|
||||
}
|
||||
@ -360,7 +473,14 @@ public class PluginsManager {
|
||||
return true;
|
||||
}
|
||||
|
||||
public static boolean unload(Plugin plugin) {
|
||||
/**
|
||||
* 卸载插件
|
||||
*
|
||||
* @param plugin
|
||||
* - 卸载插件
|
||||
* @return 是否成功
|
||||
*/
|
||||
public boolean unload(Plugin 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;
|
||||
|
||||
/**
|
||||
* 字符串工具
|
||||
*
|
||||
* @author 蒋天蓓
|
||||
* 2015年8月22日下午12:41:59
|
||||
* TODO
|
||||
*/
|
||||
public class StringUtil {
|
||||
/**
|
||||
@ -31,9 +32,17 @@ public class StringUtil {
|
||||
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) {
|
||||
player.sendMessage("§6 - §3" + string);
|
||||
sender.sendMessage("§6 - §3" + string);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,4 +1,5 @@
|
||||
name: ${project.artifactId}
|
||||
description: ${project.description}
|
||||
main: ${project.groupId}.${project.artifactId}.${project.artifactId}
|
||||
version: ${project.version}
|
||||
auther: 喵♂呜
|
||||
|
Loading…
Reference in New Issue
Block a user