Files
DirtGuilds/src/main/java/com/bitnix/dirtguilds/data/DatabaseManager.java
T
2026-06-08 19:17:10 -04:00

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();
}
}
}