Skip to content

📦 API

PlayerAPI

com.github.cpjinan.plugin.akarilevel.api.PlayerAPI

kotlin
    /**
     * 获取指定玩家某等级组下的数据
     * @param player 玩家
     * @param levelGroup 等级组编辑名
     * @return 玩家数据
     */
    fun getPlayerData(player: Player, levelGroup: String): PlayerData = getData(player, levelGroup)

    /**
     * 设置指定玩家某等级组下的数据
     * @param player 玩家
     * @param levelGroup 等级组编辑名
     * @param playerData 玩家数据
     */
    fun setPlayerData(player: Player, levelGroup: String, playerData: PlayerData) {
        setData(player, levelGroup, playerData)
    }

    /**
     * 获取指定玩家某等级组下的等级
     * @param player 玩家
     * @param levelGroup 等级组编辑名
     * @return 等级数值
     */
    fun getPlayerLevel(player: Player, levelGroup: String): Long = getLevel(player, levelGroup)

    /**
     * 获取指定玩家某等级组下的经验
     * @param player 玩家
     * @param levelGroup 等级组编辑名
     * @return 经验数值
     */
    fun getPlayerExp(player: Player, levelGroup: String): Long = getExp(player, levelGroup)

    /**
     * 设置指定玩家某等级组下的等级并触发该等级升级执行动作
     * @param player 玩家
     * @param levelGroup 等级组编辑名
     * @param amount 等级数值
     * @param source PlayerLevelChangeEvent 事件来源
     */
    fun setPlayerLevel(player: Player, levelGroup: String, amount: Long, source: String) {
        setLevel(player, levelGroup, amount, source)
        runAction(player, levelGroup, amount)
        refreshLevel(player, levelGroup)
    }

    /**
     * 增加指定玩家某等级组下的等级并触发该等级升级执行动作
     * @param player 玩家
     * @param levelGroup 等级组编辑名
     * @param amount 等级数值
     * @param source PlayerLevelChangeEvent 事件来源
     */
    fun addPlayerLevel(player: Player, levelGroup: String, amount: Long, source: String) {
        val targetLevel = (getLevel(player, levelGroup) + amount).coerceAtMost(getLevelGroupData(levelGroup).maxLevel)
        setLevel(player, levelGroup, targetLevel, source)
        runAction(player, levelGroup, targetLevel)
        refreshLevel(player, levelGroup)
    }

    /**
     * 移除指定玩家某等级组下的等级并触发该等级升级执行动作
     * @param player 玩家
     * @param levelGroup 等级组编辑名
     * @param amount 等级数值
     * @param source PlayerLevelChangeEvent 事件来源
     */
    fun removePlayerLevel(player: Player, levelGroup: String, amount: Long, source: String) {
        val targetLevel = (getLevel(player, levelGroup) - amount).coerceAtLeast(0)
        setLevel(player, levelGroup, targetLevel, source)
        runAction(player, levelGroup, targetLevel)
        refreshLevel(player, levelGroup)
    }

    /**
     * 设置指定玩家某等级组下的等级而不触发该等级升级执行动作
     * @param player 玩家
     * @param levelGroup 等级组编辑名
     * @param amount 等级数值
     * @param source PlayerLevelChangeEvent 事件来源
     */
    fun setPlayerLevelWithoutAction(player: Player, levelGroup: String, amount: Long, source: String) {
        setLevel(player, levelGroup, amount, source)
        refreshLevel(player, levelGroup)
    }

    /**
     * 增加指定玩家某等级组下的等级而不触发该等级升级执行动作
     * @param player 玩家
     * @param levelGroup 等级组编辑名
     * @param amount 等级数值
     * @param source PlayerLevelChangeEvent 事件来源
     */
    fun addPlayerLevelWithoutAction(player: Player, levelGroup: String, amount: Long, source: String) {
        setLevel(player, levelGroup, getLevel(player, levelGroup) + amount, source)
        refreshLevel(player, levelGroup)
    }

    /**
     * 移除指定玩家某等级组下的等级的而不触发该等级升级执行动作
     * @param player 玩家
     * @param levelGroup 等级组编辑名
     * @param amount 等级数值
     * @param source PlayerLevelChangeEvent 事件来源
     */
    fun removePlayerLevelWithoutAction(player: Player, levelGroup: String, amount: Long, source: String) {
        setLevel(player, levelGroup, (getLevel(player, levelGroup) - amount).coerceAtLeast(0), source)
        refreshLevel(player, levelGroup)
    }

    /**
     * 设置指定玩家某等级组下的经验
     * @param player 玩家
     * @param levelGroup 等级组编辑名
     * @param amount 经验数值
     * @param source PlayerExpChangeEvent 事件来源
     */
    fun setPlayerExp(player: Player, levelGroup: String, amount: Long, source: String) {
        setExp(player, levelGroup, amount, source)
        refreshLevel(player, levelGroup)
    }

    /**
     * 增加指定玩家所有等级组下的经验 (带有等级组是否订阅事件来源检查)
     * @param player 玩家
     * @param amount 经验数值
     * @param source PlayerExpChangeEvent 事件来源
     */
    fun addPlayerExp(player: Player, amount: Long, source: String) {
        getLevelGroupNames().forEach {
            if (source in getLevelGroupData(it).subscribeSource) {
                setExp(player, it, getExp(player, it) + amount, source)
                refreshLevel(player, it)
            }
        }
    }

    /**
     * 增加指定玩家某等级组下的经验 (带有等级组是否订阅事件来源检查)
     * @param player 玩家
     * @param levelGroup 等级组编辑名
     * @param amount 经验数值
     * @param source PlayerExpChangeEvent 事件来源
     */
    fun addPlayerExp(player: Player, levelGroup: String, amount: Long, source: String) {
        if (source in getLevelGroupData(levelGroup).subscribeSource) {
            setExp(player, levelGroup, getExp(player, levelGroup) + amount, source)
            refreshLevel(player, levelGroup)
        }
    }

    /**
     * 增加指定玩家某等级组下的经验 (跳过等级组是否订阅事件来源检查)
     * @param player 玩家
     * @param levelGroup 等级组编辑名
     * @param amount 经验数值
     * @param source PlayerExpChangeEvent 事件来源
     */
    fun addPlayerExpForce(player: Player, levelGroup: String, amount: Long, source: String) {
        setExp(player, levelGroup, getExp(player, levelGroup) + amount, source)
        refreshLevel(player, levelGroup)
    }

    /**
     * 移除指定玩家某等级组下的经验
     * @param player 玩家
     * @param levelGroup 等级组编辑名
     * @param amount 经验数值
     * @param source PlayerExpChangeEvent 事件来源
     */
    fun removePlayerExp(player: Player, levelGroup: String, amount: Long, source: String) {
        setExp(player, levelGroup, (getExp(player, levelGroup) - amount).coerceAtLeast(0), source)
        refreshLevel(player, levelGroup)
    }

    /**
     * 刷新玩家所有等级组下的等级
     * @param player 玩家
     */
    fun refreshPlayerLevel(player: Player) {
        getLevelGroupNames().forEach {
            refreshLevel(player, it)
        }
    }

    /**
     * 刷新玩家指定等级组下的等级
     * @param player 玩家
     * @param levelGroup 等级组编辑名
     */
    fun refreshPlayerLevel(player: Player, levelGroup: String) {
        refreshLevel(player, levelGroup)
    }

    /**
     * 检查玩家所有等级组是否满足升级条件并尝试升级
     * @param player 玩家
     */
    fun levelupPlayer(player: Player) {
        getLevelGroupNames().forEach {
            levelup(player, it)
        }
    }

    /**
     * 检查玩家指定等级组是否满足升级条件并尝试升级
     * @param player 玩家
     * @param levelGroup 等级组编辑名
     */
    fun levelupPlayer(player: Player, levelGroup: String) {
        levelup(player, levelGroup)
    }

    /**
     * 获取玩家是否满足指定等级组升级条件
     * @param player 玩家
     * @param levelGroup 等级组编辑名
     * @return 玩家是否满足指定等级组升级条件
     */
    fun checkPlayerLevelupCondition(player: Player, levelGroup: String): Boolean = checkCondition(player, levelGroup)

    /**
     * 为玩家执行指定等级组下的某等级升级动作
     * @param player 玩家
     * @param levelGroup 等级组编辑名
     * @param level 等级数值
     */
    fun runPlayerLevelAction(player: Player, levelGroup: String, level: Long) {
        runAction(player, levelGroup, level)
    }

    /**
     * 获取玩家正在追踪的等级组
     * @param player 玩家
     * @return 等级组编辑名
     */
    fun getPlayerTraceLevelGroup(player: Player): String = getTraceLvlGroup(player)

    /**
     * 设置玩家正在追踪的等级组
     * @param player 玩家
     * @param levelGroup 等级组编辑名
     */
    fun setPlayerTraceLevelGroup(player: Player, levelGroup: String) {
        setTraceLvlGroup(player, levelGroup)
    }

    /**
     * 检查玩家是否满足指定等级组追踪条件
     * @param player 玩家
     * @param levelGroup 等级组编辑名
     */
    fun checkPlayerTraceCondition(player: Player, levelGroup: String): Boolean = checkTraceCondition(player, levelGroup)

    /**
     * 为玩家执行指定等级组下的追踪动作
     * @param player 玩家
     * @param levelGroup 等级组编辑名
     */
    fun runPlayerTraceAction(player: Player, levelGroup: String) {
        runTraceAction(player, levelGroup)
    }

LevelAPI

com.github.cpjinan.plugin.akarilevel.api.LevelAPI

kotlin
    /**
     * 获取等级组配置列表
     * @return 等级组配置列表
     */
    fun getLevelGroups(): HashMap<String, ConfigurationSection> = getLvlGroups()

    /**
     * 获取等级组编辑名列表
     * @return 等级组名称列表
     */
    fun getLevelGroupNames(): ArrayList<String> = getLvlGroupNames()

    /**
     * 获取等级组数据列表
     * @return 等级组数据列表
     */
    fun getLevelGroupData(): HashMap<String, LevelGroupData> = getLvlGroupData()

    /**
     * 获取指定等级组数据
     * @param levelGroup 等级组编辑名
     * @return 等级组数据
     */
    fun getLevelGroupData(levelGroup: String): LevelGroupData = getLvlGroupData(levelGroup)

    /**
     * 获取指定等级组关键等级数据列表
     * @param levelGroup 等级组编辑名
     * @return 关键等级数据列表
     */
    fun getKeyLevelData(levelGroup: String): HashMap<Long, LevelData> = getKeyLvlData(levelGroup)

    /**
     * 获取指定等级组某等级数据
     * @param levelGroup 等级组编辑名
     * @param level 等级
     * @return 等级数据
     */
    fun getLevelData(levelGroup: String, level: Long): LevelData = getLvlData(levelGroup, level)

    /**
     * 获取指定等级组某等级名称
     * @param levelGroup 等级组编辑名
     * @param level 等级
     * @return 等级名称
     */
    fun getLevelName(levelGroup: String, level: Long): String = getLvlName(levelGroup, level)

    /**
     * 获取指定等级组升级到某等级所需经验
     * @param levelGroup 等级组编辑名
     * @param level 等级
     * @return 等级名称
     */
    fun getLevelExp(levelGroup: String, level: Long): Long = getLvlExp(levelGroup, level)

    /**
     * 获取指定等级组升级到某等级所需条件列表
     * @param levelGroup 等级组编辑名
     * @param level 等级
     * @return 升级条件列表
     */
    fun getLevelCondition(levelGroup: String, level: Long): List<String> = getLvlCondition(levelGroup, level)

    /**
     * 获取指定等级组升级到某等级执行动作列表
     * @param levelGroup 等级组编辑名
     * @param level 等级
     * @return 升级执行动作列表
     */
    fun getLevelAction(levelGroup: String, level: Long): List<String> = getLvlAction(levelGroup, level)

DataAPI

com.github.cpjinan.plugin.akarilevel.api.DataAPI

kotlin
    /**
     * 获取指定表中某索引下某键的值
     * @param table 表名
     * @param index 索引名
     * @param key 键名
     * @return 数据值
     */
    fun getDataValue(table: String, index: String, key: String): String = getValue(table, index, key)

    /**
     * 设置指定表中某索引下某键的值
     * @param table 表名
     * @param index 索引名
     * @param key 键名
     * @param value 数据值
     */
    fun setDataValue(table: String, index: String, key: String, value: String) {
        setValue(table, index, key, value)
    }

    /**
     * 保存数据 (使用 setDataValue 修改数据后会自动保存)
     */
    fun saveData() {
        save()
    }