package de.tobiyas.racesandclasses.addins.groups.impl; import java.util.Collection; import java.util.HashSet; import java.util.Set; import java.util.UUID; import org.bukkit.Bukkit; import org.bukkit.entity.Player; import de.tobiyas.racesandclasses.addins.groups.GroupManager; public class OwnGroupManager implements GroupManager { /** * The Own groups. */ private Set<OwnGroup> groups = new HashSet<>(); @Override public boolean isInSameGroup(Player player1, Player player2) { if(player1 == null || player2 == null) return false; OwnGroup g1 = getGroup(player1.getUniqueId()); OwnGroup g2 = getGroup(player2.getUniqueId()); return g1 != null && g2 != null && g1 == g2; } @Override public boolean hasGroup(Player player) { if(player == null) return false; return getGroup(player.getUniqueId()) != null; } @Override public boolean addPlayerToGroup(Player groupOwner, Player toAdd) { if(groupOwner == null || toAdd == null) return false; UUID owner = groupOwner.getUniqueId(); OwnGroup group = getGroup(owner); if(group == null){ group = new OwnGroup(owner); groups.add(group); } playerLeavesGroup(toAdd); if(group.getOwner() != groupOwner.getUniqueId()) return false; group.addMember(toAdd.getUniqueId()); return true; } @Override public boolean playerLeavesGroup(Player player) { if(player == null) return false; UUID id = player.getUniqueId(); OwnGroup group = getGroup(id); if(group == null) return false; //Removes the player from the Group. group.remove(id); if(group.isEmpty()) groups.remove(group); return true; } @Override public Collection<Player> getMembersOfGroup(Player player) { if(player == null) return new HashSet<>(); OwnGroup group = getGroup(player.getUniqueId()); Set<Player> members = new HashSet<>(); if(group == null) return members; for(UUID id : group.members()){ Player pl = Bukkit.getPlayer(id); if(pl != null) members.add(pl); } return members; } @Override public Player getLeaderOfGroup(Player player) { if(player == null) return null; OwnGroup group = getGroup(player.getUniqueId()); if(group == null) return null; return Bukkit.getPlayer(group.getOwner()); } @Override public boolean isEnabled() { return true; } @Override public void deinit() { this.groups.clear(); } /** * Gets the Group of the Player. * @param id to search * @return the group. */ private OwnGroup getGroup(UUID id){ if(id == null) return null; for(OwnGroup group : groups){ if(group.members.contains(id)) return group; } return null; } private class OwnGroup{ /** The Members of the Group */ private final Set<UUID> members = new HashSet<>(); /** The owner */ private UUID owner; public OwnGroup(UUID owner) { this.owner = owner; addMember(owner); } public void addMember(UUID id) { members.add(id); } public void remove(UUID id){ members.remove(id); if(members.size() > 0 && owner == id) owner = members.iterator().next(); } public Set<UUID> members(){ return members; } public UUID getOwner() { return owner; } public boolean isEmpty(){ return members.isEmpty(); } } }