数据包扩展指南
概述
本页面修缮中……
注意:目前为止,仅Forge版支持数据驱动!
SmartKeyPrompts 支持通过数据包扩展按键提示功能,允许不精通 Kubejs 的整合包作者与玩家根据实际需求灵活自定义按键显示
数据包使用 MVEL 表达式语言 进行逻辑判断和动作执行,提供强大的表达式支持。
此文档的内置函数部分只适用于1.0.4.2及以上版本,低版本请看 模组内置数据包 / 模组源码作为示例
MVEL 表达式语言简介
MVEL (MVFLEX Expression Language) 是一个强大的表达式语言,支持丰富的语法特性:
基本语法特性
- 三元表达式:
condition ? value1 : value2 - 逻辑运算:
&&(与)、||(或)、!(非) - 比较运算:
==、!=、>、<、>=、<= - 字符串操作:
+(连接)、.startsWith()、.contains()等 - 空值检查:
value != null、value == null - 函数调用:支持调用注册的静态方法
示例表达式
// 三元表达式
keyUse == 'key.keyboard.unknown' ? 'key.mouse.right' : keyUse
// 逻辑组合
isModLoaded('tacz') && mainHandItem() == 'tacz:modern_kinetic_gun'
// 字符串匹配
vehicleType() != null && vehicleType().startsWith('immersive_aircraft:')
// 复杂条件
mainHandItem() != 'minecraft:sugar' && mainHandItem() != 'diligentstalker:stalker_master'
更多详细语法请参考:
数据包结构
文件路径
数据包文件应存放于:
data/[namespace]/smartkeyprompts/key_prompts/[文件名].json
例如:
data/smartkeyprompts/smartkeyprompts/key_prompts/tacz.json
文件格式
{
"modid": "按键组标识符",
"vars": {
"变量名": "MVEL 表达式"
},
"entries": [
{
"when": {
"条件变量": "期望值或表达式"
},
"then": [
"动作表达式"
]
}
]
}
字段说明
modid
- 类型:
string - 说明:用于标识此数据包所属模组,一般来说,填入要适配的模组id即可。
vars
- 类型:
object - 说明:定义可复用变量,通过 MVEL 表达式实时计算,用于简化条件判断。
entries
- 类型:
array - 说明:定义了一组 “触发条件 - 执行动作” 的逻辑对。每一条目按数组顺序依次进行判断与执行,匹配后则执行相应的动作。
when
-
类型:
object -
说明:触发条件,所有键值对需同时满足。
-
支持:
- 精确匹配
- 通配符匹配(如
"immersive_aircraft:*") - 表达式匹配(如
"modLoaded": "true")
then
- 类型:
string[] - 说明:当
when条件满足时执行的动作表达式。
内置函数参考(可提 Issues 作者酌情添加)
基础变量函数
player():获取当前玩家对象mainHandItem():获取主手物品IDvehicleType():获取当前载具类型targetedEntity():获取目标实体类型
玩家状态检查
isInVehicle():检查玩家是否在载具中isSwimming():检查玩家是否在游泳isFlying():检查玩家是否在飞行isCreativeMode():检查玩家是否在创造模式hasItem(itemId):检查玩家是否拥有指定物品
按键相关
getKeyByDesc(desc):根据描述获取按键名称isKeyPressedOfDesc(key):检查指定按键是否被按下
实体和环境检查
isTargetedEntityType(entityType):检查目标实体是否为指定类型hasTargetEntity():检查是否存在目标实体isCameraPlayer():检查摄像机实体是否为玩家isScreenOpen():检查游戏界面是否打开
物品NBT相关
hasMainHandNBT(nbtPath):检查主手物品是否包含指定NBT路径checkMainHandNBT(nbtPath, expectedValue):检查主手物品NBT路径的值是否匹配getMainHandNBTValue(nbtPath):获取主手物品NBT路径的值matchMainHandSNBT(snbt):检查主手物品NBT是否匹配SNBT格式getMainHandSNBT():获取主手物品的完整SNBT
目标实体NBT相关
hasTargetEntityNBT(nbtPath):检查目标实体是否包含指定NBT路径checkTargetEntityNBT(nbtPath, expectedValue):检查目标实体NBT路径的值是否匹配getTargetEntityNBTValue(nbtPath):获取目标实体NBT路径的值getTargetEntitySNBT():获取目标实体的完整SNBT