LiteLevels - 轻量级自定义等级系统
为你的Minecraft服务器打造独特的RPG体验!
插件简介
LiteLevels是一个功能强大且轻量级的自定义等级系统插件,专为Paper 1.20.1服务器设计。它完全替代了原版的经验系统,为玩家提供更加丰富和有趣的成长体验。
✨ 核心特色
完全自定义的等级系统
玩家成长之旅
新手阶段 (1-3级)
等级 所需经验 魔法值上限 生命值加成
1级 100 50 +2❤️
2级 200 60 +4❤️
3级 300 70 +6❤️
5级 800 100 +10❤️
10级 4000 220 +20❤️
快速开始
系统要求
config.yml 核心设置
功能详解
玩家命令
命令 描述 权限
/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使用示例
个性化定制
消息自定义
所有玩家可见的消息都可以在 message.yml 中自定义:
为你的Minecraft服务器打造独特的RPG体验!
插件简介
LiteLevels是一个功能强大且轻量级的自定义等级系统插件,专为Paper 1.20.1服务器设计。它完全替代了原版的经验系统,为玩家提供更加丰富和有趣的成长体验。
✨ 核心特色
完全自定义的等级系统
- 替代原版经验机制,提供更灵活的等级设计
- 支持自定义每级所需经验值
- 智能拦截原版经验获取,无缝转换为自定义系统
- 每个等级拥有不同的魔法值上限
- 支持魔法值加成和动态调整
- 为魔法类插件提供完美的数值基础
- 等级越高,生命值越多
- 可配置的生命值加成曲线
- 让玩家真正感受到成长的力量
- 支持SQLite和MySQL双数据库
- 自动保存机制,数据安全有保障
- 为其他插件提供丰富的API接口
- 集成PlaceholderAPI,支持7个实用占位符
- 模块化设计,易于扩展和集成
玩家成长之旅
新手阶段 (1-3级)
- 快速成长,体验升级的乐趣
- 每次升级都有明显的属性提升
- 精美的升级提示和音效
- ⚔️ 更强的战斗能力
- 丰富的魔法值支持
- ️ 显著的生命值加成
- 成为服务器的顶尖玩家
- 强大的属性加成
- 独特的成就感和荣誉
等级 所需经验 魔法值上限 生命值加成
1级 100 50 +2❤️
2级 200 60 +4❤️
3级 300 70 +6❤️
5级 800 100 +10❤️
10级 4000 220 +20❤️
快速开始
系统要求
- ✅ 服务端: Paper 1.20.1 或更高版本
- ✅ Java版本: Java 17+
- ✅ 可选依赖: PlaceholderAPI (用于占位符功能)
- 下载插件
将 LiteLevels.jar 放入服务器的 plugins 文件夹
- 启动服务器
插件会自动生成配置文件和数据库
- 配置插件
编辑 plugins/LiteLevels/config.yml 进行个性化设置
- 重载配置
/ll reload
config.yml 核心设置
Code (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
# 每级生命值加成列表
health-bonus :
- 2.0 # 1级生命值加成2
- 4.0 # 2级生命值加成4
- 6.0 # 3级生命值加成6
- 8.0 # 4级生命值加成8
- 10.0 # 5级生命值加成10
- 12.0 # 6级生命值加成12
- 14.0 # 7级生命值加成14
- 16.0 # 8级生命值加成16
- 18.0 # 9级生命值加成18
- 20.0 # 10级生命值加成20
# 是否启用生命值加成
enable-health-bonus : false
# 最大等级
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
# 版本: 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
# 每级生命值加成列表
health-bonus :
- 2.0 # 1级生命值加成2
- 4.0 # 2级生命值加成4
- 6.0 # 3级生命值加成6
- 8.0 # 4级生命值加成8
- 10.0 # 5级生命值加成10
- 12.0 # 6级生命值加成12
- 14.0 # 7级生命值加成14
- 16.0 # 8级生命值加成16
- 18.0 # 9级生命值加成18
- 20.0 # 10级生命值加成20
# 是否启用生命值加成
enable-health-bonus : false
# 最大等级
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使用示例
Code (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 ) ;
}
}
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 ) ;
}
}
消息自定义
所有玩家可见的消息都可以在 message.yml 中自定义:
Code (YAML):
# 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- 重载配置文件"
# 版本: 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- 重载配置文件"
Quick facts
- Edition: Minecraft Java
- File type: .jar
- Minecraft versions listed: 1.20, 1.20.6, 1.21
- How to install: Install the matching mod loader (Forge, Fabric or NeoForge) for your Minecraft version. → Download the .jar. → Put it in the .minecraft/mods folder and launch that loader profile.
- Where to get it: Opens on Spigot — not every file is mirrored on our own servers.
Install steps are the general flow for this file type — How to install Minecraft Java mods & modpacks walks through it step by step.
del is a free Minecraft Java mod. Compatible with Minecraft 1.20, 1.20.6, 1.21. Downloaded 155 times (via Spigot). Download it and open it directly in the game.