English
EmakiForge
EmakiForge runs the whole forging flow: you place the target equipment, blueprint, and materials; it checks the recipe, capacity, and conditions, then modifies the target item or creates a new result. Quality, material contribution, and result presentation are all configured here
Module facts
| Item | Value |
|---|---|
| Module version | 4.8.7 |
| Main command | /emakiforge |
| Aliases | /eforge, /ef |
| Hard dependency | EmakiCoreLib |
| Soft dependency | EmakiAttribute, EmakiItem, PlaceholderAPI |
| Main permissions | emakiforge.use, emakiforge.book, emakiforge.reload, emakiforge.debug, emakiforge.admin |
Core concepts
| Concept | Description |
|---|---|
| Blueprint | Controls whether a player can use a forging recipe |
| Material | Resources the player adds to influence success, quality, or final attributes |
| Recipe | Defines input requirements, capacity, conditions, results, and actions |
| Capacity | Limits the sum of capacity_cost across inserted materials |
| Quality | Deterministic weighted outcome tier, optionally with pity |
| Recipe book | GUI used to inspect available recipes |
Default runtime folder
text
plugins/EmakiForge/
├── config.yml
├── recipes/
│ └── example_recipe.yml
├── gui/
│ ├── forge_gui.yml
│ └── recipe_book.yml
├── lang/
│ ├── zh_CN.yml
│ └── en_US.yml
└── data/Start with recipes/. It defines forging inputs, capacity, conditions, results, and actions. data/ stores one file per player keyed by UUID, a <uuid>.yml holding that player's craft counters and pity counters
Main config.yml
See Quality for the quality sub-keys and Forge history for the history sub-keys; they are not repeated here
| Field | Type | Required | Default | Allowed values | Description |
|---|---|---|---|---|---|
version | string | No | 4.8.7 | — | Configuration-structure marker maintained by the resource sync flow. The internal version-migration constant is a separate 4.5.11; the two are not the same number |
language | string | No | zh_CN | An existing language file name without .yml | Selects lang/<language>.yml. When that file is missing, or a key is missing from it, the bundled zh_CN language resource is used as fallback |
release_default_data | boolean | No | true | true / false | When true, the missing bundled default data recipes/example_recipe.yml is released; when false that step is skipped. config.yml and lang/*.yml are versioned resources (missing keys are merged in from the bundled copy) and gui/*.yml are static resources (created from the bundled copy when absent); neither is affected by this key |
op_bypass | boolean | No | false | true / false | When true, OPs bypass command permission checks. The legacy key permission.op_bypass is read only when the top-level key is absent (with a startup warning), and is then migrated to the top-level key |
number_format.default | string | No | 0.## | Any DecimalFormat pattern | Display format for general numbers |
number_format.integer | string | No | 0 | Any DecimalFormat pattern | Display format for integer values |
number_format.percentage | string | No | 0.##% | Any DecimalFormat pattern | Display format for percentage values |
condition.invalid_as_failure | boolean | No | true | true / false | When true, a condition expression that fails to parse is treated as "condition not met"; when false, it does not block the forge |
quality | object | No | see below | — | Global quality pool, pity, and quality item metadata; the full key set is in Quality |
history | object | No | see below | — | Forge history switches and autosave; the full key set is in Forge history |
Shipped defaults (the config.yml published with the module; repeated quality.tiers entries are abbreviated):
yaml
version: "4.8.7"
language: "zh_CN"
release_default_data: true
quality:
tiers:
- name: "平庸"
weight: 60
multiplier: 1.0
- name: "完美"
weight: 1
multiplier: 1.2
default_tier: "平庸"
guarantee:
enabled: true
threshold: 60
minimum: "无暇"
item_meta:
enabled: true
tiers:
无暇:
name_actions:
- action: "prepend_prefix"
value: "<color:#4B64C8>[无暇] </color>"
lore_actions:
action:
- 'broadcast_message text="..."'
# the other 5 tiers share this structure, see quality.md
number_format:
default: "0.##"
integer: "0"
percentage: "0.##%"
op_bypass: false
condition:
invalid_as_failure: true
history:
enabled: true
auto_save: true
save_interval: 6000A minimal copyable example (switch language and reduce history write frequency):
yaml
language: "en_US"
number_format:
percentage: "0.0%"
history:
auto_save: true
save_interval: 12000Pages
| Page | Content |
|---|---|
| Commands | Forging, recipe book, reload, list, and debug commands |
| Recipes | Inputs, blueprints, results, actions, and recipe matching |
| Materials | Material contribution, capacity, quality modifiers, and effect writes |
| Quality | Quality pools, pity, item metadata, and deterministic logic |
| Forge History | Player forging data, autosave, and troubleshooting |
| GUI | Forge UI and recipe book templates |
| Audit | Forge audit data and material signature on result items |
| Placeholders | PlaceholderAPI output |
| CoreLib Actions | Refresh actions registered by Forge |
| API | The EmakiForgeApi static facade |
| Events | ForgeStartEvent, ForgeCompletedEvent |
Typical forging flow
- Open the forge GUI with
/ef forge - Place a blueprint in the blueprint slots; Forge matches the recipe by blueprint item source
- Place materials in the required and optional material slots
- Check recipe, condition, capacity, and material count
- Click the confirm slot to run
actions.pre - Resolve deterministic quality and pity from the player, recipe, and material fingerprint (the fingerprint is an identifier derived from the exact mix of materials inserted)
- Create the primary item from
result.success.outputsand attach the forge layer snapshot - Run
result.success.actions→actions.success→ quality actions; on failure runactions.failure - The CoreLib item assembly service rebuilds the item presentation
- With EmakiAttribute installed,
ea_attributematerial effects are written to the structured PDC attribute layer (PDC, the key-value data container stored on the item)
Relation with Attribute
Forge can run basic forging without Attribute. The ea_attribute material effect requires EmakiAttribute: attributes are then written into a structured PDC layer, so the numbers participate in real combat calculation instead of only appearing in lore
When EmakiAttribute is absent, this effect takes a no-op path: forging still completes, it simply does not write attribute data, no error is raised, and the flow is not interrupted