Overview
CurseForge is one of the largest mod hosting platforms for Minecraft and other games. MCReleaser provides comprehensive integration with CurseForge’s API, supporting both Minecraft and Hytale projects with full version metadata including game versions, mod loaders, Java versions, and environment specifications. The platform automatically fetches and resolves game version IDs from CurseForge’s API, ensuring your releases are properly tagged with all necessary metadata.Required Credentials
To publish to CurseForge, you need:- CurseForge API Token: An API token from your CurseForge account
- Project ID: The numeric project ID from your project page
Configuration Options
The CurseForge API token for authentication.
The numeric project ID. You can find this on your project’s page or in the URL.Example:
123456The game type for your project.Valid values:
minecraft- For Minecraft mods and pluginshytale- For Hytale mods (legacy support)
The type of release.Valid values:
release- Stable releasebeta- Beta versionalpha- Alpha version
Space-separated list of Minecraft versions that your mod supports.MCReleaser will automatically resolve these to CurseForge’s game version IDs.Examples:If not set, falls back to the common
GAME_VERSIONS variable.Space-separated list of mod loaders.Common loaders: MCReleaser will automatically resolve loader names to CurseForge’s version IDs.
forge, fabric, quilt, neoforgeExample:The Java version required for your mod.Just specify the version number, MCReleaser will format it as needed.Example:
Space-separated list of supported environments.Valid values:
client, serverExamples:JSON array of project dependencies and relations.Each relation specifies a project slug and the relation type.Example:Relation types:
requiredDependency- Required to runoptionalDependency- Optional enhancementincompatible- Cannot be used togetherembeddedLibrary- Bundled inside your mod
Whether to create the release as manual (not auto-published).When true, the version will be created but not automatically published, allowing you to review it first.
Implementation Details
The CurseForge platform implementation performs the following steps:- Version Type Resolution: Fetches game version types from CurseForge API
- Version ID Resolution: Fetches game versions and resolves your specified versions to CurseForge IDs:
- Minecraft versions (with version normalization)
- Mod loaders (forge, fabric, etc.)
- Java versions
- Environments (client/server)
- Metadata Preparation: Constructs the upload metadata including:
- Changelog and display name
- Release type
- All resolved game version IDs
- Project relations (dependencies)
- File Upload: Uploads the primary file with metadata to CurseForge
CurseForge’s version resolution is complex. MCReleaser handles matching your version strings to CurseForge’s internal version IDs by querying the appropriate version types.
Complete Example
Advanced: With Dependencies
Here’s a complete example with dependencies:Docker
Hytale Support
For Hytale projects, the configuration is much simpler:Docker
Hytale projects use a fixed game version ID and don’t require specifying game versions, loaders, or Java versions.
Source Code Reference
The CurseForge platform implementation can be found in:- Platform logic:
curseforge/src/main/java/me/hsgamer/mcreleaser/curseforge/CurseForgePlatform.java - Configuration keys:
curseforge/src/main/java/me/hsgamer/mcreleaser/curseforge/CurseForgePropertyKey.java
Key Implementation Features
API Endpoints
CurseForge uses different endpoints based on the project type:- Minecraft:
https://minecraft.curseforge.com/api/ - Hytale:
https://legacy.curseforge.com/api/
/game/version-types- Get available version types/game/versions- Get available versions/projects/{projectId}/upload-file- Upload a file