From cc0f1e71d9fd9ef40d881896149d34a6a9bf3677 Mon Sep 17 00:00:00 2001 From: 502647092 Date: Wed, 16 Sep 2015 13:55:43 +0800 Subject: [PATCH] init project ... Signed-off-by: 502647092 --- .classpath | 26 ++ .gitignore | 38 +++ .project | 23 ++ pom.xml | 64 +++++ .../cn/citycraft/CTZServerCommon/CTZAuth.java | 102 +++++++ .../citycraft/CTZServerCommon/CTZServer.java | 260 ++++++++++++++++++ .../cn/citycraft/CTZServerCommon/Logger.java | 41 +++ 7 files changed, 554 insertions(+) create mode 100644 .classpath create mode 100644 .gitignore create mode 100644 .project create mode 100644 pom.xml create mode 100644 src/main/java/cn/citycraft/CTZServerCommon/CTZAuth.java create mode 100644 src/main/java/cn/citycraft/CTZServerCommon/CTZServer.java create mode 100644 src/main/java/cn/citycraft/CTZServerCommon/Logger.java diff --git a/.classpath b/.classpath new file mode 100644 index 0000000..2522518 --- /dev/null +++ b/.classpath @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..7876f5f --- /dev/null +++ b/.gitignore @@ -0,0 +1,38 @@ +# Eclipse stuff +/.settings + +# netbeans +/nbproject + +# we use maven! +/build.xml + +# maven +/target +/repo + +# vim +.*.sw[a-p] + +# various other potential build files +/build +/bin +/dist +/manifest.mf + +/world + +# Mac filesystem dust +*.DS_Store + +# intellij +*.iml +*.ipr +*.iws +.idea/ + +# Project Stuff +/src/main/resources/Soulbound + +# Atlassian Stuff +/atlassian-ide-plugin.xml \ No newline at end of file diff --git a/.project b/.project new file mode 100644 index 0000000..d6c1120 --- /dev/null +++ b/.project @@ -0,0 +1,23 @@ + + + CTZServerCommon + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.m2e.core.maven2Builder + + + + + + org.eclipse.jdt.core.javanature + org.eclipse.m2e.core.maven2Nature + + diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..374877a --- /dev/null +++ b/pom.xml @@ -0,0 +1,64 @@ + + 4.0.0 + cn.citycraft + CTZServerCommon + 1.0 + CTZServerCommon + + ${project.name} + + + maven-compiler-plugin + 3.1 + + 1.8 + 1.8 + + + + org.apache.maven.plugins + maven-shade-plugin + 2.3 + + false + true + + + cn.citycraft:PluginHelper + + + + cn.citycraft.PluginHelper + ${project.groupId}.${project.artifactId} + + + + + package + + shade + + + + + + + + + citycraft-repo + http://ci.citycraft.cn:8800/jenkins/plugin/repository/everything/ + + + + + cn.citycraft + PluginHelper + jar + 1.0 + + + + UTF-8 + + \ No newline at end of file diff --git a/src/main/java/cn/citycraft/CTZServerCommon/CTZAuth.java b/src/main/java/cn/citycraft/CTZServerCommon/CTZAuth.java new file mode 100644 index 0000000..d22a9a3 --- /dev/null +++ b/src/main/java/cn/citycraft/CTZServerCommon/CTZAuth.java @@ -0,0 +1,102 @@ +package cn.citycraft.CTZServerCommon; + +import cn.citycraft.PluginHelper.sql.KeyValue; +import cn.citycraft.PluginHelper.sql.MySQLHelper; +import cn.citycraft.PluginHelper.sql.SQLHelper; +import cn.citycraft.PluginHelper.utils.StringUtil; +import net.md_5.bungee.api.ChatColor; + +public class CTZAuth { + static final String TableName = "ctzserver"; + static final String UserField = "player"; + static final String PWDField = "password"; + static final String ISLoginField = "islogin"; + static final String ALLOWLoginField = "allowlogin"; + static final String LASTLOGOUT = "lastlogout"; + static final String IP = "ip"; + static SQLHelper sql; + + public static boolean allowLogin(String username) { + return allowLogin(username, null); + } + + public static boolean allowLogin(String username, String ip) { + KeyValue cdt = new KeyValue(UserField, username); + if (ip != null) + cdt.add(IP, ip); + String result = sql.dbSelectFirst(TableName, ALLOWLoginField, cdt); + return (result != null && result.equalsIgnoreCase("1")); + } + + public static void changePassword(String username, String password) { + // TODO 处理玩家密码修改事件 + } + + public static boolean checkLastLogout(String username, long timeout) { + try { + String lastlogout = sql.dbSelectFirst(TableName, LASTLOGOUT, new KeyValue(UserField, username)); + return System.currentTimeMillis() - Integer.parseInt(lastlogout) < timeout * 1000; + } catch (Exception e) { + return false; + } + } + + public static boolean checkPassword(String username, String password) { + return sql.isFieldExists(TableName, new KeyValue(UserField, username).add(PWDField, StringUtil.getMD5Code(password))); + } + + public static void init(SQLHelper sql, String address, int port, String datebase, String username, String password) { + CTZAuth.sql = sql; + CTZServer.print(ChatColor.GREEN + "初始化数据库连接..."); + sql = new MySQLHelper(address, port, datebase, username, password); + if (!sql.dbConnection()) { + CTZServer.warn(ChatColor.RED + "数据库连接失败..."); + return; + } + CTZServer.print(ChatColor.GREEN + "数据库连接成功,检查数据表是否存在..."); + if (!sql.isTableExists(TableName)) { + CTZServer.print(ChatColor.RED + "数据表不存在,新建表" + TableName + "..."); + KeyValue kv = new KeyValue("player", "VARCHAR(16) NOT NULL") + .add("password", "VARCHAR(50) NOT NULL") + .add("ip", "VARCHAR(40) NOT NULL DEFAULT '127.0.0.1'") + .add("lastlogout", "BIGINT(30) NOT NULL DEFAULT 0") + .add("x", "DOUBLE NOT NULL DEFAULT 0") + .add("y", "DOUBLE NOT NULL DEFAULT 0") + .add("z", "DOUBLE NOT NULL DEFAULT 0") + .add("email", "VARCHAR(50) NOT NULL DEFAULT 'mc@mc.com'") + .add("world", "VARCHAR(20) DEFAULT 'world'") + .add("islogged", "SMALLINT(6) NOT NULL DEFAULT 0") + .add("allowlogin", "SMALLINT(6) NOT NULL DEFAULT 0"); + String Conditions = "UNIQUE (`player`)"; + if (!sql.createTables(TableName, kv, Conditions)) + CTZServer.warn(ChatColor.RED + "数据表 " + TableName + " 创建失败,请尝试手动创建并重启服务器..."); + else + CTZServer.print(ChatColor.GREEN + "数据表 " + TableName + " 创建成功..."); + } + } + + public static boolean isLogin(String username) { + String result = sql.dbSelectFirst(TableName, ISLoginField, new KeyValue(UserField, username)); + return (result != null && result.equalsIgnoreCase("1")); + } + + public static boolean isRegistered(String username) { + return sql.isFieldExists(TableName, new KeyValue(UserField, username)); + } + + public static boolean login(String username, String ip) { + return sql.dbUpdate(TableName, new KeyValue(ALLOWLoginField, "1").add(IP, ip == null ? "127.0.0.1" : ip), new KeyValue(UserField, username)); + } + + public static boolean registerPlayer(String username, String password) { + if (isRegistered(username)) + return false; + else + return sql.dbInsert(TableName, new KeyValue(UserField, username).add(PWDField, StringUtil.getMD5Code(password))); + } + + public static boolean setLastLogout(String username, long logouttime) { + return sql.dbUpdate(TableName, new KeyValue(ALLOWLoginField, "1"), new KeyValue(UserField, username)); + } + +} diff --git a/src/main/java/cn/citycraft/CTZServerCommon/CTZServer.java b/src/main/java/cn/citycraft/CTZServerCommon/CTZServer.java new file mode 100644 index 0000000..89011a2 --- /dev/null +++ b/src/main/java/cn/citycraft/CTZServerCommon/CTZServer.java @@ -0,0 +1,260 @@ +package cn.citycraft.CTZServerCommon; + +import java.util.ArrayList; +import java.util.List; +import java.util.Set; + +import org.bukkit.configuration.ConfigurationSection; + +import com.google.gson.Gson; + +public class CTZServer { + protected static Logger log = new Logger(); + + static ServerInfo sl = new ServerInfo(); + static Gson gson = new Gson(); + + /** + * 把中文转成Unicode码 + * + * @param str + * - 待转换的字符串 + * @return 转换后的字符串 + */ + public static String chinaToUnicode(String str) { + String result = ""; + for (int i = 0; i < str.length(); i++) { + int chr1 = str.charAt(i); + if (chr1 >= 19968 && chr1 <= 171941) + result += "\\u" + Integer.toHexString(chr1); + else + result += str.charAt(i); + } + return result; + } + + /** + * 获得json字符串 + * + * @return + */ + public static String getJson() { + return chinaToUnicode(gson.toJson(sl)); + } + + // public static Logger getLogger() { + // return log; + // } + + /** + * 初始化服务器序列化类 + * + * @param 配置类 + */ + public static void Init(ConfigurationSection cs) { + Set arealist = cs.getKeys(false); + for (String a : arealist) { + Area area = new Area(); + area.setName(cs.getString(a + ".name")); + Set serverlist = cs.getConfigurationSection(a + ".servers").getKeys(false); + for (String s : serverlist) { + Server server = new Server(); + server.name = cs.getString(a + ".servers." + s + ".name"); + server.address = cs.getString(a + ".servers." + s + ".address"); + server.port = cs.getInt(a + ".servers." + s + ".port"); + server.version = cs.getString(a + ".servers." + s + ".version"); + server.info = cs.getString(a + ".servers." + s + ".info"); + server.url = cs.getString(a + ".servers." + s + ".url"); + server.depend = cs.getString(a + ".servers." + s + ".depend"); + area.servers.add(server); + } + sl.areas.add(area); + } + } + + /** + * 初始化服务器序列化类 + * + * @param json + * - json字符串 + */ + public static boolean Init(String json) { + try { + sl = gson.fromJson(json, ServerInfo.class); + return true; + } catch (Exception e) { + return false; + } + } + + public static void print(String message) { + log.info(message); + } + + public static void warn(String message) { + log.warning(message); + } + + /** + * 判断是否为中文字符 + * + * @param c + * @return + */ + public boolean isChinese(char c) { + Character.UnicodeBlock ub = Character.UnicodeBlock.of(c); + if (ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS || ub == Character.UnicodeBlock.CJK_COMPATIBILITY_IDEOGRAPHS || ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A + || ub == Character.UnicodeBlock.GENERAL_PUNCTUATION || ub == Character.UnicodeBlock.CJK_SYMBOLS_AND_PUNCTUATION || ub == Character.UnicodeBlock.HALFWIDTH_AND_FULLWIDTH_FORMS) + return true; + return false; + } + +} + +class Area { + /** + * 大区名称 + */ + String name; + /** + * 服务器信息 + */ + List servers = new ArrayList(); + + public String getName() { + return name; + } + + public List getServers() { + return servers; + } + + public void setName(String name) { + this.name = name; + } + + public void setServers(List servers) { + this.servers = servers; + } +} + +/** + * 服务器数据序列化类 + * + * @author 蒋天蓓 + * 2015年8月14日下午4:36:12 + * + */ +class Server { + + /** + * 服务器名称 + */ + public String name; + + /** + * 服务器地址 + */ + public String address; + + /** + * 服务器端口 + */ + public int port; + + /** + * 服务器描述 + */ + public String info; + + /** + * 服务器版本 + */ + public String version; + + /** + * 版本下载地址 + */ + public String url; + + /** + * 依赖版本 + */ + public String depend; + + public String getAddress() { + return address; + } + + public String getDepend() { + return depend; + } + + public String getInfo() { + return info; + } + + public String getName() { + return name; + } + + public int getPort() { + return port; + } + + public String getUrl() { + return url; + } + + public String getVersion() { + return version; + } + + public void setAddress(String address) { + this.address = address; + } + + public void setDepend(String depend) { + this.depend = depend; + } + + public void setInfo(String info) { + this.info = info; + } + + public void setName(String name) { + this.name = name; + } + + public void setPort(int port) { + this.port = port; + } + + public void setUrl(String url) { + this.url = url; + } + + public void setVersion(String version) { + this.version = version; + } + + @Override + public String toString() { + return String.format("{0}:{1}", address, port); + } +} + +class ServerInfo { + /** + * 服务器分区信息 + */ + List areas = new ArrayList(); + + public List getAreas() { + return areas; + } + + public void setAreas(List aareas) { + areas = aareas; + } +} diff --git a/src/main/java/cn/citycraft/CTZServerCommon/Logger.java b/src/main/java/cn/citycraft/CTZServerCommon/Logger.java new file mode 100644 index 0000000..f449c3b --- /dev/null +++ b/src/main/java/cn/citycraft/CTZServerCommon/Logger.java @@ -0,0 +1,41 @@ +package cn.citycraft.CTZServerCommon; + +import java.text.SimpleDateFormat; +import java.util.Date; + +import net.md_5.bungee.api.ChatColor; + +public class Logger { + enum LEVEL { + INFO("信息"), + WARN("警告"), + ERROR("错误"); + String prefix; + + LEVEL(String prefix) { + this.prefix = prefix; + } + + @Override + public String toString() { + return prefix; + } + } + + public void error(String string) { + log(LEVEL.ERROR, string); + } + + public void info(String string) { + log(LEVEL.INFO, string); + } + + public void log(LEVEL lvl, String string) { + String time = new SimpleDateFormat("HH:mm:ss").format(new Date(System.currentTimeMillis())); + System.out.println(String.format("[%1$s %2$s] %3$s", time, lvl, ChatColor.stripColor(string))); + } + + public void warning(String string) { + log(LEVEL.WARN, string); + } +}