From aa18ff52784a146ca7ee6da252cc7b6bdfb8befd Mon Sep 17 00:00:00 2001 From: MrJeremyFisher <63616270+MrJeremyFisher@users.noreply.github.com> Date: Wed, 10 May 2023 22:59:09 -0400 Subject: [PATCH 1/2] Allow listing of invited players on a group and their ranks. Functions the same as `/nllm`. --- .../mc/namelayer/command/CommandHandler.java | 1 + .../command/commands/ListInvites.java | 86 +++++++++++++++++++ .../vg/civcraft/mc/namelayer/group/Group.java | 54 +++++++++--- 3 files changed, 131 insertions(+), 10 deletions(-) create mode 100644 paper/src/main/java/vg/civcraft/mc/namelayer/command/commands/ListInvites.java diff --git a/paper/src/main/java/vg/civcraft/mc/namelayer/command/CommandHandler.java b/paper/src/main/java/vg/civcraft/mc/namelayer/command/CommandHandler.java index 3ca900be..973082fa 100644 --- a/paper/src/main/java/vg/civcraft/mc/namelayer/command/CommandHandler.java +++ b/paper/src/main/java/vg/civcraft/mc/namelayer/command/CommandHandler.java @@ -33,6 +33,7 @@ public void registerCommands(){ registerCommand(new JoinGroup()); registerCommand(new ListGroups()); registerCommand(new ListMembers()); + registerCommand(new ListInvites()); registerCommand(new ListPermissions()); //addCommands(new MergeGroups("MergeGroups")); Disabled as it's currently semi broken registerCommand(new ModifyPermissions()); diff --git a/paper/src/main/java/vg/civcraft/mc/namelayer/command/commands/ListInvites.java b/paper/src/main/java/vg/civcraft/mc/namelayer/command/commands/ListInvites.java new file mode 100644 index 00000000..089011a3 --- /dev/null +++ b/paper/src/main/java/vg/civcraft/mc/namelayer/command/commands/ListInvites.java @@ -0,0 +1,86 @@ +package vg.civcraft.mc.namelayer.command.commands; + +import co.aikar.commands.annotation.CommandAlias; +import co.aikar.commands.annotation.CommandCompletion; +import co.aikar.commands.annotation.Description; +import co.aikar.commands.annotation.Optional; +import co.aikar.commands.annotation.Syntax; +import com.google.common.collect.Lists; +import java.util.List; +import java.util.UUID; +import org.bukkit.ChatColor; +import org.bukkit.entity.Player; +import vg.civcraft.mc.namelayer.GroupManager; +import vg.civcraft.mc.namelayer.GroupManager.PlayerType; +import vg.civcraft.mc.namelayer.NameAPI; +import vg.civcraft.mc.namelayer.command.BaseCommandMiddle; +import vg.civcraft.mc.namelayer.group.Group; +import vg.civcraft.mc.namelayer.permission.PermissionType; + +public class ListInvites extends BaseCommandMiddle { + + @CommandAlias("nllim|listinvites|listinvitedmembers") + @Syntax(" [rank (e.g: MEMBERS)]") + @Description("List the invitees of a group") + @CommandCompletion("@NL_Groups @NL_Ranks") + public void execute(Player sender, String groupName, @Optional String playerType, @Optional String playerName) { + UUID uuid = NameAPI.getUUID(sender.getName()); + + Group group = GroupManager.getGroup(groupName); + if (groupIsNull(sender, groupName, group)) { + return; + } + + if (!sender.hasPermission("namelayer.admin")) { + if (!group.isMember(uuid)) { + sender.sendMessage(ChatColor.RED + "You're not on this group."); + return; + } + + if (!gm.hasAccess(group, uuid, PermissionType.getPermission("GROUPSTATS"))) { + sender.sendMessage(ChatColor.RED + + "You don't have permission to run that command."); + return; + } + } + + List uuids = null; + if (playerType != null && playerName != null) { + + List invitees = group.getAllInvites(); + uuids = Lists.newArrayList(); + + for (UUID invitee : invitees) { + String name = NameAPI.getCurrentName(invitee); + if (name.compareToIgnoreCase(playerType) >=0 + && name.compareToIgnoreCase(playerName) <= 0) { + uuids.add(invitee); + } + } + } else if (playerType != null) { + PlayerType filterType = PlayerType.getPlayerType(playerType); + + if (filterType == null) { + // user entered invalid type, show them + PlayerType.displayPlayerTypes(sender); + return; + } + + uuids = group.getAllInvites(filterType); + } else { + uuids = group.getAllInvites(); + } + + StringBuilder sb = new StringBuilder(); + sb.append(ChatColor.GREEN); + sb.append("Invites are as follows:\n"); + for (UUID uu: uuids){ + sb.append(NameAPI.getCurrentName(uu)); + sb.append(" ("); + sb.append(group.getPlayerInviteType(uu)); + sb.append(")\n"); + } + + sender.sendMessage(sb.toString()); + } +} diff --git a/paper/src/main/java/vg/civcraft/mc/namelayer/group/Group.java b/paper/src/main/java/vg/civcraft/mc/namelayer/group/Group.java index 403357c3..1005f8f8 100644 --- a/paper/src/main/java/vg/civcraft/mc/namelayer/group/Group.java +++ b/paper/src/main/java/vg/civcraft/mc/namelayer/group/Group.java @@ -3,12 +3,8 @@ import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.google.common.collect.Sets; -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.UUID; + +import java.util.*; import java.util.logging.Level; import vg.civcraft.mc.namelayer.GroupManager; import vg.civcraft.mc.namelayer.GroupManager.PlayerType; @@ -98,14 +94,37 @@ public void prepareForDeletion() { public List getAllMembers() { return Lists.newArrayList(players.keySet()); } - + /** + * Returns all the uuids of the invitees in this group. + * @return Returns all the uuids. + */ + public List getAllInvites() { + return Lists.newArrayList(invites.keySet()); + } + + /** + * Returns all the UUIDS of a group's PlayerType. + * @param type- The PlayerType of a group that you want the UUIDs of. + * @return Returns all the UUIDS of the specific PlayerType. + */ + public List getAllInvites(PlayerType type) { + List uuids = Lists.newArrayList(); + for (Map.Entry entry : invites.entrySet()) { + if (entry.getValue() == type) { + uuids.add(entry.getKey()); + } + } + return uuids; + } + + /** * Returns all the UUIDS of a group's PlayerType. * @param type- The PlayerType of a group that you want the UUIDs of. * @return Returns all the UUIDS of the specific PlayerType. */ public List getAllMembers(PlayerType type) { - List uuids = Lists.newArrayList();; + List uuids = Lists.newArrayList(); for (Map.Entry entry : players.entrySet()) { if (entry.getValue() == type) { uuids.add(entry.getKey()); @@ -253,7 +272,7 @@ public PlayerType getInvite(UUID uuid) { } return invites.get(uuid); } - + /** * Removes the invite of a Player * @param uuid - The UUID of the player. @@ -307,7 +326,7 @@ public boolean isCurrentMember(UUID uuid, PlayerType rank) { /** * @param uuid- The UUID of the player. - * @return Returns the PlayerType of a UUID. + * @return Returns the PlayerType of a member UUID. */ public PlayerType getPlayerType(UUID uuid) { PlayerType member = players.get(uuid); @@ -319,6 +338,21 @@ public PlayerType getPlayerType(UUID uuid) { } return PlayerType.NOT_BLACKLISTED; } + + /** + * @param uuid- The UUID of the player. + * @return Returns the PlayerType of an invited UUID. + */ + public PlayerType getPlayerInviteType(UUID uuid) { + PlayerType member = invites.get(uuid); + if (member != null) { + return member; + } + if (NameLayerPlugin.getBlackList().isBlacklisted(this, uuid)) { + return null; + } + return PlayerType.NOT_BLACKLISTED; + } public PlayerType getCurrentRank(UUID uuid) { return players.get(uuid); From 09bbca55c8ea3dd546f29ebd70088c8194b718b4 Mon Sep 17 00:00:00 2001 From: MrJeremyFisher <63616270+MrJeremyFisher@users.noreply.github.com> Date: Wed, 10 May 2023 22:59:09 -0400 Subject: [PATCH 2/2] Allow listing of invited players on a group and their ranks. Functions the same as `/nllm`. --- .../mc/namelayer/command/CommandHandler.java | 1 + .../command/commands/ListInvites.java | 83 +++++++++++++++++++ .../vg/civcraft/mc/namelayer/group/Group.java | 53 +++++++++--- 3 files changed, 127 insertions(+), 10 deletions(-) create mode 100644 paper/src/main/java/vg/civcraft/mc/namelayer/command/commands/ListInvites.java diff --git a/paper/src/main/java/vg/civcraft/mc/namelayer/command/CommandHandler.java b/paper/src/main/java/vg/civcraft/mc/namelayer/command/CommandHandler.java index 3ca900be..973082fa 100644 --- a/paper/src/main/java/vg/civcraft/mc/namelayer/command/CommandHandler.java +++ b/paper/src/main/java/vg/civcraft/mc/namelayer/command/CommandHandler.java @@ -33,6 +33,7 @@ public void registerCommands(){ registerCommand(new JoinGroup()); registerCommand(new ListGroups()); registerCommand(new ListMembers()); + registerCommand(new ListInvites()); registerCommand(new ListPermissions()); //addCommands(new MergeGroups("MergeGroups")); Disabled as it's currently semi broken registerCommand(new ModifyPermissions()); diff --git a/paper/src/main/java/vg/civcraft/mc/namelayer/command/commands/ListInvites.java b/paper/src/main/java/vg/civcraft/mc/namelayer/command/commands/ListInvites.java new file mode 100644 index 00000000..5a164259 --- /dev/null +++ b/paper/src/main/java/vg/civcraft/mc/namelayer/command/commands/ListInvites.java @@ -0,0 +1,83 @@ +package vg.civcraft.mc.namelayer.command.commands; + +import co.aikar.commands.annotation.CommandAlias; +import co.aikar.commands.annotation.CommandCompletion; +import co.aikar.commands.annotation.Description; +import co.aikar.commands.annotation.Optional; +import co.aikar.commands.annotation.Syntax; +import com.google.common.collect.Lists; +import java.util.List; +import java.util.UUID; +import org.bukkit.ChatColor; +import org.bukkit.entity.Player; +import vg.civcraft.mc.namelayer.GroupManager; +import vg.civcraft.mc.namelayer.GroupManager.PlayerType; +import vg.civcraft.mc.namelayer.NameAPI; +import vg.civcraft.mc.namelayer.command.BaseCommandMiddle; +import vg.civcraft.mc.namelayer.group.Group; +import vg.civcraft.mc.namelayer.permission.PermissionType; + +public class ListInvites extends BaseCommandMiddle { + + @CommandAlias("nllim|listinvites|listinvitedmembers") + @Syntax(" [rank (e.g: MEMBERS)]") + @Description("List the invitees of a group") + @CommandCompletion("@NL_Groups @NL_Ranks") + public void execute(Player sender, String groupName, @Optional String playerType, @Optional String playerName) { + UUID uuid = NameAPI.getUUID(sender.getName()); + + Group group = GroupManager.getGroup(groupName); + if (groupIsNull(sender, groupName, group)) { + return; + } + + if (!sender.hasPermission("namelayer.admin")) { + if (!group.isMember(uuid)) { + sender.sendMessage(ChatColor.RED + "You're not on this group."); + return; + } + + if (!gm.hasAccess(group, uuid, PermissionType.getPermission("GROUPSTATS"))) { + sender.sendMessage(ChatColor.RED + "You don't have permission to run that command."); + return; + } + } + + List uuids = null; + if (playerType != null && playerName != null) { + List invitees = group.getAllInvites(); + uuids = Lists.newArrayList(); + + for (UUID invitee : invitees) { + String name = NameAPI.getCurrentName(invitee); + if (name.compareToIgnoreCase(playerType) >=0 + && name.compareToIgnoreCase(playerName) <= 0) { + uuids.add(invitee); + } + } + } else if (playerType != null) { + PlayerType filterType = PlayerType.getPlayerType(playerType); + if (filterType == null) { + // user entered invalid type, show them + PlayerType.displayPlayerTypes(sender); + return; + } + + uuids = group.getAllInvites(filterType); + } else { + uuids = group.getAllInvites(); + } + + StringBuilder sb = new StringBuilder(); + sb.append(ChatColor.GREEN); + sb.append("Invites are as follows:\n"); + for (UUID uu: uuids){ + sb.append(NameAPI.getCurrentName(uu)); + sb.append(" ("); + sb.append(group.getPlayerInviteType(uu)); + sb.append(")\n"); + } + + sender.sendMessage(sb.toString()); + } +} diff --git a/paper/src/main/java/vg/civcraft/mc/namelayer/group/Group.java b/paper/src/main/java/vg/civcraft/mc/namelayer/group/Group.java index 403357c3..bec81c84 100644 --- a/paper/src/main/java/vg/civcraft/mc/namelayer/group/Group.java +++ b/paper/src/main/java/vg/civcraft/mc/namelayer/group/Group.java @@ -3,12 +3,8 @@ import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.google.common.collect.Sets; -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.UUID; + +import java.util.*; import java.util.logging.Level; import vg.civcraft.mc.namelayer.GroupManager; import vg.civcraft.mc.namelayer.GroupManager.PlayerType; @@ -98,14 +94,36 @@ public void prepareForDeletion() { public List getAllMembers() { return Lists.newArrayList(players.keySet()); } - + /** + * Returns all the uuids of the invitees in this group. + * @return Returns all the uuids. + */ + public List getAllInvites() { + return Lists.newArrayList(invites.keySet()); + } + + /** + * Returns all the UUIDS of a group's PlayerType. + * @param type- The PlayerType of a group that you want the UUIDs of. + * @return Returns all the UUIDS of the specific PlayerType. + */ + public List getAllInvites(PlayerType type) { + List uuids = Lists.newArrayList(); + for (Map.Entry entry : invites.entrySet()) { + if (entry.getValue() == type) { + uuids.add(entry.getKey()); + } + } + return uuids; + } + /** * Returns all the UUIDS of a group's PlayerType. * @param type- The PlayerType of a group that you want the UUIDs of. * @return Returns all the UUIDS of the specific PlayerType. */ public List getAllMembers(PlayerType type) { - List uuids = Lists.newArrayList();; + List uuids = Lists.newArrayList(); for (Map.Entry entry : players.entrySet()) { if (entry.getValue() == type) { uuids.add(entry.getKey()); @@ -253,7 +271,7 @@ public PlayerType getInvite(UUID uuid) { } return invites.get(uuid); } - + /** * Removes the invite of a Player * @param uuid - The UUID of the player. @@ -307,7 +325,7 @@ public boolean isCurrentMember(UUID uuid, PlayerType rank) { /** * @param uuid- The UUID of the player. - * @return Returns the PlayerType of a UUID. + * @return Returns the PlayerType of a member UUID. */ public PlayerType getPlayerType(UUID uuid) { PlayerType member = players.get(uuid); @@ -319,6 +337,21 @@ public PlayerType getPlayerType(UUID uuid) { } return PlayerType.NOT_BLACKLISTED; } + + /** + * @param uuid- The UUID of the player. + * @return Returns the PlayerType of an invited UUID. + */ + public PlayerType getPlayerInviteType(UUID uuid) { + PlayerType member = invites.get(uuid); + if (member != null) { + return member; + } + if (NameLayerPlugin.getBlackList().isBlacklisted(this, uuid)) { + return null; + } + return PlayerType.NOT_BLACKLISTED; + } public PlayerType getCurrentRank(UUID uuid) { return players.get(uuid);