forked from never2nv/NVus_Prison
v0.9.7 - Added PlaceholderAPI support (softdepend) for Gangs. Fixed database issues and registering newly created gangs. Added gang owners as members of gang to correctly fix /gang info command (previously /gang list)
This commit is contained in:
parent
88d4818062
commit
ee60d3f0b3
|
@ -16,6 +16,11 @@
|
|||
<option name="name" value="papermc-repo" />
|
||||
<option name="url" value="https://repo.papermc.io/repository/maven-public/" />
|
||||
</remote-repository>
|
||||
<remote-repository>
|
||||
<option name="id" value="placeholderapi" />
|
||||
<option name="name" value="placeholderapi" />
|
||||
<option name="url" value="https://repo.extendedclip.com/content/repositories/placeholderapi/" />
|
||||
</remote-repository>
|
||||
<remote-repository>
|
||||
<option name="id" value="central" />
|
||||
<option name="name" value="Maven Central repository" />
|
||||
|
|
|
@ -48,6 +48,7 @@ Currently, the plugin implements the following features, so far:
|
|||
- [X] Prison Gangs **
|
||||
- [X] Additional Gang Commands (kick, promote, disband) **
|
||||
- [X] Tree Farm **
|
||||
- [x] Gang PlaceholderAPI support (display Gang Name for chat etc)
|
||||
- [ ] Spawn with Prisoner Tools (Toggable)
|
||||
- [ ] Restrict Prisoner Tools from moving in inventory and dropping? (Toggable)
|
||||
- [ ] Prisoner Tokens or Gems (Tied into Vault?)\
|
||||
|
|
17
pom.xml
17
pom.xml
|
@ -6,7 +6,7 @@
|
|||
|
||||
<groupId>me.NVus</groupId>
|
||||
<artifactId>NVus_Prison</artifactId>
|
||||
<version>0.9.5</version>
|
||||
<version>0.9.7</version>
|
||||
<packaging>jar</packaging>
|
||||
|
||||
<name>NVus_PrisonSetup</name>
|
||||
|
@ -96,6 +96,11 @@
|
|||
<id>enginehub</id>
|
||||
<url>https://maven.enginehub.org/repo/</url>
|
||||
</repository>
|
||||
<!-- PlaceholderAPI-->
|
||||
<repository>
|
||||
<id>placeholderapi</id>
|
||||
<url>https://repo.extendedclip.com/content/repositories/placeholderapi/</url>
|
||||
</repository>
|
||||
</repositories>
|
||||
|
||||
<dependencyManagement>
|
||||
|
@ -123,18 +128,28 @@
|
|||
<version>1.20.4-R0.1-SNAPSHOT</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<!-- PlaceholderAPI-->
|
||||
<dependency>
|
||||
<groupId>me.clip</groupId>
|
||||
<artifactId>placeholderapi</artifactId>
|
||||
<version>2.11.4</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<!-- WorldGuard-->
|
||||
<dependency>
|
||||
<groupId>com.sk89q.worldguard</groupId>
|
||||
<artifactId>worldguard-bukkit</artifactId>
|
||||
<version>7.0.3</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<!-- WorldEdit-->
|
||||
<dependency>
|
||||
<groupId>com.sk89q.worldedit</groupId>
|
||||
<artifactId>worldedit-bukkit</artifactId>
|
||||
<version>7.3.0</version> <!-- Use the correct version -->
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<!-- FastAsyncWorldEdit-->
|
||||
<dependency>
|
||||
<groupId>com.fastasyncworldedit</groupId>
|
||||
<artifactId>FastAsyncWorldEdit-Core</artifactId>
|
||||
|
|
|
@ -82,25 +82,64 @@ public class DatabaseManager {
|
|||
initializeDatabase();
|
||||
}
|
||||
|
||||
public void createGang(String name, String ownerUuid) {
|
||||
String sql = "INSERT INTO nvus_gangs(name, owner_uuid) VALUES(?,?)";
|
||||
public void createGang(String name, String ownerUuid, String ownerName) {
|
||||
String insertGangSQL = "INSERT INTO nvus_gangs(name, owner_uuid) VALUES(?,?)";
|
||||
String insertMemberSQL = "INSERT INTO nvus_gangs_members(uuid, username, gang_id, rank) VALUES(?,?,(SELECT id FROM nvus_gangs WHERE owner_uuid = ?),'Owner')";
|
||||
|
||||
try (Connection conn = this.connect();
|
||||
PreparedStatement pstmt = conn.prepareStatement(sql)) {
|
||||
pstmt.setString(1, name);
|
||||
pstmt.setString(2, ownerUuid);
|
||||
pstmt.executeUpdate();
|
||||
PreparedStatement insertGangStmt = conn.prepareStatement(insertGangSQL, Statement.RETURN_GENERATED_KEYS);
|
||||
PreparedStatement insertMemberStmt = conn.prepareStatement(insertMemberSQL)) {
|
||||
|
||||
// Insert the gang
|
||||
insertGangStmt.setString(1, name);
|
||||
insertGangStmt.setString(2, ownerUuid);
|
||||
insertGangStmt.executeUpdate();
|
||||
|
||||
// Insert the owner as a member
|
||||
insertMemberStmt.setString(1, ownerUuid);
|
||||
insertMemberStmt.setString(2, ownerName);
|
||||
insertMemberStmt.setString(3, ownerUuid); // Re-use owner UUID to fetch the gang ID
|
||||
insertMemberStmt.executeUpdate();
|
||||
|
||||
} catch (SQLException e) {
|
||||
System.out.println(e.getMessage());
|
||||
System.out.println("Error creating gang and adding owner as member: " + e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
// public void createGang(String name, String ownerUuid) {
|
||||
// String sql = "INSERT INTO nvus_gangs(name, owner_uuid) VALUES(?,?)";
|
||||
// String sqlMember = "INSERT INTO nvus_gangs_members(name, owner_uuid) VALUES(?,?)";
|
||||
// try (Connection conn = this.connect();
|
||||
// PreparedStatement pstmt = conn.prepareStatement(sql)) {
|
||||
// pstmt.setString(1, name);
|
||||
// pstmt.setString(2, ownerUuid);
|
||||
// pstmt.executeUpdate();
|
||||
// }
|
||||
// catch (SQLException e) {
|
||||
// System.out.println(e.getMessage());
|
||||
// }
|
||||
// try (Connection conn = this.connect();
|
||||
// PreparedStatement pstmt = conn.prepareStatement(sqlMember)) {
|
||||
// pstmt.setString(1, name);
|
||||
// pstmt.setString(2, ownerUuid);
|
||||
// pstmt.executeUpdate();
|
||||
// }
|
||||
// catch (SQLException e) {
|
||||
// System.out.println(e.getMessage());
|
||||
// }
|
||||
// }
|
||||
|
||||
public GangInfo getGangInfo(String gangName) {
|
||||
String gangInfoQuery = "SELECT g.name, (SELECT username FROM members WHERE uuid = g.owner_uuid) AS ownerName, COUNT(m.uuid) AS memberCount " +
|
||||
// Updated query to match gang_id from nvus_gangs_members with id in nvus_gangs, maybe a re-write is needed to match these id's as gangid??
|
||||
String gangInfoQuery = "SELECT g.name, " +
|
||||
"(SELECT username FROM nvus_gangs_members WHERE uuid = g.owner_uuid) AS ownerName, " +
|
||||
"COUNT(m.uuid) AS memberCount " +
|
||||
"FROM nvus_gangs g " +
|
||||
"LEFT JOIN nvus_gangs_members m ON g.id = m.gang_id " +
|
||||
"JOIN nvus_gangs_members m ON g.id = m.gang_id " +
|
||||
"WHERE g.name = ? " +
|
||||
"GROUP BY g.name";
|
||||
"GROUP BY g.name, g.owner_uuid";
|
||||
|
||||
try (Connection conn = this.connect();
|
||||
PreparedStatement pstmt = conn.prepareStatement(gangInfoQuery)) {
|
||||
|
@ -121,6 +160,7 @@ public class DatabaseManager {
|
|||
|
||||
|
||||
|
||||
|
||||
public boolean removeGang(String gangName) {
|
||||
String sql = "DELETE FROM nvus_gangs WHERE name = ?";
|
||||
|
||||
|
|
|
@ -50,8 +50,8 @@ public class GangCommands implements CommandExecutor {
|
|||
return handleGangKick(sender, args);
|
||||
case "disband":
|
||||
return handleGangDisband(sender, args);
|
||||
case "list":
|
||||
return handleGangList(sender, args);
|
||||
case "info":
|
||||
return handleGangInfo(sender, args);
|
||||
default:
|
||||
player.sendMessage(ChatColor.RED + "Invalid gang command. Use /gang help for a list of commands.");
|
||||
return true;
|
||||
|
@ -202,7 +202,7 @@ public class GangCommands implements CommandExecutor {
|
|||
message.append(ChatColor.LIGHT_PURPLE).append("NVus Prison Gangs:\n");
|
||||
message.append(ChatColor.DARK_GRAY).append("=======\n");
|
||||
message.append(ChatColor.GREEN).append("/gang create <name/tag> - Use this to create a gang.\n");
|
||||
message.append(ChatColor.GREEN).append("/gang list - Get info about your current gang.\n");
|
||||
message.append(ChatColor.GREEN).append("/gang info - Get info about your current gang.\n");
|
||||
message.append(ChatColor.GREEN).append("/gang invite <player> - Invite player to your gang.\n");
|
||||
message.append(ChatColor.GREEN).append("\n");
|
||||
message.append(ChatColor.GREEN).append("/gang accept - Accept an invite to a gang.\n");
|
||||
|
@ -225,6 +225,7 @@ public class GangCommands implements CommandExecutor {
|
|||
return true;
|
||||
}
|
||||
|
||||
// Check if exactly two arguments are provided (/gang create <name>)
|
||||
if (args.length != 2) {
|
||||
player.sendMessage(ChatColor.RED + "Usage: /gang create <gangName>");
|
||||
return true;
|
||||
|
@ -232,6 +233,18 @@ public class GangCommands implements CommandExecutor {
|
|||
|
||||
String gangName = args[1];
|
||||
|
||||
// Check if the gang name is a single word
|
||||
if (gangName.contains(" ")) {
|
||||
player.sendMessage(ChatColor.RED + "Gang name must be a single word.");
|
||||
return true;
|
||||
}
|
||||
|
||||
// Check if the gang name length is between 3 and 6 characters
|
||||
if (gangName.length() < 3 || gangName.length() > 6) {
|
||||
player.sendMessage(ChatColor.RED + "Gang name must be between 3 and 6 letters.");
|
||||
return true;
|
||||
}
|
||||
|
||||
// Check if the player already belongs to a gang
|
||||
String currentGang = gangManager.getCurrentGangName(player.getUniqueId());
|
||||
if (currentGang != null) {
|
||||
|
@ -249,6 +262,7 @@ public class GangCommands implements CommandExecutor {
|
|||
}
|
||||
|
||||
|
||||
|
||||
private boolean handleGangInvite(CommandSender sender, String[] args) {
|
||||
if (args.length != 3) {
|
||||
sender.sendMessage("Usage: /nvus gang invite <playerName> <gangName>");
|
||||
|
@ -317,7 +331,7 @@ public class GangCommands implements CommandExecutor {
|
|||
return true;
|
||||
}
|
||||
|
||||
private boolean handleGangList(CommandSender sender, String[] args) {
|
||||
private boolean handleGangInfo(CommandSender sender, String[] args) {
|
||||
if (!(sender instanceof Player)) {
|
||||
sender.sendMessage("This command can only be used by players.");
|
||||
return true;
|
||||
|
@ -327,7 +341,7 @@ public class GangCommands implements CommandExecutor {
|
|||
String gangName = gangManager.getCurrentGangName(player.getUniqueId());
|
||||
|
||||
if (gangName == null) {
|
||||
player.sendMessage("You are not in a gang.");
|
||||
player.sendMessage("You are not currently in a gang! Maybe create or... join one? ;)");
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
@ -53,8 +53,10 @@ public class GangManager {
|
|||
}
|
||||
|
||||
public boolean createGang(String gangName, Player owner) {
|
||||
if (dbManager.getGangIdByName(gangName) != null) return false;
|
||||
dbManager.createGang(gangName, owner.getUniqueId().toString());
|
||||
if (dbManager.getGangIdByName(gangName) != null) {
|
||||
return false; // Gang already exists
|
||||
}
|
||||
dbManager.createGang(gangName, owner.getUniqueId().toString(), owner.getName());
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,45 @@
|
|||
package me.nvus.nvus_prison_setup.Placeholders;
|
||||
|
||||
import me.clip.placeholderapi.expansion.PlaceholderExpansion;
|
||||
import me.clip.placeholderapi.expansion.PlaceholderExpansion;
|
||||
import org.bukkit.entity.Player;
|
||||
import me.nvus.nvus_prison_setup.Gangs.GangManager;
|
||||
|
||||
public class GangPlaceholders extends PlaceholderExpansion {
|
||||
|
||||
private GangManager gangManager;
|
||||
|
||||
public GangPlaceholders(GangManager gangManager) {
|
||||
this.gangManager = gangManager;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getIdentifier() {
|
||||
return "nvus";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getAuthor() {
|
||||
return "never2nv";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getVersion() {
|
||||
return "1.0";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onPlaceholderRequest(Player player, String identifier) {
|
||||
if (player == null) {
|
||||
return "";
|
||||
}
|
||||
|
||||
// Placeholder: %nvus_gang_name%
|
||||
if (identifier.equals("gang_name")) {
|
||||
String gangName = gangManager.getCurrentGangName(player.getUniqueId());
|
||||
return gangName != null ? gangName : "No Gang";
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
|
@ -9,6 +9,7 @@ import me.nvus.nvus_prison_setup.Listeners.PlayerItems;
|
|||
import me.nvus.nvus_prison_setup.Listeners.PlayerSpawn;
|
||||
import me.nvus.nvus_prison_setup.Listeners.BlockListener;
|
||||
import me.nvus.nvus_prison_setup.Listeners.ToolSwitchListener;
|
||||
import me.nvus.nvus_prison_setup.Placeholders.GangPlaceholders;
|
||||
import me.nvus.nvus_prison_setup.Updater.UpdateChecker;
|
||||
import me.nvus.nvus_prison_setup.Listeners.ToolDamageListener;
|
||||
import me.nvus.nvus_prison_setup.TreeFarm.TreeFarmListener;
|
||||
|
@ -75,6 +76,10 @@ public final class PrisonSetup extends JavaPlugin {
|
|||
|
||||
// Gang Related... GANG, GANG #LOLOLOLOL
|
||||
this.getCommand("gang").setExecutor(new GangCommands(dbManager)); // Now correctly using initialized dbManager
|
||||
// Register the Gangs placeholder expansion
|
||||
if (Bukkit.getPluginManager().getPlugin("PlaceholderAPI") != null) {
|
||||
new GangPlaceholders(gangManager).register();
|
||||
}
|
||||
|
||||
// Settings Menu
|
||||
getServer().getPluginManager().registerEvents(new SettingsMenu(this, configManager), this);
|
||||
|
|
|
@ -10,6 +10,7 @@ depend:
|
|||
- WorldGuard
|
||||
|
||||
softdepend:
|
||||
- PlaceholderAPI
|
||||
- WorldEdit
|
||||
- FastAsyncWorldEdit
|
||||
|
||||
|
@ -31,7 +32,7 @@ commands:
|
|||
description: Base command for gang-related actions.
|
||||
usage: |
|
||||
/gang create <name/tag> - Create a gang.
|
||||
/gang list - View your Gang info.
|
||||
/gang info - View your current Gangs info.
|
||||
/gang invite <player> - Invite a player to your gang.
|
||||
/gang accept - Accept a Gang Invite.
|
||||
/gang deny - Decline a Gang Invite.
|
||||
|
|
Loading…
Reference in New Issue