Tags
Creators
Details
All versions
5.3.0
Release
custom-crafter-api 5.3.03 months ago 31
Compatibility
Minecraft: Java Edition
26.1.x
1.21.4–1.21.11
Platforms
Folia
Paper
Purpur
Changes
⚠️ Breaking Changes
- [Dependency Removal] Removed the Choco-solver dependency; shapeless matching now uses an in-house max-flow solver, so the
org.chocosolvershaded relocation is gone. CMatter.predicateschanged fromCollection<CMatterPredicate>?toList<CMatterPredicate>?, making predicate order significant.CMatterImpl.defaultMatterPredicates()now returnsList<CMatterPredicate>instead ofSet<CMatterPredicate>.CMatterPredicate.ContextandCRecipePredicate.Contextgained a trailingexplainerparameter; Kotlin source compatibility is preserved, but binary compatibility is not.
✨ New Features and Enhancements
- [New Feature] Added
Explainer: an opt-in, thread-safe diagnostic recorder that reports why each recipe did or did not match during a search. - [New Feature] Added
MatchGroupandCRecipe.matchGroups(), generalising shapeless matching from "every slot is mandatory" into a min/max bounded assignment. - [New Feature] Added
ShapelessGroupRecipe: the shapeless counterpart ofGroupRecipe, needing noMaterial.AIRplaceholder to express an optional slot. - [New Feature] Added the
CMatterPredicatesandCRecipePredicatesutility objects, providing theand,or,allOf, andnOfcombinators. - [New Feature] Added
named()and aname()default method on both predicate interfaces, so a predicate is reported by name instead of by index (combinators compose names automatically). - [Enhancement]
CMatterPredicate.ContextandCRecipePredicate.Contextnow expose anexplainerfield, letting a predicate record why it rejected an input. - [Enhancement] Added
CMatter.firstFailedPredicate()andCRecipe.firstFailedRecipePredicate(), returning the first rejecting predicate instead of only whether one rejected. - [Enhancement]
Search.search,Search.asyncSearch,PartialSearch.asyncPartialSearch, andVanillaSearch.searchnow accept an optionalexplainer. - [Documentation] Added the "Advanced Debugging for Recipe Search" page (EN / JA) and documented the
Predicatesutilities and predicate naming on theCRecipePredicatepage.
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:lUgVFdcC:sp0AKRnt"
}
// Legacy Loom dependency
dependencies {
modImplementation "maven.modrinth:lUgVFdcC:sp0AKRnt"
}

