From cab690905d6e02f57347c221a8f2a39e41576999 Mon Sep 17 00:00:00 2001
From: WildInterloper <156627888+WildInterloper@users.noreply.github.com>
Date: Thu, 14 Mar 2024 03:46:50 -0400
Subject: [PATCH] 1.0.3 - Hotfix for Database syncing issues with Ranks. Need
to update players ranks when ranks massively change somehow. Current it just
removes ranks that no longer exist and players within ranks that no longer
exist!
---
pom.xml | 2 +-
.../Database/DatabaseManager.java | 86 +++++++++++++++++--
.../me/nvus/nvus_prison_setup/Ranks/Rank.java | 7 +-
3 files changed, 87 insertions(+), 8 deletions(-)
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
}