forked from never2nv/NVus_Prison
Finishing Up Gangs
This commit is contained in:
parent
06d28f0c3a
commit
52cd391c18
|
@ -9,20 +9,42 @@ import java.sql.Statement;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
|
||||||
|
import me.nvus.nvus_prison_setup.Configs.ConfigManager;
|
||||||
|
import org.bukkit.configuration.file.FileConfiguration;
|
||||||
|
|
||||||
public class DatabaseManager {
|
public class DatabaseManager {
|
||||||
|
|
||||||
|
private ConfigManager configManager;
|
||||||
private String url;
|
private String url;
|
||||||
public DatabaseManager(File dataFolder) {
|
|
||||||
// Construct the file path for the SQLite database
|
public DatabaseManager(ConfigManager configManager) {
|
||||||
File databaseFile = new File(dataFolder, "nvus_prison.db");
|
this.configManager = configManager;
|
||||||
this.url = "jdbc:sqlite:" + databaseFile.getAbsolutePath();
|
loadDatabaseConfig();
|
||||||
initializeDatabase();
|
initializeDatabase();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// public DatabaseManager(File dataFolder) {
|
||||||
|
// // Construct the file path for the SQLite database
|
||||||
|
// File databaseFile = new File(dataFolder, "nvus_prison.db");
|
||||||
|
// this.url = "jdbc:sqlite:" + databaseFile.getAbsolutePath();
|
||||||
|
// initializeDatabase();
|
||||||
|
// }
|
||||||
|
|
||||||
public DatabaseManager() {
|
public DatabaseManager() {
|
||||||
initializeDatabase();
|
initializeDatabase();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void loadDatabaseConfig() {
|
||||||
|
FileConfiguration config = configManager.getConfig("config.yml");
|
||||||
|
String host = config.getString("host", "localhost");
|
||||||
|
int port = config.getInt("port", 3306);
|
||||||
|
String database = config.getString("database", "nvus_prison");
|
||||||
|
String username = config.getString("username", "root");
|
||||||
|
String password = config.getString("password", "");
|
||||||
|
|
||||||
|
// Adjust this URL format according to your DBMS (MySQL in this case)
|
||||||
|
this.url = "jdbc:mysql://" + host + ":" + port + "/" + database + "?user=" + username + "&password=" + password;
|
||||||
|
}
|
||||||
|
|
||||||
private Connection connect() {
|
private Connection connect() {
|
||||||
Connection conn = null;
|
Connection conn = null;
|
||||||
|
@ -184,6 +206,22 @@ public class DatabaseManager {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getMemberRank(UUID playerUuid, String gangName) {
|
||||||
|
String sql = "SELECT m.rank FROM members m INNER JOIN gangs g ON m.gang_id = g.id WHERE m.uuid = ? AND g.name = ?";
|
||||||
|
try (Connection conn = this.connect();
|
||||||
|
PreparedStatement pstmt = conn.prepareStatement(sql)) {
|
||||||
|
pstmt.setString(1, playerUuid.toString());
|
||||||
|
pstmt.setString(2, gangName);
|
||||||
|
ResultSet rs = pstmt.executeQuery();
|
||||||
|
if (rs.next()) {
|
||||||
|
return rs.getString("rank");
|
||||||
|
}
|
||||||
|
} catch (SQLException e) {
|
||||||
|
System.out.println(e.getMessage());
|
||||||
|
}
|
||||||
|
return null; // Return null if the member's rank was not found or an error occurs
|
||||||
|
}
|
||||||
|
|
||||||
public boolean updateMemberRank(UUID playerUuid, String gangName, String newRank) {
|
public boolean updateMemberRank(UUID playerUuid, String gangName, String newRank) {
|
||||||
String sql = "UPDATE members SET rank = ? WHERE uuid = ? AND gang_id = (SELECT id FROM gangs WHERE name = ?)";
|
String sql = "UPDATE members SET rank = ? WHERE uuid = ? AND gang_id = (SELECT id FROM gangs WHERE name = ?)";
|
||||||
|
|
||||||
|
@ -218,6 +256,4 @@ public class DatabaseManager {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,6 +16,7 @@ public class GangCommands implements CommandExecutor {
|
||||||
this.gangManager = new GangManager(dbManager);
|
this.gangManager = new GangManager(dbManager);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||||
if (!(sender instanceof Player)) {
|
if (!(sender instanceof Player)) {
|
||||||
sender.sendMessage("Only players can execute this command.");
|
sender.sendMessage("Only players can execute this command.");
|
||||||
|
@ -23,31 +24,98 @@ public class GangCommands implements CommandExecutor {
|
||||||
}
|
}
|
||||||
|
|
||||||
Player player = (Player) sender;
|
Player player = (Player) sender;
|
||||||
UUID playerUuid = player.getUniqueId();
|
|
||||||
|
|
||||||
if (args.length == 0 || (args.length == 1 && args[0].equalsIgnoreCase("gang"))) {
|
// Display help if no arguments are provided or if the first argument is "help"
|
||||||
// No subcommand specified, or only "gang" was specified
|
if (args.length == 0 || (args.length == 1 && args[0].equalsIgnoreCase("help"))) {
|
||||||
sendGangCommandHelp(player);
|
sendGangCommandHelp(player);
|
||||||
return true;
|
return true;
|
||||||
} else if (args.length >= 1 && args[0].equalsIgnoreCase("gang")) {
|
|
||||||
// A subcommand is specified, handle it accordingly
|
|
||||||
switch (args[1].toLowerCase()) {
|
|
||||||
case "create":
|
|
||||||
return handleGangCreate(player, args);
|
|
||||||
case "invite":
|
|
||||||
return handleGangInvite(sender, args);
|
|
||||||
case "accept":
|
|
||||||
return handleGangAccept(player, playerUuid);
|
|
||||||
case "deny":
|
|
||||||
return handleGangDeny(player, playerUuid);
|
|
||||||
case "leave":
|
|
||||||
return handleGangLeave(player, playerUuid);
|
|
||||||
default:
|
|
||||||
player.sendMessage("Invalid gang command.");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return false;
|
|
||||||
|
switch (args[0].toLowerCase()) {
|
||||||
|
case "create":
|
||||||
|
return handleGangCreate(player, args);
|
||||||
|
case "invite":
|
||||||
|
return handleGangInvite(sender, args);
|
||||||
|
case "accept":
|
||||||
|
return handleGangAccept(player, player.getUniqueId());
|
||||||
|
case "deny":
|
||||||
|
return handleGangDeny(player, player.getUniqueId());
|
||||||
|
case "leave":
|
||||||
|
return handleGangLeave(player, player.getUniqueId());
|
||||||
|
case "promote":
|
||||||
|
return handleGangPromote(sender, args);
|
||||||
|
case "kick":
|
||||||
|
return handleGangKick(sender, args);
|
||||||
|
default:
|
||||||
|
player.sendMessage(ChatColor.RED + "Invalid gang command. Use /gang help for a list of commands.");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean handleGangPromote(CommandSender sender, String[] args) {
|
||||||
|
if (!(sender instanceof Player)) {
|
||||||
|
sender.sendMessage("Only players can execute this command.");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (args.length != 3) {
|
||||||
|
sender.sendMessage(ChatColor.RED + "Usage: /gang promote <player>");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
Player player = (Player) sender;
|
||||||
|
Player targetPlayer = player.getServer().getPlayer(args[2]);
|
||||||
|
if (targetPlayer == null) {
|
||||||
|
player.sendMessage(ChatColor.RED + "Player not found: " + args[2]);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
String gangName = gangManager.getCurrentGangName(player.getUniqueId());
|
||||||
|
if (gangName == null) {
|
||||||
|
player.sendMessage(ChatColor.RED + "You are not in a gang.");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
boolean success = gangManager.promoteMember(player.getUniqueId(), targetPlayer.getUniqueId(), gangName);
|
||||||
|
if (success) {
|
||||||
|
player.sendMessage(ChatColor.GREEN + "Successfully promoted " + targetPlayer.getName() + ".");
|
||||||
|
} else {
|
||||||
|
player.sendMessage(ChatColor.RED + "Failed to promote " + targetPlayer.getName() + ".");
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean handleGangKick(CommandSender sender, String[] args) {
|
||||||
|
if (!(sender instanceof Player)) {
|
||||||
|
sender.sendMessage("Only players can execute this command.");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (args.length != 3) {
|
||||||
|
sender.sendMessage(ChatColor.RED + "Usage: /gang kick <player>");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
Player player = (Player) sender;
|
||||||
|
Player targetPlayer = player.getServer().getPlayer(args[2]);
|
||||||
|
if (targetPlayer == null) {
|
||||||
|
player.sendMessage(ChatColor.RED + "Player not found: " + args[2]);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
String gangName = gangManager.getCurrentGangName(player.getUniqueId());
|
||||||
|
if (gangName == null) {
|
||||||
|
player.sendMessage(ChatColor.RED + "You are not in a gang.");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
boolean success = gangManager.kickMember(player.getUniqueId(), targetPlayer.getUniqueId(), gangName);
|
||||||
|
if (success) {
|
||||||
|
player.sendMessage(ChatColor.GREEN + "Successfully kicked " + targetPlayer.getName() + " from the gang.");
|
||||||
|
} else {
|
||||||
|
player.sendMessage(ChatColor.RED + "Failed to kick " + targetPlayer.getName() + ".");
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void sendGangCommandHelp(Player player) {
|
private void sendGangCommandHelp(Player player) {
|
||||||
|
@ -73,8 +141,14 @@ public class GangCommands implements CommandExecutor {
|
||||||
|
|
||||||
|
|
||||||
private boolean handleGangCreate(Player player, String[] args) {
|
private boolean handleGangCreate(Player player, String[] args) {
|
||||||
|
// Check if the player has the required permission
|
||||||
|
if (!player.hasPermission("nvus.gang.create")) {
|
||||||
|
player.sendMessage(ChatColor.RED + "You do not have permission to create a gang.");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
if (args.length != 2) {
|
if (args.length != 2) {
|
||||||
player.sendMessage("Usage: /gang create <gangName>");
|
player.sendMessage(ChatColor.RED + "Usage: /gang create <gangName>");
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -83,19 +157,20 @@ public class GangCommands implements CommandExecutor {
|
||||||
// Check if the player already belongs to a gang
|
// Check if the player already belongs to a gang
|
||||||
String currentGang = gangManager.getCurrentGangName(player.getUniqueId());
|
String currentGang = gangManager.getCurrentGangName(player.getUniqueId());
|
||||||
if (currentGang != null) {
|
if (currentGang != null) {
|
||||||
player.sendMessage("You already belong to a gang.");
|
player.sendMessage(ChatColor.RED + "You already belong to a gang.");
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create the gang
|
// Create the gang
|
||||||
if (gangManager.createGang(gangName, player)) {
|
if (gangManager.createGang(gangName, player)) {
|
||||||
player.sendMessage("Gang created successfully!");
|
player.sendMessage(ChatColor.GREEN + "Gang created successfully!");
|
||||||
} else {
|
} else {
|
||||||
player.sendMessage("Failed to create gang. The gang may already exist.");
|
player.sendMessage(ChatColor.RED + "Failed to create gang. The gang may already exist.");
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private boolean handleGangInvite(CommandSender sender, String[] args) {
|
private boolean handleGangInvite(CommandSender sender, String[] args) {
|
||||||
if (args.length != 3) {
|
if (args.length != 3) {
|
||||||
sender.sendMessage("Usage: /nvus gang invite <playerName> <gangName>");
|
sender.sendMessage("Usage: /nvus gang invite <playerName> <gangName>");
|
||||||
|
|
|
@ -6,98 +6,95 @@ import org.bukkit.Bukkit;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
public class GangManager {
|
public class GangManager {
|
||||||
|
|
||||||
private final DatabaseManager dbManager;
|
private final DatabaseManager dbManager;
|
||||||
|
|
||||||
public GangManager(DatabaseManager dbManager) {
|
public GangManager(DatabaseManager dbManager) {
|
||||||
this.dbManager = dbManager;
|
this.dbManager = dbManager;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean createGang(String gangName, Player owner) {
|
public enum GangRank {
|
||||||
UUID ownerUuid = owner.getUniqueId();
|
OWNER,
|
||||||
String ownerUuidString = ownerUuid.toString();
|
CAPO,
|
||||||
|
MEMBER
|
||||||
|
}
|
||||||
|
|
||||||
// Check if the gang already exists
|
// Assuming a simplified model where the next rank is simply the next ordinal in the enum
|
||||||
if (dbManager.getGangIdByName(gangName) != null) {
|
public String getNextRank(String currentRank) {
|
||||||
return false;
|
try {
|
||||||
|
GangRank current = GangRank.valueOf(currentRank.toUpperCase());
|
||||||
|
int nextOrdinal = current.ordinal() + 1;
|
||||||
|
if (nextOrdinal < GangRank.values().length) {
|
||||||
|
return GangRank.values()[nextOrdinal].name();
|
||||||
|
}
|
||||||
|
} catch (IllegalArgumentException e) {
|
||||||
|
// Handle invalid rank input
|
||||||
}
|
}
|
||||||
|
return currentRank;
|
||||||
|
}
|
||||||
|
|
||||||
// Create the gang in the database
|
public boolean createGang(String gangName, Player owner) {
|
||||||
dbManager.createGang(gangName, ownerUuidString);
|
if (dbManager.getGangIdByName(gangName) != null) return false;
|
||||||
|
dbManager.createGang(gangName, owner.getUniqueId().toString());
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Method to add a member to a gang
|
|
||||||
public boolean addMemberToGang(String username, UUID uuid, String gangName, String rank) {
|
public boolean addMemberToGang(String username, UUID uuid, String gangName, String rank) {
|
||||||
Integer gangId = dbManager.getGangIdByName(gangName);
|
Integer gangId = dbManager.getGangIdByName(gangName);
|
||||||
if (gangId == null) {
|
if (gangId == null) return false;
|
||||||
// Gang does not exist
|
return dbManager.addMember(uuid.toString(), username, gangId, rank);
|
||||||
return false;
|
|
||||||
}
|
|
||||||
// Add the member to the gang with the specified rank
|
|
||||||
dbManager.addMember(uuid.toString(), username, gangId, rank);
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check if a player can invite others to the gang
|
|
||||||
public boolean canInvite(UUID playerUuid) {
|
public boolean canInvite(UUID playerUuid) {
|
||||||
// Implement logic to check if the player has the rank of Owner or Capo
|
String rank = dbManager.getMemberRank(playerUuid, getCurrentGangName(playerUuid));
|
||||||
// This requires a method in DatabaseManager to check the player's rank in their gang
|
return GangRank.OWNER.name().equalsIgnoreCase(rank) || GangRank.CAPO.name().equalsIgnoreCase(rank);
|
||||||
return dbManager.canInvite(playerUuid.toString());
|
}
|
||||||
|
|
||||||
|
public boolean canKickOrPromote(UUID playerUuid, String gangName) {
|
||||||
|
String rank = dbManager.getMemberRank(playerUuid, gangName);
|
||||||
|
return GangRank.OWNER.name().equalsIgnoreCase(rank) || GangRank.CAPO.name().equalsIgnoreCase(rank);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add an invitation to the gang
|
|
||||||
public boolean addInvitation(UUID playerUuid, String gangName) {
|
public boolean addInvitation(UUID playerUuid, String gangName) {
|
||||||
// For simplicity, this example directly adds the player to the gang
|
|
||||||
// You might want to implement a more complex invitation system
|
|
||||||
Integer gangId = dbManager.getGangIdByName(gangName);
|
Integer gangId = dbManager.getGangIdByName(gangName);
|
||||||
if (gangId == null) {
|
if (gangId == null) return false;
|
||||||
// Gang does not exist
|
String username = resolveUsername(playerUuid);
|
||||||
return false;
|
if (username == null) return false;
|
||||||
}
|
|
||||||
// Assume a default rank for new invites, e.g., "Pending" or "Member"
|
|
||||||
String username = resolveUsername(playerUuid); // You need to implement this method
|
|
||||||
return dbManager.addMember(playerUuid.toString(), username, gangId, "Pending");
|
return dbManager.addMember(playerUuid.toString(), username, gangId, "Pending");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Method for a player to accept a gang invitation
|
|
||||||
public boolean acceptInvitation(UUID playerUuid, String gangName) {
|
public boolean acceptInvitation(UUID playerUuid, String gangName) {
|
||||||
return dbManager.updateMemberRank(playerUuid, gangName, "Member");
|
return dbManager.updateMemberRank(playerUuid, gangName, GangRank.MEMBER.name());
|
||||||
}
|
}
|
||||||
|
|
||||||
// Method for a player to deny a gang invitation or to be removed from the gang
|
|
||||||
public boolean denyInvitation(UUID playerUuid, String gangName) {
|
public boolean denyInvitation(UUID playerUuid, String gangName) {
|
||||||
return dbManager.removeMember(playerUuid, gangName);
|
return dbManager.removeMember(playerUuid, gangName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean kickMember(UUID playerUuid, UUID targetUuid, String gangName) {
|
||||||
private String resolveUsername(UUID uuid) {
|
if (canKickOrPromote(playerUuid, gangName)) {
|
||||||
Player player = Bukkit.getPlayer(uuid);
|
return dbManager.removeMember(targetUuid, gangName);
|
||||||
if (player != null) {
|
|
||||||
return player.getName();
|
|
||||||
} else {
|
|
||||||
// The player might be offline or the UUID might not correspond to a known player.
|
|
||||||
// Decide how you want to handle this case. For now, returning null or a placeholder.
|
|
||||||
return null; // Consider an alternative approach based on your plugin's requirements.
|
|
||||||
}
|
}
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getCurrentGangName(UUID playerUuid) {
|
public boolean promoteMember(UUID playerUuid, UUID targetUuid, String gangName) {
|
||||||
// Call the DatabaseManager method to get the current gang name by player's UUID
|
if (!canKickOrPromote(playerUuid, gangName)) return false;
|
||||||
return dbManager.getCurrentGangByPlayerUuid(playerUuid);
|
String currentRank = dbManager.getMemberRank(targetUuid, gangName);
|
||||||
|
String newRank = getNextRank(currentRank);
|
||||||
|
if (newRank.equals(currentRank)) return false;
|
||||||
|
return dbManager.updateMemberRank(targetUuid, gangName, newRank);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean leaveGang(UUID playerUuid, String gangName) {
|
public boolean leaveGang(UUID playerUuid, String gangName) {
|
||||||
// Before removing a member, you may need to get the gang's ID based on its name
|
|
||||||
Integer gangId = dbManager.getGangIdByName(gangName);
|
|
||||||
if (gangId == null) {
|
|
||||||
// This means the gang doesn't exist, which could indicate an issue with the provided gangName
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
// Proceed to remove the player from the gang
|
|
||||||
return dbManager.removeMember(playerUuid, gangName);
|
return dbManager.removeMember(playerUuid, gangName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private String resolveUsername(UUID uuid) {
|
||||||
|
Player player = Bukkit.getPlayer(uuid);
|
||||||
|
return player != null ? player.getName() : null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getCurrentGangName(UUID playerUuid) {
|
||||||
|
return dbManager.getCurrentGangByPlayerUuid(playerUuid);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -43,7 +43,7 @@ public final class PrisonSetup extends JavaPlugin {
|
||||||
File dataFolder = getDataFolder();
|
File dataFolder = getDataFolder();
|
||||||
|
|
||||||
// Initialize the DatabaseManager with the plugin's data folder
|
// Initialize the DatabaseManager with the plugin's data folder
|
||||||
dbManager = new DatabaseManager(dataFolder);
|
DatabaseManager databaseManager = new DatabaseManager(configManager);
|
||||||
|
|
||||||
// Initialize the GangManager with the DatabaseManager
|
// Initialize the GangManager with the DatabaseManager
|
||||||
gangManager = new GangManager(dbManager);
|
gangManager = new GangManager(dbManager);
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
#======================================================================================#
|
#======================================================================================#
|
||||||
# NVus PRISON SETUP #
|
# NVus PRISON GOLD EDITION #
|
||||||
# by never2nv #
|
# by never2nv #
|
||||||
# www.FNGnation.net #
|
# www.FNGnation.net #
|
||||||
# Discord: FNGnation.net/discord #
|
# Discord: FNGnation.net/discord #
|
||||||
|
@ -29,3 +29,11 @@ PrisonerTools:
|
||||||
- IRON_SHOVEL
|
- IRON_SHOVEL
|
||||||
# When set to FALSE it will prevent Prisoner Tools from receiving damage when mining etc.
|
# When set to FALSE it will prevent Prisoner Tools from receiving damage when mining etc.
|
||||||
ToolDamage: false
|
ToolDamage: false
|
||||||
|
|
||||||
|
# Database Settings
|
||||||
|
host: 0.0.0.0
|
||||||
|
port: 3306
|
||||||
|
database: nvus_prison
|
||||||
|
username: username
|
||||||
|
password: password
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue