Browse Source

All ResolutionResult objects are now stored in separate ConcurrentHashMap.

The keys are all available player identitifiers including Player.toString() and OfflinePlayer.toString().
This helped to implement deprecated Vault methods.
master
SimSonic 10 years ago
parent
commit
9a725bac31
  1. 4
      pom.xml
  2. 3
      src/main/java/ru/simsonic/rscPermissions/BridgeForBukkitAPI.java
  3. 3
      src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitEventListener.java
  4. 77
      src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitPermissionManager.java
  5. 2
      src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/BukkitCommands.java
  6. 21
      src/main/java/ru/simsonic/rscPermissions/Bukkit/VaultChat.java
  7. 43
      src/main/java/ru/simsonic/rscPermissions/Bukkit/VaultPermission.java

4
pom.xml

@ -4,7 +4,7 @@
<groupId>ru.simsonic</groupId>
<artifactId>rscPermissions</artifactId>
<version>0.9.7a</version>
<version>0.9.8a</version>
<packaging>jar</packaging>
<name>rscPermissions</name>
@ -66,7 +66,7 @@
<dependency>
<groupId>ru.simsonic</groupId>
<artifactId>rscUtilityLibrary</artifactId>
<version>2.0.3</version>
<version>2.0.4</version>
<scope>compile</scope>
<type>jar</type>
</dependency>

3
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;

3
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;

77
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<String, ResolutionResult> resolutions = new ConcurrentHashMap<>();
private final LinkedBlockingQueue<Player> updateQueue = new LinkedBlockingQueue<>();
private final Map<Player, PermissionAttachment> attachments = new HashMap<>();
private final Map<Player, Map<String, Boolean>> persistentPermissions = new HashMap<>();
@ -34,7 +37,7 @@ public class BukkitPermissionManager extends RestartableThread
private final Set<Player> 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<String, Boolean> 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<String> getPlayerGroups(Player player)
public Map<String, Boolean> listPlayerPermissions(Player player)
{
final Set<String> 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<String> 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)
{

2
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);
/*

21
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

43
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<String> 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<String> 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();
}
}

Loading…
Cancel
Save