Uniformization of how permission check is handled between pandalib-(.*-)players, Paper/Bungee and pandalib-permissions.

When an *OnlinePlayer class ask for permission, it always ask for Paper/Bungee API. The pandalib-permissions system will be called by Paper/Bungee only if it used and integrated into Paper/Bungee using the appropriate modules.
This commit reduces inter-dependencies between pandalib-(.*-)permissions modules and pandalib-(.*-)players (except pandalib-players-permissible that has to depends on pandalib-permissions)
This commit is contained in:
2022-08-08 03:16:00 +02:00
parent a885c224a6
commit f976350ee1
14 changed files with 95 additions and 40 deletions

View File

@@ -23,8 +23,9 @@
<dependencies>
<dependency>
<groupId>fr.pandacube.lib</groupId>
<artifactId>pandalib-players-permissible</artifactId>
<artifactId>pandalib-players</artifactId>
<version>${project.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>fr.pandacube.lib</groupId>

View File

@@ -1,5 +1,8 @@
package fr.pandacube.lib.bungee.permissions;
import fr.pandacube.lib.permissions.Permissions;
import fr.pandacube.lib.players.standalone.StandaloneOnlinePlayer;
import fr.pandacube.lib.players.standalone.StandalonePlayerManager;
import net.md_5.bungee.api.CommandSender;
import net.md_5.bungee.api.ProxyServer;
import net.md_5.bungee.api.connection.ProxiedPlayer;
@@ -9,10 +12,6 @@ import net.md_5.bungee.api.plugin.Listener;
import net.md_5.bungee.api.plugin.Plugin;
import net.md_5.bungee.event.EventHandler;
import fr.pandacube.lib.permissions.Permissions;
import fr.pandacube.lib.players.permissible.PermissibleOnlinePlayer;
import fr.pandacube.lib.players.permissible.PermissiblePlayerManager;
public class PandalibBungeePermissions implements Listener {
public static void init(Plugin bungeePlugin) {
@@ -35,13 +34,14 @@ public class PandalibBungeePermissions implements Listener {
private volatile boolean tryPermPlayerManager = true;
private boolean hasPerm(ProxiedPlayer p, String permission) {
String world = null;
if (tryPermPlayerManager) {
try {
PermissiblePlayerManager<?, ?> pm = PermissiblePlayerManager.getInstance();
StandalonePlayerManager<?, ?> pm = StandalonePlayerManager.getInstance();
if (pm != null) {
PermissibleOnlinePlayer op = pm.get(p.getUniqueId());
StandaloneOnlinePlayer op = pm.get(p.getUniqueId());
if (op != null) {
return op.hasPermission(permission);
world = op.getWorldName();
}
}
} catch (NoClassDefFoundError ignored) {
@@ -52,6 +52,6 @@ public class PandalibBungeePermissions implements Listener {
// if not using player manager, fallback to directly call permissions API
Server sv = p.getServer();
String server = sv == null ? null : sv.getInfo().getName();
return Permissions.getPlayer(p.getUniqueId()).hasPermissionOr(permission, server, null, false);
return Permissions.getPlayer(p.getUniqueId()).hasPermissionOr(permission, server, world, false);
}
}