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
}