From f0c19dbc5b95825d482374487219e40ccb2118be Mon Sep 17 00:00:00 2001 From: Stanislav Usenkov Date: Mon, 25 Apr 2016 17:52:44 +0600 Subject: [PATCH] I'm still working ... --- pom.xml | 2 +- .../Bukkit/BukkitPermissionManager.java | 43 ++--------------- .../Bukkit/BukkitUtilities.java | 48 +++++++++++++++++++ .../Bukkit/Commands/BukkitCommands.java | 35 -------------- .../Bukkit/Commands/CommandDebug.java | 3 +- .../Bukkit/Commands/CommandUser.java | 22 +++++++-- .../Engine/CommandUtilities.java | 42 ++++++++++++++++ .../Sponge/Commands/SpongeCommands.java | 2 +- .../Sponge/SpongePermissionManager.java | 1 - .../rscPermissions/SpongePluginMain.java | 11 ----- 10 files changed, 116 insertions(+), 93 deletions(-) create mode 100644 src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitUtilities.java create mode 100644 src/main/java/ru/simsonic/rscPermissions/Engine/CommandUtilities.java diff --git a/pom.xml b/pom.xml index 9535ecd..278d7db 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ ru.simsonic rscPermissions - 0.10.0b-SNAPSHOT + 0.10.1b-SNAPSHOT jar rscPermissions diff --git a/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitPermissionManager.java b/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitPermissionManager.java index 542933f..ebf1d81 100644 --- a/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitPermissionManager.java +++ b/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitPermissionManager.java @@ -1,7 +1,5 @@ package ru.simsonic.rscPermissions.Bukkit; -import java.net.InetSocketAddress; -import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.HashMap; @@ -145,7 +143,7 @@ public class BukkitPermissionManager extends RestartableThread public synchronized ResolutionResult resolveOfflinePlayer(OfflinePlayer offline) { final ResolutionParams params = new ResolutionParams(); - params.applicableIdentifiers = getOfflinePlayerIdentifiers(offline); + params.applicableIdentifiers = BukkitUtilities.getOfflinePlayerIdentifiers(offline); final ResolutionResult result = rscp.internalCache.resolvePlayer(params); for(String id : params.applicableIdentifiers) resolutions.put(id, result); @@ -155,7 +153,7 @@ public class BukkitPermissionManager extends RestartableThread public synchronized ResolutionResult resolvePlayer(Player player) { final ResolutionParams params = new ResolutionParams(); - params.applicableIdentifiers = getPlayerIdentifiers(player); + params.applicableIdentifiers = BukkitUtilities.getPlayerIdentifiers(player); if(rscp.regionListProvider != null) { Set regionSet = rscp.regionListProvider.getPlayerRegions(player); @@ -172,47 +170,14 @@ public class BukkitPermissionManager extends RestartableThread } public synchronized void forgetOfflinePlayer(OfflinePlayer offline) { - for(String id : getOfflinePlayerIdentifiers(offline)) + for(String id : BukkitUtilities.getOfflinePlayerIdentifiers(offline)) resolutions.remove(id); } public synchronized void forgetPlayer(Player player) { - for(String id : getPlayerIdentifiers(player)) + for(String id : BukkitUtilities.getPlayerIdentifiers(player)) resolutions.remove(id); } - private static String[] getOfflinePlayerIdentifiers(OfflinePlayer offline) - { - final ArrayList result = new ArrayList<>(); - try - { - result.add(offline.getName()); - } catch(RuntimeException | NoSuchMethodError ex) { - } - try - { - result.add(offline.getUniqueId().toString().toLowerCase()); - } catch(RuntimeException | NoSuchMethodError ex) { - } - return result.toArray(new String[result.size()]); - } - private static String[] getPlayerIdentifiers(Player player) - { - final ArrayList result = new ArrayList<>(); - try - { - result.add(player.getName()); - } catch(RuntimeException | NoSuchMethodError ex) { - } - try - { - result.add(player.getUniqueId().toString().toLowerCase()); - } catch(RuntimeException | NoSuchMethodError ex) { - } - final InetSocketAddress socketAddress = player.getAddress(); - if(socketAddress != null) - result.add(socketAddress.getAddress().getHostAddress()); - return result.toArray(new String[result.size()]); - } public Set getDebuggers() { synchronized(debug) diff --git a/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitUtilities.java b/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitUtilities.java new file mode 100644 index 0000000..0dd1c8a --- /dev/null +++ b/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitUtilities.java @@ -0,0 +1,48 @@ +package ru.simsonic.rscPermissions.Bukkit; + +import java.net.InetSocketAddress; +import java.util.ArrayList; +import org.bukkit.OfflinePlayer; +import org.bukkit.entity.Player; + +public class BukkitUtilities +{ + public static String[] getOfflinePlayerIdentifiers(OfflinePlayer offline) + { + final ArrayList result = new ArrayList<>(); + // SERVERS BEFORE UUIDs + try + { + result.add(offline.getName()); + } catch(RuntimeException | NoSuchMethodError ex) { + } + // SERVERS WITH UUIDs + try + { + result.add(offline.getUniqueId().toString().toLowerCase()); + } catch(RuntimeException | NoSuchMethodError ex) { + } + return result.toArray(new String[result.size()]); + } + public static String[] getPlayerIdentifiers(Player player) + { + // SERVERS BEFORE UUIDs + final ArrayList result = new ArrayList<>(); + try + { + result.add(player.getName()); + } catch(RuntimeException | NoSuchMethodError ex) { + } + // SERVERS WITH UUIDs + try + { + result.add(player.getUniqueId().toString().toLowerCase()); + } catch(RuntimeException | NoSuchMethodError ex) { + } + // ONLINE IP CONNECTION + final InetSocketAddress socketAddress = player.getAddress(); + if(socketAddress != null) + result.add(socketAddress.getAddress().getHostAddress()); + return result.toArray(new String[result.size()]); + } +} diff --git a/src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/BukkitCommands.java b/src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/BukkitCommands.java index be60b39..9cde41c 100644 --- a/src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/BukkitCommands.java +++ b/src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/BukkitCommands.java @@ -177,39 +177,4 @@ public class BukkitCommands } throw new CommandAnswerException(help); } - public static boolean argumentToBoolean(String arg, Boolean prevForToggle) throws IllegalArgumentException - { - if(arg == null || "".equals(arg)) - throw new IllegalArgumentException("Argument is null or empty."); - switch(arg.toLowerCase()) - { - case "enable": - case "true": - case "yes": - case "on": - return true; - case "disable": - case "false": - case "no": - case "off": - return false; - case "toggle": - if(prevForToggle != null) - return !prevForToggle; - else - throw new IllegalArgumentException("Previous value is unknown."); - } - throw new IllegalArgumentException("Cannot understand boolean value."); - } - public static int argumentToInteger(String arg) throws IllegalArgumentException - { - if(arg == null || "".equals(arg)) - throw new IllegalArgumentException("Argument is null or empty."); - try - { - return Integer.parseInt(arg); - } catch(NumberFormatException ex) { - throw new IllegalArgumentException(ex.getMessage()); - } - } } diff --git a/src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/CommandDebug.java b/src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/CommandDebug.java index 84591ee..b79af2c 100644 --- a/src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/CommandDebug.java +++ b/src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/CommandDebug.java @@ -3,6 +3,7 @@ package ru.simsonic.rscPermissions.Bukkit.Commands; import org.bukkit.command.CommandSender; import ru.simsonic.rscMinecraftLibrary.Bukkit.CommandAnswerException; import ru.simsonic.rscPermissions.BukkitPluginMain; +import ru.simsonic.rscPermissions.Engine.CommandUtilities; import ru.simsonic.rscPermissions.Engine.Phrases; public class CommandDebug @@ -21,7 +22,7 @@ public class CommandDebug { try { - isDebugging = BukkitCommands.argumentToBoolean(args[1], isDebugging); + isDebugging = CommandUtilities.argumentToBoolean(args[1], isDebugging); } catch(IllegalArgumentException ex) { throw new CommandAnswerException("{_LR}" + ex.getMessage()); } diff --git a/src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/CommandUser.java b/src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/CommandUser.java index 263ad0f..7a5501a 100644 --- a/src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/CommandUser.java +++ b/src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/CommandUser.java @@ -6,6 +6,7 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import ru.simsonic.rscMinecraftLibrary.Bukkit.CommandAnswerException; import ru.simsonic.rscPermissions.BukkitPluginMain; +import ru.simsonic.rscPermissions.Engine.Backends.DatabaseTransaction; import ru.simsonic.rscPermissions.Engine.Matchers; import ru.simsonic.rscPermissions.Engine.ResolutionResult; @@ -18,6 +19,11 @@ public class CommandUser } public void onUserCommandHub(CommandSender sender, String[] args) throws CommandAnswerException { + /* + /rscp - command + user - 0 + - 1 // -u; --by-uuid / -n (--by-name) + */ if(sender.hasPermission("rscp.admin")) { if(args.length < 3) @@ -28,16 +34,14 @@ public class CommandUser final ResolutionResult result = (player != null) ? rscp.permissionManager.getResult(player) : rscp.permissionManager.getResult(args[1]); - if(Matchers.isCorrectDashlessUUID(args[1])) - args[1] = Matchers.uuidAddDashes(args[1]); switch(args[2].toLowerCase()) { - case "p": case "prefix": + case "p": viewPrefix(result, args[1]); break; - case "s": case "suffix": + case "s": viewSuffix(result, args[1]); break; case "listpermissions": @@ -66,6 +70,8 @@ public class CommandUser } private void viewPrefix(ResolutionResult result, String user) throws CommandAnswerException { + if(Matchers.isCorrectDashlessUUID(user)) + user = Matchers.uuidAddDashes(user); final ArrayList answer = new ArrayList<>(); answer.add("Calculated prefix for user {_YL}" + user + "{_LS} is:"); answer.add("{_R}\"" + result.prefix + "{_R}\""); @@ -73,6 +79,8 @@ public class CommandUser } private void viewSuffix(ResolutionResult result, String user) throws CommandAnswerException { + if(Matchers.isCorrectDashlessUUID(user)) + user = Matchers.uuidAddDashes(user); final ArrayList answer = new ArrayList<>(); answer.add("Calculated suffix for user {_YL}" + user + "{_LS} is:"); answer.add("{_R}\"" + result.suffix + "{_R}\""); @@ -80,6 +88,8 @@ public class CommandUser } private void listPermissions(ResolutionResult result, String user) throws CommandAnswerException { + if(Matchers.isCorrectDashlessUUID(user)) + user = Matchers.uuidAddDashes(user); final ArrayList answer = new ArrayList<>(); answer.add("Permission list for user {_YL}" + user + "{_LS}:"); final ArrayList sorted_keys = new ArrayList<>(result.permissions.keySet()); @@ -90,6 +100,8 @@ public class CommandUser } private void listGroups(ResolutionResult result, String user) throws CommandAnswerException { + if(Matchers.isCorrectDashlessUUID(user)) + user = Matchers.uuidAddDashes(user); final ArrayList answer = new ArrayList<>(); answer.add("Group list for user {_YL}" + user + "{_LS}:"); for(String group : result.getOrderedGroups()) @@ -99,6 +111,8 @@ public class CommandUser private void addGroup(ResolutionResult result, String user, String parent, String destination, Integer seconds) throws CommandAnswerException { final ArrayList answer = new ArrayList<>(); + final DatabaseTransaction databaseTransaction = new DatabaseTransaction(rscp); + databaseTransaction.apply(); throw new CommandAnswerException(answer); } private void removeGroup(ResolutionResult result, String user, String parent) throws CommandAnswerException diff --git a/src/main/java/ru/simsonic/rscPermissions/Engine/CommandUtilities.java b/src/main/java/ru/simsonic/rscPermissions/Engine/CommandUtilities.java new file mode 100644 index 0000000..fa13fd8 --- /dev/null +++ b/src/main/java/ru/simsonic/rscPermissions/Engine/CommandUtilities.java @@ -0,0 +1,42 @@ +package ru.simsonic.rscPermissions.Engine; + +public class CommandUtilities +{ + public static boolean argumentToBoolean(String arg, Boolean prevForToggle) throws IllegalArgumentException + { + if(arg == null || "".equals(arg)) + throw new IllegalArgumentException("Argument is null or empty."); + switch(arg.toLowerCase()) + { + case "enable": + case "true": + case "yes": + case "on": + case "1": + return true; + case "disable": + case "false": + case "no": + case "off": + case "0": + return false; + case "toggle": + if(prevForToggle != null) + return !prevForToggle; + else + throw new IllegalArgumentException("Previous value is unknown."); + } + throw new IllegalArgumentException("Cannot understand boolean value."); + } + public static int argumentToInteger(String arg) throws IllegalArgumentException + { + if(arg == null || "".equals(arg)) + throw new IllegalArgumentException("Argument is null or empty."); + try + { + return Integer.parseInt(arg); + } catch(NumberFormatException ex) { + throw new IllegalArgumentException(ex.getMessage()); + } + } +} diff --git a/src/main/java/ru/simsonic/rscPermissions/Sponge/Commands/SpongeCommands.java b/src/main/java/ru/simsonic/rscPermissions/Sponge/Commands/SpongeCommands.java index 366f06e..3233a8f 100644 --- a/src/main/java/ru/simsonic/rscPermissions/Sponge/Commands/SpongeCommands.java +++ b/src/main/java/ru/simsonic/rscPermissions/Sponge/Commands/SpongeCommands.java @@ -1,10 +1,10 @@ package ru.simsonic.rscPermissions.Sponge.Commands; -import org.spongepowered.api.command.spec.CommandExecutor; import org.spongepowered.api.command.CommandException; import org.spongepowered.api.command.CommandResult; import org.spongepowered.api.command.CommandSource; import org.spongepowered.api.command.args.CommandContext; +import org.spongepowered.api.command.spec.CommandExecutor; import org.spongepowered.api.command.spec.CommandSpec; import org.spongepowered.api.text.Text; diff --git a/src/main/java/ru/simsonic/rscPermissions/Sponge/SpongePermissionManager.java b/src/main/java/ru/simsonic/rscPermissions/Sponge/SpongePermissionManager.java index eb459f4..2418672 100644 --- a/src/main/java/ru/simsonic/rscPermissions/Sponge/SpongePermissionManager.java +++ b/src/main/java/ru/simsonic/rscPermissions/Sponge/SpongePermissionManager.java @@ -3,7 +3,6 @@ package ru.simsonic.rscPermissions.Sponge; import java.util.Collection; import java.util.Map; import java.util.Optional; -import org.slf4j.Logger; import org.spongepowered.api.service.context.ContextCalculator; import org.spongepowered.api.service.permission.PermissionDescription; import org.spongepowered.api.service.permission.PermissionService; diff --git a/src/main/java/ru/simsonic/rscPermissions/SpongePluginMain.java b/src/main/java/ru/simsonic/rscPermissions/SpongePluginMain.java index 1be9c27..e3c88ac 100644 --- a/src/main/java/ru/simsonic/rscPermissions/SpongePluginMain.java +++ b/src/main/java/ru/simsonic/rscPermissions/SpongePluginMain.java @@ -1,17 +1,6 @@ package ru.simsonic.rscPermissions; -import com.google.inject.Inject; import java.io.File; -import org.slf4j.Logger; -/* -import org.spongepowered.api.Game; -import org.spongepowered.api.event.Subscribe; -import org.spongepowered.api.event.sstate.ServerAboutToStartEvent; -import org.spongepowered.api.event.state.ServerStartedEvent; -import org.spongepowered.api.event.state.ServerStartingEvent; -import org.spongepowered.api.event.state.ServerStoppedEvent; -import org.spongepowered.api.event.state.ServerStoppingEvent; -*/ import org.spongepowered.api.plugin.Plugin; import ru.simsonic.rscPermissions.API.Settings; import ru.simsonic.rscPermissions.Engine.Backends.BackendDatabase;