Browse Source

"/rscp player <player>" now shows a lot of details.

master
Stanislav Usenkov 9 years ago
parent
commit
b9603064a7
  1. 1
      src/main/java/ru/simsonic/rscPermissions/API/Settings.java
  2. 121
      src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/CommandEntity.java
  3. 143
      src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/CommandEntityHelper.java
  4. 17
      src/main/java/ru/simsonic/rscPermissions/Engine/ResolutionResult.java

1
src/main/java/ru/simsonic/rscPermissions/API/Settings.java

@ -17,6 +17,7 @@ public interface Settings
public static final String INSTANCE_SEP = "."; public static final String INSTANCE_SEP = ".";
public static final String INSTANCE_PHOLDER = "?"; public static final String INSTANCE_PHOLDER = "?";
public static final String REGEXP_INSTANCE = Pattern.quote(INSTANCE_SEP); public static final String REGEXP_INSTANCE = Pattern.quote(INSTANCE_SEP);
public static final String REGEXP_GROUP_LVL = Pattern.quote(new String(new char[] { SHOW_GROUP_LEVEL }));
public static final String REGEXP_ROW_SPLIT = "\\s*[;,\\r\\n\\s]+\\s*"; public static final String REGEXP_ROW_SPLIT = "\\s*[;,\\r\\n\\s]+\\s*";
public static final String REGEXP_NICKNAME = "^[\\*a-zA-Z0-9_-]{3,16}$"; public static final String REGEXP_NICKNAME = "^[\\*a-zA-Z0-9_-]{3,16}$";
public static final String REGEXP_UUID_DASH = "^(?:[a-f\\d]{8}(?:-[a-f\\d]{4}){3}-[a-f\\d]{12})$"; public static final String REGEXP_UUID_DASH = "^(?:[a-f\\d]{8}(?:-[a-f\\d]{4}){3}-[a-f\\d]{12})$";

121
src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/CommandEntity.java

@ -1,9 +1,11 @@
package ru.simsonic.rscPermissions.Bukkit.Commands; package ru.simsonic.rscPermissions.Bukkit.Commands;
import java.net.InetSocketAddress;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.Set; import java.util.Set;
import org.bukkit.OfflinePlayer; import org.bukkit.OfflinePlayer;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
@ -16,6 +18,7 @@ import ru.simsonic.rscPermissions.API.RowPermission;
import ru.simsonic.rscPermissions.Bukkit.BukkitUtilities; import ru.simsonic.rscPermissions.Bukkit.BukkitUtilities;
import ru.simsonic.rscPermissions.Bukkit.Commands.ArgumentUtilities.OptionalParams; import ru.simsonic.rscPermissions.Bukkit.Commands.ArgumentUtilities.OptionalParams;
import ru.simsonic.rscPermissions.BukkitPluginMain; import ru.simsonic.rscPermissions.BukkitPluginMain;
import ru.simsonic.rscPermissions.Engine.Matchers;
import ru.simsonic.rscPermissions.Engine.Phrases; import ru.simsonic.rscPermissions.Engine.Phrases;
import ru.simsonic.rscPermissions.Engine.ResolutionResult; import ru.simsonic.rscPermissions.Engine.ResolutionResult;
@ -120,14 +123,15 @@ public class CommandEntity extends CommandEntityHelper
// Remove this optional argument from the battlefront // Remove this optional argument from the battlefront
args = Arrays.copyOfRange(args, 1, args.length); args = Arrays.copyOfRange(args, 1, args.length);
// Find what is the target for operation // Find what is the target for operation
ResolutionResult result = null; ResolutionResult result = null;
RowEntity entity = null; OfflinePlayer offline = null;
RowEntity entity = null;
if(type.equals(TargetType.PLAYER)) if(type.equals(TargetType.PLAYER))
{ {
// Search for online or offline player object // Search for online or offline player object
String target = args[0]; String target = args[0];
final Player online = BukkitUtilities.findOnlinePlayer(target); final Player online = BukkitUtilities.findOnlinePlayer(target);
final OfflinePlayer offline = online != null offline = online != null
? online ? online
: BukkitUtilities.findOfflinePlayer(target); : BukkitUtilities.findOfflinePlayer(target);
// Does command sender require convertion of game Player into database User? // Does command sender require convertion of game Player into database User?
@ -217,7 +221,7 @@ public class CommandEntity extends CommandEntityHelper
"{_LR}Do you want to force it's creation with special keyword {_YL}new{_LR} before name?", "{_LR}Do you want to force it's creation with special keyword {_YL}new{_LR} before name?",
}); });
if(result != null) if(result != null)
onPlayerCommand(result, args); onPlayerCommand(result, args, offline);
else else
onEntityCommand(entity, type, args); onEntityCommand(entity, type, args);
throw new CommandAnswerException(getHelpForType(type)); throw new CommandAnswerException(getHelpForType(type));
@ -298,7 +302,7 @@ public class CommandEntity extends CommandEntityHelper
break; break;
} }
} }
private void onPlayerCommand(ResolutionResult result, String[] args) throws CommandAnswerException private void onPlayerCommand(ResolutionResult result, String[] args, OfflinePlayer offline) throws CommandAnswerException
{ {
final String targetName = args[0]; final String targetName = args[0];
final String subcommand = args.length > 1 && args[1] != null final String subcommand = args.length > 1 && args[1] != null
@ -325,9 +329,112 @@ public class CommandEntity extends CommandEntityHelper
showPlayerParents(result, targetName); showPlayerParents(result, targetName);
break; break;
case "info": case "info":
// Should I show some INFO for this result? not now ... showPlayerDetails(result, offline);
case "help": case "help":
throw new CommandAnswerException(getHelpForType(TargetType.PLAYER)); throw new CommandAnswerException(getHelpForType(TargetType.PLAYER));
} }
} }
private void showPlayerDetails(ResolutionResult result, OfflinePlayer offline) throws CommandAnswerException
{
final List<String> answer = new ArrayList<>(8);
if(offline != null)
{
// Show name, uuid
try
{
answer.add("Last seen name: {_YL}" + offline.getName());
} catch(RuntimeException | NoSuchMethodError ex) {
}
try
{
answer.add("Unique ID (uuid): {_YL}" + offline.getUniqueId().toString().toLowerCase());
} catch(RuntimeException | NoSuchMethodError ex) {
}
// Show IP-address
try
{
final Player online = offline.getPlayer();
if(online != null)
{
final InetSocketAddress socketAddress = online.getAddress();
if(socketAddress != null)
answer.add("Connection IP: {_YL}" + socketAddress.getAddress().getHostAddress());
}
} catch(RuntimeException | NoSuchMethodError ex) {
}
// Show isBanned, isOpped, isWhitelisted
if(offline.isOp() || offline.isBanned()|| offline.isWhitelisted())
{
final StringBuilder sb = new StringBuilder("Options:");
if(offline.isOp())
sb.append("{_LG} server operator{_LS}");
if(offline.isBanned())
sb.append("{_LR} banned{_LS}");
if(offline.isWhitelisted())
sb.append("{_WH} whitelisted");
sb.append("{_LS}.");
answer.add(sb.toString());
}
}
// Show prefix and suffix, number of parent groups and permissions
final StringBuilder sb = new StringBuilder("Details:");
final String prefix = result.getPrefix();
final String suffix = result.getSuffix();
final boolean hasPrefix = prefix != null && !"".equals(prefix);
final boolean hasSuffix = suffix != null && !"".equals(suffix);
if(hasPrefix || hasSuffix)
sb
.append("{_R} {_LS}[\'")
.append(hasPrefix ? prefix : "")
.append("{_LS}\', \'")
.append(hasSuffix ? suffix : "")
.append("{_LS}\']");
final Map<String, Boolean> permissions = result.getPermissions();
if(permissions != null && !permissions.isEmpty())
sb.append(String.format("{_R} {_LC}%d{_DC}p", permissions.size()));
final Set<String> uniqueGroups = result.getUniqueGroups();
if(!uniqueGroups.isEmpty())
sb.append(String.format("{_R} {_LC}%d{_DC}i", uniqueGroups.size()));
answer.add(sb.toString());
throw new CommandAnswerException(answer);
}
private void showPlayerPrefix(ResolutionResult result, String user) throws CommandAnswerException
{
if(Matchers.isCorrectDashlessUUID(user))
user = Matchers.uuidAddDashes(user);
final ArrayList<String> answer = new ArrayList<>();
answer.add("Calculated prefix for user {_YL}" + user + "{_LS} is:");
answer.add("{_R}\"" + result.getPrefix() + "{_R}\"");
throw new CommandAnswerException(answer);
}
private void showPlayerSuffix(ResolutionResult result, String user) throws CommandAnswerException
{
if(Matchers.isCorrectDashlessUUID(user))
user = Matchers.uuidAddDashes(user);
final ArrayList<String> answer = new ArrayList<>();
answer.add("Calculated suffix for user {_YL}" + user + "{_LS} is:");
answer.add("{_R}\"" + result.getSuffix() + "{_R}\"");
throw new CommandAnswerException(answer);
}
private void showPlayerPermissions(ResolutionResult result, String user) throws CommandAnswerException
{
if(Matchers.isCorrectDashlessUUID(user))
user = Matchers.uuidAddDashes(user);
final ArrayList<String> answer = new ArrayList<>();
answer.add("Permission list for user {_YL}" + user + "{_LS}:");
for(Map.Entry<String, Boolean> entry : result.getPermissions().entrySet())
answer.add((entry.getValue() ? "{_LG}" : "{_LR}") + entry.getKey());
throw new CommandAnswerException(answer);
}
private void showPlayerParents(ResolutionResult result, String player) throws CommandAnswerException
{
if(Matchers.isCorrectDashlessUUID(player))
player = Matchers.uuidAddDashes(player);
final ArrayList<String> answer = new ArrayList<>();
answer.add("List of parent groups for player {_YL}" + player + "{_LS}:");
for(String group : result.getOrderedGroups())
answer.add("{_LG}" + group);
throw new CommandAnswerException(answer);
}
} }

143
src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/CommandEntityHelper.java

@ -3,15 +3,12 @@ package ru.simsonic.rscPermissions.Bukkit.Commands;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.Map;
import ru.simsonic.rscMinecraftLibrary.Bukkit.CommandAnswerException; import ru.simsonic.rscMinecraftLibrary.Bukkit.CommandAnswerException;
import ru.simsonic.rscPermissions.API.EntityType; import ru.simsonic.rscPermissions.API.EntityType;
import ru.simsonic.rscPermissions.API.RowEntity; import ru.simsonic.rscPermissions.API.RowEntity;
import ru.simsonic.rscPermissions.API.RowInheritance; import ru.simsonic.rscPermissions.API.RowInheritance;
import ru.simsonic.rscPermissions.API.RowPermission; import ru.simsonic.rscPermissions.API.RowPermission;
import ru.simsonic.rscPermissions.BukkitPluginMain; import ru.simsonic.rscPermissions.BukkitPluginMain;
import ru.simsonic.rscPermissions.Engine.Matchers;
import ru.simsonic.rscPermissions.Engine.ResolutionResult;
public class CommandEntityHelper public class CommandEntityHelper
{ {
@ -20,6 +17,57 @@ public class CommandEntityHelper
{ {
this.rscp = plugin; this.rscp = plugin;
} }
protected void showEntityPrefix(RowEntity entity) throws CommandAnswerException
{
if(entity.prefix != null)
throw new CommandAnswerException(String.format(
"Own prefix for %s {_YL}%s{_LS} is {_R}\"%s{_R}\"",
entity.entityType.equals(EntityType.GROUP) ? "group" : "user",
entity.entity,
entity.prefix));
throw new CommandAnswerException(String.format(
"Own prefix for %s {_YL}%s{_LS} is not set (null).",
entity.entityType.equals(EntityType.GROUP) ? "group" : "user",
entity.entity));
}
protected void showEntitySuffix(RowEntity entity) throws CommandAnswerException
{
if(entity.suffix != null)
throw new CommandAnswerException(String.format(
"Own suffix for %s {_YL}%s{_LS} is {_R}\"%s{_R}\"",
entity.entityType.equals(EntityType.GROUP) ? "group" : "user",
entity.entity,
entity.suffix));
throw new CommandAnswerException(String.format(
"Own suffix for %s {_YL}%s{_LS} is not set (null).",
entity.entityType.equals(EntityType.GROUP) ? "group" : "user",
entity.entity));
}
protected void showEntityPermissions(RowEntity entity) throws CommandAnswerException
{
final ArrayList<String> answer = new ArrayList<>();
final String typeName = entity.entityType.name().toLowerCase();
answer.add("Explicit permissions for " + typeName + " {_YL}" + entity.entity + "{_LS}:");
for(RowPermission permission : entity.permissions)
{
final String details = showPermissionDetails(permission);
if(details != null)
answer.add(details);
}
throw new CommandAnswerException(answer);
}
protected void showEntityParents(RowEntity entity) throws CommandAnswerException
{
final ArrayList<String> answer = new ArrayList<>();
answer.add("Explicit parent groups for " + entity.entityType.name().toLowerCase() + " {_YL}" + entity.entity + "{_LS}:");
for(RowInheritance parent : entity.inheritance)
{
final String details = showInheritanceDetails(parent);
if(details != null)
answer.add(details);
}
throw new CommandAnswerException(answer);
}
protected String showEntityDetails(RowEntity entity) protected String showEntityDetails(RowEntity entity)
{ {
final String name = entity.entity; final String name = entity.entity;
@ -52,19 +100,6 @@ public class CommandEntityHelper
sb.append(String.format("{_R} {_LC}%d{_DC}i", entity.inheritance.length)); sb.append(String.format("{_R} {_LC}%d{_DC}i", entity.inheritance.length));
return sb.toString(); return sb.toString();
} }
protected void showEntityPermissions(RowEntity entity) throws CommandAnswerException
{
final ArrayList<String> answer = new ArrayList<>();
final String typeName = entity.entityType.name().toLowerCase();
answer.add("Explicit permissions for " + typeName + " {_YL}" + entity.entity + "{_LS}:");
for(RowPermission permission : entity.permissions)
{
final String details = showPermissionDetails(permission);
if(details != null)
answer.add(details);
}
throw new CommandAnswerException(answer);
}
protected String showPermissionDetails(RowPermission row) protected String showPermissionDetails(RowPermission row)
{ {
final StringBuilder sb = new StringBuilder(); final StringBuilder sb = new StringBuilder();
@ -85,18 +120,6 @@ public class CommandEntityHelper
} }
return sb.toString(); return sb.toString();
} }
protected void showEntityParents(RowEntity entity) throws CommandAnswerException
{
final ArrayList<String> answer = new ArrayList<>();
answer.add("Explicit parent groups for " + entity.entityType.name().toLowerCase() + " {_YL}" + entity.entity + "{_LS}:");
for(RowInheritance parent : entity.inheritance)
{
final String details = showInheritanceDetails(parent);
if(details != null)
answer.add(details);
}
throw new CommandAnswerException(answer);
}
protected String showInheritanceDetails(RowInheritance row) protected String showInheritanceDetails(RowInheritance row)
{ {
final StringBuilder sb = new StringBuilder(); final StringBuilder sb = new StringBuilder();
@ -117,70 +140,6 @@ public class CommandEntityHelper
} }
return sb.toString(); return sb.toString();
} }
protected void showPlayerPermissions(ResolutionResult result, String user) throws CommandAnswerException
{
if(Matchers.isCorrectDashlessUUID(user))
user = Matchers.uuidAddDashes(user);
final ArrayList<String> answer = new ArrayList<>();
answer.add("Permission list for user {_YL}" + user + "{_LS}:");
for(Map.Entry<String, Boolean> entry : result.getPermissions().entrySet())
answer.add((entry.getValue() ? "{_LG}" : "{_LR}") + entry.getKey());
throw new CommandAnswerException(answer);
}
protected void showPlayerParents(ResolutionResult result, String player) throws CommandAnswerException
{
if(Matchers.isCorrectDashlessUUID(player))
player = Matchers.uuidAddDashes(player);
final ArrayList<String> answer = new ArrayList<>();
answer.add("List of parent groups for player {_YL}" + player + "{_LS}:");
for(String group : result.getOrderedGroups())
answer.add("{_LG}" + group);
throw new CommandAnswerException(answer);
}
protected void showEntityPrefix(RowEntity entity) throws CommandAnswerException
{
if(entity.prefix != null)
throw new CommandAnswerException(String.format(
"Own prefix for %s {_YL}%s{_LS} is {_R}\"%s{_R}\"",
entity.entityType.equals(EntityType.GROUP) ? "group" : "user",
entity.entity,
entity.prefix));
throw new CommandAnswerException(String.format(
"Own prefix for %s {_YL}%s{_LS} is not set (null).",
entity.entityType.equals(EntityType.GROUP) ? "group" : "user",
entity.entity));
}
protected void showEntitySuffix(RowEntity entity) throws CommandAnswerException
{
if(entity.suffix != null)
throw new CommandAnswerException(String.format(
"Own suffix for %s {_YL}%s{_LS} is {_R}\"%s{_R}\"",
entity.entityType.equals(EntityType.GROUP) ? "group" : "user",
entity.entity,
entity.suffix));
throw new CommandAnswerException(String.format(
"Own suffix for %s {_YL}%s{_LS} is not set (null).",
entity.entityType.equals(EntityType.GROUP) ? "group" : "user",
entity.entity));
}
protected void showPlayerPrefix(ResolutionResult result, String user) throws CommandAnswerException
{
if(Matchers.isCorrectDashlessUUID(user))
user = Matchers.uuidAddDashes(user);
final ArrayList<String> answer = new ArrayList<>();
answer.add("Calculated prefix for user {_YL}" + user + "{_LS} is:");
answer.add("{_R}\"" + result.getPrefix() + "{_R}\"");
throw new CommandAnswerException(answer);
}
protected void showPlayerSuffix(ResolutionResult result, String user) throws CommandAnswerException
{
if(Matchers.isCorrectDashlessUUID(user))
user = Matchers.uuidAddDashes(user);
final ArrayList<String> answer = new ArrayList<>();
answer.add("Calculated suffix for user {_YL}" + user + "{_LS} is:");
answer.add("{_R}\"" + result.getSuffix() + "{_R}\"");
throw new CommandAnswerException(answer);
}
protected void addGroup(RowEntity entity, String parent, ArgumentUtilities.OptionalParams optional) throws CommandAnswerException protected void addGroup(RowEntity entity, String parent, ArgumentUtilities.OptionalParams optional) throws CommandAnswerException
{ {
final String[] splitted = RowInheritance.splitIntoNameAndInstance(parent); final String[] splitted = RowInheritance.splitIntoNameAndInstance(parent);

17
src/main/java/ru/simsonic/rscPermissions/Engine/ResolutionResult.java

@ -4,9 +4,9 @@ import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.regex.Pattern; import java.util.Set;
import java.util.TreeSet;
import ru.simsonic.rscMinecraftLibrary.Bukkit.GenericChatCodes; import ru.simsonic.rscMinecraftLibrary.Bukkit.GenericChatCodes;
import ru.simsonic.rscPermissions.API.RowEntity;
import ru.simsonic.rscPermissions.API.Settings; import ru.simsonic.rscPermissions.API.Settings;
public class ResolutionResult extends IntermediateResult public class ResolutionResult extends IntermediateResult
@ -49,16 +49,21 @@ public class ResolutionResult extends IntermediateResult
public String[] getDeorderedGroups() public String[] getDeorderedGroups()
{ {
final ArrayList<String> list = new ArrayList(groups.size()); final ArrayList<String> list = new ArrayList(groups.size());
final String separator = Pattern.quote(new String(new char[] { Settings.SHOW_GROUP_LEVEL }));
for(String group : groups) for(String group : groups)
{ {
final String[] splitted = group.split(separator); final String[] splitted = group.split(Settings.REGEXP_GROUP_LVL);
list.add(splitted[splitted.length - 1]); list.add(splitted[splitted.length - 1]);
} }
return list.toArray(new String[list.size()]); return list.toArray(new String[list.size()]);
} }
public RowEntity[] getApplicableRows() public Set<String> getUniqueGroups()
{ {
return null; final Set<String> result = new TreeSet<>();
for(String group : groups)
{
final String[] splitted = group.split(Settings.REGEXP_GROUP_LVL);
result.add(splitted[splitted.length - 1]);
}
return result;
} }
} }

Loading…
Cancel
Save