From 0c8a4a97d3276a596dde116c8a74681bc954c8f7 Mon Sep 17 00:00:00 2001 From: Teriuihi Date: Mon, 31 Jan 2022 03:06:52 +0100 Subject: [PATCH] Added party disband command and a way to remove all users from a party --- .../java/com/alttd/chat/config/Config.java | 6 ++ .../java/com/alttd/chat/database/Queries.java | 18 +++++ .../java/com/alttd/chat/objects/Party.java | 3 + .../velocitychat/commands/PartyCommand.java | 1 + .../commands/partysubcommands/Disband.java | 68 +++++++++++++++++++ 5 files changed, 96 insertions(+) create mode 100644 velocity/src/main/java/com/alttd/velocitychat/commands/partysubcommands/Disband.java 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; + } +}