This commit is contained in:
parent
947d6bb3d4
commit
4859c95b12
@ -21,7 +21,7 @@
|
|||||||
## 功能介绍
|
## 功能介绍
|
||||||
|
|
||||||
- 本插件支持 PlayerTitle 的 [新版RGB颜色格式](https://ricedoc.handyplus.cn/wiki/PlayerTitle/rgb/#新版本格式) (详情见下文)
|
- 本插件支持 PlayerTitle 的 [新版RGB颜色格式](https://ricedoc.handyplus.cn/wiki/PlayerTitle/rgb/#新版本格式) (详情见下文)
|
||||||
- 本插件仅支持 PostgresSQL 数据库,不支持 MySQL、Sqlite 等
|
- 支持 PostgresSQL 和 Sqlite 数据库
|
||||||
- 本插件使用 **TUI** 作为简易的交互方式,非 PlayerTitle 的箱子UI
|
- 本插件使用 **TUI** 作为简易的交互方式,非 PlayerTitle 的箱子UI
|
||||||
- 支持设置称号**限量销售、限时销售**
|
- 支持设置称号**限量销售、限时销售**
|
||||||
- 支持玩家使用称号币自定义称号
|
- 支持玩家使用称号币自定义称号
|
||||||
@ -83,6 +83,12 @@
|
|||||||
|
|
||||||
## 管理员指南
|
## 管理员指南
|
||||||
|
|
||||||
|
### 0. 数据库
|
||||||
|
|
||||||
|
如果使用 Postgresql 数据库,需要手动创建数据库。
|
||||||
|
|
||||||
|
如果使用 sqlite 数据库,插件会自动在插件目录下创建数据库文件。配置文件内的 Host、Port、User、Pass 字段不会被使用。
|
||||||
|
|
||||||
### 1. 创建称号
|
### 1. 创建称号
|
||||||
|
|
||||||
使用 `/mplt create [称号名称] [称号描述]` 创建称号,称号支持RGB彩色字,需要使用 `&#`为开头的十六进制RGB颜色代码表示颜色,例如`�`表示黑色。可以使用 [Minecraft 渐变颜色生成器](https://ssl.lunadeer.cn:14440/) 来生成具有渐变效果的称号。
|
使用 `/mplt create [称号名称] [称号描述]` 创建称号,称号支持RGB彩色字,需要使用 `&#`为开头的十六进制RGB颜色代码表示颜色,例如`�`表示黑色。可以使用 [Minecraft 渐变颜色生成器](https://ssl.lunadeer.cn:14440/) 来生成具有渐变效果的称号。
|
||||||
@ -167,6 +173,7 @@
|
|||||||
```yaml
|
```yaml
|
||||||
# 数据库配置
|
# 数据库配置
|
||||||
Database:
|
Database:
|
||||||
|
Type: sqlite # pgsql, sqlite
|
||||||
Host: localhost
|
Host: localhost
|
||||||
Port: 5432
|
Port: 5432
|
||||||
Name: miniplayertitle
|
Name: miniplayertitle
|
||||||
|
7
pom.xml
7
pom.xml
@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
<groupId>cn.lunadeer</groupId>
|
<groupId>cn.lunadeer</groupId>
|
||||||
<artifactId>MiniPlayerTitle</artifactId>
|
<artifactId>MiniPlayerTitle</artifactId>
|
||||||
<version>2.9.1</version>
|
<version>2.10.0</version>
|
||||||
<packaging>jar</packaging>
|
<packaging>jar</packaging>
|
||||||
|
|
||||||
<name>MiniPlayerTitle</name>
|
<name>MiniPlayerTitle</name>
|
||||||
@ -76,5 +76,10 @@
|
|||||||
<artifactId>postgresql</artifactId>
|
<artifactId>postgresql</artifactId>
|
||||||
<version>42.6.0</version>
|
<version>42.6.0</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.postgresql</groupId>
|
||||||
|
<artifactId>postgresql</artifactId>
|
||||||
|
<version>42.6.0</version>
|
||||||
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
</project>
|
</project>
|
||||||
|
@ -15,6 +15,11 @@ public class ConfigManager {
|
|||||||
_plugin.reloadConfig();
|
_plugin.reloadConfig();
|
||||||
_file = _plugin.getConfig();
|
_file = _plugin.getConfig();
|
||||||
_debug = _file.getBoolean("Debug", false);
|
_debug = _file.getBoolean("Debug", false);
|
||||||
|
_db_type = _file.getString("Database.Type", "sqlite");
|
||||||
|
if (!_db_type.equals("pgsql") && !_db_type.equals("sqlite")) {
|
||||||
|
XLogger.err("当前数据库只支持 pgsql 或 sqlite,已重置为 sqlite");
|
||||||
|
setDbType("sqlite");
|
||||||
|
}
|
||||||
_db_host = _file.getString("Database.Host", "localhost");
|
_db_host = _file.getString("Database.Host", "localhost");
|
||||||
_db_port = _file.getString("Database.Port", "5432");
|
_db_port = _file.getString("Database.Port", "5432");
|
||||||
_db_name = _file.getString("Database.Name", "miniplayertitle");
|
_db_name = _file.getString("Database.Name", "miniplayertitle");
|
||||||
@ -38,10 +43,28 @@ public class ConfigManager {
|
|||||||
_plugin.saveConfig();
|
_plugin.saveConfig();
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getDBConnectionUrl() {
|
|
||||||
return "jdbc:postgresql://" + _db_host + ":" + _db_port + "/" + _db_name;
|
public String getDbType() {
|
||||||
|
return _db_type;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setDbType(String db_type) {
|
||||||
|
_db_type = db_type;
|
||||||
|
_file.set("Database.Type", db_type);
|
||||||
|
_plugin.saveConfig();
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDbHost() {
|
||||||
|
return _db_host;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDbPort() {
|
||||||
|
return _db_port;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDbName() {
|
||||||
|
return _db_name;
|
||||||
|
}
|
||||||
|
|
||||||
public void setDbUser(String db_user) {
|
public void setDbUser(String db_user) {
|
||||||
_db_user = db_user;
|
_db_user = db_user;
|
||||||
@ -124,6 +147,7 @@ public class ConfigManager {
|
|||||||
private FileConfiguration _file;
|
private FileConfiguration _file;
|
||||||
private Boolean _debug;
|
private Boolean _debug;
|
||||||
|
|
||||||
|
private String _db_type;
|
||||||
private String _db_host;
|
private String _db_host;
|
||||||
private String _db_port;
|
private String _db_port;
|
||||||
private String _db_user;
|
private String _db_user;
|
||||||
|
@ -8,10 +8,28 @@ public class Database {
|
|||||||
|
|
||||||
public static Connection createConnection() {
|
public static Connection createConnection() {
|
||||||
try {
|
try {
|
||||||
|
String connectionUrl;
|
||||||
|
if (MiniPlayerTitle.config.getDbType().equals("pgsql")) {
|
||||||
|
XLogger.info("正在连接到 PostgreSQL 数据库");
|
||||||
Class.forName("org.postgresql.Driver");
|
Class.forName("org.postgresql.Driver");
|
||||||
return DriverManager.getConnection(MiniPlayerTitle.config.getDBConnectionUrl(), MiniPlayerTitle.config.getDbUser(), MiniPlayerTitle.config.getDbPass());
|
connectionUrl = "jdbc:postgresql://" + MiniPlayerTitle.config.getDbHost() + ":" + MiniPlayerTitle.config.getDbPort();
|
||||||
|
connectionUrl += "/" + MiniPlayerTitle.config.getDbName();
|
||||||
|
return DriverManager.getConnection(connectionUrl, MiniPlayerTitle.config.getDbUser(), MiniPlayerTitle.config.getDbPass());
|
||||||
|
} else if (MiniPlayerTitle.config.getDbType().equals("sqlite")) {
|
||||||
|
XLogger.info("正在连接到 SQLite 数据库");
|
||||||
|
Class.forName("org.sqlite.JDBC");
|
||||||
|
connectionUrl = "jdbc:sqlite:" + MiniPlayerTitle.instance.getDataFolder() + "/" + MiniPlayerTitle.config.getDbName() + ".db";
|
||||||
|
return DriverManager.getConnection(connectionUrl);
|
||||||
|
} else {
|
||||||
|
XLogger.err("=== 严重错误 ===");
|
||||||
|
XLogger.err("数据库类型错误,只能为 pgsql 或 sqlite");
|
||||||
|
XLogger.err("===============");
|
||||||
|
return null;
|
||||||
|
}
|
||||||
} catch (ClassNotFoundException | SQLException e) {
|
} catch (ClassNotFoundException | SQLException e) {
|
||||||
|
XLogger.err("=== 严重错误 ===");
|
||||||
XLogger.err("Database connection failed: " + e.getMessage());
|
XLogger.err("Database connection failed: " + e.getMessage());
|
||||||
|
XLogger.err("===============");
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -26,14 +44,43 @@ public class Database {
|
|||||||
// if query with no result return null
|
// if query with no result return null
|
||||||
if (stmt.execute(sql)) {
|
if (stmt.execute(sql)) {
|
||||||
return stmt.getResultSet();
|
return stmt.getResultSet();
|
||||||
} else {
|
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
} catch (SQLException e) {
|
} catch (SQLException e) {
|
||||||
XLogger.err("Database query failed: " + e.getMessage());
|
handleDatabaseError("Database query failed: ", e, sql);
|
||||||
XLogger.err("SQL: " + sql);
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static void handleDatabaseError(String errorMessage, SQLException e, String sql) {
|
||||||
|
XLogger.err("=== 严重错误 ===");
|
||||||
|
XLogger.err(errorMessage + e.getMessage());
|
||||||
|
XLogger.err("SQL: " + sql);
|
||||||
|
XLogger.err("===============");
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void addColumnIfNotExists(String tableName, String columnName, String columnDefinition) {
|
||||||
|
if (MiniPlayerTitle.config.getDbType().equals("pgsql")) {
|
||||||
|
String sql = "ALTER TABLE " + tableName + " ADD COLUMN IF NOT EXISTS " + columnName + " " + columnDefinition + ";";
|
||||||
|
query(sql);
|
||||||
|
} else if (MiniPlayerTitle.config.getDbType().equals("sqlite")) {
|
||||||
|
try {
|
||||||
|
ResultSet rs = query("PRAGMA table_info(" + tableName + ");");
|
||||||
|
boolean columnExists = false;
|
||||||
|
if (rs != null) {
|
||||||
|
while (rs.next()) {
|
||||||
|
if (columnName.equals(rs.getString("name"))) {
|
||||||
|
columnExists = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!columnExists) {
|
||||||
|
query("ALTER TABLE " + tableName + " ADD COLUMN " + columnName + " " + columnDefinition + ";");
|
||||||
|
}
|
||||||
|
} catch (SQLException e) {
|
||||||
|
handleDatabaseError("Database operation failed: ", e, "");
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void migrate() {
|
public static void migrate() {
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
Database:
|
Database:
|
||||||
|
Type: sqlite # pgsql, sqlite
|
||||||
Host: localhost
|
Host: localhost
|
||||||
Port: 5432
|
Port: 5432
|
||||||
Name: miniplayertitle
|
Name: miniplayertitle
|
||||||
|
Loading…
Reference in New Issue
Block a user