English
EmakiStrengthen
EmakiStrengthen (the strengthening module): what it does, which files you will touch, and what each page covers. EmakiStrengthen gives you star-based strengthening, temper state, protection materials, branch trees, attribute output, strengthen layer rebuilding, and a public API for taking equipment from +0 up to +N
NOTE
Some commands still use the historical crack naming (such as clearcrack); gameplay documentation refers to it consistently as "temper"
Module facts
| Item | Value |
|---|---|
| Module version | 4.8.9 |
| Main command | /emakistrengthen |
| Alias | /estrengthen |
| Hard dependency | EmakiCoreLib |
| Soft dependency | EmakiItem, EmakiAttribute, PlaceholderAPI |
| Main permissions | emakistrengthen.use, emakistrengthen.reload, emakistrengthen.debug, emakistrengthen.admin |
Pages
| Page | Contents |
|---|---|
| Commands | Opening the strengthen GUI, inspecting the held item, refreshing display, setting stars, and giving materials |
| Recipes | Success rates, material costs, failure penalties, effects, and actions in recipes/*.yml |
| Process | The full strengthen flow from recipe matching to PDC writes and display refresh |
| Branch Trees | Strengthen routes per star range and the attributes, skills, and display each route grants |
| Broadcast | Notifying nearby or all players the first time a star tier is reached |
| Placeholders | PlaceholderAPI output |
| CoreLib Actions | Rebuilding and modifying the main-hand strengthen layer |
| API | Reading state, previewing, and executing strengthening through EmakiStrengthenApi |
| Event API | Bukkit events and interception points across the strengthen flow |
Core concepts
| Concept | Description |
|---|---|
| Strengthen star | Current strengthen tier of the item, such as +1, +2, or +10 |
| Strengthen recipe | Defines which items can be strengthened, required materials, success rate, and results |
| Material plan | Checks and consumes strengthen materials, protection materials, and temper materials |
| Temper | A level accumulated on failure that raises later success rates by temper_chance_bonus_per_level |
| Failure downgrade | When the target star is 6 or higher and no protection material is used, failure drops one star |
| Protection material | A material with protection: true that prevents a star drop on failure |
| Branch tree | Forks into different strengthen routes after a configured star |
| Strengthen layer | Writes to the item's strengthen namespace layer and is rebuilt by CoreLib |
Default runtime folder
text
plugins/EmakiStrengthen/
├── config.yml
├── recipes/
│ ├── example_recipe.yml
│ └── example_branch_recipe.yml
├── enhancement_recipes/
│ ├── example_enhancement_recipe.yml
│ ├── example_affix_recipe.yml
│ └── example_gem.yml
├── gui/
│ ├── strengthen_gui.yml
│ └── affix_strengthen_gui.yml
└── lang/
├── zh_CN.yml
└── en_US.ymlrecipes/*.yml holds the rules for whole-item star strengthening; the generic enhancement framework (equipment / affix / gem) keeps its recipes in enhancement_recipes/*.yml. You configure the interfaces in two files: gui/strengthen_gui.yml for star strengthening and gui/affix_strengthen_gui.yml for affix strengthening
Main config.yml
For success_rates, see Process; for local_broadcast_radius and broadcast.*, see Broadcast. The remaining fields are:
| Field | Type | Required | Default | Range | Description |
|---|---|---|---|---|---|
version | string | No | 4.8.9 | — | Configuration-structure marker; the shipped resource version is maintained by the resource sync flow. Two distinct internal constants exist: a blank key falls back to 4.5.9, and with no config file at all AppConfig.defaults() uses 4.2.9. Neither is a release coordinate |
language | string | No | zh_CN | — | Uses lang/<language>.yml |
release_default_data | boolean | No | true | true / false | Releases the bundled default recipes, GUI, and language resources when missing |
affix.max_level | integer | No | 10 | ≥ 0 (negatives become 0) | Maximum strengthen level per affix; 0 means no cap |
affix.capacity_max | integer | No | 100 | ≥ 0 (negatives become 0) | Total capacity assignable to affixes on one item |
affix.capacity_cost_per_level | integer | No | 10 | ≥ 0 (negatives become 0) | Capacity consumed per affix level; insufficient capacity blocks that attempt |
affix.bonus_per_level | double | No | 1.0 | finite (non-finite becomes 0) | Attribute value added per affix level |
enhancement.reject_container_target | boolean | No | false | true / false | When enabled, rejects targets inside external containers so they cannot be taken between preview and confirm |
enhancement.reject_container_material | boolean | No | false | true / false | When enabled, rejects materials inside external containers so confirm cannot charge an old amount it can no longer take |
enhancement.min_success_rate | double | No | 0.0 | 0.0~1.0 ratio (≤0/non-finite becomes 0, >1 becomes 1) | Lower bound on success rate; only raises a rate that reductions pushed too low, never lowers a higher one, and does not affect pity force-success. 0.0 disables the floor |
enhancement.diminishing_returns.per_level | double | No | 0.0 | 0.0~1.0 | Fraction of the base success rate removed per level above start_level. 0.0 disables it |
enhancement.diminishing_returns.start_level | integer | No | 1 | ≥ 1 | First level at which diminishing returns apply; lower levels are unaffected |
enhancement.cost_growth.per_level | double | No | 0.0 | ≥ 0 | Cost multiplier added per level. 0.0 disables it |
enhancement.cost_growth.max_multiplier | double | No | 0.0 | ≥ 0 (0 means no cap) | Upper bound on the cost multiplier |
enhancement.failure_demotion.levels | integer | No | 0 | ≥ 0 (0 means no demotion) | Levels lost per failure |
enhancement.failure_demotion.floor_level | integer | No | 0 | ≥ 0 | Failure demotion never drops below this level |
enhancement.pity_retry.interval_ticks | integer | No | 0 | ≥ 0 (0 starts no retry task) | Retry interval in ticks after a pity-counter persistence failure |
enhancement.pity_retry.max_attempts | integer | No | 0 | ≥ 0 (0 starts no retry task) | Consecutive retries before retrying stops and a warning is logged |
enhancement.mastery.exp_per_attempt | double | No | 0.0 | ≥ 0 | Mastery experience granted per attempt (success or failure); recorded only after cost, materials, and target all commit |
enhancement.mastery.exp_per_success | double | No | 0.0 | ≥ 0 | Additional mastery experience granted per success |
enhancement.mastery.soft_cap | integer | No | 0 | ≥ 0 (0 means unlimited) | Mastery level soft cap; every 100 accumulated experience is one level. With both experience values at 0, no mastery data is written at all |
Below are the shipped defaults (excerpt; success_rates, local_broadcast_radius, and broadcast.* are covered on their own pages):
yaml
version: "4.8.9"
language: "zh_CN"
release_default_data: true
affix:
max_level: 10
capacity_max: 100
capacity_cost_per_level: 10
bonus_per_level: 1.0
enhancement:
reject_container_target: false
reject_container_material: false
min_success_rate: 0.0
diminishing_returns:
per_level: 0.0
start_level: 1
cost_growth:
per_level: 0.0
max_multiplier: 0.0
failure_demotion:
levels: 0
floor_level: 0
pity_retry:
interval_ticks: 0
max_attempts: 0
mastery:
exp_per_attempt: 0.0
exp_per_success: 0.0
soft_cap: 0Example: cut 8% of the base success rate per level from +6 onward, and floor the rate at 5%:
yaml
enhancement:
min_success_rate: 0.05
diminishing_returns:
per_level: 0.08
start_level: 6Typical strengthen flow
- Open the strengthen GUI with
/estrengthen open - Insert target equipment, strengthen materials, and optional protection materials
- Match an available recipe through the recipe's top-level
matcherandslot_groupsfields - Check conditions, materials, economy costs, and the current star limit
- Calculate the success rate: target-star base rate plus temper bonus, clamped to
success_chance_cap - Fire
StrengthenPreAttemptEvent, allowing external code to adjust the rate or cancel - Roll the outcome and charge materials and costs
- On success, raise the star by one, write the strengthen layer, and run that star's
actions.success - On failure, accumulate temper and possibly drop a star, then run
actions.failure - CoreLib rebuilds the item presentation; reaching a broadcast star for the first time sends a local or global broadcast
Relation with Attribute
Strengthen can also serve as a display-and-progression system only. Install EmakiAttribute and configure ea_attribute effects, and each star contributes real stats: attributes are written through the EmakiAttribute authoritative API into a structured PDC layer and participate in real combat calculation
Without EmakiAttribute the module takes a no-op path: strengthening still completes but no attributes are written
Relation with Item
With EmakiItem installed, Strengthen registers an item layer preview provider through EmakiItemApi from its conditionally loaded integration package, so EmakiItem can preview strengthen layer content. When EmakiItem is absent or disabled, that registration is skipped or released automatically without affecting strengthening