From fa1051717bec190679409279957f9441582fd982 Mon Sep 17 00:00:00 2001 From: j502647092 Date: Thu, 8 Oct 2015 00:10:34 +0800 Subject: [PATCH] update... --- .classpath | 64 ++--- pom.xml | 4 +- resources/plugin.yml | 10 - .../cn/citycraft/CTZServer/ServerThread.java | 40 ++- .../CTZServer/commands/BaseCommand.java | 267 ++++++++++++------ .../CTZServer/commands/DefaultCommand.java | 26 ++ .../CTZServer/commands/HandlerCommand.java | 60 ---- .../commands/HandlerMainCommand.java | 69 +++++ .../CTZServer/commands/HandlerSubCommand.java | 129 +++++++++ src/main/resources/config.json | 10 + 10 files changed, 473 insertions(+), 206 deletions(-) delete mode 100644 resources/plugin.yml create mode 100644 src/main/java/cn/citycraft/CTZServer/commands/DefaultCommand.java delete mode 100644 src/main/java/cn/citycraft/CTZServer/commands/HandlerCommand.java create mode 100644 src/main/java/cn/citycraft/CTZServer/commands/HandlerMainCommand.java create mode 100644 src/main/java/cn/citycraft/CTZServer/commands/HandlerSubCommand.java create mode 100644 src/main/resources/config.json diff --git a/.classpath b/.classpath index 98a8b7b..1664572 100644 --- a/.classpath +++ b/.classpath @@ -1,32 +1,32 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pom.xml b/pom.xml index 36b0008..a9a25f2 100644 --- a/pom.xml +++ b/pom.xml @@ -19,8 +19,8 @@ maven-compiler-plugin 3.1 - 1.8 - 1.8 + 1.7 + 1.7 diff --git a/resources/plugin.yml b/resources/plugin.yml deleted file mode 100644 index 206d6c1..0000000 --- a/resources/plugin.yml +++ /dev/null @@ -1,10 +0,0 @@ -name: ${project.artifactId} -description: ${project.description} -main: ${project.groupId}.${project.artifactId}.${project.artifactId} -version: ${project.version} -auther: 喵♂呜 -website: http://ci.citycraft.cn:8800/jenkins/job/${project.artifactId}/ -commands: - yum: - description: MC插件仓库 - usage: §6使用§a/yum help§6查看帮助! \ No newline at end of file diff --git a/src/main/java/cn/citycraft/CTZServer/ServerThread.java b/src/main/java/cn/citycraft/CTZServer/ServerThread.java index 92b0c03..992cc99 100644 --- a/src/main/java/cn/citycraft/CTZServer/ServerThread.java +++ b/src/main/java/cn/citycraft/CTZServer/ServerThread.java @@ -5,7 +5,7 @@ import java.io.File; import java.io.IOException; import java.io.InputStreamReader; -import cn.citycraft.CTZServer.commands.HandlerCommand; +import cn.citycraft.CTZServer.commands.HandlerMainCommand; import cn.citycraft.CTZServer.socket.CTZLoginServerSocket; import cn.citycraft.CTZServerCommon.CTZAuth; import cn.citycraft.CTZServerCommon.CTZServer; @@ -16,8 +16,7 @@ import net.md_5.bungee.api.ChatColor; public class ServerThread implements Runnable { protected CTZLoginServerSocket server; protected SQLHelper sql; - - HandlerCommand handlercmd; + private HandlerMainCommand handlercmd; public CTZLoginServerSocket getServer() { return server; @@ -34,17 +33,18 @@ public class ServerThread implements Runnable { server = new CTZLoginServerSocket(); server.start(); - BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + final BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); while (true) { String cmdline; try { cmdline = br.readLine(); - if (cmdline == null || cmdline.isEmpty()) + if (cmdline == null || cmdline.isEmpty()) { continue; - String[] cmdargs = cmdline.split(" "); - String cmd = cmdargs[0]; - handlercmd.execute(cmd, cmdargs); - } catch (IOException e) { + } + final String[] cmdargs = cmdline.split(" "); + final String cmd = cmdargs[0]; + handlercmd.onCommand(cmd, cmdargs); + } catch (final IOException e) { } } } @@ -54,7 +54,18 @@ public class ServerThread implements Runnable { */ void initCommand() { CTZServer.print(ChatColor.GREEN + "初始化基础命令..."); - handlercmd = new HandlerCommand(this); + handlercmd = new HandlerMainCommand(this); + } + + /** + * 初始化服务器信息 + */ + void initConfigInfo() { + CTZServer.print(ChatColor.GREEN + "加载服务器信息..."); + final File infofile = new File("config.json"); + FileUtil.saveResource(this, "/config.json", infofile, false); + final String configjson = FileUtil.readFile(infofile); + } /** @@ -62,12 +73,13 @@ public class ServerThread implements Runnable { */ void initServerInfo() { CTZServer.print(ChatColor.GREEN + "加载服务器信息..."); - File infofile = new File("servers.json"); + final File infofile = new File("servers.json"); FileUtil.saveResource(this, "/servers.json", infofile, false); - String json = FileUtil.readFile(infofile); - if (CTZServer.Init(json)) + final String json = FileUtil.readFile(infofile); + if (CTZServer.Init(json)) { CTZServer.print(ChatColor.GREEN + "服务器信息加载成功..."); - else + } else { CTZServer.warn(ChatColor.RED + "服务器信息加载失败..."); + } } } diff --git a/src/main/java/cn/citycraft/CTZServer/commands/BaseCommand.java b/src/main/java/cn/citycraft/CTZServer/commands/BaseCommand.java index ff71b86..de91412 100644 --- a/src/main/java/cn/citycraft/CTZServer/commands/BaseCommand.java +++ b/src/main/java/cn/citycraft/CTZServer/commands/BaseCommand.java @@ -1,88 +1,179 @@ -package cn.citycraft.CTZServer.commands; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -public abstract class BaseCommand { - private String name; - private String[] aliases; - - public BaseCommand(String name) { - this(name, new String[0]); - } - - public BaseCommand(String name, String... aliases) { - this.name = name; - this.aliases = aliases; - } - - /** - * 执行命令参数 - * - * @param label - * - 命令 - * @param args - * - 命令附加参数 - */ - public abstract void execute(String label, String[] args); - - /** - * 获得命令列表 - * - * @return 命令列表 - */ - public List getCommandList() { - List cmds = new ArrayList(); - cmds.add(name); - cmds.addAll(Arrays.asList(aliases)); - return cmds; - } - - /** - * 获得命令说明 - * - * @return - */ - public abstract String getDescription(); - - /** - * 获得最小参数个数 - * - * @return 最小参数个数 - */ - public abstract int getMinimumArguments(); - - /** - * 获取命令名称 - * - * @return 命令名称 - */ - public String getName() { - return name; - } - - /** - * 获得可能的参数 - * - * @return - */ - public abstract String getPossibleArguments(); - - /** - * 命令匹配检测 - * - * @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; - } -} +package cn.citycraft.CTZServer.commands; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import org.bukkit.command.CommandException; + +/** + * 基础命令类 + * + * @author 蒋天蓓 + * 2015年8月12日下午12:49:34 + */ +public abstract class BaseCommand { + private final String[] aliases; + private String description = "无"; + private int minimumArguments = 0; + private final String name; + private boolean onlyPlayerExecutable = false; + private String permission; + private String possibleArguments = ""; + + public BaseCommand(final String name) { + this(name, new String[0]); + } + + public BaseCommand(final String name, final String... aliases) { + this.name = name; + this.aliases = aliases; + } + + /** + * 执行命令参数 + * + * @param sender + * - 命令发送者 + * @param label + * - 命令 + * @param args + * - 命令附加参数 + * @throws CommandException + * - 命令异常 + */ + public abstract void execute(String label, String[] args); + + public List getCommandList() { + final List cmds = new ArrayList(); + cmds.add(name); + cmds.addAll(Arrays.asList(aliases)); + return cmds; + } + + /** + * 获得命令描述 + * + * @return 命令描述 + */ + public String getDescription() { + return description; + } + + /** + * 获得最小参数个数 + * + * @return 最小参数个数 + */ + public int getMinimumArguments() { + return minimumArguments; + } + + /** + * 获取命令名称 + * + * @return 命令名称 + */ + public String getName() { + return name; + } + + /** + * 获得命令权限 + * + * @return 目录命令权限 + */ + public String getPermission() { + return permission; + } + + /** + * 获得可能的参数 + * + * @return + */ + public String getPossibleArguments() { + return possibleArguments; + } + + /** + * 是否只有玩家才能执行此命令 + * + * @return 是否为玩家命令 + */ + public boolean isOnlyPlayerExecutable() { + return onlyPlayerExecutable; + } + + /** + * 命令匹配检测 + * + * @param name + * - 命令 + * @return 是否匹配 + */ + public final boolean isValidTrigger(final String name) { + if (this.name.equalsIgnoreCase(name)) { + return true; + } + if (aliases != null) { + for (final String alias : aliases) { + if (alias.equalsIgnoreCase(name)) { + return true; + } + } + } + return false; + } + + /** + * 设置命令的描述信息 + * + * @param description + * - 命令描述 + */ + public void setDescription(final String description) { + this.description = description; + } + + /** + * 设置命令的最小参数个数 + * + * @param minimumArguments + * - 最小参数个数 + */ + public void setMinimumArguments(final int minimumArguments) { + this.minimumArguments = minimumArguments; + } + + /** + * 设置是否只允许玩家执行 + * + * @param onlyPlayerExecutable + * - 是否只允许玩家执行 + */ + public void setOnlyPlayerExecutable() { + this.onlyPlayerExecutable = true; + } + + /** + * 设置命令权限 + * + * @param permission + * - 命令权限 + */ + public void setPermission(final String permission) { + this.permission = permission; + } + + /** + * 设置可能的命令参数 + * + * @param possibleArguments + * - 可能的命令参数 + */ + public void setPossibleArguments(final String possibleArguments) { + this.possibleArguments = possibleArguments; + } + +} diff --git a/src/main/java/cn/citycraft/CTZServer/commands/DefaultCommand.java b/src/main/java/cn/citycraft/CTZServer/commands/DefaultCommand.java new file mode 100644 index 0000000..940fd14 --- /dev/null +++ b/src/main/java/cn/citycraft/CTZServer/commands/DefaultCommand.java @@ -0,0 +1,26 @@ +package cn.citycraft.CTZServer.commands; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandException; +import org.bukkit.command.CommandSender; + +/** + * 基础命令类 + * + * @author 蒋天蓓 + * 2015年8月12日下午12:49:34 + */ +public interface DefaultCommand { + + /** + * 默认命令执行接口 + * + * @param sender + * - 命令发送者 + * @param label + * - 命令 + * @throws CommandException + * - 命令异常 + */ + public abstract void defaultexecute(CommandSender sender, Command command, String label) throws CommandException; +} diff --git a/src/main/java/cn/citycraft/CTZServer/commands/HandlerCommand.java b/src/main/java/cn/citycraft/CTZServer/commands/HandlerCommand.java deleted file mode 100644 index 6f5aac5..0000000 --- a/src/main/java/cn/citycraft/CTZServer/commands/HandlerCommand.java +++ /dev/null @@ -1,60 +0,0 @@ -package cn.citycraft.CTZServer.commands; - -import java.util.ArrayList; -import java.util.List; - -import cn.citycraft.CTZServer.ServerThread; -import cn.citycraft.CTZServerCommon.CTZServer; -import cn.citycraft.PluginHelper.utils.StringUtil; -import net.md_5.bungee.api.ChatColor; - -public class HandlerCommand { - ServerThread serverThread; - /** - * 已注册命令列表(包括别名) - */ - List RegisterCommandList = new ArrayList(); - - /** - * 命令监听类列表 - */ - private List commandlist = new ArrayList(); - - public HandlerCommand(ServerThread serverThread) { - this.serverThread = serverThread; - registerCommand(new CommandStop(serverThread)); - registerCommand(new CommandGc(serverThread)); - registerCommand(new CommandRegister(serverThread)); - } - - public boolean execute(String cmd, String[] args) { - String subcmd = args[0]; - if (subcmd.equalsIgnoreCase("help")) { - CTZServer.print("§6=========CTZ服务器帮助列表========="); - for (BaseCommand command : commandlist) - CTZServer.print(String.format("§6/yum §a%1$s %2$s §6- §b%3$s", command.getName(), command.getPossibleArguments(), command.getDescription())); - return true; - } - String[] subargs = StringUtil.moveStrings(args, 1); - for (BaseCommand command : commandlist) - if (command.isValidTrigger(subcmd)) - if (subargs.length >= command.getMinimumArguments()) { - command.execute(subcmd, subargs); - return true; - } else - CTZServer.print(ChatColor.RED + "错误的参数 " + ChatColor.YELLOW + "使用方法 /yum " + command.getName() + command.getPossibleArguments()); - CTZServer.print("未知命令 请使用help查看帮助..."); - return false; - } - - /** - * 注册命令 - * - * @param command - * - 被注册的命令类 - */ - public void registerCommand(BaseCommand command) { - if (command != null) - commandlist.add(command); - } -} diff --git a/src/main/java/cn/citycraft/CTZServer/commands/HandlerMainCommand.java b/src/main/java/cn/citycraft/CTZServer/commands/HandlerMainCommand.java new file mode 100644 index 0000000..c25fa2c --- /dev/null +++ b/src/main/java/cn/citycraft/CTZServer/commands/HandlerMainCommand.java @@ -0,0 +1,69 @@ +/** + * + */ +package cn.citycraft.CTZServer.commands; + +import java.util.ArrayList; +import java.util.List; + +import org.bukkit.command.CommandException; + +import cn.citycraft.CTZServer.ServerThread; + +/** + * 子命令处理类 + * + * @author 蒋天蓓 2015年8月22日上午8:29:44 + */ +public class HandlerMainCommand { + /** + * 命令监听类列表 + */ + private final List commandlist = new ArrayList();; + /** + * 插件主类 + */ + ServerThread main; + + /** + * 注册子命令 + * + * @param yum + * - 插件主类 + */ + public HandlerMainCommand(final ServerThread serverThread) { + this.main = serverThread; + } + + public boolean onCommand(final String label, final String[] args) { + for (final BaseCommand command : commandlist) { + if (command.isValidTrigger(label)) { + if (args.length >= command.getMinimumArguments()) { + try { + command.execute(label, args); + return true; + } catch (final CommandException e) { + printl(e.getMessage()); + } + } else { + printl("§c错误的参数 §e使用方法 /" + command.getName() + command.getPossibleArguments()); + } + } + } + return false; + } + + public void printl(final String msg) { + System.out.println(msg); + } + + /** + * 注册命令 + * + * @param command + * - 被注册的命令类 + */ + public void registerCommand(final BaseCommand command) { + commandlist.add(command); + } +} diff --git a/src/main/java/cn/citycraft/CTZServer/commands/HandlerSubCommand.java b/src/main/java/cn/citycraft/CTZServer/commands/HandlerSubCommand.java new file mode 100644 index 0000000..bc3ce85 --- /dev/null +++ b/src/main/java/cn/citycraft/CTZServer/commands/HandlerSubCommand.java @@ -0,0 +1,129 @@ +/** + * + */ +package cn.citycraft.CTZServer.commands; + +import java.util.ArrayList; +import java.util.List; + +import org.bukkit.command.CommandException; +import org.bukkit.plugin.Plugin; + +/** + * 子命令处理类 + * + * @author 蒋天蓓 2015年8月22日上午8:29:44 + */ +public class HandlerSubCommand { + /** + * 命令监听类列表 + */ + private final List commandlist = new ArrayList(); + + /** + * 默认命令处理 + */ + DefaultCommand defaultcommand; + + /** + * 插件主类 + */ + Plugin main; + + /** + * 已注册命令列表(包括别名) + */ + List RegisterCommandList = new ArrayList(); + + /** + * 注册子命令 + * + * @param yum + * - 插件主类 + */ + public HandlerSubCommand(final Plugin plugin) { + this.main = plugin; + } + + /** + * 转移数组 + * + * @param args + * - 原数组 + * @param start + * - 数组开始位置 + * @return 转移后的数组字符串 + */ + public static String[] moveStrings(final String[] args, final int start) { + final String[] ret = new String[args.length - start]; + System.arraycopy(args, start, ret, 0, ret.length); + return ret; + } + + /** + * 获得已注册的命令列表 + * + * @return - 返回已注册的命令List + */ + public List getRegisterCommands() { + final List cmds = new ArrayList(); + for (final BaseCommand command : commandlist) { + cmds.addAll(command.getCommandList()); + } + return cmds; + } + + public boolean onCommand(final String label, final String[] args) { + final String prefix = "§6[§b" + main.getName() + "§6] "; + final String subcmd = args[0]; + if (subcmd.equalsIgnoreCase("help")) { + printl("§6=========" + prefix + "插件帮助列表========="); + for (final BaseCommand command : commandlist) { + printl(String.format("§6/" + label + " §a%1$s %2$s §6- §b%3$s", command.getName(), command.getPossibleArguments(), command.getDescription())); + } + return true; + } + final String[] subargs = moveStrings(args, 1); + for (final BaseCommand command : commandlist) { + if (command.isValidTrigger(subcmd)) { + if (subargs.length >= command.getMinimumArguments()) { + try { + command.execute(subcmd, subargs); + return true; + } catch (final CommandException e) { + printl(e.getMessage()); + } + } else { + printl(prefix + "§c错误的参数 §e使用方法 /" + label + " " + command.getName() + " " + command.getPossibleArguments()); + } + } + } + return false; + } + + public void printl(final String msg) { + System.out.println(msg); + } + + /** + * 注册命令 + * + * @param command + * - 被注册的命令类 + */ + public void registerCommand(final BaseCommand command) { + commandlist.add(command); + RegisterCommandList = getRegisterCommands(); + } + + /** + * 处理默认命令 + * + * @param defaultcommand + * - 默认命令处理类 + */ + public void setDefaultCommand(final DefaultCommand defaultcommand) { + this.defaultcommand = defaultcommand; + } + +} diff --git a/src/main/resources/config.json b/src/main/resources/config.json new file mode 100644 index 0000000..740cedb --- /dev/null +++ b/src/main/resources/config.json @@ -0,0 +1,10 @@ +{ + "mysql": + { + "ip": "127.0.0.1", + "port": 3306, + "username": "root", + "password": "", + "database": "ctzserver" + } +} \ No newline at end of file