Repository navigation
Modifiers zh
hp-1e edited this page Oct 31, 2026
·
1 revision
English | 中文
ArsenalModifierEvents.data(event => {
event.create('kubejs:vampire')
.color('B02030')
.name('Vampire').name('zh_cn', '吸血')
.flavor('zh_cn', '以血还血')
.description('zh_cn', '近战伤害提高,命中后回复生命')
.statBoost('tconstruct:attack_damage', 'add', 0.5)
.icon('minecraft:item/redstone')
.levelDisplay('default')
.tooltipDisplay('always')
.priority(100)
})| 方法 | 说明 |
|---|---|
.color('RRGGBB') |
词条颜色 |
.name/.flavor/.description([语言,] 文本) |
名称、短句、描述 |
.statBoost(工具属性, 运算, 每级数值) |
匠魂原生属性加成,运算为 add percent multiply_base multiply_conditional multiply_all
|
.module(模块类型, {...}) |
任意匠魂词条模块,原样写入 |
.icon(贴图...) |
手册和 JEI 里的图标,多张按顺序叠画。贴图必须在方块图集里,例如 minecraft:item/*、tconstruct:gui/modifiers/*,自己画的放在 kubejs/assets/kubejs/textures/item/<名字>.png,写成 kubejs:item/<名字>
|
.levelDisplay(值) |
default single_level no_levels pluses
|
.tooltipDisplay(值) |
always tinker_station never
|
.priority(n) |
词条优先级 |
名称、描述、颜色和图标随服务端同步给客户端。词条要加到工具上,还需要词条配方(见 配方),或者用 /tconstruct modifiers @s add <id> <等级> 测试。
脚本定义的词条会自动带上事件模块。按词条 ID 监听,只对带这个词条的工具或护甲触发,只在服务端触发。修改事件逻辑后,用 /kubejs reload server_scripts 就能生效。
// 近战伤害计算时,可改伤害
ArsenalModifierEvents.meleeDamage('kubejs:vampire', event => {
event.damage = event.damage * (1 + 0.1 * event.level)
})
// 命中后,event.damage 为实际造成的伤害
ArsenalModifierEvents.afterMeleeHit('kubejs:vampire', event => {
event.attacker.heal(event.damage * 0.05 * event.level)
})
// 护甲计算前受击,每件带该词条的护甲各触发一次
ArsenalModifierEvents.hurt('kubejs:guard', event => {
event.damage = Math.max(0, event.damage - event.level)
})| 事件 | 时机 | 主要字段 |
|---|---|---|
meleeDamage |
近战伤害计算 | 可改 damage;baseDamage
|
afterMeleeHit |
近战命中后 |
damage 为实际伤害 |
projectileHit |
弹射物命中 |
projectile hitEntity attacker target blocked modifiers
|
blockBreak |
挖掉方块后 |
pos state world player entity isAOE() canHarvest() isEffective()
|
hurt |
护甲计算前受击 | 可改 damage;entity slot source directDamage
|
damage |
护甲计算后受伤 | 同上 |
toolStats |
工具重建时 |
add/percent/multiply/multiplyAll(属性, 值)、get(属性)、hasTag(标签)、modifierLevel(id)、itemId
|
attributes |
工具重建时 |
add(实体属性, 数值, 'addition'|'multiply_base'|'multiply_total')、slot
|
- 所有事件都有
level、effectiveLevel、modifier;工具类事件另有tool。 - 攻击类事件(
meleeDamage、afterMeleeHit)的字段:attackerplayertargetlivingTargethandslotprojectilecriticalfullyChargedextraAttackbaseDamagedamage。
对所有匠魂工具生效,不要求带词条:
ArsenalToolEvents.stats(event => {
if (event.hasTag('tconstruct:modifiable/harvest')) event.percent('tconstruct:mining_speed', 0.1)
if (String(event.itemId) == 'kubejs:war_pick') event.add('tconstruct:attack_damage', 1)
})可在任意 KubeJS 事件里使用:
ArsenalTool.isTool(item)
ArsenalTool.modifierLevel(item, 'kubejs:vampire')
ArsenalTool.hasModifier(item, 'kubejs:vampire')
ArsenalTool.armorModifierLevel(entity, 'kubejs:guard') // 四件护甲的等级之和
ArsenalTool.projectileModifierLevel(arrow, 'kubejs:vampire')
ArsenalTool.getInt(item, 'kubejs:kills') // 读写工具的持久数据
ArsenalTool.setInt(item, 'kubejs:kills', 10)
ArsenalTool.getFloat(item, key) / ArsenalTool.setFloat(item, key, value)
ArsenalTool.rebuild(item) // 立即按当前脚本重算属性- 词条事件只对本模组定义的词条触发。判断匠魂自带词条,请用
ArsenalTool配合 KubeJS 自带事件。 -
toolStats、attributes、ArsenalToolEvents.stats在工具重建时计算并保存,只能依据工具自身的数据。随时变化的条件要放到meleeDamage这类事件里。改了脚本后,已有工具要等下次重建(加词条、修理等)或调用ArsenalTool.rebuild(item)才会更新。 - 工具站预览会在客户端线程重建工具,所以属性事件的回调不要依赖世界状态,也不要做耗时操作。