diff --git a/pom.xml b/pom.xml
index ec1c2d0..0717194 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,7 +4,7 @@
ru.simsonic
rscPermissions
- 0.9.7a
+ 0.9.8a
jar
rscPermissions
@@ -66,7 +66,7 @@
ru.simsonic
rscUtilityLibrary
- 2.0.3
+ 2.0.4
compile
jar
diff --git a/src/main/java/ru/simsonic/rscPermissions/BridgeForBukkitAPI.java b/src/main/java/ru/simsonic/rscPermissions/BridgeForBukkitAPI.java
index 17d8c6e..5fc79e3 100644
--- a/src/main/java/ru/simsonic/rscPermissions/BridgeForBukkitAPI.java
+++ b/src/main/java/ru/simsonic/rscPermissions/BridgeForBukkitAPI.java
@@ -5,6 +5,7 @@ import org.bukkit.plugin.ServicePriority;
import ru.simsonic.rscPermissions.Bukkit.VaultChat;
import ru.simsonic.rscPermissions.Bukkit.VaultPermission;
import ru.simsonic.rscPermissions.Engine.Phrases;
+import ru.simsonic.rscUtilityLibrary.Bukkit.Tools;
import ru.simsonic.rscUtilityLibrary.TextProcessing.GenericChatCodes;
public class BridgeForBukkitAPI
@@ -46,7 +47,7 @@ public class BridgeForBukkitAPI
}
public Player findPlayer(String player)
{
- for(Player online : rscp.getServer().getOnlinePlayers())
+ for(Player online : Tools.getOnlinePlayers())
if(online.getName().equals(player))
return online;
return null;
diff --git a/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitEventListener.java b/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitEventListener.java
index fdf6b21..2e3c9d7 100644
--- a/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitEventListener.java
+++ b/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitEventListener.java
@@ -14,6 +14,7 @@ import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.event.server.ServerListPingEvent;
import ru.simsonic.rscPermissions.BukkitPluginMain;
import ru.simsonic.rscPermissions.Engine.ResolutionResult;
+import ru.simsonic.rscUtilityLibrary.Bukkit.Tools;
import ru.simsonic.rscUtilityLibrary.TextProcessing.GenericChatCodes;
public class BukkitEventListener implements Listener
@@ -109,7 +110,7 @@ public class BukkitEventListener implements Listener
@Override
public void run()
{
- for(Player player : Bukkit.getServer().getOnlinePlayers())
+ for(Player player : Tools.getOnlinePlayers())
{
if(player.hasPermission("rscp.maintenance.*"))
continue;
diff --git a/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitPermissionManager.java b/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitPermissionManager.java
index dc122b6..8649553 100644
--- a/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitPermissionManager.java
+++ b/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitPermissionManager.java
@@ -8,12 +8,14 @@ import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.LinkedBlockingQueue;
+import org.bukkit.OfflinePlayer;
import org.bukkit.entity.Player;
import org.bukkit.permissions.PermissionAttachment;
import ru.simsonic.rscPermissions.API.Settings;
import ru.simsonic.rscPermissions.BukkitPluginMain;
import ru.simsonic.rscPermissions.Engine.ResolutionParams;
import ru.simsonic.rscPermissions.Engine.ResolutionResult;
+import ru.simsonic.rscUtilityLibrary.Bukkit.Tools;
import ru.simsonic.rscUtilityLibrary.RestartableThread;
import ru.simsonic.rscUtilityLibrary.TextProcessing.GenericChatCodes;
@@ -24,6 +26,7 @@ public class BukkitPermissionManager extends RestartableThread
{
this.rscp = plugin;
}
+ private final Map resolutions = new ConcurrentHashMap<>();
private final LinkedBlockingQueue updateQueue = new LinkedBlockingQueue<>();
private final Map attachments = new HashMap<>();
private final Map> persistentPermissions = new HashMap<>();
@@ -34,7 +37,7 @@ public class BukkitPermissionManager extends RestartableThread
private final Set debug = new HashSet<>();
public void recalculateOnlinePlayers()
{
- updateQueue.addAll(rscp.getServer().getOnlinePlayers());
+ updateQueue.addAll(Tools.getOnlinePlayers());
rscp.scheduleAutoUpdate();
}
public void recalculatePlayer(Player player)
@@ -45,27 +48,32 @@ public class BukkitPermissionManager extends RestartableThread
} catch(InterruptedException ex) {
}
}
- public Map listPlayerPermissions(Player player)
+ public ResolutionResult getResult(String playerIdentifier)
{
- final PermissionAttachment attachment = rscp.permissionManager.attachments.get(player);
- if(attachment != null)
- return attachment.getPermissions();
- return Collections.EMPTY_MAP;
+ return (resolutions.containsKey(playerIdentifier))
+ ? resolutions.get(playerIdentifier)
+ : resolvePlayerIdentifier(playerIdentifier);
}
- public String getPlayerPrefix(Player player)
+ public ResolutionResult getResult(OfflinePlayer offline)
{
- final String prefix = prefixes.get(player);
- return prefix != null ? prefix : "";
+ final String key = offline.toString();
+ return (resolutions.containsKey(key))
+ ? resolutions.get(key)
+ : resolveOfflinePlayer(offline);
}
- public String getPlayerSuffix(Player player)
+ public ResolutionResult getResult(Player player)
{
- final String suffix = suffixes.get(player);
- return suffix != null ? suffix : "";
+ final String key = player.toString();
+ return (resolutions.containsKey(key))
+ ? resolutions.get(key)
+ : resolvePlayer(player);
}
- public Set getPlayerGroups(Player player)
+ public Map listPlayerPermissions(Player player)
{
- final Set result = groups.get(player);
- return result != null ? result : Collections.EMPTY_SET;
+ final PermissionAttachment attachment = rscp.permissionManager.attachments.get(player);
+ if(attachment != null)
+ return attachment.getPermissions();
+ return Collections.EMPTY_MAP;
}
public void removePlayer(Player player)
{
@@ -131,6 +139,24 @@ public class BukkitPermissionManager extends RestartableThread
}
updateQueue.clear();
}
+ public synchronized ResolutionResult resolvePlayerIdentifier(String playerIdentifier)
+ {
+ final ResolutionParams params = new ResolutionParams();
+ params.applicableIdentifiers = new String[] { playerIdentifier };
+ final ResolutionResult result = rscp.internalCache.resolvePlayer(params);
+ resolutions.put(playerIdentifier, result);
+ return result;
+ }
+ public synchronized ResolutionResult resolveOfflinePlayer(OfflinePlayer offline)
+ {
+ final ResolutionParams params = new ResolutionParams();
+ params.applicableIdentifiers = getOfflinePlayerIdentifiers(offline);
+ final ResolutionResult result = rscp.internalCache.resolvePlayer(params);
+ for(String id : params.applicableIdentifiers)
+ resolutions.put(id, result);
+ resolutions.put(offline.toString(), result);
+ return result;
+ }
public synchronized ResolutionResult resolvePlayer(Player player)
{
final ResolutionParams params = new ResolutionParams();
@@ -143,7 +169,26 @@ public class BukkitPermissionManager extends RestartableThread
params.destRegions = new String[] {};
params.destWorld = player.getLocation().getWorld().getName();
params.expirience = player.getLevel();
- return rscp.internalCache.resolvePlayer(params);
+ final ResolutionResult result = rscp.internalCache.resolvePlayer(params);
+ for(String id : params.applicableIdentifiers)
+ resolutions.put(id, result);
+ resolutions.put(player.toString(), result);
+ return result;
+ }
+ 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)
{
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 f08eede..a5c8f05 100644
--- a/src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/BukkitCommands.java
+++ b/src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/BukkitCommands.java
@@ -316,7 +316,7 @@ public class BukkitCommands
throw new CommandAnswerException(list);
case "groups":
list.add("{MAGENTA}Group list for {_YL}" + player.getName() + "{MAGENTA}:");
- for(String group : rscp.permissionManager.getPlayerGroups(player))
+ for(String group : rscp.bridgeForBukkit.getPermission().getPlayerGroups(player))
list.add("{_LG}" + group);
throw new CommandAnswerException(list);
/*
diff --git a/src/main/java/ru/simsonic/rscPermissions/Bukkit/VaultChat.java b/src/main/java/ru/simsonic/rscPermissions/Bukkit/VaultChat.java
index 38bc8ad..926bb14 100644
--- a/src/main/java/ru/simsonic/rscPermissions/Bukkit/VaultChat.java
+++ b/src/main/java/ru/simsonic/rscPermissions/Bukkit/VaultChat.java
@@ -4,6 +4,7 @@ import org.bukkit.World;
import org.bukkit.entity.Player;
import ru.simsonic.rscPermissions.BridgeForBukkitAPI;
import ru.simsonic.rscPermissions.BukkitPluginMain;
+import ru.simsonic.rscPermissions.Engine.ResolutionResult;
public final class VaultChat extends VaultDeprecatedChat
{
@@ -31,37 +32,41 @@ public final class VaultChat extends VaultDeprecatedChat
@Override
public String getPlayerPrefix(String world, OfflinePlayer player)
{
- throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
+ final ResolutionResult result = rscp.permissionManager.getResult(player);
+ return result.prefix;
}
@Override
public String getPlayerPrefix(Player player)
{
- return rscp.permissionManager.getPlayerPrefix(player);
+ final ResolutionResult result = rscp.permissionManager.getResult(player);
+ return result.prefix;
}
@Override
@Deprecated
public String getPlayerPrefix(String world, String player)
{
- final Player online = bridge.findPlayer(player);
- return online != null ? rscp.permissionManager.getPlayerPrefix(online) : null;
+ final ResolutionResult result = rscp.permissionManager.getResult(player);
+ return result.prefix;
}
// ***** GET PLAYER SUFFIX *****
@Override
public String getPlayerSuffix(String world, OfflinePlayer player)
{
- throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
+ final ResolutionResult result = rscp.permissionManager.getResult(player);
+ return result.suffix;
}
@Override
public String getPlayerSuffix(Player player)
{
- return rscp.permissionManager.getPlayerSuffix(player);
+ final ResolutionResult result = rscp.permissionManager.getResult(player);
+ return result.suffix;
}
@Override
@Deprecated
public String getPlayerSuffix(String world, String player)
{
- final Player online = bridge.findPlayer(player);
- return online != null ? rscp.permissionManager.getPlayerSuffix(online) : null;
+ final ResolutionResult result = rscp.permissionManager.getResult(player);
+ return result.suffix;
}
// ***** SET PLAYER PREFIX *****
@Override
diff --git a/src/main/java/ru/simsonic/rscPermissions/Bukkit/VaultPermission.java b/src/main/java/ru/simsonic/rscPermissions/Bukkit/VaultPermission.java
index bd2027a..a7daf2a 100644
--- a/src/main/java/ru/simsonic/rscPermissions/Bukkit/VaultPermission.java
+++ b/src/main/java/ru/simsonic/rscPermissions/Bukkit/VaultPermission.java
@@ -1,11 +1,11 @@
package ru.simsonic.rscPermissions.Bukkit;
-import java.util.Set;
import org.bukkit.OfflinePlayer;
import org.bukkit.World;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import ru.simsonic.rscPermissions.BridgeForBukkitAPI;
import ru.simsonic.rscPermissions.BukkitPluginMain;
+import ru.simsonic.rscPermissions.Engine.ResolutionResult;
public final class VaultPermission extends net.milkbowl.vault.permission.Permission
{
@@ -83,18 +83,6 @@ public final class VaultPermission extends net.milkbowl.vault.permission.Permiss
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
- @Deprecated
- public String[] getPlayerGroups(String world, String player)
- {
- throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
- }
- @Override
- @Deprecated
- public String getPrimaryGroup(String world, String player)
- {
- throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
- }
- @Override
public String[] getGroups()
{
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
@@ -236,26 +224,41 @@ public final class VaultPermission extends net.milkbowl.vault.permission.Permiss
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
+ @Deprecated
+ public String[] getPlayerGroups(String world, String player)
+ {
+ final ResolutionResult result = rscp.permissionManager.getResult(player);
+ return result.groups.toArray(new String[result.groups.size()]);
+ }
+ @Override
public String[] getPlayerGroups(String world, OfflinePlayer player)
{
- throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
+ final ResolutionResult result = rscp.permissionManager.getResult(player);
+ return result.groups.toArray(new String[result.groups.size()]);
}
@Override
public String[] getPlayerGroups(Player player)
{
- final Set result = rscp.permissionManager.getPlayerGroups(player);
- return result.toArray(new String[result.size()]);
+ final ResolutionResult result = rscp.permissionManager.getResult(player);
+ return result.groups.toArray(new String[result.groups.size()]);
+ }
+ @Override
+ @Deprecated
+ public String getPrimaryGroup(String world, String player)
+ {
+ final String[] groups = getPlayerGroups(world, player);
+ return groups.length > 0 ? groups[groups.length - 1] : rscp.settings.getDefaultGroup();
}
@Override
public String getPrimaryGroup(String world, OfflinePlayer player)
{
- throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
+ final String[] groups = getPlayerGroups(world, player);
+ return groups.length > 0 ? groups[groups.length - 1] : rscp.settings.getDefaultGroup();
}
@Override
public String getPrimaryGroup(Player player)
{
- final Set result = rscp.permissionManager.getPlayerGroups(player);
- final String[] array = result.toArray(new String[result.size()]);
- return array.length > 0 ? array[array.length - 1] : rscp.settings.getDefaultGroup();
+ final String[] groups = getPlayerGroups(player);
+ return groups.length > 0 ? groups[groups.length - 1] : rscp.settings.getDefaultGroup();
}
}