From b8f766183def003d163db2b210949dcb7c043de0 Mon Sep 17 00:00:00 2001 From: M_Viper Date: Tue, 12 Aug 2025 21:52:54 +0000 Subject: [PATCH] Dateien nach "src/main/java/craftersland/games/money/database" hochladen --- .../database/AccountDatabaseInterface.java | 17 ++ .../database/DatabaseManagerInterface.java | 7 + .../money/database/DatabaseManagerMysql.java | 95 ++++++++++ .../money/database/MoneyMysqlInterface.java | 167 ++++++++++++++++++ 4 files changed, 286 insertions(+) create mode 100644 src/main/java/craftersland/games/money/database/AccountDatabaseInterface.java create mode 100644 src/main/java/craftersland/games/money/database/DatabaseManagerInterface.java create mode 100644 src/main/java/craftersland/games/money/database/DatabaseManagerMysql.java create mode 100644 src/main/java/craftersland/games/money/database/MoneyMysqlInterface.java diff --git a/src/main/java/craftersland/games/money/database/AccountDatabaseInterface.java b/src/main/java/craftersland/games/money/database/AccountDatabaseInterface.java new file mode 100644 index 0000000..d3894cd --- /dev/null +++ b/src/main/java/craftersland/games/money/database/AccountDatabaseInterface.java @@ -0,0 +1,17 @@ +package net.craftersland.games.money.database; + +import java.util.UUID; + +public interface AccountDatabaseInterface { + + + //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(); + +} diff --git a/src/main/java/craftersland/games/money/database/DatabaseManagerInterface.java b/src/main/java/craftersland/games/money/database/DatabaseManagerInterface.java new file mode 100644 index 0000000..270b044 --- /dev/null +++ b/src/main/java/craftersland/games/money/database/DatabaseManagerInterface.java @@ -0,0 +1,7 @@ +package net.craftersland.games.money.database; + +public interface DatabaseManagerInterface { + + public boolean setupDatabase(); + public boolean closeDatabase(); +} diff --git a/src/main/java/craftersland/games/money/database/DatabaseManagerMysql.java b/src/main/java/craftersland/games/money/database/DatabaseManagerMysql.java new file mode 100644 index 0000000..bb14ee0 --- /dev/null +++ b/src/main/java/craftersland/games/money/database/DatabaseManagerMysql.java @@ -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; + } + +} diff --git a/src/main/java/craftersland/games/money/database/MoneyMysqlInterface.java b/src/main/java/craftersland/games/money/database/MoneyMysqlInterface.java new file mode 100644 index 0000000..0d8e353 --- /dev/null +++ b/src/main/java/craftersland/games/money/database/MoneyMysqlInterface.java @@ -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 { + + @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 loadingList= new ArrayList (); + while (result.next()) { + loadingList.add(UUID.fromString(result.getString("player_name"))); + } + return loadingList.toArray(new UUID [0]); + + } catch (SQLException e) { + e.printStackTrace(); + } + return null; + } + +}