102 lines
3.6 KiB
Java
102 lines
3.6 KiB
Java
package com.bitnix.dirtguilds.data;
|
|
|
|
import com.bitnix.dirtguilds.DirtGuildsPlugin;
|
|
import com.zaxxer.hikari.HikariConfig;
|
|
import com.zaxxer.hikari.HikariDataSource;
|
|
|
|
import java.io.File;
|
|
import java.sql.Connection;
|
|
import java.sql.SQLException;
|
|
import java.sql.Statement;
|
|
|
|
public class DatabaseManager {
|
|
|
|
private final DirtGuildsPlugin plugin;
|
|
private HikariDataSource dataSource;
|
|
|
|
public DatabaseManager(DirtGuildsPlugin plugin) {
|
|
this.plugin = plugin;
|
|
}
|
|
|
|
public void initialize() {
|
|
String type = plugin.getConfig().getString("database.type", "SQLITE").toUpperCase();
|
|
|
|
HikariConfig config = new HikariConfig();
|
|
|
|
if (type.equals("MYSQL")) {
|
|
String host = plugin.getConfig().getString("database.mysql.host");
|
|
int port = plugin.getConfig().getInt("database.mysql.port");
|
|
String database = plugin.getConfig().getString("database.mysql.database");
|
|
String username = plugin.getConfig().getString("database.mysql.username");
|
|
String password = plugin.getConfig().getString("database.mysql.password");
|
|
String properties = plugin.getConfig().getString("database.mysql.properties", "");
|
|
|
|
config.setJdbcUrl("jdbc:mysql://" + host + ":" + port + "/" + database + properties);
|
|
config.setUsername(username);
|
|
config.setPassword(password);
|
|
config.setMaximumPoolSize(10);
|
|
} else {
|
|
String fileName = plugin.getConfig().getString("database.sqlite.file", "guilds.db");
|
|
File dbFile = new File(plugin.getDataFolder(), fileName);
|
|
|
|
if (!plugin.getDataFolder().exists()) {
|
|
plugin.getDataFolder().mkdirs();
|
|
}
|
|
|
|
config.setJdbcUrl("jdbc:sqlite:" + dbFile.getAbsolutePath());
|
|
config.setMaximumPoolSize(1);
|
|
}
|
|
|
|
config.setPoolName("DirtGuildsPool");
|
|
this.dataSource = new HikariDataSource(config);
|
|
|
|
createTables();
|
|
}
|
|
|
|
private void createTables() {
|
|
try (Connection connection = getConnection(); Statement statement = connection.createStatement()) {
|
|
statement.executeUpdate("""
|
|
CREATE TABLE IF NOT EXISTS guilds (
|
|
id VARCHAR(36) PRIMARY KEY,
|
|
name VARCHAR(32) NOT NULL UNIQUE,
|
|
prefix VARCHAR(64) NOT NULL,
|
|
owner VARCHAR(36) NOT NULL,
|
|
level INT NOT NULL,
|
|
bank_balance DOUBLE NOT NULL,
|
|
friendly_fire BOOLEAN NOT NULL
|
|
)
|
|
""");
|
|
|
|
statement.executeUpdate("""
|
|
CREATE TABLE IF NOT EXISTS guild_members (
|
|
guild_id VARCHAR(36) NOT NULL,
|
|
player_uuid VARCHAR(36) NOT NULL,
|
|
rank_name VARCHAR(32) NOT NULL,
|
|
PRIMARY KEY (guild_id, player_uuid)
|
|
)
|
|
""");
|
|
|
|
statement.executeUpdate("""
|
|
CREATE TABLE IF NOT EXISTS guild_vault_items (
|
|
guild_id VARCHAR(36) NOT NULL,
|
|
slot_index INT NOT NULL,
|
|
item_data TEXT NOT NULL,
|
|
PRIMARY KEY (guild_id, slot_index)
|
|
)
|
|
""");
|
|
} catch (SQLException exception) {
|
|
throw new RuntimeException("Failed to create database tables", exception);
|
|
}
|
|
}
|
|
|
|
public Connection getConnection() throws SQLException {
|
|
return dataSource.getConnection();
|
|
}
|
|
|
|
public void close() {
|
|
if (dataSource != null && !dataSource.isClosed()) {
|
|
dataSource.close();
|
|
}
|
|
}
|
|
}
|