Tags
Creators
Details
Licensed GPL-3.0-only
Published 7 months ago
Updated 2 months ago
All versions
1.10.0
Release
EmakiForge 1.10.07 months ago 27
Compatibility
Minecraft: Java Edition
1.21.x
Platforms
Paper
Purpur
Changes
EmakiForge Changelog
[1.10.0] - 2026-03-31
New Features
Material Quality Modification Mechanism
- Added
ForgeMaterial.QualityModifierrecord to support influencing forging quality through material effects. - Supports two modification modes:
force: Forcibly specifies a quality tier, overriding random and pity mechanisms.minimum: Sets a quality floor, taking the higher value compared to the random result.
- Added
ForgeQualityModifierResolverservice to uniformly process quality modification logic. - The
quality_modifyeffect can now be added in material definitions:
effects:
- type: quality_modify
mode: force # or minimum
tier: perfect # quality tier name
Item Refresh Service
- Added
ForgeItemRefreshService, supporting automatic refresh of forging attributes for player inventory and dropped items. - Added
ForgeItemRefreshListener, listening to the following events to trigger refresh: - Player joins server (
PlayerJoinEvent) - Player clicks inventory (
InventoryClickEvent) - Player drags inventory (
InventoryDragEvent) - Player drops an item (
PlayerDropItemEvent) - Player picks up an item (
EntityPickupItemEvent) - Supports batch refresh for online players, single player inventory refresh, and dropped item refresh.
- The refresh process recalculates quality modifications and updates item metadata.
Material Contribution Record
- Added
ForgeMaterialContributionrecord, representing contribution information of forging materials. - Includes material ID, quantity, slot, category, sequence, and other information.
- Provides
toAuditMap()andtoSignatureData()methods for auditing and signing.
Improvements & Optimizations
Quality Calculation Flow Optimization
QualityRollPlanrecord structure changes:- Added
rolledTier: Randomly rolled quality tier. - Added
finalTier: Final quality tier after applying modifications. - Added
forceApplied: Whether a force modification was applied. PreparedForgerecord structure changes:- Added
rolledQualityTier: Random quality tier. - Added
forceQualityApplied: Whether forced application occurred. - Improved quality calculation logic to support material modifier participation.
Quality Tier Comparison Refactoring
QualitySettingsadded helper methods:findTier(String name): Find a quality tier.tierIndex(String name): Get the index of a quality tier.tierIndex(QualityTier tier): Get the index of a quality tier.hasTier(String name): Check if a quality tier exists.higherTier(QualityTier first, QualityTier second): Compare and return the higher quality tier.- Improved quality tier lookup logic, reducing redundant calculations.
- Optimized quality configuration parsing performance.
ForgeMaterial Enhancements
- Added
qualityModifiers()method to get the list of material quality modifiers. - Added
definitionSignatureData()method to generate material definition signature data. - Improved material effect parsing to support quality modification effects.
ForgeService Improvements
- Added
findMaterialById(String materialId)method. - Added
resolveMaterialQualityModifiers()method to parse material quality modifiers. - Improved forge preparation flow, integrating quality modification calculation.
Configuration Changes
Configuration File Updates
- Action IDs in configuration files have been updated to camelCase format.
- Example recipe configurations have been updated accordingly.
Code Improvements
EmakiForgePlugin
- Added
itemRefreshService()accessor. - Improved plugin lifecycle management.
ForgeLifecycleCoordinator
- Integrated item refresh service initialization.
ForgeRuntimeComponents
- Added
itemRefreshServicecomponent.
RecipeLoader
- Improved recipe loading logic.
ForgeExecutionService
- Improved forge execution flow.
ForgeLayerSnapshotBuilder
- Optimized layer snapshot building logic.
ForgeLookupIndex
- Added
findMaterialById()method. - Improved material lookup performance.
Usage Notes
Material Quality Modification
- To use the material quality modification feature, you need to add the
quality_modifyeffect in the material definition. - The effect data must include the
mode(force/minimum) andtier(quality name) fields. - Force mode overrides pity mechanisms; use with caution.
- Minimum mode takes the higher value compared to the random result, suitable for pity scenarios.
Item Refresh Service
- The item refresh service is enabled by default and will automatically refresh upon relevant events.
- The refresh process recalculates quality modifications and updates item metadata.
- May cause performance overhead in scenarios with a large number of items; adjustment based on server load is recommended.
Action ID Migration
- Action IDs in configuration files need to be migrated from underscore_case to camelCase format.
- Affected configurations:
- Quality actions in
config.yml - Custom recipe configurations
Compatibility
- Requires
EmakiCoreLib 1.11.0or above. - The quality modification feature is optional and does not affect existing recipe configurations.
- Maintains backward compatibility with older configuration files.
API Changes
QualityRollPlanrecord structure changed with added fields.PreparedForgerecord structure changed with added fields.QualityCalculationServiceconstructor added new parameters.- The above changes may affect external plugins directly using these APIs.
Known Issues
- The item refresh service may cause performance overhead in scenarios with a large number of items.
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:Ksqjj9TX:zX1D1MVm"
}
// Legacy Loom dependency
dependencies {
modImplementation "maven.modrinth:Ksqjj9TX:zX1D1MVm"
}

