From 22eff442880e78f25e217edefd552ac94591cebe Mon Sep 17 00:00:00 2001 From: SuperRonanCraft Date: Wed, 2 Mar 2022 23:53:25 -0500 Subject: [PATCH] Party Leave and Kick commands complete --- .../addons/partyrtp/PartyData.java | 18 ++++++++-- .../addons/partyrtp/PartyHandler.java | 15 +++++++++ .../addons/partyrtp/PartyMessages.java | 19 +++++++++-- .../addons/partyrtp/cmds/PartyCommand.java | 1 + .../partyrtp/cmds/PartyCommand_Invite.java | 33 ++++++++++++++----- .../partyrtp/cmds/PartyCommand_Kick.java | 19 ++++++++++- .../partyrtp/cmds/PartyCommand_Leave.java | 17 +++++++++- .../partyrtp/cmds/PartyCommand_ReadyUp.java | 12 +++++++ .../src/main/resources/lang/en.yml | 12 ++++--- 9 files changed, 126 insertions(+), 20 deletions(-) create mode 100644 BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/partyrtp/cmds/PartyCommand_ReadyUp.java diff --git a/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/partyrtp/PartyData.java b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/partyrtp/PartyData.java index 840b41f..ca030f6 100644 --- a/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/partyrtp/PartyData.java +++ b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/partyrtp/PartyData.java @@ -19,7 +19,8 @@ import java.util.List; public class PartyData { @Getter private final Player leader; - private final HashMap members = new HashMap<>(); + @Getter private final HashMap members = new HashMap<>(); + @Getter private final List invited = new ArrayList<>(); public PartyData(Player leader) { this.leader = leader; @@ -33,6 +34,14 @@ public class PartyData { return false; } + public boolean invite(Player p) { + if (!invited.contains(p)) { + invited.add(p); + return true; + } + return false; + } + public boolean remove(Player p) { return members.remove(p) != null; } @@ -49,9 +58,12 @@ public class PartyData { return !members.containsValue(false); } - public void readyUp(Player p) { - if (members.containsKey(p)) + public boolean readyUp(Player p) { + if (members.containsKey(p) && !members.get(p)) { members.put(p, true); + return true; + } + return false; } public void clear() { diff --git a/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/partyrtp/PartyHandler.java b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/partyrtp/PartyHandler.java index 9c37f82..b89e30c 100644 --- a/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/partyrtp/PartyHandler.java +++ b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/partyrtp/PartyHandler.java @@ -3,8 +3,11 @@ package me.SuperRonanCraft.BetterRTPAddons.addons.partyrtp; import me.SuperRonanCraft.BetterRTP.references.customEvents.RTP_SettingUpEvent; import me.SuperRonanCraft.BetterRTP.references.customEvents.RTP_TeleportEvent; import me.SuperRonanCraft.BetterRTP.references.customEvents.RTP_TeleportPostEvent; +import me.SuperRonanCraft.BetterRTP.references.systems.playerdata.PlayerData; +import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerQuitEvent; public class PartyHandler implements Listener { @@ -33,4 +36,16 @@ public class PartyHandler implements Listener { } } + @EventHandler + public void onLeave(PlayerQuitEvent e) { + PartyData party = HelperParty.getParty(e.getPlayer()); + if (party != null) { + if (party.isLeader(e.getPlayer())) { + AddonParty.getInstance().parties.remove(party); + for (Player member : party.getMembers().keySet()) + AddonParty.getInstance().msgs.getMembers_LeaderLeft(member); + } + } + } + } diff --git a/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/partyrtp/PartyMessages.java b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/partyrtp/PartyMessages.java index 9f093b1..45b84fe 100644 --- a/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/partyrtp/PartyMessages.java +++ b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/partyrtp/PartyMessages.java @@ -25,8 +25,16 @@ public class PartyMessages implements AddonsMessages { } //Invite - public void getInvite(CommandSender sendi, String name) { - sms(sendi, getLang().getString(preM + "Invite").replace("%name%", name)); + public void getInvite_Invited(CommandSender sendi, String name) { + sms(sendi, getLang().getString(preM + "Invite.Invited").replace("%name%", name)); + } + + public void getInvite_Notification(CommandSender sendi, String name) { + sms(sendi, getLang().getString(preM + "Invite.Notification").replace("%name%", name)); + } + + public void getInvite_Already(CommandSender sendi, String name) { + sms(sendi, getLang().getString(preM + "Invite.Already").replace("%name%", name)); } //Usages @@ -60,6 +68,13 @@ public class PartyMessages implements AddonsMessages { sms(sendi, getLang().getString(preM + "Members.Ready")); } + public void getMembers_LeaderLeft(CommandSender sendi) { + sms(sendi, getLang().getString(preM + "Members.LeaderLeft")); + } + + public void getMembers_Leave(CommandSender sendi, String leader) { + sms(sendi, getLang().getString(preM + "Members.Leave").replace("%name%", leader)); + } //Kick public void getKick_Kicked(CommandSender sendi, String kicked) { diff --git a/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/partyrtp/cmds/PartyCommand.java b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/partyrtp/cmds/PartyCommand.java index 36980fb..4c0cbf4 100644 --- a/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/partyrtp/cmds/PartyCommand.java +++ b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/partyrtp/cmds/PartyCommand.java @@ -69,6 +69,7 @@ public class PartyCommand implements RTPCommand, RTPCommandHelpable { INVITE(new PartyCommand_Invite()), KICK(new PartyCommand_Kick()), LEAVE(new PartyCommand_Leave()), + READYUP(new PartyCommand_ReadyUp()), ; PartyCommands cmd; diff --git a/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/partyrtp/cmds/PartyCommand_Invite.java b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/partyrtp/cmds/PartyCommand_Invite.java index af164d0..b97fe91 100644 --- a/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/partyrtp/cmds/PartyCommand_Invite.java +++ b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/partyrtp/cmds/PartyCommand_Invite.java @@ -16,11 +16,26 @@ public class PartyCommand_Invite implements PartyCommands, PartyCommandsTabable @Override public void execute(CommandSender sendi, String label, String[] args, AddonParty addon) { Player p = (Player) sendi; - PartyData party = null; - if (HelperParty.isInParty(p)) - party = HelperParty.getParty(p); - else - party = new PartyData(p); + if (args.length >= 3) { + Player member = Bukkit.getPlayer(args[2]); + if (member != null && !member.equals(p)) { + PartyData party = HelperParty.getParty(p); + if (party == null) { + party = new PartyData(p); + AddonParty.getInstance().parties.add(party); + } + if (party.isLeader(p)) { + if (party.invite(member)) { + AddonParty.getInstance().msgs.getInvite_Invited(sendi, member.getName()); + AddonParty.getInstance().msgs.getInvite_Notification(member, p.getName()); + } else + AddonParty.getInstance().msgs.getInvite_Already(member, p.getName()); + } else + AddonParty.getInstance().msgs.getOnlyLeader(sendi, party.getLeader().getName()); + } else + AddonParty.getInstance().msgs.getNotExist(sendi, args[2]); + } else + AddonParty.getInstance().msgs.usageInvite(sendi, label); } @@ -28,10 +43,10 @@ public class PartyCommand_Invite implements PartyCommands, PartyCommandsTabable @Override public List tabComplete(CommandSender sendi, String[] args, AddonParty addon) { List list = new ArrayList<>(); - if (args.length == 4) { - for (World world : Bukkit.getWorlds()) - if (world.getName().toLowerCase().startsWith(args[3].toLowerCase())) - list.add(world.getName()); + if (args.length == 3) { + for (Player p : Bukkit.getOnlinePlayers()) + if (p.getName().toLowerCase().startsWith(args[2].toLowerCase()) && !p.equals(sendi)) + list.add(p.getName()); } return list; } diff --git a/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/partyrtp/cmds/PartyCommand_Kick.java b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/partyrtp/cmds/PartyCommand_Kick.java index 5820f27..c998357 100644 --- a/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/partyrtp/cmds/PartyCommand_Kick.java +++ b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/partyrtp/cmds/PartyCommand_Kick.java @@ -8,7 +8,10 @@ import org.bukkit.Bukkit; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -public class PartyCommand_Kick implements PartyCommands { +import java.util.ArrayList; +import java.util.List; + +public class PartyCommand_Kick implements PartyCommands, PartyCommandsTabable { @Override public void execute(CommandSender sendi, String label, String[] args, AddonParty addon) { @@ -21,7 +24,9 @@ public class PartyCommand_Kick implements PartyCommands { Player member = Bukkit.getPlayer(args[2]); if (member != null) { if (party.isMember(member)) { + party.remove(member); msgs.getKick_Kicked(sendi, member.getName()); + msgs.getKick_Notification(member, sendi.getName()); } else msgs.getMembers_NotInParty(sendi, member.getName()); } else @@ -33,4 +38,16 @@ public class PartyCommand_Kick implements PartyCommands { } else msgs.getNotInParty(sendi); } + + @Override public List tabComplete(CommandSender sendi, String[] args, AddonParty addon) { + List list = new ArrayList<>(); + if (args.length == 3) { + PartyData party = HelperParty.getParty((Player) sendi); + if (party != null) + for (Player p : party.getMembers().keySet()) + if (p.getName().toLowerCase().startsWith(args[2].toLowerCase()) && !p.equals(sendi)) + list.add(p.getName()); + } + return list; + } } diff --git a/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/partyrtp/cmds/PartyCommand_Leave.java b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/partyrtp/cmds/PartyCommand_Leave.java index 60350b1..c5ec17a 100644 --- a/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/partyrtp/cmds/PartyCommand_Leave.java +++ b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/partyrtp/cmds/PartyCommand_Leave.java @@ -1,12 +1,27 @@ package me.SuperRonanCraft.BetterRTPAddons.addons.partyrtp.cmds; import me.SuperRonanCraft.BetterRTPAddons.addons.partyrtp.AddonParty; +import me.SuperRonanCraft.BetterRTPAddons.addons.partyrtp.HelperParty; +import me.SuperRonanCraft.BetterRTPAddons.addons.partyrtp.PartyData; import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; public class PartyCommand_Leave implements PartyCommands { @Override public void execute(CommandSender sendi, String label, String[] args, AddonParty addon) { - + Player p = (Player) sendi; + PartyData party = HelperParty.getParty(p); + if (party != null) { + if (party.isLeader(p)) { + AddonParty.getInstance().parties.remove(party); + for (Player member : party.getMembers().keySet()) + AddonParty.getInstance().msgs.getMembers_LeaderLeft(member); + } else { + party.remove(p); + AddonParty.getInstance().msgs.getMembers_Leave(sendi, party.getLeader().getName()); + } + } else + AddonParty.getInstance().msgs.getNotInParty(p); } } diff --git a/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/partyrtp/cmds/PartyCommand_ReadyUp.java b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/partyrtp/cmds/PartyCommand_ReadyUp.java new file mode 100644 index 0000000..910772e --- /dev/null +++ b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/partyrtp/cmds/PartyCommand_ReadyUp.java @@ -0,0 +1,12 @@ +package me.SuperRonanCraft.BetterRTPAddons.addons.partyrtp.cmds; + +import me.SuperRonanCraft.BetterRTPAddons.addons.partyrtp.AddonParty; +import org.bukkit.command.CommandSender; + +public class PartyCommand_ReadyUp implements PartyCommands { + + @Override + public void execute(CommandSender sendi, String label, String[] args, AddonParty addon) { + + } +} diff --git a/BetterRTPAddons/src/main/resources/lang/en.yml b/BetterRTPAddons/src/main/resources/lang/en.yml index f9266b7..cfd3552 100644 --- a/BetterRTPAddons/src/main/resources/lang/en.yml +++ b/BetterRTPAddons/src/main/resources/lang/en.yml @@ -29,8 +29,6 @@ MagicStick: Player: '&cWhoops! &7Seems like their is no player by the name of &a%player% &7online!' Party: NotInParty: '&cYou can''t do this! You are not in a party...' - Invite: '&f%player_name% has been invited to an rtp party!' - Invited: '&f%player_name% has invited you to join their rtp party!' OnlyLeader: '&cOnly the leader &f%name% &ccan make an RTP request!' Teleport: '&fYou''ve been rtp''d because of your party!' NotExist: '&eThe player &f%name% &eis either offline or doesn''t exist!' @@ -38,10 +36,16 @@ Party: Ready: '&eYou have readied up for the next party rtp!' NotReady: '&cNot all members are ready! &7%members%' NotInParty: '&eThe player &f%name% &eis not in the party!' + LeaderLeft: '&cParty leader quit! &fParty no longer exists' + Leave: '&7You have left %name%''s rtp party!' Kick: Kicked: '&fPlayer &e%name% &fhas been kicked!' - Notification: '&cYou''ve been kicked from an RTP party!' - LeaderQuit: '&cRTP Party leader has quit the game, party destroyed!' + Notification: '&cYou''ve been kicked from the RTP party by %name%!' + LeaderQuit: '&cParty leader has destroyed the party!' + Invite: + Already: '&e%name% is already been invited!' + Invited: '&f%name% has been invited to your rtp party!' + Notification: '&f%player_name% has invited you to join their rtp party!' Usage: Base: '&cUsage: &7/%command% party ' Accept: '&cUsage: &7/%command% portals accept '