LogoKubeJS PMMO

PmmoJS Overview

PmmoJS is a KubeJS addon for Project MMO on Forge 1.20.1.

It wraps PMMO's API as KubeJS events and helpers. Scripts can define skills, requirements, XP awards, perks, triggers, and handler behavior from JavaScript.

ProbeJS 集成为 PmmoJS 事件、工具类和 PMMO 枚举值生成类型补全与代码片段。

If you are building pack progression from scratch, read PMMO Authoring Workflow before the API pages. It shows the normal order: define skills, choose a reset baseline, register object data, add NBT rules, configure perks, then use runtime hooks for exceptions.

Control layers

PmmoJS organizes its features into three layers, matching the KubeJS script types:

Startup layer (startup_scripts/)

Startup scripts register data before the game world loads:

  • Custom perks — define new perk types with PmmoJS.registerPerk(...). Each perk gets lifecycle callbacks for conditions checking, startup, ticking, shutdown, and status display.
  • Custom predicates — register condition checks that PMMO evaluates using PmmoJS.registerPredicate(...).
  • Direct data registration — use PmmoHelper to register requirement data, XP awards, bonuses, and trigger listeners directly into PMMO's API.

Config layer (server_scripts/)

Server scripts edit PMMO configuration through KubeJS events:

EventWhat it controls
PmmoJS.skillsConfig(...)Add, replace, or remove skills
PmmoJS.perksConfig(...)Edit existing perk entries in PMMO's config
PmmoJS.serverConfig(...)Server-level settings like max level, vein mining, death loss
PmmoJS.autoValueConfig(...)Auto-generated values for blocks and items
PmmoJS.antiCheeseConfig(...)AFK detection and diminishing returns
PmmoJS.globalsConfig(...)Global NBT paths and constants
PmmoJS.settings(...)Item, block, entity, biome, and dimension requirements and XP data

Runtime layer (server_scripts/)

Runtime hooks fire during gameplay:

EventWhen it fires
PmmoJS.trigger(EventType, ...)PMMO trigger events (block break, crafting, damage, jumping, etc.)
PmmoJS.internal(PMMOInternalType, ...)PMMO handler-level hooks (login, dimension travel, explosions, brewing)
PmmoJS.xp(...)When a player gains PMMO XP
PmmoJS.enchant(...)When a player enchants an item
PmmoJS.furnace(...)When a furnace smelts
PmmoJS.salvage(...)When a player salvages an item
PmmoJS.itemstackDamagePenalty(...)Scaling item durability loss from PMMO
PmmoJS.entityDamagePenalty(...)Scaling entity damage from PMMO

Script bindings

PmmoJS registers bindings by script type:

Startup scripts: PmmoHelper, TagBuilder, NbtPathBuilder

Server scripts: PmmoHelper, SkillHelper, SKillHelper, CustomReqMap, TagBuilder, NbtPathBuilder, SalvageBuilder

Client scripts: SkillHelper, SKillHelper (read-only access to skill data)

PmmoHelper

PmmoHelper exposes PMMO API access through static methods:

  • Skill state: getSkillLevel, setSkillLevel, addSkillXp, getAllSkillLevels
  • Data lookups: getItemXpAwards, getBlockRequirements, getConsolidatedModifiers
  • Direct registration: registerRequirementData, registerXpAwardData, registerBonusData, registerTriggerListener
  • Party system: getPartyMembers, getPartyMembersInRange, inviteToParty
  • Vein mining: applyVeinMining, regenerateVeinCharge, getCurrentVeinCharge
  • Type discovery: getTriggerTypeIds, getInternalTypeIds, getEventTypeIds, getReqTypeIds, getObjectTypeIds

Type enums

PmmoJS exposes PMMO type enums for script constants:

  • EventType — PMMO event type names (e.g., BLOCK_BREAK, CRAFT, DEATH)
  • PMMOInternalType — internal hook type IDs (e.g., DIMENSION_TRAVEL, LOGIN)
  • ReqType — requirement type names (e.g., WEAPON, TOOL, KILL)
  • ObjectType — object type names (e.g., ITEM, BLOCK, ENTITY)
  • ModifierDataType — modifier data categories (e.g., BIOME, HELD, WORN)
  • PMMOPerkSideSERVER, CLIENT, or BOTH

Version compatibility

ComponentVersion
Minecraft1.20.1
Project MMO1.7.40
KubeJS2001.6.5-build.16+
ProbeJS(可选)ProbeJS 或 ProbeJS Legacy

PmmoJS 分别支持 ProbeJS 和 ProbeJS Legacy。整合包只需要加载其中一个 ProbeJS 变体,然后运行 /probejs dump 生成编辑器类型。

Startup and server scripts

Startup scripts run before the world loads. They hold definitions and registrations that must exist at load time.

Server scripts run after the world loads and on reload. They hold gameplay reactions and config changes.

Runtime logic does not belong in startup scripts. Registration logic belongs in startup scripts unless a specific PmmoJS server event is documented for reload-time data mutation.