mirror of
				https://e.coding.net/circlecloud/Yum.git
				synced 2025-11-04 05:06:02 +00:00 
			
		
		
		
	
							
								
								
									
										67
									
								
								.classpath
									
									
									
									
									
								
							
							
						
						
									
										67
									
								
								.classpath
									
									
									
									
									
								
							@@ -1,36 +1,31 @@
 | 
			
		||||
<?xml version="1.0" encoding="UTF-8"?>
 | 
			
		||||
<classpath>
 | 
			
		||||
	<classpathentry kind="src" output="target/classes" path="src/main/java">
 | 
			
		||||
		<attributes>
 | 
			
		||||
			<attribute name="optional" value="true"/>
 | 
			
		||||
			<attribute name="maven.pomderived" value="true"/>
 | 
			
		||||
		</attributes>
 | 
			
		||||
	</classpathentry>
 | 
			
		||||
	<classpathentry excluding="**" kind="src" output="target/classes" path="src/main/resources">
 | 
			
		||||
		<attributes>
 | 
			
		||||
			<attribute name="maven.pomderived" value="true"/>
 | 
			
		||||
		</attributes>
 | 
			
		||||
	</classpathentry>
 | 
			
		||||
	<classpathentry kind="src" output="target/test-classes" path="src/test/java">
 | 
			
		||||
		<attributes>
 | 
			
		||||
			<attribute name="optional" value="true"/>
 | 
			
		||||
			<attribute name="maven.pomderived" value="true"/>
 | 
			
		||||
		</attributes>
 | 
			
		||||
	</classpathentry>
 | 
			
		||||
	<classpathentry excluding="**" kind="src" output="target/test-classes" path="src/test/resources">
 | 
			
		||||
		<attributes>
 | 
			
		||||
			<attribute name="maven.pomderived" value="true"/>
 | 
			
		||||
		</attributes>
 | 
			
		||||
	</classpathentry>
 | 
			
		||||
	<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
 | 
			
		||||
		<attributes>
 | 
			
		||||
			<attribute name="maven.pomderived" value="true"/>
 | 
			
		||||
		</attributes>
 | 
			
		||||
	</classpathentry>
 | 
			
		||||
	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7">
 | 
			
		||||
		<attributes>
 | 
			
		||||
			<attribute name="maven.pomderived" value="true"/>
 | 
			
		||||
		</attributes>
 | 
			
		||||
	</classpathentry>
 | 
			
		||||
	<classpathentry kind="output" path="target/classes"/>
 | 
			
		||||
</classpath>
 | 
			
		||||
<?xml version="1.0" encoding="UTF-8"?>
 | 
			
		||||
<classpath>
 | 
			
		||||
	<classpathentry kind="src" output="target/classes" path="src/main/java">
 | 
			
		||||
		<attributes>
 | 
			
		||||
			<attribute name="optional" value="true"/>
 | 
			
		||||
			<attribute name="maven.pomderived" value="true"/>
 | 
			
		||||
		</attributes>
 | 
			
		||||
	</classpathentry>
 | 
			
		||||
	<classpathentry excluding="**" kind="src" output="target/classes" path="src/main/resources">
 | 
			
		||||
		<attributes>
 | 
			
		||||
			<attribute name="maven.pomderived" value="true"/>
 | 
			
		||||
		</attributes>
 | 
			
		||||
	</classpathentry>
 | 
			
		||||
	<classpathentry kind="src" output="target/test-classes" path="src/test/java">
 | 
			
		||||
		<attributes>
 | 
			
		||||
			<attribute name="optional" value="true"/>
 | 
			
		||||
			<attribute name="maven.pomderived" value="true"/>
 | 
			
		||||
		</attributes>
 | 
			
		||||
	</classpathentry>
 | 
			
		||||
	<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
 | 
			
		||||
		<attributes>
 | 
			
		||||
			<attribute name="maven.pomderived" value="true"/>
 | 
			
		||||
		</attributes>
 | 
			
		||||
	</classpathentry>
 | 
			
		||||
	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7">
 | 
			
		||||
		<attributes>
 | 
			
		||||
			<attribute name="maven.pomderived" value="true"/>
 | 
			
		||||
		</attributes>
 | 
			
		||||
	</classpathentry>
 | 
			
		||||
	<classpathentry kind="output" path="target/classes"/>
 | 
			
		||||
</classpath>
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
/**
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
package cn.citycraft.Yum;
 | 
			
		||||
 | 
			
		||||
@@ -14,9 +14,8 @@ import cn.citycraft.Yum.utils.PluginUtil;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * MC插件仓库
 | 
			
		||||
 * 
 | 
			
		||||
 * @author 蒋天蓓
 | 
			
		||||
 *         2015年8月21日下午5:14:39
 | 
			
		||||
 *
 | 
			
		||||
 * @author 蒋天蓓 2015年8月21日下午5:14:39
 | 
			
		||||
 */
 | 
			
		||||
public class Yum extends JavaPlugin {
 | 
			
		||||
	@Override
 | 
			
		||||
@@ -38,22 +37,28 @@ public class Yum extends JavaPlugin {
 | 
			
		||||
			Plugin plugin = this.getServer().getPluginManager().getPlugin(args[1]);
 | 
			
		||||
			switch (args[0]) {
 | 
			
		||||
			case "install":
 | 
			
		||||
				if (DownloadUtils.download(sender, getDataFolder().getParent(), args[1]))
 | 
			
		||||
					sender.sendMessage(PluginUtil.load(args[1]));
 | 
			
		||||
				if (plugin != null) {
 | 
			
		||||
					if (DownloadUtils.download(sender, args[1])) {
 | 
			
		||||
						sender.sendMessage(PluginUtil.load(args[1]));
 | 
			
		||||
					}
 | 
			
		||||
				} else {
 | 
			
		||||
					sender.sendMessage("§c插件已安装在服务器!");
 | 
			
		||||
				}
 | 
			
		||||
				break;
 | 
			
		||||
			case "remove":
 | 
			
		||||
				if (plugin != null) {
 | 
			
		||||
					sender.sendMessage(PluginUtil.unload(plugin));
 | 
			
		||||
				} else {
 | 
			
		||||
					sender.sendMessage("插件不存在或已卸载!");
 | 
			
		||||
					sender.sendMessage("§c插件不存在或已卸载!");
 | 
			
		||||
				}
 | 
			
		||||
				break;
 | 
			
		||||
			case "update":
 | 
			
		||||
				if (plugin != null) {
 | 
			
		||||
					if (DownloadUtils.download(sender, getDataFolder().getParent(), args[1]))
 | 
			
		||||
					if (DownloadUtils.download(sender, args[1])) {
 | 
			
		||||
						sender.sendMessage(PluginUtil.load(args[1]));
 | 
			
		||||
					}
 | 
			
		||||
				} else {
 | 
			
		||||
					sender.sendMessage("插件不存在或已卸载!");
 | 
			
		||||
					sender.sendMessage("§c插件不存在或已卸载!");
 | 
			
		||||
				}
 | 
			
		||||
				break;
 | 
			
		||||
			}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
/**
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
package cn.citycraft.Yum.utils;
 | 
			
		||||
 | 
			
		||||
@@ -12,29 +12,28 @@ import org.bukkit.Bukkit;
 | 
			
		||||
import org.bukkit.command.CommandSender;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @author 蒋天蓓
 | 
			
		||||
 *         2015年8月21日下午6:08:09
 | 
			
		||||
 *         TODO
 | 
			
		||||
 * @author 蒋天蓓 2015年8月21日下午6:08:09 TODO
 | 
			
		||||
 */
 | 
			
		||||
public class DownloadUtils {
 | 
			
		||||
	public static boolean download(CommandSender sender, String dir, String pluginname) {
 | 
			
		||||
	public static boolean download(CommandSender sender, String pluginname) {
 | 
			
		||||
		String url = "http://ci.citycraft.cn:8800/jenkins/job/%1$s/lastSuccessfulBuild/artifact/target/%1$s.jar";
 | 
			
		||||
		BufferedInputStream in = null;
 | 
			
		||||
		FileOutputStream fout = null;
 | 
			
		||||
		if (sender == null)
 | 
			
		||||
		if (sender == null) {
 | 
			
		||||
			sender = Bukkit.getConsoleSender();
 | 
			
		||||
		}
 | 
			
		||||
		try {
 | 
			
		||||
			String filename = pluginname + ".jar";
 | 
			
		||||
			sender.sendMessage("开始下载: " + pluginname);
 | 
			
		||||
			sender.sendMessage("§3开始下载: " + pluginname);
 | 
			
		||||
			URL fileUrl = new URL(String.format(url, pluginname));
 | 
			
		||||
			sender.sendMessage("下载地址: http://********/" + filename);
 | 
			
		||||
			sender.sendMessage("§3下载地址: http://********/" + filename);
 | 
			
		||||
			int fileLength = fileUrl.openConnection().getContentLength();
 | 
			
		||||
			sender.sendMessage("文件长度: " + fileLength);
 | 
			
		||||
			sender.sendMessage("§3文件长度: " + fileLength);
 | 
			
		||||
			in = new BufferedInputStream(fileUrl.openStream());
 | 
			
		||||
			File file = new File(dir, filename);
 | 
			
		||||
			File file = new File(new File("plugins"), filename);
 | 
			
		||||
			if (!file.exists()) {
 | 
			
		||||
				file.createNewFile();
 | 
			
		||||
				sender.sendMessage("创建新文件: " + filename);
 | 
			
		||||
				sender.sendMessage("§d创建新文件: " + filename);
 | 
			
		||||
			}
 | 
			
		||||
			fout = new FileOutputStream(file);
 | 
			
		||||
			byte[] data = new byte[1024];
 | 
			
		||||
@@ -46,13 +45,15 @@ public class DownloadUtils {
 | 
			
		||||
				fout.write(data, 0, count);
 | 
			
		||||
				double percent = downloaded / fileLength * 10000;
 | 
			
		||||
				if (System.currentTimeMillis() - time > 1000) {
 | 
			
		||||
					sender.sendMessage(String.format("已下载: ====================> %.2f%%", percent));
 | 
			
		||||
					sender.sendMessage(String.format("§a已下载: " + getPer(percent) + " %.2f%%", percent));
 | 
			
		||||
					time = System.currentTimeMillis();
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			sender.sendMessage("§a已下载: ====================> 100%");
 | 
			
		||||
			sender.sendMessage("§a插件: " + pluginname + "下载完成!");
 | 
			
		||||
			return true;
 | 
			
		||||
		} catch (Exception ex) {
 | 
			
		||||
			sender.sendMessage("插件下载失败!");
 | 
			
		||||
			sender.sendMessage("§c插件下载失败!");
 | 
			
		||||
			ex.printStackTrace();
 | 
			
		||||
			return false;
 | 
			
		||||
		} finally {
 | 
			
		||||
@@ -65,4 +66,17 @@ public class DownloadUtils {
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	private static String getPer(double per) {
 | 
			
		||||
		StringBuilder sb = new StringBuilder();
 | 
			
		||||
		for (int i = 0; i < 10; i++) {
 | 
			
		||||
			if (per > i) {
 | 
			
		||||
				sb.append("  ");
 | 
			
		||||
			} else {
 | 
			
		||||
				sb.append("==");
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		sb.append(">");
 | 
			
		||||
		return sb.toString();
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
/**
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
package cn.citycraft.Yum.utils;
 | 
			
		||||
 | 
			
		||||
@@ -32,26 +32,11 @@ import com.google.common.base.Joiner;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 插件管理类
 | 
			
		||||
 * 
 | 
			
		||||
 * @author 蒋天蓓
 | 
			
		||||
 *         2015年8月21日下午7:03:26
 | 
			
		||||
 *
 | 
			
		||||
 * @author 蒋天蓓 2015年8月21日下午7:03:26
 | 
			
		||||
 */
 | 
			
		||||
public class PluginUtil {
 | 
			
		||||
 | 
			
		||||
	public static void enable(Plugin plugin) {
 | 
			
		||||
		if ((!plugin.isEnabled()) && (plugin != null)) {
 | 
			
		||||
			Bukkit.getPluginManager().enablePlugin(plugin);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public static void enableAll() {
 | 
			
		||||
		for (Plugin plugin : Bukkit.getPluginManager().getPlugins()) {
 | 
			
		||||
			if (!isIgnored(plugin)) {
 | 
			
		||||
				enable(plugin);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public static void disable(Plugin plugin) {
 | 
			
		||||
		if ((plugin.isEnabled()) && (plugin != null)) {
 | 
			
		||||
			Bukkit.getPluginManager().disablePlugin(plugin);
 | 
			
		||||
@@ -66,6 +51,20 @@ public class PluginUtil {
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public static void enable(Plugin plugin) {
 | 
			
		||||
		if ((!plugin.isEnabled()) && (plugin != null)) {
 | 
			
		||||
			Bukkit.getPluginManager().enablePlugin(plugin);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public static void enableAll() {
 | 
			
		||||
		for (Plugin plugin : Bukkit.getPluginManager().getPlugins()) {
 | 
			
		||||
			if (!isIgnored(plugin)) {
 | 
			
		||||
				enable(plugin);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public static String getFormattedName(Plugin plugin) {
 | 
			
		||||
		return getFormattedName(plugin, false);
 | 
			
		||||
	}
 | 
			
		||||
@@ -73,15 +72,12 @@ public class PluginUtil {
 | 
			
		||||
	public static String getFormattedName(Plugin plugin, boolean includeVersions) {
 | 
			
		||||
		ChatColor color = plugin.isEnabled() ? ChatColor.GREEN : ChatColor.RED;
 | 
			
		||||
		String pluginName = color + plugin.getName();
 | 
			
		||||
		if (includeVersions)
 | 
			
		||||
		if (includeVersions) {
 | 
			
		||||
			pluginName = pluginName + " (" + plugin.getDescription().getVersion() + ")";
 | 
			
		||||
		}
 | 
			
		||||
		return pluginName;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public static Plugin getPluginByName(String[] args, int start) {
 | 
			
		||||
		return getPluginByName(StringUtil.consolidateStrings(args, start));
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public static Plugin getPluginByName(String name) {
 | 
			
		||||
		for (Plugin plugin : Bukkit.getPluginManager().getPlugins()) {
 | 
			
		||||
			if (name.equalsIgnoreCase(plugin.getName()))
 | 
			
		||||
@@ -90,10 +86,15 @@ public class PluginUtil {
 | 
			
		||||
		return null;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public static Plugin getPluginByName(String[] args, int start) {
 | 
			
		||||
		return getPluginByName(StringUtil.consolidateStrings(args, start));
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public static List<String> getPluginNames(boolean fullName) {
 | 
			
		||||
		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());
 | 
			
		||||
		}
 | 
			
		||||
		return plugins;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@@ -118,9 +119,8 @@ public class PluginUtil {
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		if (parsedCommands.isEmpty()) {
 | 
			
		||||
			return "没有注册命令!";
 | 
			
		||||
		}
 | 
			
		||||
		if (parsedCommands.isEmpty())
 | 
			
		||||
			return "§c没有注册命令!";
 | 
			
		||||
		return Joiner.on(", ").join(parsedCommands);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@@ -150,23 +150,22 @@ public class PluginUtil {
 | 
			
		||||
		}
 | 
			
		||||
		File pluginFile = new File(pluginDir, name + ".jar");
 | 
			
		||||
 | 
			
		||||
		if (!pluginFile.isFile()) {
 | 
			
		||||
			return "插件不存在!";
 | 
			
		||||
		}
 | 
			
		||||
		if (!pluginFile.isFile())
 | 
			
		||||
			return "§c在plugins目录未找到 " + name + " 插件 请确认文件是否存在!";
 | 
			
		||||
		try {
 | 
			
		||||
			target = Bukkit.getPluginManager().loadPlugin(pluginFile);
 | 
			
		||||
		} catch (InvalidDescriptionException e) {
 | 
			
		||||
			e.printStackTrace();
 | 
			
		||||
			return "错误的插件信息!";
 | 
			
		||||
			return "§c插件 " + name + " 的plugin.yml文件存在错误!";
 | 
			
		||||
		} catch (InvalidPluginException e) {
 | 
			
		||||
			e.printStackTrace();
 | 
			
		||||
			return "错误的插件!";
 | 
			
		||||
			return "§c文件 " + name + " 不是一个可载入的插件!";
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		target.onLoad();
 | 
			
		||||
		Bukkit.getPluginManager().enablePlugin(target);
 | 
			
		||||
 | 
			
		||||
		return "插件已载入!";
 | 
			
		||||
		return "§a插件 " + name + " 已成功载入到服务器!";
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public static void reload(Plugin plugin) {
 | 
			
		||||
@@ -226,41 +225,42 @@ public class PluginUtil {
 | 
			
		||||
				commands = (Map<String, Command>) knownCommandsField.get(commandMap);
 | 
			
		||||
			} catch (NoSuchFieldException e) {
 | 
			
		||||
				e.printStackTrace();
 | 
			
		||||
				return "插件卸载失败!";
 | 
			
		||||
				return "§c插件 " + name + " 卸载失败!";
 | 
			
		||||
			} catch (IllegalAccessException e) {
 | 
			
		||||
				e.printStackTrace();
 | 
			
		||||
				return "插件已失败!";
 | 
			
		||||
				return "§c插件 " + name + " 卸载失败!";
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		pluginManager.disablePlugin(plugin);
 | 
			
		||||
 | 
			
		||||
		if ((plugins != null) && (plugins.contains(plugin))) {
 | 
			
		||||
		if (plugins != null && plugins.contains(plugin)) {
 | 
			
		||||
			plugins.remove(plugin);
 | 
			
		||||
		}
 | 
			
		||||
		if ((names != null) && (names.containsKey(name))) {
 | 
			
		||||
 | 
			
		||||
		if (names != null && names.containsKey(name)) {
 | 
			
		||||
			names.remove(name);
 | 
			
		||||
		}
 | 
			
		||||
		Iterator<RegisteredListener> it;
 | 
			
		||||
		if ((listeners != null) && (reloadlisteners)) {
 | 
			
		||||
 | 
			
		||||
		if (listeners != null && reloadlisteners) {
 | 
			
		||||
			for (SortedSet<RegisteredListener> set : listeners.values()) {
 | 
			
		||||
				for (it = set.iterator(); it.hasNext();) {
 | 
			
		||||
				for (Iterator<RegisteredListener> it = set.iterator(); it.hasNext();) {
 | 
			
		||||
					RegisteredListener value = it.next();
 | 
			
		||||
					if (value.getPlugin() == plugin)
 | 
			
		||||
					if (value.getPlugin() == plugin) {
 | 
			
		||||
						it.remove();
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		Iterator<Map.Entry<String, Command>> cmdit;
 | 
			
		||||
		if (commandMap != null) {
 | 
			
		||||
			for (cmdit = commands.entrySet().iterator(); cmdit.hasNext();) {
 | 
			
		||||
				Map.Entry<String, Command> entry = cmdit.next();
 | 
			
		||||
				if ((entry.getValue() instanceof PluginCommand)) {
 | 
			
		||||
			for (Iterator<Map.Entry<String, Command>> it = commands.entrySet().iterator(); it.hasNext();) {
 | 
			
		||||
				Map.Entry<String, Command> entry = it.next();
 | 
			
		||||
				if (entry.getValue() instanceof PluginCommand) {
 | 
			
		||||
					PluginCommand c = (PluginCommand) entry.getValue();
 | 
			
		||||
					if (c.getPlugin() == plugin) {
 | 
			
		||||
						c.unregister(commandMap);
 | 
			
		||||
						cmdit.remove();
 | 
			
		||||
						it.remove();
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
@@ -277,6 +277,6 @@ public class PluginUtil {
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		System.gc();
 | 
			
		||||
		return "插件已卸载!";
 | 
			
		||||
		return "§a插件 " + name + " 已成功卸载!";
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user