LogoKubeJS PMMO

PMMO 设置

PmmoJS.settings 是在 server_scripts/ 中为物品、方块、实体、生物群系和维度注册 PMMO 数据的主要方式。

把它理解为替代手动编辑 PMMO 的 JSON 配置文件。你改写成 JavaScript,数据通过 PMMO 的 API 干净地应用。

单个目标

当你需要逐个配置对象时使用:

PmmoJS.settings(event => {
event
.item('minecraft:diamond_sword')
.override(true)
.setRequirement(ReqType.WEAPON, 'combat', 10)
.setXp(EventType.CRAFT, 'smithing', 100)
event
.block('minecraft:diamond_ore')
.override(true)
.setRequirement(ReqType.BREAK, 'mining', 30)
.setXp(EventType.BLOCK_BREAK, 'mining', 200)
event
.entity('minecraft:zombie')
.override(true)
.setXp(EventType.DEATH, 'combat', 25)
})

可用的目标方法:event.item(id)event.block(id)event.entity(id)event.biome(id)event.dimension(id)event.generic(objectType, id)

你可以传入注册表对象或字符串 ID。对于物品、方块和实体,两者都支持。

批量目标

将相同的配置一次应用到多个目标 —— 比重复相同的设置代码干净得多:

PmmoJS.settings(event => {
event.items([
'minecraft:diamond_sword',
'minecraft:netherite_sword',
'minecraft:trident'
], setting => {
setting.override(true)
setting.setRequirement(ReqType.WEAPON, 'combat', 20)
setting.setXp(EventType.CRAFT, 'smithing', 150)
})
event.entities([
'minecraft:villager',
'minecraft:wandering_trader'
], setting => {
setting.override(true)
setting.setRequirement(ReqType.ENTITY_INTERACT, 'charisma', 8)
})
})

可用的批量方法:event.items(targets, callback)event.blocks(targets, callback)event.entities(targets, callback)event.biomes(targets, callback)event.dimensions(targets, callback)event.genericMany(objectType, targets, callback)

targets 参数接受单个 ID 字符串、单个注册表对象、JS 数组或任何可迭代对象。

通用构建器方法

所有设置构建器共享这些方法:

  • setRequirement(reqType, skill, level) —— 要求某项技能达到指定等级才能使用该对象
  • requirement(reqType, map) —— 一次性设置多个需求(例如 {combat: 10, mining: 5}
  • setXp(eventType, skill, amount) —— 为某项行为奖励 XP
  • xp(eventType, map) —— 一次性设置多个 XP 奖励
  • override(boolean) —— 设为 true 时,替换 PMMO 的默认数据而不是与它合并

各类型专属功能

根据构建器类型,你还能获得:

  • 物品: 回收配置、矿脉挖掘设置、基于 NBT 的需求和 XP
  • 实体: 伤害类型 XP 注册、正面/负面生物效果
  • 方块: 矿脉挖掘数据、NBT 需求
  • 位置: 生物群系和维度的生物修正

示例 —— 在物品上配置矿脉挖掘:

PmmoJS.settings(event => {
event
.item('minecraft:diamond_pickaxe')
.override(true)
.veinChargeCap(128)
.veinChargeRate(1.25)
.veinConsumeAmount(2)
})

清除默认数据

如果你想清除 PMMO 的内置数据并从零开始,使用 config/pmmojs-common.toml

[disableDefaultSettings]
all = false
skills = false
perks = false
requirements = false
xpAwards = false
itemExtras = false
blockVeinData = false

重置发生在 KubeJS 脚本运行之前,所以你的自定义数据始终生效。

设置事件还有旧版辅助方法 clearVanillaItemSettings()clearVanillaBlockSettings()clearVanillaEntitySettings()。这些只重置需求数据 —— 不触及 XP 奖励、加成、效果、回收或矿脉数据。需要完整重置时使用通用配置。

枚举命名

PMMO 的枚举名称区分大小写,严格遵循 PMMO 源代码。一些容易踩坑的值:

  • ReqType.ENTITY_INTERACT 存在,ReqType.ENTITY 不存在
  • EventType.BLOCK_BREAK 存在,EventType.BREAK 不存在
  • EventType.DEATH 存在,EventType.KILL 不存在

如果你使用 ProbeJS,类型补全会自动显示正确的值。