Tags
Creators
Details
1.8
Compatibility
Changes
This update expands MPromoCodes with a complete operations toolkit for reusable templates, unique voucher batches, safe recovery, auditing and reward testing. Bulk work runs through a bounded background queue and generated vouchers start disabled by default, making the new workflow suitable for large production servers.
Added
- Added reusable voucher templates stored in
templates.yml. - Added collision-safe bulk generation of unique voucher codes.
- Added configurable voucher masks using
Xplaceholders. - Added a configurable unambiguous generation alphabet without
0/Oand1/I/Lby default. - Added a configurable per-batch limit with an additional hard safety cap.
- Added batch metadata in
batches.yml, including template, campaign, creator, creation time, mask and code list. - Added batch-wide enable, disable, archive and restore operations.
- Added TXT and CSV batch export to the protected
exportsdirectory. - Added code search by code name, batch, template or campaign.
- Added safe code archiving and restoration without deleting redemption history.
- Added a persistent asynchronous JSONL audit log with size-based rotation.
- Added
/codes audit [page]for recent administrative activity. - Added reward preview with type, enabled state, chance, weight and value.
- Added reward test delivery to an online player without consuming the code, changing limits or starting a cooldown.
- Added safe player usage/cooldown and global-use reset tools.
- Added reset support for YAML, SQLite and MySQL storage.
- Added dedicated permissions for voucher operations, audit access, resets and reward testing.
- Added full English and Slovak localization for all new command output and help entries.
Changed
- Generated voucher batches are disabled by default until an administrator reviews and enables them.
- Bulk generation, exports and batch mutations now run on one bounded background worker.
- The old GUI delete action now archives and disables codes instead of permanently removing their definition.
- Archived codes are excluded from the active runtime registry and normal/expired/upcoming GUI lists.
- Restored codes remain disabled until an administrator explicitly enables them.
/codes helpnow includes the new permission-aware 1.8 workflows.config-versionis now1.8.
Improved
- Improved safety for giveaways, creator campaigns, one-time purchases and externally distributed voucher lists.
- Improved large-server behavior by bounding queued operations and keeping bulk disk work off the server thread.
- Improved recovery from configuration mistakes through archive/restore and targeted resets.
- Improved traceability without leaking complete generated voucher lists into the audit log.
- Improved export safety by restricting output paths to the MPromoCodes data directory.
- Improved case-insensitive collision detection and mask validation.
Storage & Data Safety
- Existing
codes.yml,campaigns.yml, redemption data and databases are preserved. templates.ymlandbatches.ymlare created automatically when missing and are treated as live administrator data.- Stable internal code IDs continue to preserve history when public code names change.
- Player resets operate on the stable internal ID and can target only cooldown or both usage and cooldown.
- SQL resets execute on the existing bounded storage workers; player resets use transactions.
- Audit entries store operation metadata and counts, not every secret voucher value.
New Commands
/codes template list
/codes template save <template> <code>
/codes template delete <template>
/codes batch list
/codes batch generate <batch> <template> <amount> [mask] [campaign]
/codes batch export <batch> <txt|csv>
/codes batch enable <batch>
/codes batch disable <batch>
/codes batch archive <batch>
/codes batch restore <batch>
/codes search [query] [page]
/codes search --archived [page]
/codes archive <code>
/codes restore <code>
/codes preview <code>
/codes test <code> [online-player]
/codes audit [page]
/codes reset player <player> <code> <usage|cooldown>
/codes reset global <code>
Use - to keep the default mask while supplying a campaign, for example:
/codes batch generate summer-drop summer-template 250 - summer-2026
New Permissions
mpromocodes.admin.vouchersmpromocodes.admin.auditmpromocodes.admin.resetmpromocodes.admin.test
All four are included as children of mpromocodes.admin and default to server operators.
Migration Notes
- Updating from 1.7/1.7.5 triggers the existing version-aware configuration migration.
- The old
config.ymlis preserved asconfig-old.ymlor a collision-safe versioned/numbered backup. - A fresh 1.8
config.ymlis generated with the completeoperationssection. - Copy your customized values from the backup into the new template after the first start.
codes.yml,campaigns.yml,templates.yml,batches.yml, locale customizations and storage data are never replaced by this template migration.
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:5XgdhBMc:TaFc3s3v"
}
// Legacy Loom dependency
dependencies {
modImplementation "maven.modrinth:5XgdhBMc:TaFc3s3v"
}

