Package de.bananaco.permissions

Source Code of de.bananaco.permissions.SuperPermissionHandler

package de.bananaco.permissions;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;

import org.bukkit.entity.Player;
import org.bukkit.permissions.PermissionAttachment;
import org.bukkit.permissions.PermissionAttachmentInfo;
import org.bukkit.plugin.java.JavaPlugin;

import de.bananaco.permissions.debug.Debugger;
import de.bananaco.permissions.util.Permission;

public class SuperPermissionHandler {

  private static Map<String, String> players = new HashMap<String, String>();

  private static JavaPlugin plugin;

  public static void setPlugin(JavaPlugin pl) {
    plugin = pl;
  }

  public static synchronized void setupPlayer(Player p) {
    Set<Permission> nodes = Permissions.getWorldPermissionsManager()
        .getPermissionSet(p.getWorld())
        .getPlayerPermissions(p.getName());
    setupPlayer(p, nodes);
  }

  public static synchronized void setupPlayer(Player p, Set<Permission> nodes) {
    long start = System.currentTimeMillis();
    unsetupPlayer(p);
    PermissionAttachment att = p.addAttachment(plugin);

    for (Permission node : nodes)
      att.setPermission(node.name(), node.isTrue());

    att.setPermission("world."+p.getWorld().getName(), true);
       
    p.recalculatePermissions();
    players.put(p.getName(), p.getWorld().getName());
    long finish = System.currentTimeMillis() - start;
    Debugger.getDebugger().log(
        "Setup player:" + p.getName() + " took " + finish + "ms");
  }

  public static synchronized void setupPlayerIfChangedWorlds(Player p) {
    if (players.containsKey(p.getName())) {
      String world = players.get(p.getName());
      if (world.equals(p.getWorld().getName()) && p.hasPermission("world."+p.getWorld().getName()))
        return;
    }
    setupPlayer(p);
  }

  public static synchronized void unsetupPlayer(Player p) {
    Set<PermissionAttachmentInfo> pAtt = p.getEffectivePermissions();
    if (pAtt != null) {
      for (PermissionAttachmentInfo pInfo : pAtt) {
        if (pInfo.getAttachment() != null
            && pInfo.getAttachment().getPlugin() != null
            && pInfo.getAttachment().getPlugin().getDescription() != null
            && pInfo.getAttachment().getPlugin().getDescription()
                .getName().equalsIgnoreCase("bPermissions")) {
          pInfo.getAttachment()
              .unsetPermission(pInfo.getPermission());
          pInfo.getAttachment().remove();
        }
      }
      p.recalculatePermissions();
    }
  }

}
TOP

Related Classes of de.bananaco.permissions.SuperPermissionHandler

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.