Dateien nach "src/main/java/craftersland/games/money/database" hochladen

This commit is contained in:
2025-08-12 21:52:54 +00:00
parent 72ddc4aff1
commit b8f766183d
4 changed files with 286 additions and 0 deletions

View File

@@ -0,0 +1,17 @@
package net.craftersland.games.money.database;
import java.util.UUID;
public interface AccountDatabaseInterface<X> {
//Accountmethods
public boolean hasAccount(UUID player);
public boolean createAccount(UUID player);
public X getBalance(UUID player);
public boolean setBalance(UUID player, X amount);
public boolean addToAccount(UUID player, X amount);
public boolean removeFromAccount(UUID player, X amount);
public UUID[] getAccounts();
}

View File

@@ -0,0 +1,7 @@
package net.craftersland.games.money.database;
public interface DatabaseManagerInterface {
public boolean setupDatabase();
public boolean closeDatabase();
}

View File

@@ -0,0 +1,95 @@
package net.craftersland.games.money.database;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import net.craftersland.games.money.Money;
public class DatabaseManagerMysql implements DatabaseManagerInterface{
private Connection conn = null;
// Hostname
private String dbHost;
// Port -- Standard: 3306
private String dbPort;
// Databankname
private String database;
// Databank username
private String dbUser;
// Databank password
private String dbPassword;
private Money money;
public DatabaseManagerMysql(Money money) {
this.money = money;
setupDatabase();
}
@Override
public boolean setupDatabase() {
try {
//Load Drivers
Class.forName("com.mysql.jdbc.Driver");
dbHost = money.getConfigurationHandler().getString("database.mysql.host");
dbPort = money.getConfigurationHandler().getString("database.mysql.port");
database = money.getConfigurationHandler().getString("database.mysql.databaseName");
dbUser = money.getConfigurationHandler().getString("database.mysql.user");
dbPassword = money.getConfigurationHandler().getString("database.mysql.password");
//Connect to database
conn = DriverManager.getConnection("jdbc:mysql://" + dbHost + ":"
+ dbPort + "/" + database + "?" + "user=" + dbUser + "&"
+ "password=" + dbPassword);
} catch (ClassNotFoundException e) {
//System.out.println("Could not locate drivers!");
Money.log.severe("Could not locate drivers for mysql!");
return false;
} catch (SQLException e) {
//System.out.println("Could not connect");
Money.log.severe("Could not connect to mysql database!");
return false;
}
//Create tables if needed
Statement query;
try {
query = conn.createStatement();
String accounts = "CREATE TABLE IF NOT EXISTS `bc_accounts` (id int(10) AUTO_INCREMENT, player_name varchar(50) NOT NULL UNIQUE, balance DOUBLE(30,2) NOT NULL, PRIMARY KEY(id));";
query.executeUpdate(accounts);
} catch (SQLException e) {
e.printStackTrace();
return false;
}
Money.log.info("Mysql has been set up!");
return true;
}
public Connection getConnection() {
return conn;
}
@Override
public boolean closeDatabase() {
try {
conn.close();
return true;
} catch (SQLException e) {
e.printStackTrace();
}
return false;
}
}

View File

@@ -0,0 +1,167 @@
package net.craftersland.games.money.database;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
import net.craftersland.games.money.Money;
public class MoneyMysqlInterface implements AccountDatabaseInterface <Double>{
@SuppressWarnings("unused")
private Money money;
private Connection conn;
public MoneyMysqlInterface(Money money) {
this.money = money;
this.conn = ((DatabaseManagerMysql)money.getDatabaseManagerInterface()).getConnection();
}
@Override
public boolean hasAccount(UUID player) {
try {
String sql = "SELECT `player_name` FROM `bc_accounts` WHERE `player_name` = ?";
PreparedStatement preparedUpdateStatement = conn.prepareStatement(sql);
preparedUpdateStatement.setString(1, player.toString());
ResultSet result = preparedUpdateStatement.executeQuery();
while (result.next()) {
return true;
}
} catch (SQLException e) {
e.printStackTrace();
}
return false;
}
@Override
public boolean createAccount(UUID player) {
try {
String sql = "INSERT INTO `bc_accounts`(`player_name`, `balance`) " +
"VALUES(?, ?)";
PreparedStatement preparedStatement = conn.prepareStatement(sql);
preparedStatement.setString(1, player.toString());
preparedStatement.setString(2, "0");
preparedStatement.executeUpdate();
return true;
} catch (SQLException e) {
e.printStackTrace();
}
return false;
}
@Override
public Double getBalance(UUID player) {
if (!hasAccount(player)) {
createAccount(player);
}
try {
String sql = "SELECT `balance` FROM `bc_accounts` WHERE `player_name` = ?";
PreparedStatement preparedUpdateStatement = conn.prepareStatement(sql);
preparedUpdateStatement.setString(1, player.toString());
ResultSet result = preparedUpdateStatement.executeQuery();
while (result.next()) {
return Double.parseDouble(result.getString("balance"));
}
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
@Override
public boolean setBalance(UUID player, Double amount) {
if (!hasAccount(player)) {
createAccount(player);
}
try {
String updateSql = "UPDATE `bc_accounts` " +
"SET `balance` = ?" +
"WHERE `player_name` = ?";
PreparedStatement preparedUpdateStatement = conn.prepareStatement(updateSql);
preparedUpdateStatement.setString(1, amount+"");
preparedUpdateStatement.setString(2, player.toString());
preparedUpdateStatement.executeUpdate();
return true;
} catch (SQLException e) {
e.printStackTrace();
}
return false;
}
@Override
public boolean addToAccount(UUID player, Double amount) {
if (!hasAccount(player)) {
createAccount(player);
}
if (amount < 0) {
return removeFromAccount(player, -amount);
}
Double currentBalance = getBalance(player);
if (currentBalance <= Double.MAX_VALUE-amount) {
setBalance(player, currentBalance+amount);
return true;
}
return false;
}
@Override
public boolean removeFromAccount(UUID player, Double amount) {
if (!hasAccount(player)) {
createAccount(player);
}
if (amount < 0) {
return addToAccount(player, -amount);
}
Double currentBalance = getBalance(player);
if (currentBalance >= -Double.MAX_VALUE+amount) {
setBalance(player, currentBalance-amount);
return true;
}
return false;
}
@Override
public UUID[] getAccounts() {
Statement query;
try {
query = conn.createStatement();
String sql = "SELECT `player_name` FROM `bc_accounts`";
ResultSet result = query.executeQuery(sql);
List <UUID> loadingList= new ArrayList <UUID>();
while (result.next()) {
loadingList.add(UUID.fromString(result.getString("player_name")));
}
return loadingList.toArray(new UUID [0]);
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
}