From 3d7dc9f87c4dfbb9983f7fd1044c80af7c10a050 Mon Sep 17 00:00:00 2001 From: SimSonic Date: Fri, 5 Aug 2016 01:26:31 +0700 Subject: [PATCH] Force entity creation when editing it by inserting 'new' keyword between it's type and name: /rscp group new NonExistingGroup ap plugin.section.permission --- .../Bukkit/Commands/CommandEntity.java | 25 ++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/CommandEntity.java b/src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/CommandEntity.java index 7f5ab9a..b5118f7 100644 --- a/src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/CommandEntity.java +++ b/src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/CommandEntity.java @@ -76,6 +76,12 @@ public class CommandEntity args = Arrays.copyOfRange(args, 1, args.length); if(args.length == 0) throw new CommandAnswerException(getHelpForType(type)); + final boolean forceEntityCreation = args.length > 1 && "new".equalsIgnoreCase(args[0]); + if(forceEntityCreation) + { + // Remove this optional argument from the battlefront + args = Arrays.copyOfRange(args, 1, args.length); + } ResolutionResult result = null; RowEntity entity = null; switch(type) @@ -92,13 +98,21 @@ public class CommandEntity break; case USER: entity = rscp.internalCache.findUserEntity(args[0]); + if(entity == null && forceEntityCreation) + entity = createEntity(EntityType.PLAYER, args[0]); break; case GROUP: entity = rscp.internalCache.findGroupEntity(args[0]); + if(entity == null && forceEntityCreation) + entity = createEntity(EntityType.PLAYER, args[0]); break; } if(entity == null && result == null) - throw new CommandAnswerException("{_LR}Sorry, I don't know such identifier!"); + throw new CommandAnswerException(new String[] + { + "{_LR}Sorry, I don't know such identifier!", + "{_LR}Do you want to force it's creation with special keyword {_YL}new{_LR} before name?", + }); final String targetName = args[0]; final String subcommand = args.length > 1 && args[1] != null ? args[1].toLowerCase() @@ -179,6 +193,15 @@ public class CommandEntity } throw new CommandAnswerException(getHelpForType(type)); } + private RowEntity createEntity(EntityType type, String name) + { + final RowEntity result = new RowEntity(); + result.entity = name; + result.entityType = type; + result.permissions = new RowPermission[] {}; + result.inheritance = new RowInheritance[] {}; + return result; + } public void listGroups(CommandSender sender) throws CommandAnswerException { if(sender.hasPermission("rscp.admin") == false)