---
title: PMMO 设置
hide_meta: true
---

# PMMO 设置

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

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

## 单个目标

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

```js
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。对于物品、方块和实体，两者都支持。

## 批量目标

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

```js
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 需求
- **位置：** 生物群系和维度的生物修正

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

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

## 清除默认数据

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

```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，类型补全会自动显示正确的值。
