forked from never2nv/NVus_Prison
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!
This commit is contained in:
parent
9de1283127
commit
cab690905d
2
pom.xml
2
pom.xml
|
@ -6,7 +6,7 @@
|
||||||
|
|
||||||
<groupId>me.NVus</groupId>
|
<groupId>me.NVus</groupId>
|
||||||
<artifactId>NVus_Prison</artifactId>
|
<artifactId>NVus_Prison</artifactId>
|
||||||
<version>1.0.2</version>
|
<version>1.0.3</version>
|
||||||
<packaging>jar</packaging>
|
<packaging>jar</packaging>
|
||||||
|
|
||||||
<name>NVus_PrisonSetup</name>
|
<name>NVus_PrisonSetup</name>
|
||||||
|
|
|
@ -6,10 +6,7 @@ import java.sql.PreparedStatement;
|
||||||
import java.sql.ResultSet;
|
import java.sql.ResultSet;
|
||||||
import java.sql.SQLException;
|
import java.sql.SQLException;
|
||||||
import java.sql.Statement;
|
import java.sql.Statement;
|
||||||
import java.util.ArrayList;
|
import java.util.*;
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.UUID;
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
|
||||||
import me.nvus.nvus_prison_setup.Gangs.GangInfo;
|
import me.nvus.nvus_prison_setup.Gangs.GangInfo;
|
||||||
|
@ -120,10 +117,11 @@ public class DatabaseManager {
|
||||||
|
|
||||||
public void syncRanks() {
|
public void syncRanks() {
|
||||||
FileConfiguration ranksConfig = configManager.getConfig("ranks.yml");
|
FileConfiguration ranksConfig = configManager.getConfig("ranks.yml");
|
||||||
// Assuming you've moved loadRanksFromConfig method logic directly here or keep it separated as below
|
|
||||||
loadRanksFromConfig(ranksConfig);
|
loadRanksFromConfig(ranksConfig);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
private void upsertRankInDatabase(String rankName, double cost, String commandsAsString) {
|
private void upsertRankInDatabase(String rankName, double cost, String commandsAsString) {
|
||||||
// This method will check if the rank exists and update or insert accordingly
|
// This method will check if the rank exists and update or insert accordingly
|
||||||
String selectQuery = "SELECT COUNT(*) FROM nvus_ranks WHERE rank_name = ?";
|
String selectQuery = "SELECT COUNT(*) FROM nvus_ranks WHERE rank_name = ?";
|
||||||
|
@ -162,7 +160,8 @@ public class DatabaseManager {
|
||||||
initializeRanksDatabase();
|
initializeRanksDatabase();
|
||||||
|
|
||||||
// Load ranks from the ranks.yml config and sync them with the database
|
// 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<String, Rank> fileRanks = newLoadRanksFromConfig();
|
||||||
|
|
||||||
|
// Get current ranks from the database
|
||||||
|
Set<String> databaseRankNames = getCurrentRankNamesFromDatabase();
|
||||||
|
|
||||||
|
// Upsert ranks from the file into the database
|
||||||
|
for (Map.Entry<String, Rank> 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<String> getCurrentRankNamesFromDatabase() {
|
||||||
|
Set<String> 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<String, Rank> newLoadRanksFromConfig() {
|
||||||
|
Map<String, Rank> 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<String> 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) {
|
// public void createGang(String name, String ownerUuid) {
|
||||||
|
|
|
@ -26,5 +26,10 @@ public class Rank {
|
||||||
return commands;
|
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
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue