• 【MineBBS社区发展意见征集】

    欢迎参与MineBBS社区调查,助力打造更好Minecraft社区!完成问卷可获赠200金粒,优质回答可额外获得200金粒(限5名),快来参与吧!【点击参与】

[1.20.1-1.21.5]LiteLevels 轻量级自定义等级系统 | 每级自定添加任意RPG属性

原创 开源 游戏模式 [1.20.1-1.21.5]LiteLevels 轻量级自定义等级系统 | 每级自定添加任意RPG属性 1.0.1

请登录后获取
版权类型
原创
插件中文名称
LiteLevels
插件英文名称
LiteLevels
原帖地址
#
支持的核心(服务端)
  1. Paper
适配版本(Java)
  1. 1.20

🎮 LiteLevels - 轻量级自定义等级系统

Paper
Java
🌟 为你的Minecraft服务器打造独特的RPG体验!

仅兼容基于Paper的核心!
仅兼容基于Paper的核心!
仅兼容基于Paper的核心!


1.0.1更新​

支持每级添加自定义属性​

属性依赖插件SagaLoreStats[链接]



YAML:
  level-attributes:
    1:  # 1级属性
      - "暴击几率: +5%"
    2:  # 2级属性
      - "生命力: +30"
    3:  # 3级属性
      - "物理伤害: +30"
      - "暴击倍率: +50%"
    4:  # 4级属性
      - "物理防御: +20"
    5:  # 5级属性
      - "移速加成: +10%"
    6:  # 6级属性
      - "生命力: +50"
    7:  # 7级属性
      - "物理伤害: +40"
    8:  # 8级属性
      - "暴击几率: +10%"
    9:  # 9级属性
      - "物理防御: +30"
    10: # 10级属性
      - "生命力: +100"
      - "物理伤害: +50"

📖 插件简介​

LiteLevels是一个功能强大且轻量级的自定义等级系统插件,专为Paper 1.20.1服务器设计。它完全替代了原版的经验系统,为玩家提供更加丰富和有趣的成长体验。

✨ 核心特色​

🎯 完全自定义的等级系统

  • 替代原版经验机制,提供更灵活的等级设计
  • 支持自定义每级所需经验值
  • 智能拦截原版经验获取,无缝转换为自定义系统
🔮 独特的魔法值系统

  • 每个等级拥有不同的魔法值上限
  • 支持魔法值加成和动态调整
  • 为魔法类插件提供完美的数值基础
⚔️ SagaLoreStats属性系统

  • 每级可配置任意SagaLoreStats属性
  • 支持暴击率、攻击力、防御力等多种属性
  • 属性持久保持,等级越高属性越强
💾 强大的数据持久化

  • 支持SQLite和MySQL双数据库
  • 自动保存机制,数据安全有保障
🔌 完善的API支持

  • 为其他插件提供丰富的API接口
  • 集成PlaceholderAPI,支持7个实用占位符
  • 模块化设计,易于扩展和集成

🎮 游戏体验​

🌟 玩家成长之旅​

新手阶段 (1-3级)

  • 🌱 快速成长,体验升级的乐趣
  • 💫 每次升级都有明显的属性提升
  • 🎉 精美的升级提示和音效
进阶阶段 (4-7级)

  • ⚔️ 更强的战斗能力
  • 🔮 丰富的魔法值支持
  • 🛡️ 强大的SagaLoreStats属性加成
大师阶段 (8-10级)

  • 👑 成为服务器的顶尖玩家
  • 💪 强大的属性加成
  • 🏆 独特的成就感和荣誉

📊 数值系统设计

1级10050暴击几率+5%
2级20060生命力+30
3级30070物理伤害+30, 暴击倍率+50%
5级800100移速加成+10%
10级4000220生命力+100, 物理伤害+50


🚀 快速开始

📋 系统要求

  • ✅ 服务端: Paper 1.20.1 或更高版本
  • ✅ Java版本: Java 17+
  • ✅ 可选依赖: PlaceholderAPI (用于占位符功能)

📥 安装步骤

  1. 下载插件
    代码:
    将 LiteLevels.jar 放入服务器的 plugins 文件夹
  2. 启动服务器
    代码:
    插件会自动生成配置文件和数据库
  3. 配置插件
    代码:
    编辑 plugins/LiteLevels/config.yml 进行个性化设置
  4. 重载配置
    代码:
    /ll reload

⚙️ 基础配置

config.yml 核心设置
YAML:
# LiteLevels 配置文件
# 版本: 1.0.0
# 调试模式
debug: false
# 等级系统设置
level-system:
  # 每级所需经验值列表 (从1级开始)
  exp-requirements:
    - 100.0    # 1级需要100经验
    - 200.0    # 2级需要200经验
    - 300.0    # 3级需要300经验
    - 500.0    # 4级需要500经验
    - 800.0    # 5级需要800经验
    - 1200.0   # 6级需要1200经验
    - 1700.0   # 7级需要1700经验
    - 2300.0   # 8级需要2300经验
    - 3000.0   # 9级需要3000经验
    - 4000.0   # 10级需要4000经验
  # 每级魔法值上限列表
  magic-limits:
    - 50.0     # 1级魔法值上限50
    - 60.0     # 2级魔法值上限60
    - 70.0     # 3级魔法值上限70
    - 85.0     # 4级魔法值上限85
    - 100.0    # 5级魔法值上限100
    - 120.0    # 6级魔法值上限120
    - 140.0    # 7级魔法值上限140
    - 165.0    # 8级魔法值上限165
    - 190.0    # 9级魔法值上限190
    - 220.0    # 10级魔法值上限220
  # 每级SagaLoreStats属性加成配置
  # 格式: 每个等级可以配置多个属性,支持SagaLoreStats的所有属性格式
  level-attributes:
    1:  # 1级属性
      - "暴击几率: +5%"
    2:  # 2级属性
      - "生命力: +30"
    3:  # 3级属性
      - "物理伤害: +30"
      - "暴击倍率: +50%"
    4:  # 4级属性
      - "物理防御: +20"
    5:  # 5级属性
      - "移速加成: +10%"
    6:  # 6级属性
      - "生命力: +50"
    7:  # 7级属性
      - "物理伤害: +40"
    8:  # 8级属性
      - "暴击几率: +10%"
    9:  # 9级属性
      - "物理防御: +30"
    10: # 10级属性
      - "生命力: +100"
      - "物理伤害: +50"
  # 是否启用SagaLoreStats属性系统
  enable-saga-attributes: true
  # 最大等级
  max-level: 10
# 数据库配置
database:
  # 数据库类型: sqlite 或 mysql (默认: sqlite)
  type: "sqlite"
  # SQLite配置
  sqlite:
    # 数据库文件名
    file: "litelevels.db"
  # MySQL配置
  mysql:
    # 主机地址
    host: "localhost"
    # 端口
    port: 3306
    # 数据库名
    database: "litelevels"
    # 用户名
    username: "root"
    # 密码
    password: "password"
    # 是否使用SSL
    use-ssl: false
    # 连接池配置
    pool:
      # 最大连接数
      max-connections: 10
      # 最小连接数
      min-connections: 2
      # 连接超时时间(秒)
      connection-timeout: 30
# 数据保存设置
data-save:
  # 自动保存间隔(秒) - 0表示禁用自动保存
  auto-save-interval: 300
  # 玩家退出时是否立即保存
  save-on-quit: true
  # 服务器关闭时是否保存所有数据
  save-on-shutdown: true

🎯 功能详解

🎮 玩家命令


/ll info查看自己的等级信息litelevels.use
/ll give <经验值>给自己添加经验litelevels.give

👑 管理员命令


/ll set <玩家> <等级> [经验%]设置玩家等级litelevels.admin
/ll reload重载配置文件litelevels.admin
/ll save手动保存所有数据litelevels.admin

🏷️ PlaceholderAPI占位符


%ll_currentexp%当前经验值150
%ll_currentlevel%当前等级5
%ll_currentmagic%当前魔法值80
%ll_currenthealth%当前生命值24
%ll_maxexp%最大经验值800
%ll_maxmagic%最大魔法值100
%ll_maxhealth%最大生命值30


🔧 开发者API

📚 API使用示例

Java:
public class LiteLevelsAPI {

    private static ConfigManager configManager;

    /**
     * 初始化API(内部使用)
     */
    static {
        if (LiteLevels.getInstance() != null) {
            configManager = LiteLevels.getInstance().getConfigManager();
        }
    }

    // ==================== 数据获取方法 ====================

    /**
     * 获取玩家等级数据
     * 统一的数据获取方法,供所有其他方法调用
     *
     * @param player 玩家
     * @return 玩家等级数据,如果玩家不在线或数据不存在则返回null
     */
    public static PlayerLevelData getPlayerData(Player player) {
        if (player == null || !player.isOnline()) {
            return null;
        }
        UUID playerId = player.getUniqueId();
        return PlayerLevelData.playerDataMap.get(playerId);
    }

    /**
     * 检查玩家数据是否已加载
     *
     * @param player 玩家
     * @return 如果数据已加载则返回true
     */
    public static boolean isDataLoaded(Player player) {
        return getPlayerData(player) != null;
    }

    // ==================== 等级相关方法 ====================

    /**
     * 获取玩家等级
     *
     * @param player 玩家
     * @return 玩家等级,如果数据不存在则返回0
     */
    public static int getLevel(Player player) {
        PlayerLevelData data = getPlayerData(player);
        return data != null ? data.getLevel() : 0;
    }

    /**
     * 设置玩家等级
     * 使用统一的LevelUtil方法
     *
     * @param player 玩家
     * @param level 等级
     */
    public static void setLevel(Player player, int level) {
        if (!isDataLoaded(player)) {
            MessageUtil.logWarning("尝试为未加载数据的玩家设置等级: " + player.getName());
            return;
        }
        LevelUtil.setLevel(player, level);
    }

    /**
     * 获取最大等级
     *
     * @return 系统设定的最大等级
     */
    public static int getMaxLevel() {
        return configManager != null ? configManager.getMaxLevel() : 10;
    }

    // ==================== 经验相关方法 ====================

    /**
     * 获取玩家当前经验值
     *
     * @param player 玩家
     * @return 当前经验值,如果数据不存在则返回0
     */
    public static double getCurrentExp(Player player) {
        PlayerLevelData data = getPlayerData(player);
        return data != null ? data.getCurrentExp() : 0.0;
    }

    /**
     * 获取指定等级所需的经验值
     *
     * @param level 等级
     * @return 所需经验值
     */
    public static double getRequiredExp(int level) {
        return configManager != null ? configManager.getRequiredExp(level) : 100.0;
    }

    /**
     * 获取玩家当前等级所需的经验值
     *
     * @param player 玩家
     * @return 当前等级所需经验值
     */
    public static double getRequiredExp(Player player) {
        int level = getLevel(player);
        return getRequiredExp(level);
    }

    /**
     * 设置玩家当前经验值
     * 使用统一的LevelUtil方法
     *
     * @param player 玩家
     * @param exp 经验值
     */
    public static void setCurrentExp(Player player, double exp) {
        if (!isDataLoaded(player)) {
            MessageUtil.logWarning("尝试为未加载数据的玩家设置经验: " + player.getName());
            return;
        }
        LevelUtil.setCurrentExp(player, exp);
    }

    /**
     * 给玩家添加经验值
     * 使用统一的LevelUtil方法
     *
     * @param player 玩家
     * @param exp 经验值
     */
    public static void addExp(Player player, double exp) {
        if (!isDataLoaded(player)) {
            MessageUtil.logWarning("尝试为未加载数据的玩家添加经验: " + player.getName());
            return;
        }
        LevelUtil.addExp(player, exp, false);
    }

    /**
     * 给玩家添加经验值(强制,跳过事件检查)
     * 使用统一的LevelUtil方法
     *
     * @param player 玩家
     * @param exp 经验值
     */
    public static void addExpForce(Player player, double exp) {
        if (!isDataLoaded(player)) {
            MessageUtil.logWarning("尝试为未加载数据的玩家强制添加经验: " + player.getName());
            return;
        }
        LevelUtil.addExp(player, exp, true);
    }

    // ==================== 魔法相关方法 ====================

    /**
     * 获取玩家魔法值
     *
     * @param player 玩家
     * @return 魔法值,如果数据不存在则返回0
     */
    public static double getMagic(Player player) {
        PlayerLevelData data = getPlayerData(player);
        return data != null ? data.getMagic() : 0.0;
    }

    /**
     * 获取玩家最大魔法值
     * 使用统一的LevelUtil方法
     *
     * @param player 玩家
     * @return 最大魔法值
     */
    public static double getMaxMagic(Player player) {
        return LevelUtil.getMaxMagic(player);
    }

    /**
     * 获取指定等级的魔法值上限
     *
     * @param level 等级
     * @return 魔法值上限
     */
    public static double getMagicLimit(int level) {
        return configManager != null ? configManager.getMagicLimit(level) : 50.0;
    }

    /**
     * 设置玩家魔法值
     * 使用统一的LevelUtil方法
     *
     * @param player 玩家
     * @param magic 魔法值
     */
    public static void setMagic(Player player, double magic) {
        if (!isDataLoaded(player)) {
            MessageUtil.logWarning("尝试为未加载数据的玩家设置魔法值: " + player.getName());
            return;
        }
        LevelUtil.setMagic(player, magic);
    }

    /**
     * 给玩家添加魔法值
     * 使用统一的LevelUtil方法
     *
     * @param player 玩家
     * @param magic 魔法值
     */
    public static void addMagic(Player player, double magic) {
        if (!isDataLoaded(player)) {
            MessageUtil.logWarning("尝试为未加载数据的玩家添加魔法值: " + player.getName());
            return;
        }
        LevelUtil.addMagic(player, magic);
    }

    // ==================== 生命值相关方法 ====================

    /**
     * 获取玩家最大血量
     * 使用统一的LevelUtil方法
     *
     * @param player 玩家
     * @return 最大血量
     */
    public static double getMaxHealth(Player player) {
        return LevelUtil.getMaxHealth(player);
    }

    /**
     * 获取指定等级的生命值加成
     *
     * @param level 等级
     * @return 生命值加成
     */
    public static double getHealthBonus(int level) {
        return configManager != null ? configManager.getHealthBonus(level) : 0.0;
    }

    /**
     * 检查是否启用生命值加成
     *
     * @return 如果启用生命值加成则返回true
     */
    public static boolean isHealthBonusEnabled() {
        return configManager != null && configManager.isEnableHealthBonus();
    }

    // ==================== 显示更新方法 ====================

    /**
     * 更新玩家经验条显示
     * 使用统一的LevelUtil方法
     *
     * @param player 玩家
     */
    public static void updateExpDisplay(Player player) {
        if (!isDataLoaded(player)) {
            return;
        }
        LevelUtil.updateExpDisplay(player);
    }

    /**
     * 更新玩家生命值
     * 使用统一的LevelUtil方法
     *
     * @param player 玩家
     */
    public static void updatePlayerHealth(Player player) {
        PlayerLevelData data = getPlayerData(player);
        if (data != null) {
            LevelUtil.updatePlayerHealth(player, data);
        }
    }

    // ==================== 工具方法 ====================

    /**
     * 获取玩家等级进度百分比
     *
     * @param player 玩家
     * @return 进度百分比 (0.0 - 100.0)
     */
    public static double getLevelProgress(Player player) {
        PlayerLevelData data = getPlayerData(player);
        if (data == null) {
            return 0.0;
        }

        double currentExp = data.getCurrentExp();
        double requiredExp = getRequiredExp(player);

        if (requiredExp <= 0) {
            return 100.0;
        }

        return Math.min(100.0, (currentExp / requiredExp) * 100.0);
    }

    /**
     * 检查玩家是否达到最大等级
     *
     * @param player 玩家
     * @return 如果达到最大等级则返回true
     */
    public static boolean isMaxLevel(Player player) {
        return getLevel(player) >= getMaxLevel();
    }

    /**
     * 获取升级到下一级还需要的经验值
     *
     * @param player 玩家
     * @return 还需要的经验值,如果已达到最大等级则返回0
     */
    public static double getExpToNextLevel(Player player) {
        if (isMaxLevel(player)) {
            return 0.0;
        }

        double currentExp = getCurrentExp(player);
        double requiredExp = getRequiredExp(player);

        return Math.max(0.0, requiredExp - currentExp);
    }
}

🎪 自定义事件

  • PlayerAddExpEvent - 玩家获得经验时触发
  • PlayerLevelUpEvent - 玩家升级时触发

🎨 个性化定制

🌈 消息自定义

所有玩家可见的消息都可以在 message.yml 中自定义:
代码:
# LiteLevels 消息配置文件
# 版本: 1.0.0

# 系统消息
system:
  plugin-enabled: "&a[LiteLevels] 插件已成功启动!"
  plugin-disabled: "&c[LiteLevels] 插件已关闭!"
  reload-success: "&a[LiteLevels] 配置文件重载成功!"
  reload-failed: "&c[LiteLevels] 配置文件重载失败!"
  data-loaded: "&a玩家数据已加载完成!"
  data-saved: "&a玩家数据已保存!"

# 等级系统消息
level:
  level-up: "&c[系统]&a恭喜你升级到了&b&l{level}&a级!"
  max-level-reached: "&c[系统]&a已经达到系统设定的最大等级!"
  exp-gained: "&a获得经验值: &e&l{exp}"
  current-level: "&a当前等级: &b&l{level}"
  current-exp: "&a当前经验: &e&l{current_exp}&a/&e&l{required_exp}"
  current-magic: "&a当前魔法值: &d&l{current_magic}&a/&d&l{max_magic}"

# 命令消息
command:
  no-permission: "&c你没有权限执行此命令!"
  player-only: "&c此命令只能由玩家执行!"
  unknown-command: "&c未知命令! 使用 /litelevels help 查看帮助"
  player-not-found: "&c玩家不存在或不在线!"
  invalid-number: "&c请输入有效的数字!"
  level-set-success: "&a已成功设置玩家&c&l{player}&a的等级为&b&l{level}&a级!"
  exp-set-success: "&a已成功设置玩家&c&l{player}&a的经验为&e&l{exp}!"
  exp-give-success: "&a已为你添加经验&e&l{exp}!"
  magic-set-success: "&a已成功设置玩家&c&l{player}&a的魔法值为&d&l{magic}!"

# 帮助信息
help:
  header: "&6========== LiteLevels 帮助 =========="
  footer: "&6=================================="
  commands:
    - "&a/ll info &7- 查看自己的等级信息"
    - "&a/ll set <玩家> <等级> [经验百分比] &7- 设置玩家等级"
    - "&a/ll give <经验值> &7- 给自己添加经验"
    - "&a/ll reload &7- 重载配置文件"
作者
linghun91
价格
35金粒
下载
2
查看
225
首次发布
最后更新

评分

0.00 星 0 次评分

最新更新

  1. 支持自定义每级添加RPG属性

    ⚔️ SagaLoreStats属性系统 每级可配置任意SagaLoreStats属性 支持暴击率、攻击力、防御力等多种属性 属性持久保持,等级越高属性越强
后退
顶部 底部