LogoKubeJS PMMO

配置事件

这些钩子让你在 server_scripts/ 中用 JavaScript 调整 PMMO 配置,而不是手动编辑 TOML 文件。

设置干净基线

在 KubeJS 配置事件运行之前,PmmoJS 可以通过 Forge 通用配置文件 config/pmmojs-common.toml 清除 PMMO 的内置默认值:

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

执行顺序保证你的脚本始终生效:

  1. PmmoJS 读取 pmmojs-common.toml
  2. 启用的类别清除 PMMO 的默认数据
  3. 你的 PmmoJS.skillsConfigPmmoJS.settings 调用应用你的自定义数据

PmmoJS.skillsConfig

添加、替换或移除 PMMO 技能。

PmmoJS.skillsConfig(event => {
event
.addSkill('defense')
.withColor(0x2f6fed)
.withMaxLevel(100)
.withIconSize(18)
.build()
event.removeDefaultSkill('swimming')
})

如果你在同一个趟次中移除并重新添加同一个技能,你的自定义定义会生效。

PmmoJS.perksConfig

编辑已有的 PMMO Perk 条目。用于配置 PMMO 自带的 Perk 或你在启动时注册的 Perk。

PmmoJS.perksConfig(event => {
event.clearPerks(EventType.SKILL_UP) // 清除所有 SKILL_UP 的 Perk
event.removePerkType('pmmo:fireworks') // 按 ID 移除特定 Perk
})

核心方法:

  • addPerk(eventType, perkId, skill) —— 添加新的 Perk 条目
  • clearPerks(eventType) —— 删除某个事件类型下的所有 Perk
  • removePerkType(perkId) —— 删除所有匹配的 Perk ID 条目
  • removePerk(tag) —— 删除同时匹配 Perk ID 和技能的条目

调用 addPerk(...) 后,你可以链式调用构建器方法来配置 Perk 条目:

方法写入的键
withCooldown(ticks)cooldown
withChance(value)chance
withMinLevel(level)min_level
withMaxLevel(level)max_level
withPerXLevel(step)per_x_level
withMilestones(values)milestones
withString(key, value)withBool(key, value)withInt(key, value)自定义标量键

专用 Perk 构建器

PMMO 有若干内置 Perk 类型。PmmoJS 为每种提供了专用的构建器方法:

构建器方法配置内容重要键
asAttributePerk()永久属性加成attributemultiplicativemax_boostper_levelbase
asTempAttributePerk()临时属性加成同上 + duration
asDamageBoostPerk()伤害加成applies_tofor_damage + 加成键
asDamageReducePerk()伤害减免for_damage + 加成键
asBreakSpeedPerk()挖掘速度pickaxe_digaxe_digshovel_dig
asEffectPerk()药水效果effectdurationmodifierambientvisible
asCommandPerk()执行命令commandfunction
asFireworksPerk()烟花展示colors
asJumpBoostPerk()跳跃高度加成max_boostper_levelbase
asBreathPerk()呼吸时间加成max_boostper_levelbase
asVillagerBoostPerk()村民交易加成max_boostper_levelbase
asTameBoostPerk()驯服加成max_boostper_levelbase

使用专用构建器的完整示例:

PmmoJS.perksConfig(event => {
event
.addPerk(EventType.SKILL_UP, 'pmmo:attribute', 'endurance')
.asAttributePerk()
.withAttribute(Java.loadClass('net.minecraft.world.entity.ai.attributes.Attributes').MAX_HEALTH)
.withPerLevel(1)
.withMaxBoost(10)
.build()
})

PmmoJS.serverConfig

调整 PMMO 的服务器级设置。

PmmoJS.serverConfig(event => {
event
.setMaxLevel(100)
.setGlobalModifier(1.0)
.setUseExponentialFormula(true)
.setTreasureEnabled(true)
event.addSkillModifier('defense', 1.1)
event.addJumpXp('agility', 0.5)
event.addPartyBonus('charisma', 0.1)
})

PmmoJS.autoValueConfig

覆盖 PMMO 对方块和物品自动生成数值的方式。

PmmoJS.autoValueConfig(event => {
event
.setAutoValuesEnabled(true)
.setRaritiesModifier(1.5)
.setHardnessModifier(2.0)
event.addItemXpAward(EventType.CRAFT, 'smithing', 25)
event.addBlockReq(ReqType.BREAK, 'mining', 5)
event.setAxeOverride({
woodcutting: 15,
})
})

PmmoJS.antiCheeseConfig

配置 AFK 检测、收益递减和 XP 标准化。

PmmoJS.antiCheeseConfig(event => {
event.setAfkCanSubtract(false)
event
.addAfkSetting(EventType.BLOCK_BREAK)
.minTime(600)
.reduction(0.1)
.cooloff(5)
.tolerance(3.0)
.strictTolerance(true)
.build()
})

PmmoJS.globalsConfig

管理 PMMO 的全局 NBT 路径和常量。

PmmoJS.globalsConfig(event => {
event.addPath('durability', 'Damage')
event.addConstant('MAX_SKILL_LEVEL', '100')
event.removePath('old_path')
event.removeConstant('OLD_CONSTANT')
})

这些配置钩子通过服务器重载路径应用,因此与 PMMO 的配置重载和 EMI tag 同步兼容。