diff --git a/api/src/main/java/com/alttd/chat/config/Config.java b/api/src/main/java/com/alttd/chat/config/Config.java
index 5247b7f..63ee206 100755
--- a/api/src/main/java/com/alttd/chat/config/Config.java
+++ b/api/src/main/java/com/alttd/chat/config/Config.java
@@ -275,6 +275,9 @@ public final class Config {
public static String PARTY_MEMBER_LOGGED_OFF = "[ChatParty] left Altitude...";
public static String RENAMED_PARTY = "[ChatParty] changed the party name from to !";
public static String CHANGED_PASSWORD = "Password was set to ";
+ public static String DISBAND_PARTY_CONFIRM = "Are you sure you want to disband your party? " +
+ "Type /party disband confirm to confirm.";
+ public static String DISBANDED_PARTY = "[ChatParty] has disbanded , everyone has been removed.";
public static String PARTY_INFO = """
Chat party info:
Name:
@@ -306,6 +309,8 @@ public final class Config {
PARTY_MEMBER_LOGGED_OFF = getString("party.messages.party-member-logged-off", PARTY_MEMBER_LOGGED_OFF);
RENAMED_PARTY = getString("party.messages.renamed-party", RENAMED_PARTY);
CHANGED_PASSWORD = getString("party.messages.changed-password", CHANGED_PASSWORD);
+ DISBAND_PARTY_CONFIRM = getString("party.messages.disband-party-confirm", DISBAND_PARTY_CONFIRM);
+ DISBANDED_PARTY = getString("party.messages.disbanded-party", DISBANDED_PARTY);
PARTY_INFO = getString("party.messages.party-info", PARTY_INFO);
}
@@ -320,6 +325,7 @@ public final class Config {
public static String PARTY_HELP_OWNER = "Change the owner of your party: /party owner ";
public static String PARTY_HELP_PASSWORD = "Change the password of your party: /party password ";
public static String PARTY_HELP_REMOVE = "Remove a member from your party: /party remove ";
+ public static String PARTY_HELP_DISBAND = "Remove everyone from your party and disband it: /party disband";
public static String PARTY_HELP_CHAT = "Talk in party chat: /p ";
private static void partyHelp() {
PARTY_HELP_WRAPPER = getString("party.help.wrapper", PARTY_HELP_WRAPPER);
diff --git a/api/src/main/java/com/alttd/chat/database/Queries.java b/api/src/main/java/com/alttd/chat/database/Queries.java
index 75d39ac..9cae57b 100755
--- a/api/src/main/java/com/alttd/chat/database/Queries.java
+++ b/api/src/main/java/com/alttd/chat/database/Queries.java
@@ -316,6 +316,24 @@ public class Queries {
}
}
+ public static void removeAllPartyUsers(ArrayList partyUsers) {
+ String query = "UPDATE chat_users SET party_id = -1 WHERE uuid = ?";
+
+ try {
+ Connection connection = DatabaseConnection.getConnection();
+ PreparedStatement statement = connection.prepareStatement(query);
+
+ for (PartyUser partyUser : partyUsers) {
+ statement.setString(1, partyUser.getUuid().toString());
+ statement.addBatch();
+ }
+
+ statement.executeBatch();
+ } catch (SQLException e) {
+ e.printStackTrace();
+ }
+ }
+
public static void removePartyUser(UUID uuid) {
String query = "UPDATE chat_users SET party_id = -1 WHERE uuid = ?";
diff --git a/api/src/main/java/com/alttd/chat/objects/Party.java b/api/src/main/java/com/alttd/chat/objects/Party.java
index 01b4ac3..076be33 100755
--- a/api/src/main/java/com/alttd/chat/objects/Party.java
+++ b/api/src/main/java/com/alttd/chat/objects/Party.java
@@ -98,6 +98,9 @@ public class Party {
}
public void delete() {
+ if (partyUsers.size() != 0) {
+ Queries.removeAllPartyUsers(partyUsers);
+ }
Queries.removeParty(partyId);
PartyManager.removeParty(this);
}
diff --git a/velocity/src/main/java/com/alttd/velocitychat/commands/PartyCommand.java b/velocity/src/main/java/com/alttd/velocitychat/commands/PartyCommand.java
index 531f097..ddf858a 100644
--- a/velocity/src/main/java/com/alttd/velocitychat/commands/PartyCommand.java
+++ b/velocity/src/main/java/com/alttd/velocitychat/commands/PartyCommand.java
@@ -21,6 +21,7 @@ public class PartyCommand implements SimpleCommand {
subCommands = Arrays.asList(
new Help(this),
new Create(),
+ new Disband(),
new Info(),
new Invite(),
new Join(),
diff --git a/velocity/src/main/java/com/alttd/velocitychat/commands/partysubcommands/Disband.java b/velocity/src/main/java/com/alttd/velocitychat/commands/partysubcommands/Disband.java
new file mode 100644
index 0000000..9ebefca
--- /dev/null
+++ b/velocity/src/main/java/com/alttd/velocitychat/commands/partysubcommands/Disband.java
@@ -0,0 +1,68 @@
+package com.alttd.velocitychat.commands.partysubcommands;
+
+import com.alttd.chat.config.Config;
+import com.alttd.chat.managers.PartyManager;
+import com.alttd.chat.objects.Party;
+import com.alttd.chat.util.Utility;
+import com.alttd.velocitychat.VelocityChat;
+import com.alttd.velocitychat.commands.SubCommand;
+import com.velocitypowered.api.command.CommandSource;
+import com.velocitypowered.api.proxy.Player;
+import net.kyori.adventure.text.minimessage.Template;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class Disband implements SubCommand {
+ @Override
+ public String getName() {
+ return "disband";
+ }
+
+ @Override
+ public void execute(String[] args, CommandSource source) {
+ if (!(source instanceof Player player)) {
+ source.sendMessage(Utility.parseMiniMessage(Config.NO_CONSOLE));
+ return;
+ }
+ if (args.length != 1 && args.length != 3) {
+ source.sendMessage(Utility.parseMiniMessage(getHelpMessage()));
+ return;
+ }
+ Party party = PartyManager.getParty(player.getUniqueId());
+ if (party == null) {
+ source.sendMessage(Utility.parseMiniMessage(Config.NOT_IN_A_PARTY));
+ return;
+ }
+ if (!party.getOwnerUuid().equals(player.getUniqueId())) {
+ source.sendMessage(Utility.parseMiniMessage(Config.NOT_YOUR_PARTY));
+ return;
+ }
+ if (args.length == 1) {
+ source.sendMessage(Utility.parseMiniMessage(Config.DISBAND_PARTY_CONFIRM, List.of(
+ Template.template("party", party.getPartyName())
+ )));
+ return;
+ }
+ if (!args[1].equalsIgnoreCase("confirm") || !args[2].equals(party.getPartyName())) {
+ source.sendMessage(Utility.parseMiniMessage(getHelpMessage()));
+ return;
+ }
+ VelocityChat.getPlugin().getChatHandler().sendPartyMessage(party,
+ Utility.parseMiniMessage(Config.DISBANDED_PARTY, List.of(
+ Template.template("owner", player.getUsername()),
+ Template.template("party", party.getPartyName())
+ )), null);
+ party.delete();
+ }
+
+ @Override
+ public List suggest(String[] args, CommandSource source) {
+ return new ArrayList<>();
+ }
+
+ @Override
+ public String getHelpMessage() {
+ return Config.PARTY_HELP_DISBAND;
+ }
+}