Tags
Creators
Details
Licensed LGPL-3.0-only
Published 6 months ago
Updated 2 months ago
All versions
4.6.0
Release
Emaki Strengthen 4.6.03 months ago 35
Compatibility
Minecraft: Java Edition
26.2
26.1.2
26.1
1.21.8–1.21.11
Platforms
Folia
Paper
Purpur
Required content
Unavailable version
Changes
Added
- Config key
release_default_data(defaulttrue); setfalseto stop writing the bundled sample strengthen recipes and script examples. - Six configurable held-item actions:
emakistrengthen_set_star,emakistrengthen_add_star,emakistrengthen_remove_star,emakistrengthen_reset_star,emakistrengthen_clear_layer,emakistrengthen_rerender. - Localizable config precheck text and translatable load type names.
- Public API
AttemptOutcomeenum (NOT_COMMITTED,COMMITTED_SUCCESS,COMMITTED_FAILURE,COMPENSATION_PENDING), separating "the roll succeeded" from "the transaction committed". - Public API idempotency key
operationId, exposed throughAttemptContext,AttemptResult(operationId(),outcome(),committed(),compensationPending()) and the attempt events. - Optional soft dependency on EmakiItem, so the EmakiAttribute integration degrades gracefully when that plugin is absent.
Changed
- Economy charge failure changed from a direct refund to "rollback plus pending compensation": items and currency roll back separately and an incomplete rollback is reported as pending instead of being treated as refunded.
StrengthenPreAttemptEvent.getTargetItem()now returns a defensive copy, so mutating it no longer affects the real strengthen input; success rate is clamped to 0-100 and non-finite values become zero.AttemptContext.materialInputsnow keeps null placeholders so list indexes remain stable GUI slot identifiers. Callers that assumed "list length equals material count" are affected.- The API no longer mutates the item stacks passed in through
AttemptContext; callers applyAttemptResult.resultItem()themselves and handle external inventory material consumption themselves. - Returning leftover materials after settlement now also clears the corresponding session slot state, and closing the GUI only closes the current session.
- Message prefix switched to a new brand gradient.
api-versionraised from1.21to1.21.8; the build base moved from spigot-api to paper-api. Java target stays 25,folia-supported: trueand the permission and subcommand sets (inspect/refresh/setstar/clearstate/clearcrack/givecatalyst) are unchanged.
Fixed
- A null-pointer in the strengthen result message path meant players received no result feedback in that case; the missing null check is added.
/emakistrengthen reloadreplies are delivered on the sender's execution domain, which is required for correctness on Folia.
Removed
- The browser-based Web Console layer (
web-console.yml,web-extensions/, the CSS asset, theweb-console/frontend project). - The strengthen route preview capability, entirely. It only ever had a browser-side entry point (no in-game command or GUI), so the impact is limited to Web Console users.
- Record semantics for
AttemptContextandAttemptResult, which changed from Java records to final classes. Accessor method names are preserved, but record pattern destructuring no longer works and reflection or serialization consumers relying on record semantics must adjust. - The flat GUI slot item structure:
item: "<MATERIAL>"withdisplay_name,loreandhidden_components: [tooltip]becomesitem.sourcewithitem.components.custom_name,item.components.loreanditem.components.tooltip_display.hide_tooltip. Customgui/strengthen_gui.ymlmust be migrated. - The
commands:section, as the descriptor moved topaper-plugin.yml. Paper is required.
Notes
- Requires EmakiCoreLib 4.6.0.
- Back up
gui/strengthen_gui.ymland migrate it to the structure above; setrelease_default_datatofalseif you no longer want the bundled sample data written. - After updating, run
/emakistrengthen reloadand verify the strengthen flow, material returns and result messages.
Projects on Modrinth are automatically available through a Maven repository for use with JVM build tools such as Gradle. To learn more about the Modrinth Maven API, click here.
Note: When available, you should use the creator's maven repo instead as it will have transitive dependency information that the Modrinth Maven API does not. You may also end up with duplicate dependencies if you use a mix of Modrinth and non-Modrinth Maven repositories for your dependencies, because the group identifier will be different when served through the Modrinth Maven API.
Maven coordinates:
Version ID:
build.gradle:
repositories {
exclusiveContent {
forRepository {
maven {
name = "Modrinth"
url = "https://api.modrinth.com/maven"
}
}
// forRepositories(fg.repository) // Uncomment when using ForgeGradle
filter {
includeGroup "maven.modrinth"
}
}
}
// Standard Gradle dependency
dependencies {
implementation "maven.modrinth:SH4PlNS2:IW2TJYTK"
}
// Legacy Loom dependency
dependencies {
modImplementation "maven.modrinth:SH4PlNS2:IW2TJYTK"
}

