blob: 0575c8b87a51817cab3bd917be59e9f2eeb0fff1 [file] [log] [blame] [raw]
package com.platymuus.bukkit.permissions;
import org.bukkit.Bukkit;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.entity.Player;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
/**
* A class representing a permissions group.
*/
public final class Group {
private final PermissionsPlugin plugin;
private final String name;
Group(PermissionsPlugin plugin, String name) {
this.plugin = plugin;
this.name = name;
}
public String getName() {
return name;
}
/**
* @deprecated Use UUIDs instead.
*/
@Deprecated
public List<String> getPlayers() {
ArrayList<String> result = new ArrayList<String>();
if (plugin.getNode("users") != null) {
for (String user : plugin.getNode("users").getKeys(false)) {
ConfigurationSection node = plugin.getNode("users/" + user);
for (String group : node.getStringList("groups")) {
if (name.equalsIgnoreCase(group) && !result.contains(user)) {
// attempt to determine the username
if (node.getString("name") != null) {
// converted node
result.add(node.getString("name"));
} else {
// unconverted node, or UUID node missing "name" element
result.add(user);
}
break;
}
}
}
}
return result;
}
public List<UUID> getPlayerUUIDs() {
ArrayList<UUID> result = new ArrayList<UUID>();
if (plugin.getNode("users") != null) {
for (String user : plugin.getNode("users").getKeys(false)) {
UUID uuid;
try {
uuid = UUID.fromString(user);
} catch (IllegalArgumentException ex) {
continue;
}
for (String group : plugin.getNode("users/" + user).getStringList("groups")) {
if (name.equalsIgnoreCase(group) && !result.contains(uuid)) {
result.add(uuid);
break;
}
}
}
}
return result;
}
public List<Player> getOnlinePlayers() {
ArrayList<Player> result = new ArrayList<Player>();
for (UUID uuid : getPlayerUUIDs()) {
Player player = Bukkit.getServer().getPlayer(uuid);
if (player != null && player.isOnline()) {
result.add(player);
}
}
return result;
}
public PermissionInfo getInfo() {
ConfigurationSection node = plugin.getNode("groups/" + name);
if (node == null) {
return null;
}
return new PermissionInfo(plugin, node, "inheritance");
}
@Override
public boolean equals(Object o) {
return !(o == null || !(o instanceof Group)) && name.equalsIgnoreCase(((Group) o).getName());
}
@Override
public String toString() {
return "Group{name=" + name + "}";
}
@Override
public int hashCode() {
return name.hashCode();
}
}