CloudNetPerms2Hook.java

package dev.aura.bungeechat.hook;

import de.dytanic.cloudnet.api.CloudAPI;
import de.dytanic.cloudnet.lib.player.CloudPlayer;
import de.dytanic.cloudnet.lib.player.permission.PermissionGroup;
import de.dytanic.cloudnet.lib.player.permission.PermissionPool;
import dev.aura.bungeechat.api.account.BungeeChatAccount;
import dev.aura.bungeechat.api.hook.BungeeChatHook;
import dev.aura.bungeechat.api.hook.HookManager;
import java.util.Optional;

public class CloudNetPerms2Hook implements BungeeChatHook {
  private final CloudAPI api;

  public CloudNetPerms2Hook() {
    api = CloudAPI.getInstance();
  }

  @Override
  public Optional<String> getPrefix(BungeeChatAccount account) {
    return getPermissionGroup(account).map(PermissionGroup::getPrefix);
  }

  @Override
  public Optional<String> getSuffix(BungeeChatAccount account) {
    return getPermissionGroup(account).map(PermissionGroup::getSuffix);
  }

  private Optional<PermissionGroup> getPermissionGroup(BungeeChatAccount account) {
    CloudPlayer player = api.getOnlinePlayer(account.getUniqueId());
    PermissionGroup permissionGroup =
        player.getPermissionEntity().getHighestPermissionGroup(api.getPermissionPool());

    return Optional.ofNullable(permissionGroup);
  }

  @Override
  public int getPriority() {
    return HookManager.PERMISSION_PLUGIN_PREFIX_PRIORITY;
  }

  public boolean permissionsEnabled() {
    PermissionPool permissionPool = api.getPermissionPool();

    return (permissionPool != null) && permissionPool.isAvailable();
  }
}