diff --git a/pom.xml b/pom.xml index af9bff6..11347de 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ me.NVus NVus_Prison - 1.0.2 + 1.0.3 jar NVus_PrisonSetup diff --git a/src/main/java/me/nvus/nvus_prison_setup/Database/DatabaseManager.java b/src/main/java/me/nvus/nvus_prison_setup/Database/DatabaseManager.java index 7f0efd0..f7c8a29 100644 --- a/src/main/java/me/nvus/nvus_prison_setup/Database/DatabaseManager.java +++ b/src/main/java/me/nvus/nvus_prison_setup/Database/DatabaseManager.java @@ -6,10 +6,7 @@ import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.UUID; +import java.util.*; import java.io.File; import me.nvus.nvus_prison_setup.Gangs.GangInfo; @@ -120,10 +117,11 @@ public class DatabaseManager { public void syncRanks() { FileConfiguration ranksConfig = configManager.getConfig("ranks.yml"); - // Assuming you've moved loadRanksFromConfig method logic directly here or keep it separated as below loadRanksFromConfig(ranksConfig); } + + private void upsertRankInDatabase(String rankName, double cost, String commandsAsString) { // This method will check if the rank exists and update or insert accordingly String selectQuery = "SELECT COUNT(*) FROM nvus_ranks WHERE rank_name = ?"; @@ -162,7 +160,8 @@ public class DatabaseManager { initializeRanksDatabase(); // Load ranks from the ranks.yml config and sync them with the database - syncRanks(); + //syncRanks(); + syncRanksFromFileToDatabase(); } @@ -348,6 +347,64 @@ public class DatabaseManager { } +//////////////////////////////// SYNC DATABASE STUFF FOR RANKS ///////////////////////////////////////// + + public void syncRanksFromFileToDatabase() { + + // Load ranks from ranks.yml + Map fileRanks = newLoadRanksFromConfig(); + + // Get current ranks from the database + Set databaseRankNames = getCurrentRankNamesFromDatabase(); + + // Upsert ranks from the file into the database + for (Map.Entry entry : fileRanks.entrySet()) { + String rankName = entry.getKey(); + Rank rank = entry.getValue(); + + upsertRankInDatabase(rankName, rank.getCost(), rank.getCommandsString()); + + // Remove processed rank from databaseRankNames to track unmatched ranks + databaseRankNames.remove(rankName); + } + + // At this point, databaseRankNames contains only ranks that were not in the ranks.yml file + // Delete these unmatched ranks from the database + for (String oldRankName : databaseRankNames) { + deleteRankFromDatabase(oldRankName); + } + } + + private Set getCurrentRankNamesFromDatabase() { + Set rankNames = new HashSet<>(); + String query = "SELECT rank_name FROM nvus_ranks"; + try (Connection conn = this.connect(); // Make sure to implement this.connect() method to get your DB connection + PreparedStatement pstmt = conn.prepareStatement(query); + ResultSet rs = pstmt.executeQuery()) { + while (rs.next()) { + rankNames.add(rs.getString("rank_name")); + } + } catch (SQLException e) { + System.out.println("Error fetching current rank names from database: " + e.getMessage()); + } + return rankNames; + } + + private void deleteRankFromDatabase(String rankName) { + String query = "DELETE FROM nvus_ranks WHERE rank_name = ?"; + try (Connection conn = this.connect(); // Implement this.connect() method to get your DB connection + PreparedStatement pstmt = conn.prepareStatement(query)) { + pstmt.setString(1, rankName); + int affectedRows = pstmt.executeUpdate(); + if (affectedRows > 0) { + System.out.println("Successfully deleted rank: " + rankName); + } else { + System.out.println("No rank found with the name: " + rankName + " to delete."); + } + } catch (SQLException e) { + System.out.println("Error deleting rank from database: " + e.getMessage()); + } + } @@ -419,6 +476,23 @@ public class DatabaseManager { } } + public Map newLoadRanksFromConfig() { + Map fileRanks = new HashMap<>(); + FileConfiguration ranksConfig = configManager.getConfig("ranks.yml"); + ConfigurationSection ranksSection = ranksConfig.getConfigurationSection("Ranks"); + if (ranksSection != null) { + for (String rankKey : ranksSection.getKeys(false)) { + String rankName = rankKey; + double cost = ranksSection.getDouble(rankKey + ".Cost"); + List commandsList = ranksSection.getStringList(rankKey + ".Commands"); + Rank rank = new Rank(rankName, cost, commandsList); + fileRanks.put(rankName, rank); + } + } + return fileRanks; + } + + // public void createGang(String name, String ownerUuid) { diff --git a/src/main/java/me/nvus/nvus_prison_setup/Ranks/Rank.java b/src/main/java/me/nvus/nvus_prison_setup/Ranks/Rank.java index 59970b2..9df61b1 100644 --- a/src/main/java/me/nvus/nvus_prison_setup/Ranks/Rank.java +++ b/src/main/java/me/nvus/nvus_prison_setup/Ranks/Rank.java @@ -26,5 +26,10 @@ public class Rank { return commands; } - // Setters and other methods as necessary + // Additional method to get commands as a single string, separated by a semicolon + public String getCommandsString() { + return String.join(";", this.commands); + } + + // Add any additional methods or modifications here }