v2.1: - Update for CraftBukkit 1.7.8-R0.1(3050). - Add UUID support. Plugins can still query by player name but a UUID is faster and preferable.

This commit is contained in:
ElgarL 2014-04-14 22:19:14 +01:00 committed by KHobbits
parent a0e93af758
commit 9739784e75
9 changed files with 284 additions and 135 deletions

View File

@ -223,4 +223,8 @@ v 2.0:
- Check subgroup permissions with an equal priority so no one subgroup is higher ranked than another.
- add recursive permission adding/deleting
- Prevent adding sub groups for ranks the granting player doesn't have access to.
- Allow Exceptions in any inherited group to override negation of permissions.
- Allow Exceptions in any inherited group to override negation of permissions.
v2.1:
- Update for CraftBukkit 1.7.8-R0.1(3050).
- Add UUID support.
Plugins can still query by player name but a UUID is faster and preferable.

View File

@ -522,7 +522,7 @@ public class GroupManager extends JavaPlugin {
}
// Validating permissions
if (!isConsole && !isOpOverride && (senderGroup != null ? permissionHandler.inGroup(auxUser.getName(), senderGroup.getName()) : false)) {
if (!isConsole && !isOpOverride && (senderGroup != null ? permissionHandler.inGroup(auxUser.getLastName(), senderGroup.getName()) : false)) {
sender.sendMessage(ChatColor.RED + "Can't modify a player with the same permissions as you, or higher.");
return true;
}
@ -530,7 +530,7 @@ public class GroupManager extends JavaPlugin {
sender.sendMessage(ChatColor.RED + "The destination group can't be the same as yours, or higher.");
return true;
}
if (!isConsole && !isOpOverride && (!permissionHandler.inGroup(senderUser.getName(), auxUser.getGroupName()) || !permissionHandler.inGroup(senderUser.getName(), auxGroup.getName()))) {
if (!isConsole && !isOpOverride && (!permissionHandler.inGroup(senderUser.getLastName(), auxUser.getGroupName()) || !permissionHandler.inGroup(senderUser.getLastName(), auxGroup.getName()))) {
sender.sendMessage(ChatColor.RED + "You can't modify a player involving a group that you don't inherit.");
return true;
}
@ -538,7 +538,7 @@ public class GroupManager extends JavaPlugin {
// Seems OK
auxUser.setGroup(auxGroup);
if (!sender.hasPermission("groupmanager.notify.other") || (isConsole))
sender.sendMessage(ChatColor.YELLOW + "You changed player '" + auxUser.getName() + "' group to '" + auxGroup.getName() + "' in world '" + dataHolder.getName() + "'.");
sender.sendMessage(ChatColor.YELLOW + "You changed player '" + auxUser.getLastName() + "' group to '" + auxGroup.getName() + "' in world '" + dataHolder.getName() + "'.");
return true;
@ -563,16 +563,16 @@ public class GroupManager extends JavaPlugin {
auxUser = dataHolder.getUser(args[0]);
}
// Validating permission
if (!isConsole && !isOpOverride && (senderGroup != null ? permissionHandler.inGroup(auxUser.getName(), senderGroup.getName()) : false)) {
if (!isConsole && !isOpOverride && (senderGroup != null ? permissionHandler.inGroup(auxUser.getLastName(), senderGroup.getName()) : false)) {
sender.sendMessage(ChatColor.RED + "You can't modify a player with same permissions as you, or higher.");
return true;
}
// Seems OK
dataHolder.removeUser(auxUser.getName());
sender.sendMessage(ChatColor.YELLOW + "You changed player '" + auxUser.getName() + "' to default settings.");
dataHolder.removeUser(auxUser.getLastName());
sender.sendMessage(ChatColor.YELLOW + "You changed player '" + auxUser.getLastName() + "' to default settings.");
// If the player is online, this will create new data for the user.
targetPlayer = this.getServer().getPlayer(auxUser.getName());
targetPlayer = this.getServer().getPlayer(auxUser.getLastName());
if (targetPlayer != null)
BukkitPermissions.updatePermissions(targetPlayer);
@ -607,7 +607,7 @@ public class GroupManager extends JavaPlugin {
return true;
}
// Validating permission
if (!isConsole && !isOpOverride && (senderGroup != null ? permissionHandler.inGroup(auxUser.getName(), senderGroup.getName()) : false)) {
if (!isConsole && !isOpOverride && (senderGroup != null ? permissionHandler.inGroup(auxUser.getLastName(), senderGroup.getName()) : false)) {
sender.sendMessage(ChatColor.RED + "You can't modify a player with same permissions as you, or higher.");
return true;
}
@ -615,15 +615,15 @@ public class GroupManager extends JavaPlugin {
sender.sendMessage(ChatColor.RED + "The sub-group can't be the same as yours, or higher.");
return true;
}
if (!isConsole && !isOpOverride && (!permissionHandler.inGroup(senderUser.getName(), auxUser.getGroupName()) || !permissionHandler.inGroup(senderUser.getName(), auxGroup.getName()))) {
if (!isConsole && !isOpOverride && (!permissionHandler.inGroup(senderUser.getLastName(), auxUser.getGroupName()) || !permissionHandler.inGroup(senderUser.getLastName(), auxGroup.getName()))) {
sender.sendMessage(ChatColor.RED + "You can't modify a player involving a group that you don't inherit.");
return true;
}
// Seems OK
if (auxUser.addSubGroup(auxGroup))
sender.sendMessage(ChatColor.YELLOW + "You added subgroup '" + auxGroup.getName() + "' to player '" + auxUser.getName() + "'.");
sender.sendMessage(ChatColor.YELLOW + "You added subgroup '" + auxGroup.getName() + "' to player '" + auxUser.getLastName() + "'.");
else
sender.sendMessage(ChatColor.RED + "The subgroup '" + auxGroup.getName() + "' is already available to '" + auxUser.getName() + "'.");
sender.sendMessage(ChatColor.RED + "The subgroup '" + auxGroup.getName() + "' is already available to '" + auxUser.getLastName() + "'.");
return true;
@ -654,13 +654,13 @@ public class GroupManager extends JavaPlugin {
}
// Validating permission
if (!isConsole && !isOpOverride && (senderGroup != null ? permissionHandler.inGroup(auxUser.getName(), senderGroup.getName()) : false)) {
if (!isConsole && !isOpOverride && (senderGroup != null ? permissionHandler.inGroup(auxUser.getLastName(), senderGroup.getName()) : false)) {
sender.sendMessage(ChatColor.RED + "You can't modify a player with same permissions as you, or higher.");
return true;
}
// Seems OK
auxUser.removeSubGroup(auxGroup);
sender.sendMessage(ChatColor.YELLOW + "You removed subgroup '" + auxGroup.getName() + "' from player '" + auxUser.getName() + "' list.");
sender.sendMessage(ChatColor.YELLOW + "You removed subgroup '" + auxGroup.getName() + "' from player '" + auxUser.getLastName() + "' list.");
// targetPlayer = this.getServer().getPlayer(auxUser.getName());
// if (targetPlayer != null)
@ -737,7 +737,7 @@ public class GroupManager extends JavaPlugin {
}
// Validating your permissions
if (!isConsole && !isOpOverride && (senderGroup != null ? permissionHandler.inGroup(auxUser.getName(), senderGroup.getName()) : false)) {
if (!isConsole && !isOpOverride && (senderGroup != null ? permissionHandler.inGroup(auxUser.getLastName(), senderGroup.getName()) : false)) {
sender.sendMessage(ChatColor.RED + "Can't modify player with same group than you, or higher.");
return true;
}
@ -759,11 +759,11 @@ public class GroupManager extends JavaPlugin {
}
// Seems Ok
auxUser.addPermission(auxString);
sender.sendMessage(ChatColor.YELLOW + "You added '" + auxString + "' to player '" + auxUser.getName() + "' permissions.");
sender.sendMessage(ChatColor.YELLOW + "You added '" + auxString + "' to player '" + auxUser.getLastName() + "' permissions.");
}
targetPlayer = this.getServer().getPlayer(auxUser.getName());
targetPlayer = this.getServer().getPlayer(auxUser.getLastName());
if (targetPlayer != null)
BukkitPermissions.updatePermissions(targetPlayer);
@ -795,7 +795,7 @@ public class GroupManager extends JavaPlugin {
{
auxString = args[i].replace("'", "");
if (!isConsole && !isOpOverride && (senderGroup != null ? permissionHandler.inGroup(auxUser.getName(), senderGroup.getName()) : false)) {
if (!isConsole && !isOpOverride && (senderGroup != null ? permissionHandler.inGroup(auxUser.getLastName(), senderGroup.getName()) : false)) {
sender.sendMessage(ChatColor.RED + "You can't modify a player with same group as you, or higher.");
continue;
}
@ -817,11 +817,11 @@ public class GroupManager extends JavaPlugin {
continue;
}
auxUser.removePermission(auxString);
sender.sendMessage(ChatColor.YELLOW + "You removed '" + auxString + "' from player '" + auxUser.getName() + "' permissions.");
sender.sendMessage(ChatColor.YELLOW + "You removed '" + auxString + "' from player '" + auxUser.getLastName() + "' permissions.");
}
// Seems OK
targetPlayer = this.getServer().getPlayer(auxUser.getName());
targetPlayer = this.getServer().getPlayer(auxUser.getLastName());
if (targetPlayer != null)
BukkitPermissions.updatePermissions(targetPlayer);
@ -849,7 +849,7 @@ public class GroupManager extends JavaPlugin {
auxUser = dataHolder.getUser(args[0]);
}
// Validating your permissions
if (!isConsole && !isOpOverride && (senderGroup != null ? permissionHandler.inGroup(auxUser.getName(), senderGroup.getName()) : false)) {
if (!isConsole && !isOpOverride && (senderGroup != null ? permissionHandler.inGroup(auxUser.getLastName(), senderGroup.getName()) : false)) {
sender.sendMessage(ChatColor.RED + "You can't modify a player with same group as you, or higher.");
return true;
}
@ -863,9 +863,9 @@ public class GroupManager extends JavaPlugin {
auxUser.removePermission(perm);
}
}
sender.sendMessage(ChatColor.YELLOW + "You removed all permissions from player '" + auxUser.getName() + "'.");
sender.sendMessage(ChatColor.YELLOW + "You removed all permissions from player '" + auxUser.getLastName() + "'.");
targetPlayer = this.getServer().getPlayer(auxUser.getName());
targetPlayer = this.getServer().getPlayer(auxUser.getLastName());
if (targetPlayer != null)
BukkitPermissions.updatePermissions(targetPlayer);
@ -900,7 +900,7 @@ public class GroupManager extends JavaPlugin {
}
if (auxString.lastIndexOf(",") > 0) {
auxString = auxString.substring(0, auxString.lastIndexOf(","));
sender.sendMessage(ChatColor.YELLOW + "The player '" + auxUser.getName() + "' has following permissions: " + ChatColor.WHITE + auxString);
sender.sendMessage(ChatColor.YELLOW + "The player '" + auxUser.getLastName() + "' has following permissions: " + ChatColor.WHITE + auxString);
sender.sendMessage(ChatColor.YELLOW + "And all permissions from group: " + auxUser.getGroupName());
auxString = "";
for (String subGroup : auxUser.subGroupListStringCopy()) {
@ -911,7 +911,7 @@ public class GroupManager extends JavaPlugin {
sender.sendMessage(ChatColor.YELLOW + "And all permissions from subgroups: " + auxString);
}
} else {
sender.sendMessage(ChatColor.YELLOW + "The player '" + auxUser.getName() + "' has no specific permissions.");
sender.sendMessage(ChatColor.YELLOW + "The player '" + auxUser.getLastName() + "' has no specific permissions.");
sender.sendMessage(ChatColor.YELLOW + "Only all permissions from group: " + auxUser.getGroupName());
auxString = "";
for (String subGroup : auxUser.subGroupListStringCopy()) {
@ -925,7 +925,7 @@ public class GroupManager extends JavaPlugin {
// bukkit perms
if ((args.length == 2) && (args[1].equalsIgnoreCase("+"))) {
targetPlayer = this.getServer().getPlayer(auxUser.getName());
targetPlayer = this.getServer().getPlayer(auxUser.getLastName());
if (targetPlayer != null) {
sender.sendMessage(ChatColor.YELLOW + "Superperms reports: ");
for (String line : BukkitPermissions.listPerms(targetPlayer))
@ -959,7 +959,7 @@ public class GroupManager extends JavaPlugin {
} else {
auxUser = dataHolder.getUser(args[0]);
}
targetPlayer = this.getServer().getPlayer(auxUser.getName());
targetPlayer = this.getServer().getPlayer(auxUser.getLastName());
// Validating permission
permissionResult = permissionHandler.checkFullGMPermission(auxUser, auxString, false);
@ -980,11 +980,11 @@ public class GroupManager extends JavaPlugin {
sender.sendMessage(ChatColor.YELLOW + "Permission Node: " + permissionResult.accessLevel);
} else if (permissionResult.owner instanceof Group) {
if (permissionResult.resultType.equals(PermissionCheckResult.Type.NEGATION)) {
sender.sendMessage(ChatColor.YELLOW + "The user inherits a negation permission from group: " + permissionResult.owner.getName());
sender.sendMessage(ChatColor.YELLOW + "The user inherits a negation permission from group: " + permissionResult.owner.getLastName());
} else if (permissionResult.resultType.equals(PermissionCheckResult.Type.EXCEPTION)) {
sender.sendMessage(ChatColor.YELLOW + "The user inherits an Exception permission from group: " + permissionResult.owner.getName());
sender.sendMessage(ChatColor.YELLOW + "The user inherits an Exception permission from group: " + permissionResult.owner.getLastName());
} else {
sender.sendMessage(ChatColor.YELLOW + "The user inherits the permission from group: " + permissionResult.owner.getName());
sender.sendMessage(ChatColor.YELLOW + "The user inherits the permission from group: " + permissionResult.owner.getLastName());
}
sender.sendMessage(ChatColor.YELLOW + "Permission Node: " + permissionResult.accessLevel);
}
@ -1203,11 +1203,11 @@ public class GroupManager extends JavaPlugin {
// auxString = permissionHandler.checkUserOnlyPermission(auxUser, args[1]);
if (permissionResult.owner instanceof Group) {
if (permissionResult.resultType.equals(PermissionCheckResult.Type.NEGATION)) {
sender.sendMessage(ChatColor.YELLOW + "The group inherits the negation permission from group: " + permissionResult.owner.getName());
sender.sendMessage(ChatColor.YELLOW + "The group inherits the negation permission from group: " + permissionResult.owner.getLastName());
} else if (permissionResult.resultType.equals(PermissionCheckResult.Type.EXCEPTION)) {
sender.sendMessage(ChatColor.YELLOW + "The group inherits an Exception permission from group: " + permissionResult.owner.getName());
sender.sendMessage(ChatColor.YELLOW + "The group inherits an Exception permission from group: " + permissionResult.owner.getLastName());
} else {
sender.sendMessage(ChatColor.YELLOW + "The group inherits the permission from group: " + permissionResult.owner.getName());
sender.sendMessage(ChatColor.YELLOW + "The group inherits the permission from group: " + permissionResult.owner.getLastName());
}
sender.sendMessage(ChatColor.YELLOW + "Permission Node: " + permissionResult.accessLevel);
@ -1327,7 +1327,7 @@ public class GroupManager extends JavaPlugin {
}
auxString = auxString.replace("'", "");
auxUser.getVariables().addVar(args[1], Variables.parseVariableValue(auxString));
sender.sendMessage(ChatColor.YELLOW + "Variable " + ChatColor.GOLD + args[1] + ChatColor.YELLOW + ":'" + ChatColor.GREEN + auxString + ChatColor.YELLOW + "' added to the user " + auxUser.getName());
sender.sendMessage(ChatColor.YELLOW + "Variable " + ChatColor.GOLD + args[1] + ChatColor.YELLOW + ":'" + ChatColor.GREEN + auxString + ChatColor.YELLOW + "' added to the user " + auxUser.getLastName());
return true;
@ -1358,7 +1358,7 @@ public class GroupManager extends JavaPlugin {
}
// Seems OK
auxUser.getVariables().removeVar(args[1]);
sender.sendMessage(ChatColor.YELLOW + "Variable " + ChatColor.GOLD + args[1] + ChatColor.YELLOW + " removed from the user " + ChatColor.GREEN + auxUser.getName());
sender.sendMessage(ChatColor.YELLOW + "Variable " + ChatColor.GOLD + args[1] + ChatColor.YELLOW + " removed from the user " + ChatColor.GREEN + auxUser.getLastName());
return true;
@ -1391,7 +1391,7 @@ public class GroupManager extends JavaPlugin {
if (auxString.lastIndexOf(",") > 0) {
auxString = auxString.substring(0, auxString.lastIndexOf(","));
}
sender.sendMessage(ChatColor.YELLOW + "Variables of user " + auxUser.getName() + ": ");
sender.sendMessage(ChatColor.YELLOW + "Variables of user " + auxUser.getLastName() + ": ");
sender.sendMessage(auxString + ".");
sender.sendMessage(ChatColor.YELLOW + "Plus all variables from group: " + auxUser.getGroupName());
@ -1608,7 +1608,7 @@ public class GroupManager extends JavaPlugin {
auxUser = dataHolder.getUser(args[0]);
}
// Seems OK
sender.sendMessage(ChatColor.YELLOW + "Name: " + ChatColor.GREEN + auxUser.getName());
sender.sendMessage(ChatColor.YELLOW + "Name: " + ChatColor.GREEN + auxUser.getLastName());
sender.sendMessage(ChatColor.YELLOW + "Group: " + ChatColor.GREEN + auxUser.getGroup().getName());
// Compile a list of subgroups
auxString = "";
@ -1620,8 +1620,8 @@ public class GroupManager extends JavaPlugin {
sender.sendMessage(ChatColor.YELLOW + "subgroups: " + auxString);
}
sender.sendMessage(ChatColor.YELLOW + "Overloaded: " + ChatColor.GREEN + dataHolder.isOverloaded(auxUser.getName()));
auxGroup = dataHolder.surpassOverload(auxUser.getName()).getGroup();
sender.sendMessage(ChatColor.YELLOW + "Overloaded: " + ChatColor.GREEN + dataHolder.isOverloaded(auxUser.getLastName()));
auxGroup = dataHolder.surpassOverload(auxUser.getLastName()).getGroup();
if (!auxGroup.equals(auxUser.getGroup())) {
sender.sendMessage(ChatColor.YELLOW + "Original Group: " + ChatColor.GREEN + auxGroup.getName());
}
@ -1648,7 +1648,7 @@ public class GroupManager extends JavaPlugin {
auxUser = dataHolder.getUser(args[0]);
}
// Validating permission
if (!isConsole && !isOpOverride && (senderGroup != null ? permissionHandler.inGroup(auxUser.getName(), senderGroup.getName()) : false)) {
if (!isConsole && !isOpOverride && (senderGroup != null ? permissionHandler.inGroup(auxUser.getLastName(), senderGroup.getName()) : false)) {
sender.sendMessage(ChatColor.RED + "Can't modify player with same permissions than you, or higher.");
return true;
}
@ -1656,8 +1656,8 @@ public class GroupManager extends JavaPlugin {
if (overloadedUsers.get(dataHolder.getName().toLowerCase()) == null) {
overloadedUsers.put(dataHolder.getName().toLowerCase(), new ArrayList<User>());
}
dataHolder.overloadUser(auxUser.getName());
overloadedUsers.get(dataHolder.getName().toLowerCase()).add(dataHolder.getUser(auxUser.getName()));
dataHolder.overloadUser(auxUser.getLastName());
overloadedUsers.get(dataHolder.getName().toLowerCase()).add(dataHolder.getUser(auxUser.getLastName()));
sender.sendMessage(ChatColor.YELLOW + "Player set to overload mode!");
return true;
@ -1682,7 +1682,7 @@ public class GroupManager extends JavaPlugin {
auxUser = dataHolder.getUser(args[0]);
}
// Validating permission
if (!isConsole && !isOpOverride && (senderGroup != null ? permissionHandler.inGroup(auxUser.getName(), senderGroup.getName()) : false)) {
if (!isConsole && !isOpOverride && (senderGroup != null ? permissionHandler.inGroup(auxUser.getLastName(), senderGroup.getName()) : false)) {
sender.sendMessage(ChatColor.RED + "You can't modify a player with same permissions as you, or higher.");
return true;
}
@ -1690,7 +1690,7 @@ public class GroupManager extends JavaPlugin {
if (overloadedUsers.get(dataHolder.getName().toLowerCase()) == null) {
overloadedUsers.put(dataHolder.getName().toLowerCase(), new ArrayList<User>());
}
dataHolder.removeOverload(auxUser.getName());
dataHolder.removeOverload(auxUser.getLastName());
if (overloadedUsers.get(dataHolder.getName().toLowerCase()).contains(auxUser)) {
overloadedUsers.get(dataHolder.getName().toLowerCase()).remove(auxUser);
}
@ -1709,10 +1709,10 @@ public class GroupManager extends JavaPlugin {
removeList = new ArrayList<User>();
count = 0;
for (User u : overloadedUsers.get(dataHolder.getName().toLowerCase())) {
if (!dataHolder.isOverloaded(u.getName())) {
if (!dataHolder.isOverloaded(u.getLastName())) {
removeList.add(u);
} else {
auxString += u.getName() + ", ";
auxString += u.getLastName() + ", ";
count++;
}
}
@ -1739,8 +1739,8 @@ public class GroupManager extends JavaPlugin {
removeList = new ArrayList<User>();
count = 0;
for (User u : overloadedUsers.get(dataHolder.getName().toLowerCase())) {
if (dataHolder.isOverloaded(u.getName())) {
dataHolder.removeOverload(u.getName());
if (dataHolder.isOverloaded(u.getLastName())) {
dataHolder.removeOverload(u.getLastName());
count++;
}
}
@ -1880,7 +1880,7 @@ public class GroupManager extends JavaPlugin {
return true;
}
// Validating permission
if (!isConsole && !isOpOverride && (senderGroup != null ? permissionHandler.inGroup(auxUser.getName(), senderGroup.getName()) : false)) {
if (!isConsole && !isOpOverride && (senderGroup != null ? permissionHandler.inGroup(auxUser.getLastName(), senderGroup.getName()) : false)) {
sender.sendMessage(ChatColor.RED + "You can't modify a player with same permissions as you, or higher.");
return true;
}
@ -1888,7 +1888,7 @@ public class GroupManager extends JavaPlugin {
sender.sendMessage(ChatColor.RED + "The destination group can't be the same as yours, or higher.");
return true;
}
if (!isConsole && !isOpOverride && (!permissionHandler.inGroup(senderUser.getName(), auxUser.getGroupName()) || !permissionHandler.inGroup(senderUser.getName(), auxGroup.getName()))) {
if (!isConsole && !isOpOverride && (!permissionHandler.inGroup(senderUser.getLastName(), auxUser.getGroupName()) || !permissionHandler.inGroup(senderUser.getLastName(), auxGroup.getName()))) {
sender.sendMessage(ChatColor.RED + "You can't modify a player involving a group that you don't inherit.");
return true;
}
@ -1903,7 +1903,7 @@ public class GroupManager extends JavaPlugin {
// Seems OK
auxUser.setGroup(auxGroup);
if (!sender.hasPermission("groupmanager.notify.other") || (isConsole))
sender.sendMessage(ChatColor.YELLOW + "You changed " + auxUser.getName() + " group to " + auxGroup.getName() + ".");
sender.sendMessage(ChatColor.YELLOW + "You changed " + auxUser.getLastName() + " group to " + auxGroup.getName() + ".");
return true;
@ -1936,7 +1936,7 @@ public class GroupManager extends JavaPlugin {
return true;
}
// Validating permission
if (!isConsole && !isOpOverride && (senderGroup != null ? permissionHandler.inGroup(auxUser.getName(), senderGroup.getName()) : false)) {
if (!isConsole && !isOpOverride && (senderGroup != null ? permissionHandler.inGroup(auxUser.getLastName(), senderGroup.getName()) : false)) {
sender.sendMessage(ChatColor.RED + "You can't modify a player with same permissions as you, or higher.");
return true;
}
@ -1944,7 +1944,7 @@ public class GroupManager extends JavaPlugin {
sender.sendMessage(ChatColor.RED + "The destination group can't be the same as yours, or higher.");
return true;
}
if (!isConsole && !isOpOverride && (!permissionHandler.inGroup(senderUser.getName(), auxUser.getGroupName()) || !permissionHandler.inGroup(senderUser.getName(), auxGroup.getName()))) {
if (!isConsole && !isOpOverride && (!permissionHandler.inGroup(senderUser.getLastName(), auxUser.getGroupName()) || !permissionHandler.inGroup(senderUser.getLastName(), auxGroup.getName()))) {
sender.sendMessage(ChatColor.RED + "You can't modify a player involving a group that you don't inherit.");
return true;
}
@ -1959,7 +1959,7 @@ public class GroupManager extends JavaPlugin {
// Seems OK
auxUser.setGroup(auxGroup);
if (!sender.hasPermission("groupmanager.notify.other") || (isConsole))
sender.sendMessage(ChatColor.YELLOW + "You changed " + auxUser.getName() + " group to " + auxGroup.getName() + ".");
sender.sendMessage(ChatColor.YELLOW + "You changed " + auxUser.getLastName() + " group to " + auxGroup.getName() + ".");
return true;

View File

@ -19,19 +19,20 @@ import org.anjocaido.groupmanager.utils.StringPermissionComparator;
public abstract class DataUnit {
private WorldDataHolder dataSource;
private String name;
private String uUID;
private String lastName;
private boolean changed, sorted = false;
private List<String> permissions = Collections.unmodifiableList(Collections.<String>emptyList());
public DataUnit(WorldDataHolder dataSource, String name) {
this.dataSource = dataSource;
this.name = name;
this.uUID = name;
}
public DataUnit(String name) {
this.name = name;
this.uUID = name;
}
/**
@ -45,7 +46,7 @@ public abstract class DataUnit {
if (o instanceof DataUnit) {
DataUnit go = (DataUnit) o;
if (this.getName().equalsIgnoreCase(go.getName())) {
if (this.getUUID().equalsIgnoreCase(go.getUUID())) {
// Global Group match.
if (this.dataSource == null && go.getDataSource() == null)
return true;
@ -67,7 +68,7 @@ public abstract class DataUnit {
public int hashCode() {
int hash = 5;
hash = 71 * hash + (this.name != null ? this.name.toLowerCase().hashCode() : 0);
hash = 71 * hash + (this.uUID != null ? this.uUID.toLowerCase().hashCode() : 0);
return hash;
}
@ -90,13 +91,29 @@ public abstract class DataUnit {
return dataSource;
}
public String getUUID() {
/**
* @return the name
*/
public String getName() {
return uUID;
}
public String getLastName() {
return name;
if (uUID.length() < 36)
return uUID;
return lastName;
}
public void setLastName(String lastName) {
if (!this.lastName.equals(lastName)) {
this.lastName = lastName;
changed = true;
}
}
public void flagAsChanged() {
@ -109,7 +126,7 @@ public abstract class DataUnit {
else
source = testSource.getName();
GroupManager.logger.finest("DataSource: " + source + " - DataUnit: " + getName() + " flagged as changed!");
GroupManager.logger.finest("DataSource: " + source + " - DataUnit: " + getUUID() + " flagged as changed!");
// for(StackTraceElement st: Thread.currentThread().getStackTrace()){
// GroupManager.logger.finest(st.toString());
// }
@ -132,7 +149,7 @@ public abstract class DataUnit {
else
source = testSource.getName();
GroupManager.logger.finest("DataSource: " + source + " - DataUnit: " + getName() + " flagged as saved!");
GroupManager.logger.finest("DataSource: " + source + " - DataUnit: " + getUUID() + " flagged as saved!");
changed = false;
}

View File

@ -48,6 +48,14 @@ public class Group extends DataUnit implements Cloneable {
super(name);
}
/**
* @return the name
*/
public String getName() {
return this.getUUID();
}
/**
* Is this a GlobalGroup

View File

@ -51,7 +51,7 @@ public class User extends DataUnit implements Cloneable {
@Override
public User clone() {
User clone = new User(getDataSource(), this.getName());
User clone = new User(getDataSource(), this.getLastName());
clone.group = this.group;
for (String perm : this.getPermissionList()) {
clone.addPermission(perm);
@ -69,10 +69,10 @@ public class User extends DataUnit implements Cloneable {
*/
public User clone(WorldDataHolder dataSource) {
if (dataSource.isUserDeclared(this.getName())) {
if (dataSource.isUserDeclared(this.getLastName())) {
return null;
}
User clone = dataSource.createUser(this.getName());
User clone = dataSource.createUser(this.getLastName());
if (dataSource.getGroup(group) == null) {
clone.setGroup(dataSource.getDefaultGroup());
} else {
@ -85,6 +85,28 @@ public class User extends DataUnit implements Cloneable {
clone.flagAsChanged();
return clone;
}
public User clone(String uUID) {
User clone = this.getDataSource().createUser(uUID);
if (this.getDataSource().getGroup(group) == null) {
clone.setGroup(this.getDataSource().getDefaultGroup());
} else {
clone.setGroup(this.getDataSource().getGroup(this.getGroupName()));
}
clone.setLastName(this.getLastName());
for (String perm : this.getPermissionList()) {
clone.addPermission(perm);
}
clone.variables = this.variables.clone(this);
clone.flagAsChanged();
return clone;
}
public Group getGroup() {
@ -107,6 +129,19 @@ public class User extends DataUnit implements Cloneable {
}
return group;
}
/**
* Place holder to let people know to stop using this method.
*
* @deprecated use {@link getLastName()} and {@link getUUID()}.
* @return a string containing the players last known name.
*/
@Deprecated
public String getName() {
return this.getLastName();
}
/**
@ -144,7 +179,7 @@ public class User extends DataUnit implements Cloneable {
boolean notify = (!oldGroup.equalsIgnoreCase(defaultGroupName)) || ((oldGroup.equalsIgnoreCase(defaultGroupName)) && (!this.group.equalsIgnoreCase(defaultGroupName)));
if (notify)
GroupManager.notify(this.getName(), String.format(" moved to the group %s in %s.", group.getName(), this.getDataSource().getName()));
GroupManager.notify(this.getLastName(), String.format(" moved to the group %s in %s.", group.getName(), this.getDataSource().getName()));
GroupManager.getGMEventHandler().callEvent(this, Action.USER_GROUP_CHANGED);
}
@ -269,7 +304,7 @@ public class User extends DataUnit implements Cloneable {
public Player getBukkitPlayer() {
if (bukkitPlayer == null) {
bukkitPlayer = Bukkit.getPlayer(this.getName());
bukkitPlayer = Bukkit.getPlayer(this.getLastName());
}
return bukkitPlayer;
}

View File

@ -74,33 +74,33 @@ public class OverloadedWorldHolder extends WorldDataHolder {
theUser.setGroup(getDefaultGroup());
}
//OVERLOADED CODE
if (overloadedUsers.containsKey(theUser.getName().toLowerCase())) {
overloadedUsers.remove(theUser.getName().toLowerCase());
overloadedUsers.put(theUser.getName().toLowerCase(), theUser);
if (overloadedUsers.containsKey(theUser.getUUID().toLowerCase())) {
overloadedUsers.remove(theUser.getUUID().toLowerCase());
overloadedUsers.put(theUser.getUUID().toLowerCase(), theUser);
return;
}
//END CODE
removeUser(theUser.getName());
getUsers().put(theUser.getName().toLowerCase(), theUser);
removeUser(theUser.getUUID());
getUsers().put(theUser.getUUID().toLowerCase(), theUser);
setUsersChanged(true);
}
/**
*
* @param userName
* @param userId
* @return true if removed/false if not found.
*/
@Override
public boolean removeUser(String userName) {
public boolean removeUser(String userId) {
//OVERLOADED CODE
if (overloadedUsers.containsKey(userName.toLowerCase())) {
overloadedUsers.remove(userName.toLowerCase());
if (overloadedUsers.containsKey(userId.toLowerCase())) {
overloadedUsers.remove(userId.toLowerCase());
return true;
}
//END CODE
if (getUsers().containsKey(userName.toLowerCase())) {
getUsers().remove(userName.toLowerCase());
if (getUsers().containsKey(userId.toLowerCase())) {
getUsers().remove(userId.toLowerCase());
setUsersChanged(true);
return true;
}
@ -156,8 +156,8 @@ public class OverloadedWorldHolder extends WorldDataHolder {
synchronized(getUsers()) {
Collection<User> normalList = getUsers().values();
for (User u : normalList) {
if (overloadedUsers.containsKey(u.getName().toLowerCase())) {
overloadedList.add(overloadedUsers.get(u.getName().toLowerCase()));
if (overloadedUsers.containsKey(u.getUUID().toLowerCase())) {
overloadedList.add(overloadedUsers.get(u.getUUID().toLowerCase()));
} else {
overloadedList.add(u);
}
@ -171,34 +171,35 @@ public class OverloadedWorldHolder extends WorldDataHolder {
* @param userName
* @return true if user is overloaded.
*/
public boolean isOverloaded(String userName) {
public boolean isOverloaded(String userId) {
return overloadedUsers.containsKey(userName.toLowerCase());
return overloadedUsers.containsKey(userId.toLowerCase());
}
/**
*
* @param userName
* @param userId
*/
public void overloadUser(String userName) {
public void overloadUser(String userId) {
if (!isOverloaded(userName)) {
User theUser = getUser(userName);
if (!isOverloaded(userId)) {
User theUser = getUser(userId);
theUser = theUser.clone();
if (overloadedUsers.containsKey(theUser.getName().toLowerCase())) {
overloadedUsers.remove(theUser.getName().toLowerCase());
if (overloadedUsers.containsKey(theUser.getUUID().toLowerCase())) {
overloadedUsers.remove(theUser.getUUID().toLowerCase());
}
overloadedUsers.put(theUser.getName().toLowerCase(), theUser);
overloadedUsers.put(theUser.getUUID().toLowerCase(), theUser);
}
}
/**
*
* @param userName
* @param userId
*/
public void removeOverload(String userName) {
public void removeOverload(String userId) {
overloadedUsers.remove(userName.toLowerCase());
User theUser = getUser(userId);
overloadedUsers.remove(theUser.getUUID().toLowerCase());
}
/**
@ -206,18 +207,18 @@ public class OverloadedWorldHolder extends WorldDataHolder {
* It doesn't affect permissions. But it enables plugins change the
* actual user permissions even in overload mode.
*
* @param userName
* @param userId
* @return user object
*/
public User surpassOverload(String userName) {
public User surpassOverload(String userId) {
if (!isOverloaded(userName)) {
return getUser(userName);
if (!isOverloaded(userId)) {
return getUser(userId);
}
if (getUsers().containsKey(userName.toLowerCase())) {
return getUsers().get(userName.toLowerCase());
if (getUsers().containsKey(userId.toLowerCase())) {
return getUsers().get(userId.toLowerCase());
}
User newUser = createUser(userName);
User newUser = createUser(userId);
return newUser;
}
}

View File

@ -104,15 +104,76 @@ public class WorldDataHolder {
* Search for a user. If it doesn't exist, create a new one with default
* group.
*
* @param userName the name of the user
* @param userId the UUID String or name of the user
* @return class that manage that user permission
*/
public User getUser(String userName) {
if (getUsers().containsKey(userName.toLowerCase())) {
return getUsers().get(userName.toLowerCase());
public User getUser(String userId) {
if (getUsers().containsKey(userId.toLowerCase())) {
return getUsers().get(userId.toLowerCase());
}
User newUser = createUser(userName);
// Legacy name matching
if (userId.length() < 36) {
// Search for a LastName match
for (User user : getUserList()) {
if (user.getLastName().equalsIgnoreCase(userId))
return user;
}
}
// No user account found so create a new one.
User newUser = createUser(userId);
return newUser;
}
/**
* *** Internal GM use only ***
* This is called when a player joins to update/add their UUID.
*
* @param uUID the player objects UUID.
* @param currentName the name they have just logged in with.
* @return the user object for this player.
*/
public User getUser(String uUID, String currentName) {
// Check for a UUID account
User user = getUsers().get(uUID.toLowerCase());
if (user != null) {
user.setLastName(currentName);
return user;
}
// Search for a LastName match
for (User usr : getUserList()) {
if (usr.getLastName().equalsIgnoreCase(currentName)) {
// Clone this user so we can set it's uUID
user = usr.clone(uUID);
// Delete it and replace with the new clone.
this.removeUser(usr.getUUID());
user.setLastName(currentName);
this.addUser(user);
return user;
}
}
// No user account found so create a new one.
User newUser = createUser(uUID);
newUser.setLastName(currentName);
return newUser;
}
@ -132,8 +193,8 @@ public class WorldDataHolder {
if ((theUser.getGroup() == null)) {
theUser.setGroup(groups.getDefaultGroup());
}
removeUser(theUser.getName());
getUsers().put(theUser.getName().toLowerCase(), theUser);
removeUser(theUser.getUUID());
getUsers().put(theUser.getUUID().toLowerCase(), theUser);
setUsersChanged(true);
if (GroupManager.isLoaded())
GroupManager.getGMEventHandler().callEvent(theUser, Action.USER_ADDED);
@ -142,16 +203,16 @@ public class WorldDataHolder {
/**
* Removes the user from the list. (he might become a default user)
*
* @param userName the username from the user to remove
* @param userId the UUID or username for the user to remove
* @return true if it had something to remove
*/
public boolean removeUser(String userName) {
public boolean removeUser(String userId) {
if (getUsers().containsKey(userName.toLowerCase())) {
getUsers().remove(userName.toLowerCase());
if (getUsers().containsKey(userId.toLowerCase())) {
getUsers().remove(userId.toLowerCase());
setUsersChanged(true);
if (GroupManager.isLoaded())
GroupManager.getGMEventHandler().callEvent(userName, GMUserEvent.Action.USER_REMOVED);
GroupManager.getGMEventHandler().callEvent(userId, GMUserEvent.Action.USER_REMOVED);
return true;
}
return false;
@ -159,12 +220,12 @@ public class WorldDataHolder {
/**
*
* @param userName
* @param userId
* @return true if we have data for this player.
*/
public boolean isUserDeclared(String userName) {
public boolean isUserDeclared(String userId) {
return getUsers().containsKey(userName.toLowerCase());
return getUsers().containsKey(userId.toLowerCase());
}
/**
@ -275,15 +336,15 @@ public class WorldDataHolder {
/**
* Creates a new User with the given name and adds it to this holder.
*
* @param userName the username you want
* @param userId the UUID or username you want
* @return null if user already exists. or new User
*/
public User createUser(String userName) {
public User createUser(String userId) {
if (getUsers().containsKey(userName.toLowerCase())) {
if (getUsers().containsKey(userId.toLowerCase())) {
return null;
}
User newUser = new User(this, userName);
User newUser = new User(this, userId);
newUser.setGroup(groups.getDefaultGroup(), false);
addUser(newUser);
setUsersChanged(true);
@ -808,9 +869,26 @@ public class WorldDataHolder {
throw new IllegalArgumentException("I think this user was declared more than once: " + usersKey + " in file: " + usersFile.getPath());
}
// USER PERMISSIONS NODES
// LASTNAME NODES
Object nodeData = null;
try {
nodeData = thisUserNode.get("lastname");
} catch (Exception ex) {
throw new IllegalArgumentException("Bad format found in 'subgroups' for user: " + usersKey + " in file: " + usersFile.getPath());
}
if ((nodeData != null) && (nodeData instanceof String)) {
thisUser.setLastName((String) nodeData);
}
// USER PERMISSIONS NODES
nodeData = null;
try {
nodeData = thisUserNode.get("permissions");
} catch (Exception ex) {
@ -848,6 +926,7 @@ public class WorldDataHolder {
}
thisUser.sortPermissions();
}
// SUBGROUPS NODES
@ -865,13 +944,13 @@ public class WorldDataHolder {
} else if (nodeData instanceof List) {
for (Object o : ((List) nodeData)) {
if (o == null) {
GroupManager.logger.warning("Invalid Subgroup data for user: " + thisUser.getName() + ". Ignoring entry in file: " + usersFile.getPath());
GroupManager.logger.warning("Invalid Subgroup data for user: " + thisUser.getLastName() + ". Ignoring entry in file: " + usersFile.getPath());
} else {
Group subGrp = ph.getGroup(o.toString());
if (subGrp != null) {
thisUser.addSubGroup(subGrp);
} else {
GroupManager.logger.warning("Subgroup '" + o.toString() + "' not found for user: " + thisUser.getName() + ". Ignoring entry in file: " + usersFile.getPath());
GroupManager.logger.warning("Subgroup '" + o.toString() + "' not found for user: " + thisUser.getLastName() + ". Ignoring entry in file: " + usersFile.getPath());
}
}
}
@ -880,7 +959,7 @@ public class WorldDataHolder {
if (subGrp != null) {
thisUser.addSubGroup(subGrp);
} else {
GroupManager.logger.warning("Subgroup '" + nodeData.toString() + "' not found for user: " + thisUser.getName() + ". Ignoring entry in file: " + usersFile.getPath());
GroupManager.logger.warning("Subgroup '" + nodeData.toString() + "' not found for user: " + thisUser.getLastName() + ". Ignoring entry in file: " + usersFile.getPath());
}
}
@ -901,7 +980,7 @@ public class WorldDataHolder {
thisUser.setVariables((Map<String, Object>) nodeData);
} else
throw new IllegalArgumentException("Unknown entry found in 'info' section for user: " + thisUser.getName() + " in file: " + usersFile.getPath());
throw new IllegalArgumentException("Unknown entry found in 'info' section for user: " + thisUser.getLastName() + " in file: " + usersFile.getPath());
// END INFO NODE
@ -917,7 +996,7 @@ public class WorldDataHolder {
if (nodeData != null) {
Group hisGroup = ph.getGroup(nodeData.toString());
if (hisGroup == null) {
GroupManager.logger.warning("There is no group " + thisUserNode.get("group").toString() + ", as stated for player " + thisUser.getName() + ": Set to '" + ph.getDefaultGroup().getName() + "' for file: " + usersFile.getPath());
GroupManager.logger.warning("There is no group " + thisUserNode.get("group").toString() + ", as stated for player " + thisUser.getLastName() + ": Set to '" + ph.getDefaultGroup().getName() + "' for file: " + usersFile.getPath());
hisGroup = ph.getDefaultGroup();
}
thisUser.setGroup(hisGroup);
@ -1036,8 +1115,12 @@ public class WorldDataHolder {
}
LinkedHashMap<String, Object> aUserMap = new LinkedHashMap<String, Object>();
usersMap.put(user.getName(), aUserMap);
usersMap.put(user.getUUID(), aUserMap);
if (!user.getUUID().equalsIgnoreCase(user.getLastName())) {
aUserMap.put("lastname", user.getLastName());
}
// GROUP NODE
if (user.getGroup() == null) {
aUserMap.put("group", ph.getDefaultGroup().getName());

View File

@ -41,7 +41,7 @@ public class GMUserEvent extends Event {
this.user = user;
this.action = action;
this.userName = user.getName();
this.userName = user.getLastName();
}
public GMUserEvent(String userName, Action action) {

View File

@ -445,10 +445,11 @@ public class BukkitPermissions {
removeAttachment(player.getName());
// force GM to create the player if they are not already listed.
if (plugin.getWorldsHolder().getWorldData(player.getWorld().getName()).getUser(player.getName()) != null) {
setPlayer_join(false);
updatePermissions(event.getPlayer());
}
plugin.getWorldsHolder().getWorldData(player.getWorld().getName()).getUser(player.getUniqueId().toString(), player.getName());
setPlayer_join(false);
updatePermissions(event.getPlayer());
setPlayer_join(false);
}