Skip to content

Modifiers zh

hp-1e edited this page Oct 31, 2026 · 1 revision

English | 中文

词条

定义词条(server,/reload)

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> <等级> 测试。

词条事件(server)

脚本定义的词条会自动带上事件模块。按词条 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)的字段:attacker player target livingTarget hand slot projectile critical fullyCharged extraAttack baseDamage damage。

全局工具属性

对所有匠魂工具生效,不要求带词条:

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)
})

ArsenalTool 查询

可在任意 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) 才会更新。
  • 工具站预览会在客户端线程重建工具,所以属性事件的回调不要依赖世界状态,也不要做耗时操作。

Clone this wiki locally