最MC论坛

标题: 基于Essentials插件的插件二次开发(第三期) [打印本页]

作者: noname    时间: 2014-9-10 12:07
标题: 基于Essentials插件的插件二次开发(第三期)
Essentials是一个很强大的插件,所以同时他也给我们提供了很多的的接口方便我们在做插件开发的时候,能够直接调用其接口,其中有经济接口也有权限接口。经济接口的用法和接口类型在第一期中已经说过了。这一期说的是权限接口的用法和接口类型。
先附上wiki地址:http://ess.khhq.net/wiki/Group_Manager/Developers
其中onPluginEnable()方法为判断Group_Manager插件是否已经加载,在讲权限接口前,先说一句,个人建议,自己创建一个继承Player类的持久化类,因为Player类中的属性不是所有我们在开发中都需要用到的,所以最好的话,自己建立一个持久化类,不建立也是可以的。Group_Manager插件提供的接口中包括了权限组的接口getGroup(),setGroup(),getGroups(),getPrefix(),getSuffix,hasPermission,这些从字面意思其实就可以知道是什么作用的,但是我们在实际开发中不单单只是要这些接口,还有很多的接口,其实GM插件没提供给我们,但是我们却是可以自己去调用的。下面我就发点我自己开发中用到的,比较常用的几个方法。

playerInGroup 判断玩家是否在用户组 playerAddGroup 添加玩家到用户组 playerRemoveGroup 把玩家从用户组删除
public boolean playerInGroup(String worldName, String playerName, String groupName) {
        AnjoPermissionsHandler handler;

        if (worldName == null)
            handler = this.groupManager.getWorldsHolder().getWorldPermissionsByPlayerName(playerName);

        else {
            handler = this.groupManager.getWorldsHolder().getWorldPermissions(worldName);
        }
        if (handler == null) {
            return false;
        }
        return handler.inGroup(playerName, groupName);
    }

    public boolean playerAddGroup(String worldName, String playerName, String groupName) {
        OverloadedWorldHolder owh;
        if (worldName == null) {
            owh = this.groupManager.getWorldsHolder().getWorldDataByPlayerName(playerName);
        } else {
            owh = this.groupManager.getWorldsHolder().getWorldData(worldName);
        }
        if (owh == null) {
            return false;
        }
        User user = owh.getUser(playerName);
        if (user == null) {
            return false;
        }

        Group group = owh.getGroup(groupName);
        if (group == null) {
            return false;
        }
        if (user.getGroup().equals(owh.getDefaultGroup())) {
            user.setGroup(group);

        } else if (group.getInherits().contains(user.getGroup().getName().toLowerCase())){
            user.setGroup(group);
    }else {
            user.setGroup(group);
        }
        Player p = Bukkit.getPlayer(playerName);
        if (p != null) {
            GroupManager.BukkitPermissions.updatePermissions(p);
        }
        return true;
    }

    public boolean playerRemoveGroup(String worldName, String playerName, String groupName) {
        OverloadedWorldHolder owh;
        if (worldName == null)
            owh = this.groupManager.getWorldsHolder().getWorldDataByPlayerName(playerName);
        else {
            owh = this.groupManager.getWorldsHolder().getWorldData(worldName);
        }
        if (owh == null) {
            return false;
        }
        User user = owh.getUser(playerName);
        if (user == null) {
            return false;
        }
        boolean success = false;
        if (user.getGroup().getName().equalsIgnoreCase(groupName)) {
            user.setGroup(owh.getDefaultGroup());
            success = true;
        } else {
            Group group = owh.getGroup(groupName);
            if (group != null) {
                success = user.removeSubGroup(group);
            }
        }

        if (success) {
            Player p = Bukkit.getPlayer(playerName);

            if (p != null) {
                GroupManager.BukkitPermissions.updatePermissions(p);
            }
        }
        return success;
    }

这3个方法中的worldname属性一般都是固定的为主世界的名称world,如果有自己修改名称的话,可以选择将来这个参数改为变量,如果默认为world的话,建议直接为常量即可。还有一点就是所有的权限操作都是和GM插件的操作一样的,权限立即生效,但是在YML文件中的保存时间根据GM插件的配置而定,如果要自己立即保存的话,可以用下面这个方法。不过不建议这样做,比较这样做是保存了所有的GM插件的改变,而不单单是你这个插件的改变而已。
方法如下:
  public void saveAll() //保存GroupManager所有操作后的结果到YML文件中
    {
        System.out.print("§b 成功写入GroupManager缓存中,等待GroupManager写入数据文件");
        this.groupManager.getWorldsHolder().saveChanges();
    }




作者: 沉默    时间: 2014-9-11 06:14
感谢楼主提供的资料!




欢迎光临 最MC论坛 (http://www.zuimc.com/) Powered by Discuz! X3.2