package forgeperms.impl; import pex.permissions.IPermissions; import pex.permissions.PermissionGroup; import pex.permissions.PermissionUser; import cpw.mods.fml.common.Loader; import cpw.mods.fml.common.ModContainer; import forgeperms.api.IPermissionManager; /** * Permission handler for ForgePEX * * @author Joe Goett */ public class PEXPermissions implements IPermissionManager { public String loadError = "Unknown"; int pexOn = 0; IPermissions pex = null; @Override public boolean load() { if (pexAvailable()) { return true; } else { loadError = "PermissionsEX was not found"; return false; } } @Override public String getLoadError() { return loadError; } @Override public String getName() { return "Forge PEX"; } private boolean pexAvailable() { if (pexOn == 0) { for (ModContainer cont : Loader.instance().getModList()) { if (cont.getModId().equalsIgnoreCase("PermissionsEx")) { // Log.info("Found PEx"); if (cont.getMod() instanceof IPermissions) { pex = (IPermissions) cont.getMod(); } break; } } pexOn = pex == null ? 2 : 1; } return pexOn == 1; } @Override public boolean canAccess(String player, String world, String node) { if (!pexAvailable()) { throw new RuntimeException("PEX not found"); } return pex.has(player, node, world); } @Override public boolean addGroup(String playerName, String groupName) { PermissionGroup group = (PermissionGroup) pex.getGroup(groupName); PermissionUser user = (PermissionUser) pex.getUser(playerName); if (group == null || user == null) { return false; } else { user.addGroup(group); return true; } } @Override public boolean removeGroup(String playerName, String groupName) { PermissionGroup group = (PermissionGroup) pex.getGroup(groupName); PermissionUser user = (PermissionUser) pex.getUser(playerName); if (group == null || user == null) { return false; } else { user.removeGroup(group); return true; } } @Override public String[] getGroupNames(String playerName) { PermissionUser user = (PermissionUser) pex.getUser(playerName); if (user == null) return null; return user.getGroupsNames(); } @Override public String getPrimaryGroup(String world, String playerName) { PermissionUser user = (PermissionUser) pex.getUser(playerName); if (user == null) return null; return user.getGroupsNames(world)[0]; } }