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="name" value="papermc-repo" />
|
||||||
<option name="url" value="https://repo.papermc.io/repository/maven-public/" />
|
<option name="url" value="https://repo.papermc.io/repository/maven-public/" />
|
||||||
</remote-repository>
|
</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>
|
<remote-repository>
|
||||||
<option name="id" value="central" />
|
<option name="id" value="central" />
|
||||||
<option name="name" value="Maven Central repository" />
|
<option name="name" value="Maven Central repository" />
|
||||||
|
|
|
@ -48,6 +48,7 @@ Currently, the plugin implements the following features, so far:
|
||||||
- [X] Prison Gangs **
|
- [X] Prison Gangs **
|
||||||
- [X] Additional Gang Commands (kick, promote, disband) **
|
- [X] Additional Gang Commands (kick, promote, disband) **
|
||||||
- [X] Tree Farm **
|
- [X] Tree Farm **
|
||||||
|
- [x] Gang PlaceholderAPI support (display Gang Name for chat etc)
|
||||||
- [ ] Spawn with Prisoner Tools (Toggable)
|
- [ ] Spawn with Prisoner Tools (Toggable)
|
||||||
- [ ] Restrict Prisoner Tools from moving in inventory and dropping? (Toggable)
|
- [ ] Restrict Prisoner Tools from moving in inventory and dropping? (Toggable)
|
||||||
- [ ] Prisoner Tokens or Gems (Tied into Vault?)\
|
- [ ] Prisoner Tokens or Gems (Tied into Vault?)\
|
||||||
|
|
17
pom.xml
17
pom.xml
|
@ -6,7 +6,7 @@
|
||||||
|
|
||||||
<groupId>me.NVus</groupId>
|
<groupId>me.NVus</groupId>
|
||||||
<artifactId>NVus_Prison</artifactId>
|
<artifactId>NVus_Prison</artifactId>
|
||||||
<version>0.9.5</version>
|
<version>0.9.7</version>
|
||||||
<packaging>jar</packaging>
|
<packaging>jar</packaging>
|
||||||
|
|
||||||
<name>NVus_PrisonSetup</name>
|
<name>NVus_PrisonSetup</name>
|
||||||
|
@ -96,6 +96,11 @@
|
||||||
<id>enginehub</id>
|
<id>enginehub</id>
|
||||||
<url>https://maven.enginehub.org/repo/</url>
|
<url>https://maven.enginehub.org/repo/</url>
|
||||||
</repository>
|
</repository>
|
||||||
|
<!-- PlaceholderAPI-->
|
||||||
|
<repository>
|
||||||
|
<id>placeholderapi</id>
|
||||||
|
<url>https://repo.extendedclip.com/content/repositories/placeholderapi/</url>
|
||||||
|
</repository>
|
||||||
</repositories>
|
</repositories>
|
||||||
|
|
||||||
<dependencyManagement>
|
<dependencyManagement>
|
||||||
|
@ -123,18 +128,28 @@
|
||||||
<version>1.20.4-R0.1-SNAPSHOT</version>
|
<version>1.20.4-R0.1-SNAPSHOT</version>
|
||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<!-- PlaceholderAPI-->
|
||||||
|
<dependency>
|
||||||
|
<groupId>me.clip</groupId>
|
||||||
|
<artifactId>placeholderapi</artifactId>
|
||||||
|
<version>2.11.4</version>
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency>
|
||||||
|
<!-- WorldGuard-->
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.sk89q.worldguard</groupId>
|
<groupId>com.sk89q.worldguard</groupId>
|
||||||
<artifactId>worldguard-bukkit</artifactId>
|
<artifactId>worldguard-bukkit</artifactId>
|
||||||
<version>7.0.3</version>
|
<version>7.0.3</version>
|
||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<!-- WorldEdit-->
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.sk89q.worldedit</groupId>
|
<groupId>com.sk89q.worldedit</groupId>
|
||||||
<artifactId>worldedit-bukkit</artifactId>
|
<artifactId>worldedit-bukkit</artifactId>
|
||||||
<version>7.3.0</version> <!-- Use the correct version -->
|
<version>7.3.0</version> <!-- Use the correct version -->
|
||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<!-- FastAsyncWorldEdit-->
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.fastasyncworldedit</groupId>
|
<groupId>com.fastasyncworldedit</groupId>
|
||||||
<artifactId>FastAsyncWorldEdit-Core</artifactId>
|
<artifactId>FastAsyncWorldEdit-Core</artifactId>
|
||||||
|
|
|
@ -82,25 +82,64 @@ public class DatabaseManager {
|
||||||
initializeDatabase();
|
initializeDatabase();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void createGang(String name, String ownerUuid) {
|
public void createGang(String name, String ownerUuid, String ownerName) {
|
||||||
String sql = "INSERT INTO nvus_gangs(name, owner_uuid) VALUES(?,?)";
|
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();
|
try (Connection conn = this.connect();
|
||||||
PreparedStatement pstmt = conn.prepareStatement(sql)) {
|
PreparedStatement insertGangStmt = conn.prepareStatement(insertGangSQL, Statement.RETURN_GENERATED_KEYS);
|
||||||
pstmt.setString(1, name);
|
PreparedStatement insertMemberStmt = conn.prepareStatement(insertMemberSQL)) {
|
||||||
pstmt.setString(2, ownerUuid);
|
|
||||||
pstmt.executeUpdate();
|
// 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) {
|
} 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) {
|
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 " +
|
"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 = ? " +
|
"WHERE g.name = ? " +
|
||||||
"GROUP BY g.name";
|
"GROUP BY g.name, g.owner_uuid";
|
||||||
|
|
||||||
try (Connection conn = this.connect();
|
try (Connection conn = this.connect();
|
||||||
PreparedStatement pstmt = conn.prepareStatement(gangInfoQuery)) {
|
PreparedStatement pstmt = conn.prepareStatement(gangInfoQuery)) {
|
||||||
|
@ -121,6 +160,7 @@ public class DatabaseManager {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public boolean removeGang(String gangName) {
|
public boolean removeGang(String gangName) {
|
||||||
String sql = "DELETE FROM nvus_gangs WHERE name = ?";
|
String sql = "DELETE FROM nvus_gangs WHERE name = ?";
|
||||||
|
|
||||||
|
|
|
@ -50,8 +50,8 @@ public class GangCommands implements CommandExecutor {
|
||||||
return handleGangKick(sender, args);
|
return handleGangKick(sender, args);
|
||||||
case "disband":
|
case "disband":
|
||||||
return handleGangDisband(sender, args);
|
return handleGangDisband(sender, args);
|
||||||
case "list":
|
case "info":
|
||||||
return handleGangList(sender, args);
|
return handleGangInfo(sender, args);
|
||||||
default:
|
default:
|
||||||
player.sendMessage(ChatColor.RED + "Invalid gang command. Use /gang help for a list of commands.");
|
player.sendMessage(ChatColor.RED + "Invalid gang command. Use /gang help for a list of commands.");
|
||||||
return true;
|
return true;
|
||||||
|
@ -202,7 +202,7 @@ public class GangCommands implements CommandExecutor {
|
||||||
message.append(ChatColor.LIGHT_PURPLE).append("NVus Prison Gangs:\n");
|
message.append(ChatColor.LIGHT_PURPLE).append("NVus Prison Gangs:\n");
|
||||||
message.append(ChatColor.DARK_GRAY).append("=======\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 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("/gang invite <player> - Invite player to your gang.\n");
|
||||||
message.append(ChatColor.GREEN).append("\n");
|
message.append(ChatColor.GREEN).append("\n");
|
||||||
message.append(ChatColor.GREEN).append("/gang accept - Accept an invite to a gang.\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;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Check if exactly two arguments are provided (/gang create <name>)
|
||||||
if (args.length != 2) {
|
if (args.length != 2) {
|
||||||
player.sendMessage(ChatColor.RED + "Usage: /gang create <gangName>");
|
player.sendMessage(ChatColor.RED + "Usage: /gang create <gangName>");
|
||||||
return true;
|
return true;
|
||||||
|
@ -232,6 +233,18 @@ public class GangCommands implements CommandExecutor {
|
||||||
|
|
||||||
String gangName = args[1];
|
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
|
// 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) {
|
||||||
|
@ -249,6 +262,7 @@ public class GangCommands implements CommandExecutor {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
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>");
|
||||||
|
@ -317,7 +331,7 @@ public class GangCommands implements CommandExecutor {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean handleGangList(CommandSender sender, String[] args) {
|
private boolean handleGangInfo(CommandSender sender, String[] args) {
|
||||||
if (!(sender instanceof Player)) {
|
if (!(sender instanceof Player)) {
|
||||||
sender.sendMessage("This command can only be used by players.");
|
sender.sendMessage("This command can only be used by players.");
|
||||||
return true;
|
return true;
|
||||||
|
@ -327,7 +341,7 @@ public class GangCommands implements CommandExecutor {
|
||||||
String gangName = gangManager.getCurrentGangName(player.getUniqueId());
|
String gangName = gangManager.getCurrentGangName(player.getUniqueId());
|
||||||
|
|
||||||
if (gangName == null) {
|
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;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -53,8 +53,10 @@ public class GangManager {
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean createGang(String gangName, Player owner) {
|
public boolean createGang(String gangName, Player owner) {
|
||||||
if (dbManager.getGangIdByName(gangName) != null) return false;
|
if (dbManager.getGangIdByName(gangName) != null) {
|
||||||
dbManager.createGang(gangName, owner.getUniqueId().toString());
|
return false; // Gang already exists
|
||||||
|
}
|
||||||
|
dbManager.createGang(gangName, owner.getUniqueId().toString(), owner.getName());
|
||||||
return true;
|
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.PlayerSpawn;
|
||||||
import me.nvus.nvus_prison_setup.Listeners.BlockListener;
|
import me.nvus.nvus_prison_setup.Listeners.BlockListener;
|
||||||
import me.nvus.nvus_prison_setup.Listeners.ToolSwitchListener;
|
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.Updater.UpdateChecker;
|
||||||
import me.nvus.nvus_prison_setup.Listeners.ToolDamageListener;
|
import me.nvus.nvus_prison_setup.Listeners.ToolDamageListener;
|
||||||
import me.nvus.nvus_prison_setup.TreeFarm.TreeFarmListener;
|
import me.nvus.nvus_prison_setup.TreeFarm.TreeFarmListener;
|
||||||
|
@ -75,6 +76,10 @@ public final class PrisonSetup extends JavaPlugin {
|
||||||
|
|
||||||
// Gang Related... GANG, GANG #LOLOLOLOL
|
// Gang Related... GANG, GANG #LOLOLOLOL
|
||||||
this.getCommand("gang").setExecutor(new GangCommands(dbManager)); // Now correctly using initialized dbManager
|
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
|
// Settings Menu
|
||||||
getServer().getPluginManager().registerEvents(new SettingsMenu(this, configManager), this);
|
getServer().getPluginManager().registerEvents(new SettingsMenu(this, configManager), this);
|
||||||
|
|
|
@ -10,6 +10,7 @@ depend:
|
||||||
- WorldGuard
|
- WorldGuard
|
||||||
|
|
||||||
softdepend:
|
softdepend:
|
||||||
|
- PlaceholderAPI
|
||||||
- WorldEdit
|
- WorldEdit
|
||||||
- FastAsyncWorldEdit
|
- FastAsyncWorldEdit
|
||||||
|
|
||||||
|
@ -31,7 +32,7 @@ commands:
|
||||||
description: Base command for gang-related actions.
|
description: Base command for gang-related actions.
|
||||||
usage: |
|
usage: |
|
||||||
/gang create <name/tag> - Create a gang.
|
/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 invite <player> - Invite a player to your gang.
|
||||||
/gang accept - Accept a Gang Invite.
|
/gang accept - Accept a Gang Invite.
|
||||||
/gang deny - Decline a Gang Invite.
|
/gang deny - Decline a Gang Invite.
|
||||||
|
|
Loading…
Reference in New Issue