diff --git a/src/com/redstoner/modules/list/List.cmd b/src/com/redstoner/modules/list/List.cmd new file mode 100644 index 0000000..f4caf02 --- /dev/null +++ b/src/com/redstoner/modules/list/List.cmd @@ -0,0 +1,38 @@ +command list { + alias ls; + alias elist; + alias online; + alias eonline; + alias playerlist; + alias eplayerlist; + alias plist; + alias eplist; + alias who; + alias ewho; + [empty] { + run list; + help Shows all online players sorted by rank.; + } + [string:rank...] { + run list_rank rank; + help Shows all online players of the specified rank(s); + } +} +command staff { + [empty] { + help Shows all online staff.; + run staff; + } +} +command console_join { + [string:name] { + run console_join name; + type console; + } +} +command console_leave { + [string:name] { + run console_leave name; + type console; + } +} diff --git a/src/com/redstoner/modules/list/List.java b/src/com/redstoner/modules/list/List.java new file mode 100644 index 0000000..e143b5e --- /dev/null +++ b/src/com/redstoner/modules/list/List.java @@ -0,0 +1,177 @@ +package com.redstoner.modules.list; + +import java.util.HashMap; +import java.util.Map.Entry; + +import org.bukkit.Bukkit; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.nemez.cmdmgr.Command; +import com.nemez.cmdmgr.CommandManager; +import com.redstoner.annotations.Version; +import com.redstoner.misc.Main; +import com.redstoner.misc.Utils; +import com.redstoner.modules.Module; + +@Version(major = 3, minor = 0, revision = 0, compatible = 3) +public class List implements Module +{ + private HashMap onConsole; + + @Override + public void postEnable() + { + onConsole = new HashMap(); + CommandManager.registerCommand(getClass().getResourceAsStream("List.cmd"), this, Main.plugin); + } + + @Command(hook = "console_join") + public boolean console_join(CommandSender sender, String name) + { + if (onConsole.containsKey(name)) + onConsole.put(name, onConsole.get(name) + 1); + else + onConsole.put(name, 1); + return true; + } + + @Command(hook = "console_leave") + public boolean console_leave(CommandSender sender, String name) + { + if (onConsole.containsKey(name)) + onConsole.put(name, onConsole.get(name) - 1); + return true; + } + + @Command(hook = "staff") + public boolean staff(CommandSender sender) + { + return listRank(sender, "staff"); + } + + @Command(hook = "list") + public boolean list(CommandSender sender) + { + return (listRank(sender, "all")); + } + + @Command(hook = "list_rank") + public boolean listRank(CommandSender sender, String rank) + { + Utils.sendModuleHeader(sender); + + int onlinePlayers = Bukkit.getOnlinePlayers().size(); + Utils.sendMessage(sender, "", "&7There are &e" + onlinePlayers + "&7 out of maximum &e" + Bukkit.getMaxPlayers() + + "&7 players online.", '&'); + + rank = rank.toLowerCase(); + boolean all = rank.equals("all"); + + if (onlinePlayers == 0 && !rank.contains("console") && !all) + return true; + + rank = rank.replace("staff", "mit mod admin lead"); + + boolean shownAnything = false; + + if (rank.contains("visitor") || all) + shownAnything |= show(sender, "&7Visitors", getPlayers(sender, "group.visitor", "group.member"), all); + if (rank.contains("member") || all) + shownAnything |= show(sender, "&fMembers", getPlayers(sender, "group.member", "group.builder"), all); + if (rank.contains("builder") || all) + shownAnything |= show(sender, "&aBuilders", getPlayers(sender, "group.builder", "group.trusted"), all); + if (rank.contains("trusted") || all) + shownAnything |= show(sender, "&3Trusteds", getPlayers(sender, "group.trusted", "group.trainingmod"), all); + if (rank.contains("trainingmod") || rank.contains("mit") || all) + shownAnything |= show(sender, "&cTrainingmod &e•", getPlayers(sender, "group.trainingmod", "group.mod"), + all); + if (rank.contains("mod") || all) + shownAnything |= show(sender, "&cModerators", getPlayers(sender, "group.mod", "group.admin"), all); + if (rank.contains("admin") || all) + shownAnything |= show(sender, "&4Admins", getPlayers(sender, "group.admin", null), all); + if (rank.contains("lead") || all) + shownAnything |= show(sender, "&4Leads •", getPlayers(sender, "group.lead", null), all); + if (rank.contains("console") || all) + { + if (sender.hasPermission("utils.list.console")) + { + StringBuilder sb = new StringBuilder(); + for (Entry entry : onConsole.entrySet()) + { + if (entry.getValue() > 0) + { + sb.append(entry.getKey()); + sb.append(", "); + } + } + String players = sb.toString().replaceAll(", $", ""); + shownAnything |= show(sender, "&9Console", players); + } + else + { + if (!all) + { + Utils.sendErrorMessage(sender, null, "You do not have permissions to see who's on console!"); + shownAnything = true; + } + } + } + if (!shownAnything) + { + Utils.sendErrorMessage(sender, "", + "Looks like I couldn't figure out what you meant. Try again with different parameters maybe?", '&'); + Utils.sendMessage(sender, "", + "Possible parameters are: &eAll&7, &eStaff&7, &eVisitor&7, &Member&7, &eBuilder&7, &eTrusted&7, &eMit&7, &eMod&7, &eAdmin&7 and &eLead", + '&'); + Utils.sendMessage(sender, "", "You can also combine any of the parameters, like this: &eMember, Staff", + '&'); + } + return true; + } + + public boolean show(CommandSender sender, String rank, String players) + { + return show(sender, rank, players, false); + } + + public boolean show(CommandSender sender, String rank, String players, boolean all) + { + if (players.length() == 0) + { + if (!all) + { + players = "None"; + } + else + players = null; + } + if (players != null) + { + Utils.sendMessage(sender, "", rank + "&7: " + players, '&'); + return true; + } + return false; + } + + public String getPlayers(CommandSender sender, String positive, String negative) + { + Player player = null; + if (sender instanceof Player) + player = (Player) sender; + StringBuilder sb = new StringBuilder(); + for (Player p : Bukkit.getOnlinePlayers()) + { + if (p.hasPermission(positive) && (negative == null || !p.hasPermission(negative)) + && (positive.equals("group.lead") || !p.hasPermission("group.lead"))) + { + if (player == null || player.canSee(p)) + { + sb.append(Utils.getName(p)); + sb.append(", "); + } + } + } + return sb.toString().replaceAll(", $", ""); + } +}