mirror of
				https://e.coding.net/circlecloud/Yum.git
				synced 2025-11-04 05:06:02 +00:00 
			
		
		
		
	
							
								
								
									
										2
									
								
								pom.xml
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								pom.xml
									
									
									
									
									
								
							@@ -3,7 +3,7 @@
 | 
			
		||||
	<modelVersion>4.0.0</modelVersion>
 | 
			
		||||
	<groupId>cn.CityCraft</groupId>
 | 
			
		||||
	<artifactId>Yum</artifactId>
 | 
			
		||||
	<version>0.0.1-SNAPSHOT</version>
 | 
			
		||||
	<version>1.1</version>
 | 
			
		||||
	<name>Yum</name>
 | 
			
		||||
  <build>
 | 
			
		||||
    <finalName>${project.name}</finalName>
 | 
			
		||||
 
 | 
			
		||||
@@ -3,20 +3,10 @@
 | 
			
		||||
 */
 | 
			
		||||
package cn.citycraft.Yum;
 | 
			
		||||
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.Arrays;
 | 
			
		||||
import java.util.Collections;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
import org.bukkit.Bukkit;
 | 
			
		||||
import org.bukkit.command.Command;
 | 
			
		||||
import org.bukkit.command.CommandSender;
 | 
			
		||||
import org.bukkit.plugin.Plugin;
 | 
			
		||||
import org.bukkit.plugin.java.JavaPlugin;
 | 
			
		||||
import org.bukkit.util.StringUtil;
 | 
			
		||||
 | 
			
		||||
import cn.citycraft.Yum.utils.DownloadUtils;
 | 
			
		||||
import cn.citycraft.Yum.utils.PluginUtil;
 | 
			
		||||
import cn.citycraft.Yum.commands.CommandHandler;
 | 
			
		||||
import cn.citycraft.Yum.utils.DownloadManager;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * MC插件仓库
 | 
			
		||||
@@ -24,80 +14,12 @@ import cn.citycraft.Yum.utils.PluginUtil;
 | 
			
		||||
 * @author 蒋天蓓 2015年8月21日下午5:14:39
 | 
			
		||||
 */
 | 
			
		||||
public class Yum extends JavaPlugin {
 | 
			
		||||
	DownloadUtils download;
 | 
			
		||||
 | 
			
		||||
	@Override
 | 
			
		||||
	public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
 | 
			
		||||
		switch (args.length) {
 | 
			
		||||
		case 0:
 | 
			
		||||
			break;
 | 
			
		||||
		case 1:
 | 
			
		||||
			switch (args[0]) {
 | 
			
		||||
			case "list":
 | 
			
		||||
				sender.sendMessage("§3服务器已安装插件: ");
 | 
			
		||||
				for (Plugin plugin : Bukkit.getPluginManager().getPlugins()) {
 | 
			
		||||
					sender.sendMessage("§6 - " + PluginUtil.getFormattedName(plugin, true));
 | 
			
		||||
				}
 | 
			
		||||
				break;
 | 
			
		||||
			}
 | 
			
		||||
			break;
 | 
			
		||||
		case 2:
 | 
			
		||||
			Plugin plugin = this.getServer().getPluginManager().getPlugin(args[1]);
 | 
			
		||||
			switch (args[0]) {
 | 
			
		||||
			case "install":
 | 
			
		||||
				if (plugin != null) {
 | 
			
		||||
					if (download.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("§c插件不存在或已卸载!");
 | 
			
		||||
				}
 | 
			
		||||
				break;
 | 
			
		||||
			case "update":
 | 
			
		||||
				if (plugin != null) {
 | 
			
		||||
					sender.sendMessage(PluginUtil.unload(plugin));
 | 
			
		||||
					if (download.download(sender, args[1])) {
 | 
			
		||||
						sender.sendMessage(PluginUtil.load(args[1]));
 | 
			
		||||
					}
 | 
			
		||||
				} else {
 | 
			
		||||
					sender.sendMessage("§c插件不存在或已卸载!");
 | 
			
		||||
				}
 | 
			
		||||
				break;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		return true;
 | 
			
		||||
	};
 | 
			
		||||
	public DownloadManager download;
 | 
			
		||||
 | 
			
		||||
	@Override
 | 
			
		||||
	public void onEnable() {
 | 
			
		||||
		download = new DownloadUtils(this);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Override
 | 
			
		||||
	public List<String> onTabComplete(CommandSender sender, Command command, String label, String[] args) {
 | 
			
		||||
		final String[] COMMANDS = { "install", "remove", "list", "update" };
 | 
			
		||||
		if (sender.isOp() || sender.hasPermission("yum.admin") || sender.hasPermission("yum." + args[0])) {
 | 
			
		||||
			List<String> completions = new ArrayList<>();
 | 
			
		||||
			if (args.length == 1) {
 | 
			
		||||
				String partialCommand = args[0];
 | 
			
		||||
				List<String> commands = new ArrayList<>(Arrays.asList(COMMANDS));
 | 
			
		||||
				StringUtil.copyPartialMatches(partialCommand, commands, completions);
 | 
			
		||||
			}
 | 
			
		||||
			if (args.length == 2) {
 | 
			
		||||
				String partialPlugin = args[1];
 | 
			
		||||
				List<String> plugins = PluginUtil.getPluginNames(false);
 | 
			
		||||
				StringUtil.copyPartialMatches(partialPlugin, plugins, completions);
 | 
			
		||||
			}
 | 
			
		||||
			Collections.sort(completions);
 | 
			
		||||
			return completions;
 | 
			
		||||
		}
 | 
			
		||||
		return null;
 | 
			
		||||
		download = new DownloadManager(this);
 | 
			
		||||
		this.getCommand("yum").setExecutor(new CommandHandler(this));
 | 
			
		||||
		this.getCommand("yum").setTabCompleter(new CommandHandler(this));
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										137
									
								
								src/main/java/cn/citycraft/Yum/commands/BaseCommand.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										137
									
								
								src/main/java/cn/citycraft/Yum/commands/BaseCommand.java
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,137 @@
 | 
			
		||||
/**
 | 
			
		||||
 * 
 | 
			
		||||
 */
 | 
			
		||||
package cn.citycraft.Yum.commands;
 | 
			
		||||
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.Arrays;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
import org.bukkit.command.CommandException;
 | 
			
		||||
import org.bukkit.command.CommandSender;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 基础命令类
 | 
			
		||||
 * 
 | 
			
		||||
 * @author 蒋天蓓
 | 
			
		||||
 *         2015年8月12日下午12:49:34
 | 
			
		||||
 */
 | 
			
		||||
public abstract class BaseCommand {
 | 
			
		||||
	private String name;
 | 
			
		||||
	private String permission;
 | 
			
		||||
	private String[] aliases;
 | 
			
		||||
 | 
			
		||||
	public BaseCommand(String name) {
 | 
			
		||||
		this(name, new String[0]);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public BaseCommand(String name, String... aliases) {
 | 
			
		||||
		this.name = name;
 | 
			
		||||
		this.aliases = aliases;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * 获取命令名称
 | 
			
		||||
	 * 
 | 
			
		||||
	 * @return 命令名称
 | 
			
		||||
	 */
 | 
			
		||||
	public String getName() {
 | 
			
		||||
		return name;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * 设置命令权限
 | 
			
		||||
	 * 
 | 
			
		||||
	 * @param permission
 | 
			
		||||
	 *            - 命令权限
 | 
			
		||||
	 */
 | 
			
		||||
	public void setPermission(String permission) {
 | 
			
		||||
		this.permission = permission;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * 获得命令权限
 | 
			
		||||
	 * 
 | 
			
		||||
	 * @return 目录命令权限
 | 
			
		||||
	 */
 | 
			
		||||
	public String getPermission() {
 | 
			
		||||
		return permission;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * 检查Sender权限
 | 
			
		||||
	 * 
 | 
			
		||||
	 * @param sender
 | 
			
		||||
	 *            - 命令发送者
 | 
			
		||||
	 * @return 是否有权限执行命令
 | 
			
		||||
	 */
 | 
			
		||||
	public final boolean hasPermission(CommandSender sender) {
 | 
			
		||||
		if (permission == null)
 | 
			
		||||
			return true;
 | 
			
		||||
		return sender.hasPermission(permission);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * 获得可能的参数
 | 
			
		||||
	 * 
 | 
			
		||||
	 * @return
 | 
			
		||||
	 */
 | 
			
		||||
	public abstract String getPossibleArguments();
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * 获得最小参数个数
 | 
			
		||||
	 * 
 | 
			
		||||
	 * @return 最小参数个数
 | 
			
		||||
	 */
 | 
			
		||||
	public abstract int getMinimumArguments();
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * 执行命令参数
 | 
			
		||||
	 * 
 | 
			
		||||
	 * @param sender
 | 
			
		||||
	 *            - 命令发送者
 | 
			
		||||
	 * @param label
 | 
			
		||||
	 *            - 命令
 | 
			
		||||
	 * @param args
 | 
			
		||||
	 *            - 命令附加参数
 | 
			
		||||
	 * @throws CommandException
 | 
			
		||||
	 *             - 命令异常
 | 
			
		||||
	 */
 | 
			
		||||
	public abstract void execute(CommandSender sender, String label, String[] args) throws CommandException;
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * 是否只有玩家才能执行此命令
 | 
			
		||||
	 * 
 | 
			
		||||
	 * @return 是否为玩家命令
 | 
			
		||||
	 */
 | 
			
		||||
	public abstract boolean isOnlyPlayerExecutable();
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * 命令匹配检测
 | 
			
		||||
	 * 
 | 
			
		||||
	 * @param name
 | 
			
		||||
	 *            - 命令
 | 
			
		||||
	 * @return 是否匹配
 | 
			
		||||
	 */
 | 
			
		||||
	public final boolean isValidTrigger(String name) {
 | 
			
		||||
		if (this.name.equalsIgnoreCase(name)) {
 | 
			
		||||
			return true;
 | 
			
		||||
		}
 | 
			
		||||
		if (aliases != null) {
 | 
			
		||||
			for (String alias : aliases) {
 | 
			
		||||
				if (alias.equalsIgnoreCase(name)) {
 | 
			
		||||
					return true;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		return false;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public List<String> getCommandList() {
 | 
			
		||||
		List<String> cmds = new ArrayList<String>();
 | 
			
		||||
		cmds.add(name);
 | 
			
		||||
		cmds.addAll(Arrays.asList(aliases));
 | 
			
		||||
		return cmds;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										149
									
								
								src/main/java/cn/citycraft/Yum/commands/CommandHandler.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										149
									
								
								src/main/java/cn/citycraft/Yum/commands/CommandHandler.java
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,149 @@
 | 
			
		||||
/**
 | 
			
		||||
 * 
 | 
			
		||||
 */
 | 
			
		||||
package cn.citycraft.Yum.commands;
 | 
			
		||||
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.Collections;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
import org.bukkit.command.Command;
 | 
			
		||||
import org.bukkit.command.CommandException;
 | 
			
		||||
import org.bukkit.command.CommandExecutor;
 | 
			
		||||
import org.bukkit.command.CommandSender;
 | 
			
		||||
import org.bukkit.command.TabCompleter;
 | 
			
		||||
import org.bukkit.entity.Player;
 | 
			
		||||
import org.bukkit.util.StringUtil;
 | 
			
		||||
 | 
			
		||||
import cn.citycraft.Yum.Yum;
 | 
			
		||||
import cn.citycraft.Yum.utils.PluginsManager;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 子命令处理类
 | 
			
		||||
 * 
 | 
			
		||||
 * @author 蒋天蓓
 | 
			
		||||
 *         2015年8月22日上午8:29:44
 | 
			
		||||
 */
 | 
			
		||||
public class CommandHandler implements CommandExecutor, TabCompleter {
 | 
			
		||||
	/**
 | 
			
		||||
	 * 已注册命令列表(包括别名)
 | 
			
		||||
	 */
 | 
			
		||||
	List<String> RegisterCommandList = new ArrayList<String>();
 | 
			
		||||
	/**
 | 
			
		||||
	 * 命令监听类列表
 | 
			
		||||
	 */
 | 
			
		||||
	private List<BaseCommand> commandlist;
 | 
			
		||||
	/**
 | 
			
		||||
	 * 插件主类
 | 
			
		||||
	 */
 | 
			
		||||
	Yum plugin;
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * 获得已注册的命令列表
 | 
			
		||||
	 * 
 | 
			
		||||
	 * @return - 返回已注册的命令List
 | 
			
		||||
	 */
 | 
			
		||||
	public List<String> getRegisterCommands() {
 | 
			
		||||
		List<String> cmds = new ArrayList<String>();
 | 
			
		||||
		for (BaseCommand command : commandlist) {
 | 
			
		||||
			cmds.addAll(command.getCommandList());
 | 
			
		||||
		}
 | 
			
		||||
		return cmds;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Override
 | 
			
		||||
	public List<String> onTabComplete(CommandSender sender, Command command, String label, String[] args) {
 | 
			
		||||
		if (sender.isOp() || sender.hasPermission("yum.admin") || sender.hasPermission("yum." + args[0])) {
 | 
			
		||||
			List<String> completions = new ArrayList<>();
 | 
			
		||||
			if (args.length == 1) {
 | 
			
		||||
				String partialCommand = args[0];
 | 
			
		||||
				List<String> commands = RegisterCommandList;
 | 
			
		||||
				StringUtil.copyPartialMatches(partialCommand, commands, completions);
 | 
			
		||||
			}
 | 
			
		||||
			if (args.length == 2) {
 | 
			
		||||
				String partialPlugin = args[1];
 | 
			
		||||
				List<String> plugins = PluginsManager.getPluginNames(false);
 | 
			
		||||
				StringUtil.copyPartialMatches(partialPlugin, plugins, completions);
 | 
			
		||||
			}
 | 
			
		||||
			Collections.sort(completions);
 | 
			
		||||
			return completions;
 | 
			
		||||
		}
 | 
			
		||||
		return null;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * 注册子命令
 | 
			
		||||
	 * 
 | 
			
		||||
	 * @param yum
 | 
			
		||||
	 *            - 插件主类
 | 
			
		||||
	 */
 | 
			
		||||
	public CommandHandler(Yum yum) {
 | 
			
		||||
		this.plugin = yum;
 | 
			
		||||
		registerCommand(new CommandList(yum));
 | 
			
		||||
		registerCommand(new CommandInstall(yum));
 | 
			
		||||
		registerCommand(new CommandUpdate(yum));
 | 
			
		||||
		registerCommand(new CommandRemove(yum));
 | 
			
		||||
		registerCommand(new CommandInfo(yum));
 | 
			
		||||
 | 
			
		||||
		RegisterCommandList = getRegisterCommands();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Override
 | 
			
		||||
	public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
 | 
			
		||||
		if (args.length == 0) {
 | 
			
		||||
 | 
			
		||||
			return true;
 | 
			
		||||
		}
 | 
			
		||||
		String subcmd = args[0];
 | 
			
		||||
		String[] subargs = moveStrings(args, 1);
 | 
			
		||||
		for (BaseCommand command : commandlist) {
 | 
			
		||||
			if (command.isValidTrigger(subcmd)) {
 | 
			
		||||
				if (!command.hasPermission(sender)) {
 | 
			
		||||
					sender.sendMessage("你没有此命令的权限!");
 | 
			
		||||
					return true;
 | 
			
		||||
				}
 | 
			
		||||
				if (command.isOnlyPlayerExecutable() && !(sender instanceof Player)) {
 | 
			
		||||
					sender.sendMessage("控制台无法使用此命令!");
 | 
			
		||||
					return true;
 | 
			
		||||
				}
 | 
			
		||||
				if (subargs.length >= command.getMinimumArguments()) {
 | 
			
		||||
					try {
 | 
			
		||||
						command.execute(sender, subcmd, subargs);
 | 
			
		||||
						return true;
 | 
			
		||||
					} catch (CommandException e) {
 | 
			
		||||
						sender.sendMessage(e.getMessage());
 | 
			
		||||
					}
 | 
			
		||||
				} else {
 | 
			
		||||
					sender.sendMessage("错误的参数 /yum " + command.getName() + command.getPossibleArguments());
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		return false;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * 注册命令
 | 
			
		||||
	 *
 | 
			
		||||
	 * @param command
 | 
			
		||||
	 *            - 被注册的命令类
 | 
			
		||||
	 */
 | 
			
		||||
	public void registerCommand(BaseCommand command) {
 | 
			
		||||
		commandlist.add(command);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * 转移数组
 | 
			
		||||
	 * 
 | 
			
		||||
	 * @param args
 | 
			
		||||
	 *            - 原数组
 | 
			
		||||
	 * @param start
 | 
			
		||||
	 *            - 数组开始位置
 | 
			
		||||
	 * @return 转移后的数组字符串
 | 
			
		||||
	 */
 | 
			
		||||
	public static String[] moveStrings(String[] args, int start) {
 | 
			
		||||
		String[] ret = new String[args.length - start];
 | 
			
		||||
		System.arraycopy(args, args.length - start, ret, 0, ret.length);
 | 
			
		||||
		return ret;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										70
									
								
								src/main/java/cn/citycraft/Yum/commands/CommandInfo.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										70
									
								
								src/main/java/cn/citycraft/Yum/commands/CommandInfo.java
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,70 @@
 | 
			
		||||
/**
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
package cn.citycraft.Yum.commands;
 | 
			
		||||
 | 
			
		||||
import org.bukkit.command.CommandException;
 | 
			
		||||
import org.bukkit.command.CommandSender;
 | 
			
		||||
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;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 插件删除命令类
 | 
			
		||||
 * 
 | 
			
		||||
 * @author 蒋天蓓 2015年8月12日下午2:04:05
 | 
			
		||||
 */
 | 
			
		||||
public class CommandInfo extends BaseCommand {
 | 
			
		||||
	Yum yum;
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * @param name
 | 
			
		||||
	 */
 | 
			
		||||
	public CommandInfo(Yum main) {
 | 
			
		||||
		super("info");
 | 
			
		||||
		this.yum = main;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Override
 | 
			
		||||
	public boolean isOnlyPlayerExecutable() {
 | 
			
		||||
		return false;
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	@Override
 | 
			
		||||
	public void execute(CommandSender sender, String label, String[] args) throws CommandException {
 | 
			
		||||
		if (args.length == 0) {
 | 
			
		||||
			return;
 | 
			
		||||
		}
 | 
			
		||||
		String pluginname = args[0];
 | 
			
		||||
		Plugin plugin = yum.getServer().getPluginManager().getPlugin(pluginname);
 | 
			
		||||
		if (plugin != null) {
 | 
			
		||||
			PluginDescriptionFile desc = plugin.getDescription();
 | 
			
		||||
			sender.sendMessage("§6插件名称: §3" + plugin.getName());
 | 
			
		||||
			sender.sendMessage("§6插件版本: §3" + desc.getVersion());
 | 
			
		||||
			sender.sendMessage("§6插件作者: §3" + desc.getAuthors().toArray().toString());
 | 
			
		||||
			sender.sendMessage("§6插件描述: §3" + desc.getDescription());
 | 
			
		||||
			sender.sendMessage("§6插件依赖: §3");
 | 
			
		||||
			StringUtil.sendStringArray(sender, desc.getDepend());
 | 
			
		||||
			sender.sendMessage("§6插件软依赖: §3");
 | 
			
		||||
			StringUtil.sendStringArray(sender, desc.getSoftDepend());
 | 
			
		||||
			sender.sendMessage("§6插件载入前: §3");
 | 
			
		||||
			StringUtil.sendStringArray(sender, desc.getLoadBefore());
 | 
			
		||||
			sender.sendMessage("§6插件物理路径: §3" + PluginsManager.getPluginFile(plugin).getAbsolutePath());
 | 
			
		||||
		} else {
 | 
			
		||||
			sender.sendMessage("§c插件 " + pluginname + " 不存在或已卸载!");
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Override
 | 
			
		||||
	public int getMinimumArguments() {
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Override
 | 
			
		||||
	public String getPossibleArguments() {
 | 
			
		||||
		return "<插件名称>";
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										57
									
								
								src/main/java/cn/citycraft/Yum/commands/CommandInstall.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										57
									
								
								src/main/java/cn/citycraft/Yum/commands/CommandInstall.java
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,57 @@
 | 
			
		||||
/**
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
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;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 插件安装命令类
 | 
			
		||||
 * 
 | 
			
		||||
 * @author 蒋天蓓 2015年8月12日下午2:04:05
 | 
			
		||||
 */
 | 
			
		||||
public class CommandInstall extends BaseCommand {
 | 
			
		||||
	Yum yum;
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * @param name
 | 
			
		||||
	 */
 | 
			
		||||
	public CommandInstall(Yum main) {
 | 
			
		||||
		super("install");
 | 
			
		||||
		this.yum = main;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Override
 | 
			
		||||
	public boolean isOnlyPlayerExecutable() {
 | 
			
		||||
		return false;
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	@Override
 | 
			
		||||
	public void execute(CommandSender sender, String label, String[] args) throws CommandException {
 | 
			
		||||
		String pluginname = args[0];
 | 
			
		||||
		Plugin plugin = Bukkit.getServer().getPluginManager().getPlugin(pluginname);
 | 
			
		||||
		if (plugin != null) {
 | 
			
		||||
			if (yum.download.run(sender, pluginname)) {
 | 
			
		||||
				sender.sendMessage(PluginsManager.load(pluginname));
 | 
			
		||||
			}
 | 
			
		||||
		} else {
 | 
			
		||||
			sender.sendMessage("§c插件已安装在服务器 需要更新请使用yum update " + pluginname + "!");
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Override
 | 
			
		||||
	public int getMinimumArguments() {
 | 
			
		||||
		return 1;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Override
 | 
			
		||||
	public String getPossibleArguments() {
 | 
			
		||||
		return "<插件名称>";
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										52
									
								
								src/main/java/cn/citycraft/Yum/commands/CommandList.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										52
									
								
								src/main/java/cn/citycraft/Yum/commands/CommandList.java
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,52 @@
 | 
			
		||||
/**
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
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;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 插件查看命令类
 | 
			
		||||
 * 
 | 
			
		||||
 * @author 蒋天蓓 2015年8月12日下午2:04:05
 | 
			
		||||
 */
 | 
			
		||||
public class CommandList extends BaseCommand {
 | 
			
		||||
	Yum plugin;
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * @param name
 | 
			
		||||
	 */
 | 
			
		||||
	public CommandList(Yum main) {
 | 
			
		||||
		super("list");
 | 
			
		||||
		this.plugin = main;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Override
 | 
			
		||||
	public boolean isOnlyPlayerExecutable() {
 | 
			
		||||
		return false;
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	@Override
 | 
			
		||||
	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));
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Override
 | 
			
		||||
	public int getMinimumArguments() {
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Override
 | 
			
		||||
	public String getPossibleArguments() {
 | 
			
		||||
		return "";
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										54
									
								
								src/main/java/cn/citycraft/Yum/commands/CommandRemove.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										54
									
								
								src/main/java/cn/citycraft/Yum/commands/CommandRemove.java
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,54 @@
 | 
			
		||||
/**
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
package cn.citycraft.Yum.commands;
 | 
			
		||||
 | 
			
		||||
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;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 插件删除命令类
 | 
			
		||||
 * 
 | 
			
		||||
 * @author 蒋天蓓 2015年8月12日下午2:04:05
 | 
			
		||||
 */
 | 
			
		||||
public class CommandRemove extends BaseCommand {
 | 
			
		||||
	Yum yum;
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * @param name
 | 
			
		||||
	 */
 | 
			
		||||
	public CommandRemove(Yum main) {
 | 
			
		||||
		super("remove");
 | 
			
		||||
		this.yum = main;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Override
 | 
			
		||||
	public boolean isOnlyPlayerExecutable() {
 | 
			
		||||
		return false;
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	@Override
 | 
			
		||||
	public void execute(CommandSender sender, String label, String[] args) throws CommandException {
 | 
			
		||||
		String pluginname = args[0];
 | 
			
		||||
		Plugin plugin = yum.getServer().getPluginManager().getPlugin(pluginname);
 | 
			
		||||
		if (plugin != null) {
 | 
			
		||||
			sender.sendMessage(PluginsManager.unload(plugin));
 | 
			
		||||
		} else {
 | 
			
		||||
			sender.sendMessage("§c插件 " + pluginname + " 不存在或已卸载!");
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Override
 | 
			
		||||
	public int getMinimumArguments() {
 | 
			
		||||
		return 1;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Override
 | 
			
		||||
	public String getPossibleArguments() {
 | 
			
		||||
		return "<插件名称>";
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										57
									
								
								src/main/java/cn/citycraft/Yum/commands/CommandUpdate.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										57
									
								
								src/main/java/cn/citycraft/Yum/commands/CommandUpdate.java
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,57 @@
 | 
			
		||||
/**
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
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;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @author 蒋天蓓 2015年8月12日下午2:04:05
 | 
			
		||||
 */
 | 
			
		||||
public class CommandUpdate extends BaseCommand {
 | 
			
		||||
	Yum yum;
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * @param name
 | 
			
		||||
	 */
 | 
			
		||||
	public CommandUpdate(Yum main) {
 | 
			
		||||
		super("update");
 | 
			
		||||
		this.yum = main;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Override
 | 
			
		||||
	public boolean isOnlyPlayerExecutable() {
 | 
			
		||||
		return false;
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	@Override
 | 
			
		||||
	public void execute(CommandSender sender, String label, String[] args) throws CommandException {
 | 
			
		||||
		String pluginname = args[0];
 | 
			
		||||
		Plugin plugin = Bukkit.getServer().getPluginManager().getPlugin(pluginname);
 | 
			
		||||
		sender.sendMessage("§a开始更新插件: " + pluginname);
 | 
			
		||||
		if (plugin != null) {
 | 
			
		||||
			sender.sendMessage(PluginsManager.unload(plugin));
 | 
			
		||||
			if (yum.download.run(sender, pluginname)) {
 | 
			
		||||
				sender.sendMessage(PluginsManager.load(pluginname));
 | 
			
		||||
			}
 | 
			
		||||
		} else {
 | 
			
		||||
			sender.sendMessage("§c插件未安装或已卸载 需要安装请使用yum install " + pluginname + "!");
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Override
 | 
			
		||||
	public int getMinimumArguments() {
 | 
			
		||||
		return 1;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Override
 | 
			
		||||
	public String getPossibleArguments() {
 | 
			
		||||
		return "<插件名称>";
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										81
									
								
								src/main/java/cn/citycraft/Yum/config/ConfigLoader.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										81
									
								
								src/main/java/cn/citycraft/Yum/config/ConfigLoader.java
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,81 @@
 | 
			
		||||
package cn.citycraft.Yum.config;
 | 
			
		||||
 | 
			
		||||
import java.io.File;
 | 
			
		||||
import java.io.IOException;
 | 
			
		||||
 | 
			
		||||
import org.bukkit.plugin.Plugin;
 | 
			
		||||
 | 
			
		||||
public class ConfigLoader extends FileConfig {
 | 
			
		||||
	protected FileConfig config;
 | 
			
		||||
	protected File file;
 | 
			
		||||
	protected boolean tip = true;
 | 
			
		||||
	protected Plugin plugin;
 | 
			
		||||
 | 
			
		||||
	public ConfigLoader(Plugin p, File file) {
 | 
			
		||||
		this.plugin = p;
 | 
			
		||||
		config = loadConfig(p, file, null, true);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public ConfigLoader(Plugin p, String filename) {
 | 
			
		||||
		this.plugin = p;
 | 
			
		||||
		config = loadConfig(p, new File(filename), null, true);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public FileConfig loadConfig(Plugin p, File file, String ver, boolean res) {
 | 
			
		||||
		tip = res;
 | 
			
		||||
		if (!file.getParentFile().exists()) {
 | 
			
		||||
			file.getParentFile().mkdirs();
 | 
			
		||||
			p.getLogger().info("创建新的文件夹" + file.getParentFile().getAbsolutePath() + "...");
 | 
			
		||||
		}
 | 
			
		||||
		if (!file.exists()) {
 | 
			
		||||
			fileCreate(p, file, res);
 | 
			
		||||
		} else {
 | 
			
		||||
			if (ver != null) {
 | 
			
		||||
				FileConfig configcheck = init(file);
 | 
			
		||||
				String version = configcheck.getString("version");
 | 
			
		||||
				if (version == null || !version.equals(ver)) {
 | 
			
		||||
					p.getLogger().warning("配置文件: " + file.getName() + " 版本过低 正在升级...");
 | 
			
		||||
					try {
 | 
			
		||||
						configcheck.save(new File(file.getParent(), file.getName() + ".backup"));
 | 
			
		||||
						p.getLogger().warning("配置文件: " + file.getName() + " 已备份为 " + file.getName() + ".backup !");
 | 
			
		||||
					} catch (IOException e) {
 | 
			
		||||
						p.getLogger().warning("配置文件: " + file.getName() + "备份失败!");
 | 
			
		||||
					}
 | 
			
		||||
					p.saveResource(file.getName(), true);
 | 
			
		||||
					p.getLogger().info("配置文件: " + file.getName() + "升级成功!");
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		if (tip)
 | 
			
		||||
			p.getLogger().info("载入配置文件: " + file.getName() + (ver != null ? " 版本: " + ver : ""));
 | 
			
		||||
		return init(file);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	private void fileCreate(Plugin p, File file, boolean res) {
 | 
			
		||||
		if (res) {
 | 
			
		||||
			p.saveResource(file.getName(), false);
 | 
			
		||||
		} else {
 | 
			
		||||
			try {
 | 
			
		||||
				p.getLogger().info("创建新的配置文件" + file.getAbsolutePath() + "...");
 | 
			
		||||
				file.createNewFile();
 | 
			
		||||
			} catch (IOException e) {
 | 
			
		||||
				p.getLogger().info("配置文件" + file.getName() + "创建失败...");
 | 
			
		||||
				e.printStackTrace();
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public void saveError(File file) {
 | 
			
		||||
		plugin.getLogger().info("配置文件" + file.getName() + "保存错误...");
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public void save() {
 | 
			
		||||
		try {
 | 
			
		||||
			config.save(file);
 | 
			
		||||
		} catch (IOException e) {
 | 
			
		||||
			saveError(file);
 | 
			
		||||
			e.printStackTrace();
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										108
									
								
								src/main/java/cn/citycraft/Yum/config/FileConfig.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										108
									
								
								src/main/java/cn/citycraft/Yum/config/FileConfig.java
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,108 @@
 | 
			
		||||
package cn.citycraft.Yum.config;
 | 
			
		||||
 | 
			
		||||
import java.io.BufferedReader;
 | 
			
		||||
import java.io.File;
 | 
			
		||||
import java.io.FileInputStream;
 | 
			
		||||
import java.io.FileNotFoundException;
 | 
			
		||||
import java.io.FileOutputStream;
 | 
			
		||||
import java.io.IOException;
 | 
			
		||||
import java.io.InputStreamReader;
 | 
			
		||||
import java.io.OutputStreamWriter;
 | 
			
		||||
import java.io.Reader;
 | 
			
		||||
import java.io.Writer;
 | 
			
		||||
import java.util.logging.Level;
 | 
			
		||||
 | 
			
		||||
import org.apache.commons.lang.Validate;
 | 
			
		||||
import org.bukkit.Bukkit;
 | 
			
		||||
import org.bukkit.configuration.Configuration;
 | 
			
		||||
import org.bukkit.configuration.InvalidConfigurationException;
 | 
			
		||||
import org.bukkit.configuration.file.YamlConfiguration;
 | 
			
		||||
import org.bukkit.configuration.file.YamlConstructor;
 | 
			
		||||
import org.bukkit.configuration.file.YamlRepresenter;
 | 
			
		||||
import org.yaml.snakeyaml.DumperOptions;
 | 
			
		||||
import org.yaml.snakeyaml.Yaml;
 | 
			
		||||
import org.yaml.snakeyaml.representer.Representer;
 | 
			
		||||
 | 
			
		||||
import com.google.common.base.Charsets;
 | 
			
		||||
import com.google.common.io.Files;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * An implementation of {@link Configuration} which saves all files in Yaml. Note that this
 | 
			
		||||
 * implementation is not synchronized.
 | 
			
		||||
 */
 | 
			
		||||
public class FileConfig extends YamlConfiguration {
 | 
			
		||||
 | 
			
		||||
	public static FileConfig init(File file) {
 | 
			
		||||
		return FileConfig.loadConfiguration(file);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public static FileConfig loadConfiguration(File file) {
 | 
			
		||||
		Validate.notNull(file, "File cannot be null");
 | 
			
		||||
		FileConfig config = new FileConfig();
 | 
			
		||||
		try {
 | 
			
		||||
			config.load(file);
 | 
			
		||||
		} catch (FileNotFoundException ex) {
 | 
			
		||||
		} catch (IOException ex) {
 | 
			
		||||
			Bukkit.getLogger().log(Level.SEVERE, "Cannot load " + file, ex);
 | 
			
		||||
		} catch (InvalidConfigurationException ex) {
 | 
			
		||||
			Bukkit.getLogger().log(Level.SEVERE, "Cannot load " + file, ex);
 | 
			
		||||
		}
 | 
			
		||||
		return config;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	protected final DumperOptions yamlOptions = new DumperOptions();
 | 
			
		||||
 | 
			
		||||
	protected final Representer yamlRepresenter = new YamlRepresenter();
 | 
			
		||||
 | 
			
		||||
	protected final Yaml yaml = new Yaml(new YamlConstructor(), yamlRepresenter, yamlOptions);
 | 
			
		||||
 | 
			
		||||
	@Override
 | 
			
		||||
	public void load(File file) throws FileNotFoundException, IOException, InvalidConfigurationException {
 | 
			
		||||
		Validate.notNull(file, "File cannot be null");
 | 
			
		||||
		final FileInputStream stream = new FileInputStream(file);
 | 
			
		||||
		load(new InputStreamReader(stream, Charsets.UTF_8));
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Override
 | 
			
		||||
	public void load(Reader reader) throws IOException, InvalidConfigurationException {
 | 
			
		||||
		BufferedReader input = (reader instanceof BufferedReader) ? (BufferedReader) reader
 | 
			
		||||
				: new BufferedReader(reader);
 | 
			
		||||
		StringBuilder builder = new StringBuilder();
 | 
			
		||||
		try {
 | 
			
		||||
			String line;
 | 
			
		||||
			while ((line = input.readLine()) != null) {
 | 
			
		||||
				builder.append(line);
 | 
			
		||||
				builder.append('\n');
 | 
			
		||||
			}
 | 
			
		||||
		} finally {
 | 
			
		||||
			input.close();
 | 
			
		||||
		}
 | 
			
		||||
		loadFromString(builder.toString());
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Override
 | 
			
		||||
	public void save(File file) throws IOException {
 | 
			
		||||
		Validate.notNull(file, "File cannot be null");
 | 
			
		||||
		Files.createParentDirs(file);
 | 
			
		||||
		String data = saveToString();
 | 
			
		||||
		Writer writer = new OutputStreamWriter(new FileOutputStream(file), Charsets.UTF_8);
 | 
			
		||||
		try {
 | 
			
		||||
			writer.write(data);
 | 
			
		||||
		} finally {
 | 
			
		||||
			writer.close();
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Override
 | 
			
		||||
	public String saveToString() {
 | 
			
		||||
		yamlOptions.setIndent(options().indent());
 | 
			
		||||
		yamlOptions.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK);
 | 
			
		||||
		yamlRepresenter.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK);
 | 
			
		||||
		String header = buildHeader();
 | 
			
		||||
		String dump = yaml.dump(getValues(false));
 | 
			
		||||
		if (dump.equals(BLANK_CONFIG)) {
 | 
			
		||||
			dump = "";
 | 
			
		||||
		}
 | 
			
		||||
		return header + dump;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
@@ -15,15 +15,17 @@ import org.bukkit.plugin.Plugin;
 | 
			
		||||
/**
 | 
			
		||||
 * @author 蒋天蓓 2015年8月21日下午6:08:09 TODO
 | 
			
		||||
 */
 | 
			
		||||
public class DownloadUtils {
 | 
			
		||||
public class DownloadManager {
 | 
			
		||||
	Plugin plugin;
 | 
			
		||||
 | 
			
		||||
	public DownloadUtils(Plugin main) {
 | 
			
		||||
	public DownloadManager(Plugin main) {
 | 
			
		||||
		this.plugin = main;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public boolean download(CommandSender sender, String pluginname) {
 | 
			
		||||
		String url = "http://ci.citycraft.cn:8800/jenkins/job/%1$s/lastSuccessfulBuild/artifact/target/%1$s.jar";
 | 
			
		||||
	public boolean run(CommandSender sender, String pluginname) {
 | 
			
		||||
		// String url =
 | 
			
		||||
		// "http://ci.citycraft.cn:8800/jenkins/job/%1$s/lastSuccessfulBuild/artifact/target/%1$s.jar";
 | 
			
		||||
		String url = "https://502647092.github.io/plugins/%1$s/%1$s.jar";
 | 
			
		||||
		BufferedInputStream in = null;
 | 
			
		||||
		FileOutputStream fout = null;
 | 
			
		||||
		if (sender == null) {
 | 
			
		||||
@@ -6,6 +6,7 @@ package cn.citycraft.Yum.utils;
 | 
			
		||||
import java.io.File;
 | 
			
		||||
import java.io.IOException;
 | 
			
		||||
import java.lang.reflect.Field;
 | 
			
		||||
import java.net.URL;
 | 
			
		||||
import java.net.URLClassLoader;
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.Iterator;
 | 
			
		||||
@@ -13,8 +14,6 @@ import java.util.List;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
import java.util.Map.Entry;
 | 
			
		||||
import java.util.SortedSet;
 | 
			
		||||
import java.util.logging.Level;
 | 
			
		||||
import java.util.logging.Logger;
 | 
			
		||||
 | 
			
		||||
import org.bukkit.Bukkit;
 | 
			
		||||
import org.bukkit.ChatColor;
 | 
			
		||||
@@ -27,6 +26,7 @@ import org.bukkit.plugin.InvalidPluginException;
 | 
			
		||||
import org.bukkit.plugin.Plugin;
 | 
			
		||||
import org.bukkit.plugin.PluginManager;
 | 
			
		||||
import org.bukkit.plugin.RegisteredListener;
 | 
			
		||||
import org.bukkit.plugin.UnknownDependencyException;
 | 
			
		||||
 | 
			
		||||
import com.google.common.base.Joiner;
 | 
			
		||||
 | 
			
		||||
@@ -35,7 +35,7 @@ import com.google.common.base.Joiner;
 | 
			
		||||
 *
 | 
			
		||||
 * @author 蒋天蓓 2015年8月21日下午7:03:26
 | 
			
		||||
 */
 | 
			
		||||
public class PluginUtil {
 | 
			
		||||
public class PluginsManager {
 | 
			
		||||
 | 
			
		||||
	public static void disable(Plugin plugin) {
 | 
			
		||||
		if ((plugin.isEnabled()) && (plugin != null)) {
 | 
			
		||||
@@ -98,6 +98,26 @@ public class PluginUtil {
 | 
			
		||||
		return plugins;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public static File getPluginFile(Plugin plugin) {
 | 
			
		||||
		File file = null;
 | 
			
		||||
		ClassLoader cl = plugin.getClass().getClassLoader();
 | 
			
		||||
		if ((cl instanceof URLClassLoader)) {
 | 
			
		||||
			@SuppressWarnings("resource")
 | 
			
		||||
			URLClassLoader ucl = (URLClassLoader) cl;
 | 
			
		||||
			URL url = ucl.getURLs()[0];
 | 
			
		||||
			file = new File(url.getPath(), url.getFile());
 | 
			
		||||
		}
 | 
			
		||||
		return file;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public static boolean deletePlugin(Plugin plugin) {
 | 
			
		||||
		ClassLoader cl = plugin.getClass().getClassLoader();
 | 
			
		||||
		if ((cl instanceof URLClassLoader)) {
 | 
			
		||||
		} else {
 | 
			
		||||
		}
 | 
			
		||||
		return false;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public static String getPluginVersion(String name) {
 | 
			
		||||
		Plugin plugin = getPluginByName(name);
 | 
			
		||||
		if ((plugin != null) && (plugin.getDescription() != null))
 | 
			
		||||
@@ -146,26 +166,31 @@ public class PluginUtil {
 | 
			
		||||
		File pluginDir = new File("plugins");
 | 
			
		||||
 | 
			
		||||
		if (!pluginDir.isDirectory()) {
 | 
			
		||||
			// TODO 提示
 | 
			
		||||
			return "§c插件目录不存在或IO错误!";
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		File pluginFile = new File(pluginDir, name + ".jar");
 | 
			
		||||
 | 
			
		||||
		if (!pluginFile.isFile())
 | 
			
		||||
			return "§c在plugins目录未找到 " + name + " 插件 请确认文件是否存在!";
 | 
			
		||||
 | 
			
		||||
		try {
 | 
			
		||||
			target = Bukkit.getPluginManager().loadPlugin(pluginFile);
 | 
			
		||||
		} catch (InvalidDescriptionException e) {
 | 
			
		||||
			e.printStackTrace();
 | 
			
		||||
			return "§c插件: " + name + " 的plugin.yml文件存在错误!";
 | 
			
		||||
			return "§c异常: " + e.getMessage() + " 插件: " + name + " 的plugin.yml文件存在错误!";
 | 
			
		||||
		} catch (InvalidPluginException e) {
 | 
			
		||||
			e.printStackTrace();
 | 
			
		||||
			return "§c文件: " + name + " 不是一个可载入的插件!";
 | 
			
		||||
			return "§c异常: " + e.getMessage() + " 文件: " + name + " 不是一个可载入的插件!";
 | 
			
		||||
		} catch (UnknownDependencyException e) {
 | 
			
		||||
			e.printStackTrace();
 | 
			
		||||
			return "§c异常: " + e.getMessage() + " 插件: " + name + " 缺少部分依赖!";
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		target.onLoad();
 | 
			
		||||
		Bukkit.getPluginManager().enablePlugin(target);
 | 
			
		||||
 | 
			
		||||
		return "§a插件 " + name + " 已成功载入到服务器!";
 | 
			
		||||
		return "§a插件: " + name + " 已成功载入到服务器!";
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public static void reload(Plugin plugin) {
 | 
			
		||||
@@ -186,19 +211,13 @@ public class PluginUtil {
 | 
			
		||||
	@SuppressWarnings("unchecked")
 | 
			
		||||
	public static String unload(Plugin plugin) {
 | 
			
		||||
		String name = plugin.getName();
 | 
			
		||||
 | 
			
		||||
		PluginManager pluginManager = Bukkit.getPluginManager();
 | 
			
		||||
 | 
			
		||||
		SimpleCommandMap commandMap = null;
 | 
			
		||||
 | 
			
		||||
		List<Plugin> plugins = null;
 | 
			
		||||
 | 
			
		||||
		Map<String, Plugin> names = null;
 | 
			
		||||
		Map<String, Command> commands = null;
 | 
			
		||||
		Map<Event, SortedSet<RegisteredListener>> listeners = null;
 | 
			
		||||
 | 
			
		||||
		boolean reloadlisteners = true;
 | 
			
		||||
 | 
			
		||||
		if (pluginManager != null) {
 | 
			
		||||
			try {
 | 
			
		||||
				Field pluginsField = Bukkit.getPluginManager().getClass().getDeclaredField("plugins");
 | 
			
		||||
@@ -225,23 +244,19 @@ public class PluginUtil {
 | 
			
		||||
				commands = (Map<String, Command>) knownCommandsField.get(commandMap);
 | 
			
		||||
			} catch (NoSuchFieldException e) {
 | 
			
		||||
				e.printStackTrace();
 | 
			
		||||
				return "§c插件 " + name + " 卸载失败!";
 | 
			
		||||
				return "§c异常: " + e.getMessage() + " 插件 " + name + " 卸载失败!";
 | 
			
		||||
			} catch (IllegalAccessException e) {
 | 
			
		||||
				e.printStackTrace();
 | 
			
		||||
				return "§c插件 " + name + " 卸载失败!";
 | 
			
		||||
				return "§c异常: " + e.getMessage() + " 插件 " + name + " 卸载失败!";
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		pluginManager.disablePlugin(plugin);
 | 
			
		||||
 | 
			
		||||
		if (plugins != null && plugins.contains(plugin)) {
 | 
			
		||||
			plugins.remove(plugin);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if (names != null && names.containsKey(name)) {
 | 
			
		||||
			names.remove(name);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if (listeners != null && reloadlisteners) {
 | 
			
		||||
			for (SortedSet<RegisteredListener> set : listeners.values()) {
 | 
			
		||||
				for (Iterator<RegisteredListener> it = set.iterator(); it.hasNext();) {
 | 
			
		||||
@@ -252,7 +267,6 @@ public class PluginUtil {
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if (commandMap != null) {
 | 
			
		||||
			for (Iterator<Map.Entry<String, Command>> it = commands.entrySet().iterator(); it.hasNext();) {
 | 
			
		||||
				Map.Entry<String, Command> entry = it.next();
 | 
			
		||||
@@ -265,18 +279,14 @@ public class PluginUtil {
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		ClassLoader cl = plugin.getClass().getClassLoader();
 | 
			
		||||
 | 
			
		||||
		if ((cl instanceof URLClassLoader)) {
 | 
			
		||||
			try {
 | 
			
		||||
				((URLClassLoader) cl).close();
 | 
			
		||||
			} catch (IOException ex) {
 | 
			
		||||
				Logger.getLogger(PluginUtil.class.getName()).log(Level.SEVERE, null, ex);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		System.gc();
 | 
			
		||||
		return "§a插件 " + name + " 已成功卸载!";
 | 
			
		||||
		return "§a插件: " + name + " 已成功卸载!";
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
@@ -3,22 +3,24 @@
 | 
			
		||||
 */
 | 
			
		||||
package cn.citycraft.Yum.utils;
 | 
			
		||||
 | 
			
		||||
import java.util.Collection;
 | 
			
		||||
 | 
			
		||||
import org.bukkit.command.CommandSender;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 字符串工具
 | 
			
		||||
 * 
 | 
			
		||||
 * @author 蒋天蓓
 | 
			
		||||
 *         2015年8月21日下午7:05:51
 | 
			
		||||
 *         2015年8月22日下午12:41:59
 | 
			
		||||
 *         TODO
 | 
			
		||||
 */
 | 
			
		||||
public class StringUtil {
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * 转移数组
 | 
			
		||||
	 * 转移数组后获取字符串
 | 
			
		||||
	 * 
 | 
			
		||||
	 * @param args
 | 
			
		||||
	 *            - 原数组
 | 
			
		||||
	 * @param start
 | 
			
		||||
	 *            - 数组开始位置
 | 
			
		||||
	 * @return 转移后的数组
 | 
			
		||||
	 * @return 转移后的数组字符串
 | 
			
		||||
	 */
 | 
			
		||||
	public static String consolidateStrings(String[] args, int start) {
 | 
			
		||||
		String ret = args[start];
 | 
			
		||||
@@ -28,4 +30,10 @@ public class StringUtil {
 | 
			
		||||
		}
 | 
			
		||||
		return ret;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
	public static void sendStringArray(CommandSender player, Collection<String> msg) {
 | 
			
		||||
		for (String string : msg) {
 | 
			
		||||
			player.sendMessage("§6 - §3" + string);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,7 @@
 | 
			
		||||
name: Yum
 | 
			
		||||
main: cn.citycraft.Yum.Yum
 | 
			
		||||
website: http://ci.citycraft.cn:8800/jenkins/job/Yum/
 | 
			
		||||
version: 1.0
 | 
			
		||||
version: 1.1
 | 
			
		||||
commands:
 | 
			
		||||
  yum:
 | 
			
		||||
    description: MC插件仓库
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user