Skip to content

Commit

Permalink
simplify down to permissible
Browse files Browse the repository at this point in the history
  • Loading branch information
xGinko committed Jan 1, 2025
1 parent f9c823a commit e14f271
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 24 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,13 @@
import com.github.benmanes.caffeine.cache.Cache;
import com.github.benmanes.caffeine.cache.Caffeine;
import me.xginko.aef.utils.enums.TriState;
import org.bukkit.command.CommandSender;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.HandlerList;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerKickEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.permissions.Permissible;
import org.bukkit.permissions.PermissionAttachmentInfo;
import org.bukkit.plugin.java.JavaPlugin;

Expand All @@ -19,7 +19,7 @@

public final class BukkitPermissionHandler implements PermissionHandler, Listener {

private final Map<CommandSender, Cache<String, TriState>> permissionCacheMap;
private final Map<Permissible, Cache<String, TriState>> permissionCacheMap;
private final Duration permissionCacheDuration;

BukkitPermissionHandler(JavaPlugin plugin) {
Expand All @@ -31,35 +31,35 @@ public final class BukkitPermissionHandler implements PermissionHandler, Listene
@Override
public void disable() {
HandlerList.unregisterAll(this);
for (Map.Entry<CommandSender, Cache<String, TriState>> entry : permissionCacheMap.entrySet()) {
for (Map.Entry<Permissible, Cache<String, TriState>> entry : permissionCacheMap.entrySet()) {
flushCache(entry.getKey());
}
}

@Override
public TriState permissionValue(CommandSender commandSender, String permission) {
Cache<String, TriState> permCache = permissionCacheMap.computeIfAbsent(commandSender, sender ->
public TriState permissionValue(Permissible permissible, String permission) {
Cache<String, TriState> permCache = permissionCacheMap.computeIfAbsent(permissible, sender ->
Caffeine.newBuilder().expireAfterWrite(permissionCacheDuration).build());
TriState value = permCache.getIfPresent(permission);
if (value == null) {
value = commandSender.isPermissionSet(permission) ? TriState.of(commandSender.hasPermission(permission)) : TriState.UNDEFINED;
value = permissible.isPermissionSet(permission) ? TriState.of(permissible.hasPermission(permission)) : TriState.UNDEFINED;
permCache.put(permission, value);
}
return value;
}

@Override
public void setPermission(CommandSender commandSender, String permission, TriState state) {
for (PermissionAttachmentInfo attachmentInfo : commandSender.getEffectivePermissions()) {
public void setPermission(Permissible permissible, String permission, TriState state) {
for (PermissionAttachmentInfo attachmentInfo : permissible.getEffectivePermissions()) {
if (attachmentInfo.getAttachment() == null) {
continue;
}

if (attachmentInfo.getPermission().equals(permission)) {
if (state == TriState.UNDEFINED) {
commandSender.removeAttachment(attachmentInfo.getAttachment());
permissible.removeAttachment(attachmentInfo.getAttachment());
} else {
commandSender.addAttachment(attachmentInfo.getAttachment().getPlugin(), permission, state.toBoolean());
permissible.addAttachment(attachmentInfo.getAttachment().getPlugin(), permission, state.toBoolean());
}
}
}
Expand All @@ -75,7 +75,7 @@ private void onPlayerKick(PlayerKickEvent event) {
flushCache(event.getPlayer());
}

private void flushCache(CommandSender commandSender) {
private void flushCache(Permissible commandSender) {
if (permissionCacheMap.containsKey(commandSender)) {
permissionCacheMap.get(commandSender).invalidateAll();
permissionCacheMap.get(commandSender).cleanUp();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@
import net.luckperms.api.LuckPerms;
import net.luckperms.api.model.user.User;
import net.luckperms.api.node.Node;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.permissions.Permissible;
import org.bukkit.plugin.java.JavaPlugin;

public final class LuckPermsPermissionHandler implements PermissionHandler {
Expand All @@ -25,9 +25,9 @@ public static boolean isSupported(JavaPlugin plugin) {
}

@Override
public TriState permissionValue(CommandSender commandSender, String permission) {
if (commandSender instanceof Player) {
switch (luckPerms.getPlayerAdapter(Player.class).getUser((Player) commandSender).getCachedData().getPermissionData()
public TriState permissionValue(Permissible permissible, String permission) {
if (permissible instanceof Player) {
switch (luckPerms.getPlayerAdapter(Player.class).getUser((Player) permissible).getCachedData().getPermissionData()
.checkPermission(permission)) {
case TRUE:
return TriState.TRUE;
Expand All @@ -37,22 +37,22 @@ public TriState permissionValue(CommandSender commandSender, String permission)
return TriState.UNDEFINED;
}
} else {
return bukkitPermissionHandler.permissionValue(commandSender, permission);
return bukkitPermissionHandler.permissionValue(permissible, permission);
}
}

@Override
public void setPermission(CommandSender commandSender, String permission, TriState state) {
if (commandSender instanceof Player) {
User luckPermsUser = luckPerms.getPlayerAdapter(Player.class).getUser((Player) commandSender);
public void setPermission(Permissible permissible, String permission, TriState state) {
if (permissible instanceof Player) {
User luckPermsUser = luckPerms.getPlayerAdapter(Player.class).getUser((Player) permissible);
if (state == TriState.UNDEFINED) {
luckPermsUser.data().remove(Node.builder(permission).build());
} else {
luckPermsUser.data().add(Node.builder(permission).value(state.toBoolean()).build());
}
luckPerms.getUserManager().saveUser(luckPermsUser);
} else {
bukkitPermissionHandler.setPermission(commandSender, permission, state);
bukkitPermissionHandler.setPermission(permissible, permission, state);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,17 @@

import me.xginko.aef.utils.enums.TriState;
import me.xginko.aef.utils.models.Disableable;
import org.bukkit.command.CommandSender;
import org.bukkit.permissions.Permissible;
import org.bukkit.plugin.java.JavaPlugin;

public interface PermissionHandler extends Disableable {

static PermissionHandler create(JavaPlugin plugin) {
return LuckPermsPermissionHandler.isSupported(plugin) ? new LuckPermsPermissionHandler(plugin) : new BukkitPermissionHandler(plugin);

}

default void disable() {}
TriState permissionValue(CommandSender commandSender, String permission);
void setPermission(CommandSender commandSender, String permission, TriState state);
TriState permissionValue(Permissible permissible, String permission);
void setPermission(Permissible permissible, String permission, TriState state);

}

0 comments on commit e14f271

Please sign in to comment.