package forgeperms.impl; import com.esotericsoftware.reflectasm.MethodAccess; import forgeperms.api.IPermissionManager; /** * A WIP SuperPerms Bridge * @author Joe Goett */ public class SuperPermsBridge implements IPermissionManager { MethodAccess serverAccess, playerAccess; int getServerIndex, getPlayerExactIndex, hasPermissionIndex; Object serverObj; String error = "Unknown"; @Override public String getName() { return "SuperPerms Bridge"; } @Override public boolean load() { try { serverAccess = MethodAccess.get(Class.forName("org.bukkit.Bukkit")); getServerIndex = serverAccess.getIndex("getServer"); getPlayerExactIndex = serverAccess.getIndex("getPlayerExact", String.class); serverObj = serverAccess.invoke(null, getServerIndex); playerAccess = MethodAccess.get(Class.forName("org.bukkit.entity.Player")); hasPermissionIndex = playerAccess.getIndex("hasPermission", String.class); } catch (ClassNotFoundException e) { error = "Didn't find the required Bukkit stuffs! " + e.getMessage(); return false; } return true; } @Override public String getLoadError() { return error; } @Override public boolean canAccess(String player, String world, String node) { Object playerObj = serverAccess.invoke(serverObj, getPlayerExactIndex, player); return (Boolean) playerAccess.invoke(playerObj, hasPermissionIndex, node); } @Override public boolean addGroup(String player, String group) { return false; } @Override public boolean removeGroup(String player, String group) { return false; } @Override public String[] getGroupNames(String player) { return null; } @Override public String getPrimaryGroup(String world, String playerName) { return null; } }