1.7.5latestMPromoCodes v1.7.5 — Quality of Life & Premium Webhooks UpdateAug 25, 2026 This update focuses entirely on polish, clarity and day-to-day administration. It makes commands easier to discover, player redemption history easier to inspect, the code editor less chaotic and Discord notifications look like a premium integration.Added
- Added a completely redesigned/codeshelp menu. - Paginated for future commands. - Shows only commands the sender can use. - Includes a short description for every command. - Commands are clickable in-game and include hover descriptions. - Console output remains clean and readable. - Added/codes help [page]. - Added paginated personal statistics with/codes stats [page]. - Added/codes stats <player> [page]for administrators. - Supports online players. - Supports offline players known to the server cache. - Uses UUID data internally, so name changes do not break stored history. - Works from the server console when a player is specified. - Added the newmpromocodes.admin.stats.otherspermission. - Added permission-aware tab completion for help, stats, menu, reload, health and webhook commands. - Added Discord Components V2 messages with: - Clean accent-free containers. - Large emoji header sections with logo thumbnails. - Separate player, promo-code, result and server-context sections. - Clean separators. - Emoji-labelled values and compact code styling. - Discord-native absolute and relative timestamps. - Success, failure and test designs. - Added the official MPromoCodes Modrinth image as the default webhook avatar and thumbnail. - Added webhook campaign information. - Added configurable compact UUID display. - Added configurable webhook field visibility. - Added an automatic legacy-embed fallback if Discord rejects a Components V2 request. - Added all new messages to both English and Slovak localization files. - Added automatic version-awareconfig.ymlmigration with collision-safe backups.New Webhook Settings
These values are included in the fresh configuration generated during an upgrade and can be adjusted underdiscord-webhook:discord-webhook: message-style: "COMPONENTS_V2" # COMPONENTS_V2 or LEGACY_EMBED fallback-to-legacy: true avatar-url: "https://cdn.modrinth.com/data/5XgdhBMc/90edf839b06799d8801b81a1942416b3b68eeeca_96.webp" branding: show-logo: true logo-url: "https://cdn.modrinth.com/data/5XgdhBMc/90edf839b06799d8801b81a1942416b3b68eeeca_96.webp" footer: "MPromoCodes" test-color: "#5865F2" display: show-uuid: true compact-uuid: true show-server: true show-campaign: true show-remaining: true show-time: true1.7MPromoCodes v1.7 — Campaigns & Reward Studio UpdateAug 15, 2026 MPromoCodes v1.7 — Campaigns & Reward Studio Update
This update expands MPromoCodes into a complete promotion-management system. It adds campaign scheduling and analytics, a redesigned admin menu, a flexible Reward Studio, and safe code duplication and renaming while preserving compatibility with existing configurations.Added
- Campaigns with configurable name, description, icon, enabled state, start date and expiry date. - One optional campaign assignment per promo code. - Campaign-wide activation checks: both the campaign and the code must be active. - Campaign analytics loaded asynchronously from YAML, SQLite or MySQL: - Total successful redemptions - Unique players - Paginated per-code redemption breakdown - Reward Studio with these reward types: - Console command - Player command - Private message - Full-metadata item from the administrator's hand - Experience points - Experience levels - Sound - Title and subtitle - Action bar - Potion effect - Broadcast - Reward selection modes:ALL,RANDOM_ONE,WEIGHTED_ONEandCHANCE_EACH. - Configurable weight, chance, fixed/random amounts, sound volume/pitch, title timings and potion settings. - Safe code duplication:summerbecomessummer-copy, thensummer-copy-2when needed. - Safe code renaming with preserved history, global/player counters and cooldowns. - Stable internal code IDs for newly created codes and renamed legacy codes. - Configurable item/experience safety limits.Changed
- Completely reorganized the admin GUI into dedicated code, condition, campaign, analytics and reward screens. - New duplicated codes are disabled by default and do not copy redemption history. - Deleting a campaign now unassigns its codes without deleting them. - Code lists now show campaign, reward count and global-limit information. - Upcoming and expired lists also respect campaign activation windows. - New codes use the structured reward format automatically.Compatibility & Migration
- Existingcodes.yml, redemption history and databases remain compatible. - Existing codes do not require aninternal-id; their original name is used as the stable identity automatically. - Legacycommands:rewards continue to work unchanged. - Opening and editing a legacy code in Reward Studio converts only that code to structuredrewards:. - Existing&colors, bold formatting and message design remain supported. - Back up the plugin data folder or database before updating, as with every production release.1.6MPromoCodes v1.6 — Production, Monitoring & Localization UpdateJul 26, 2026 MPromoCodes v1.6 — Production, Monitoring & Localization Update
This is the largest MPromoCodes update so far. It combines a complete production-focused code rework with new health monitoring, optional spark integration, full localization support, safer storage operations, improved Folia compatibility, and many reliability improvements for large servers.Requirements: Java 25 and Paper/Folia 26.1
Added
Health Check & Monitoring
- Added the new/codes healthcommand. - Added the newmpromocodes.admin.healthpermission. - Added optional integration with the public spark API. - When spark is installed, the health report includes: - TPS - Average and 95th percentile MSPT - Process CPU usage - System CPU usage - Added automatic Paper/JVM fallback metrics when spark is not installed. - Added MPromoCodes-specific performance metrics: - Recent redemption attempts - Successful redemptions - Rejected redemptions and errors - Average and 95th percentile redemption latency - Average and 95th percentile storage latency - Average and 95th percentile reward latency - Measured Paper/Folia server-thread time - MPromoCodes server-thread share percentage - Added JVM heap memory usage to the health report. - Added storage reachability and ping checks. - Added SQL worker queue and HikariCP pool statistics. - Added Discord webhook in-flight request and capacity statistics. - Added loaded-code and pending-player statistics. - Added configurable warning and critical thresholds for TPS, MSPT, CPU, plugin server-thread share, and storage latency. - Health metrics are collected on demand. The monitoring system does not create a permanent polling task.Localization
- Added complete English localization inlang/en_US.yml. - Added complete Slovak localization inlang/sk_SK.yml. - Added automatic language selection based on the player's Minecraft client locale. - Added configurable default and fallback locales for the console and unsupported client languages. - Added support for additional custom locale files in thelangdirectory. - Moved all player-facing and administrator-facing UI text to localization files, including: - Redemption messages - Validation and error messages - Admin chat prompts - Inventory titles - Item names and lore - Update notifications - Health reports - Discord webhook text - Preserved legacy&color and formatting codes. - Added automatic merging of newly introduced language keys without overwriting existing customized values. - Added a safe one-time migration of oldconfig.ymlmessages into the configured default locale file.Promo Code & Developer Features
- Added configurable per-player use limits. - Added player use counts, last-use dates, and active cooldowns to/codes stats. - AddedPromoCodePreRedeemEventfor cancellable pre-redemption integrations. - AddedPromoCodeRedeemEventafter a successful atomic storage reservation. - Added sequential reward execution with%player%,%uuid%, and%code%placeholders. - Added stricter validation for dates, durations, conditions, materials, advancements, and statistics.Changed
- Reworked the complete internal redemption flow for production use. - Player data is now handled using UUID-based records instead of relying only on player names. - Storage operations now reserve redemptions atomically before rewards are executed. - Global and per-player limits are now safe during concurrent redemption attempts. - Promo code definitions are parsed once into an immutable validated runtime registry. - Invalid promo code definitions are rejected instead of becoming partially active. - Reloads now validate and replace runtime definitions safely. - Existing active definitions remain available when a reload fails. - Reward entries now run sequentially on the correct Paper/Folia scheduler. - Player operations, global console commands, callbacks, and GUI reopen operations now use Folia-aware scheduling. - The admin GUI now uses typed inventory holders instead of identifying menus by inventory titles or item display names. - Admin menus now read and write promo codes through the centralizedcodes.ymlmanager. - Update notifications now use the player's selected language. - Discord webhook labels, titles, reasons, and status text are now configurable through locale files. - The plugin version has been updated to1.6.Improved
- Improved performance and safety for large servers. - Improved MySQL concurrency using transactions and row locking. - Improved MySQL connection management using HikariCP. - Improved protection against database outages with bounded SQL worker queues. - Improved SQLite performance and concurrency using WAL mode and a bounded asynchronous worker. - Improved YAML storage with debounced saves, temporary files, and atomic file replacement where supported. - Improved legacy player-data migration from lowercase names to UUID records. - Improved fail-closed behavior when storage is unavailable. - Improved Discord webhook delivery with request timeouts, bounded in-flight work, and retry handling for rate limits and server errors. - Improved anti-spam protection and failed-attempt handling. - Improved code organization by separating configuration, storage, services, menus, localization, monitoring, API events, and integrations. - Improved Paper API compatibility by replacing old chat, title, and item metadata handling with Adventure components. - Improved build reliability with Java/Maven version enforcement and stricter compiler warnings. - Improved OneDrive compatibility formvn cleanon Windows. - Preserved customized message colors and formatting during the localization rework. - Removed unused utilities, old task code, obsolete configuration classes, and other dead code.Fixed
- Fixed race conditions that could allow global or per-player limits to be overspent. - Fixed stale in-memory storage state on larger or multi-instance setups. - Fixed unbounded memory growth during SQL outages by using bounded queues. - Fixed unsafe Bukkit API access from asynchronous threads. - Fixed several Folia scheduler and player-region compatibility issues. - Fixed invalid definitions being partially loaded after configuration errors. - Fixed reload failures replacing valid active definitions. - Fixed admin inventories depending on localized or customized inventory titles. - Fixed menu actions depending on item display names. - Fixed several mismatched advancement/statistic admin-menu slots. - Fixed hardcoded admin, GUI, update, webhook, and player messages. - Fixed Maven clean failures caused by locked/read-only OneDrive-generated directories where force cleanup is supported.Commands & Permissions
-/code <code>— redeem a promo code (mpromocodes.use) -/codes stats— view personal promo code statistics -/codes menu— open the admin menu (mpromocodes.admin) -/codes reload— reload and validate the plugin (mpromocodes.admin) -/mpromocodes reload— reload and validate the plugin (mpromocodes.admin) -/codes health— display the health report (mpromocodes.admin.health) -/codes webhook test— send a Discord webhook test (mpromocodes.admin.webhook)Migration Notes
- Back up the MPromoCodes data folder or database before updating. - Replace the old plugin JAR withMPromoCodes-1.6.jarand restart the server. - Existingcodes.ymland redeemed-player data remain compatible. - Existing YAML data can still be migrated automatically to SQLite or MySQL whenstorage.auto-migrate-yamlis enabled and the target database is empty. - On the first start, existing custom messages fromconfig.ymlare copied into the configured default locale file. - Existing customized locale values are preserved. Only missing bundled keys are added automatically. - The oldconfig.ymlmessage section is no longer used after migration; messages should now be edited inplugins/MPromoCodes/lang. - Le1.5.1MPromoCodes 1.5.1May 13, 2026 MPromoCodes v1.5.1
Bug Fixes
- Fixed Admin Menu showingCode not foundfor existing codes. - Fixed Conditions Menu that was still checking codes fromconfig.yml- Fixed code key handling for mixed-case promo codes. - Fixed expired/upcoming lists not preserving real code names fromcodes.yml.1.5MPromoCodes 1.5May 12, 2026 MPromoCodes v1.5 — Storage & Integration Update
This update brings a major internal upgrade to MPromoCodes, adding Discord webhook integration, a new separated codes file, advanced storage options, anti-spam protection and new global settings.Added
- Added Discord webhook integration. - Added Discord webhook test command: -/codes webhook test- Added webhook logs for successful code redemptions. - Added webhook logs for failed code redemption attempts. - Added configurable webhook embed colors. - Added configurable webhook username and avatar URL. - Addedcodes.ymlas a separate file for promo codes. - Added automatic migration from oldconfig.ymlcodes tocodes.yml. - Added automatic backup of old config asconfig-old.yml. - Added new storage system with multiple storage backends: - YAML - SQLite - MySQL - Added automatic YAML-to-SQL migration for redeemed code data. - Added anti-spam protection for failed redemption attempts. - Added temporary blocking after too many failed attempts. - Added configurable failed-attempt cooldown. - Added configurable block time. - Added general plugin settings: -debug-case-insensitive-codes-trim-code-input-min-code-length-max-code-length-use-permission- Added configurable server name for webhook logs. - Added new config messages: -anti-spam-blocked-anti-spam-cooldown-invalid-code-lengthChanged
- Promo codes are now stored incodes.ymlinstead ofconfig.yml. - Admin menu now reads and writes promo codes fromcodes.yml. - Redeemed code data can now be stored in YAML, SQLite or MySQL. - The/codecommand now respects configurable input rules. - Permission required to redeem codes is now configurable. - Code length validation is now configurable. - Code matching can now be case-sensitive or case-insensitive. - Code input trimming can now be enabled or disabled. - Webhook logs now include more detailed redemption information. - Internal redeem storage has been refactored for better future compatibility.Improved
- Improved code organization. - Improved update compatibility for existing users. - Improved config structure by separating plugin settings and promo code data. - Improved admin workflow for managing promo codes. - Improved protection against invalid code spam. - Improved support for larger servers and networks through SQL storage. - Improved debug logging for redeem attempts when debug mode is enabled.Fixed
- Fixed promo code data being mixed with global plugin settings. - Fixed hardcoded redeem permission by moving it to config. - Fixed hardcoded code input behavior by making it configurable. - Fixed admin menu storage behavior after moving codes tocodes.yml. - Fixed future compatibility issues with redeemed code storage.Migration Notes
- Existing promo codes fromconfig.ymlwill be automatically moved tocodes.yml. - The oldconfig.ymlwill be backed up asconfig-old.yml. - A freshconfig.ymlwill be generated with the latest settings. - Existing redeemed data fromredeemed.ymlcan be automatically migrated into SQLite or MySQL whenstorage.auto-migrate-yamlis enabled. - Server owners should review the newstoragesection before switching to MySQL.Why is the file larger now?
MPromoCodes now includes built-in SQLite and MySQL support. The required database drivers are bundled directly inside the plugin.jar, so server owners do not need to install any extra libraries. Because of these bundled SQL drivers, especially SQLite native libraries for different operating systems, the file size is larger than previous versions. This is expected and completely normal.New Config Sections
```yml settings: enabled: true server-name: "survival" debug: false case-insensitive-codes: true trim-code-input: true min-code-length: 2 max-code-length: 32 use-permission: "mpromocodes.use" anti-spam: enabled: true failed-attempt-cooldown: "3s" max-failed-attempts: 5 block-time: "1m" reset-on-success: true webhook-log-blocked-attempts: true storage: type: "YAML" auto-migrate-yaml: true sqlite: file: "storage.db" mysql: host: "localhost" port: 3306 database: "mpromocodes" username: "root" password: "password" use-ssl: false table-prefix: "mpromocodes_"1.4MPromoCodes 1.4Apr 30, 2026 - Added support for version 26.1 - Added 20+ conditions to use for redeeming codes - Added Player Usage Limit - Reworked Storage system - More optimized code - Full support for Spigot and Bukkit servers1.3MPromoCodes 1.3Dec 27, 2025 - Added option to enable/disable code - Added Admin Menu for easier code configuring - Added option to create codes ingame menu - Added option to delete codes ingame menu - Added option to view all codes and edit them ingame menu - Added option to view all upcoming codes - Added option to view all expired codes1.2MPromoCodes 1.2Dec 21, 2025 - Added start-date feature - Added expiry-date feature - Added update checker1.1MPromoCodes 1.1Dec 18, 2025 - Added Global Uses for codes - Added bStats1.0MPromoCodes 1.0Dec 15, 2025 - Redeem promo codes using /code - Fully configurable rewards via config - Supports console and player command execution - Title & Subtitle messages after successful redemption - Per-player code usage (one-time codes) - Permission-based code access - Folia compatible - Clean and simple configuration
Similar projects
Plugin →VeinMiner
Mine the whole vein on mining a single ore/block. Make the tedious mining experience to something satisfying and fun! FTB Ultimine alternative
99.3MSueta
Simple Voice Chat
A working voice chat in Minecraft!
76.8MSueta
Chunky
Pre-generates chunks, quickly and efficiently
18.4MSueta
VeinMiner Enchantment
Veinminer Addon - Adds vineminer enchantment to enchanting tables. Only tools with the enchantment can veinmine
18MSueta
JourneyMap
Real-time map used for mapping in-game or your browser as you explore.
14.7MSueta
WorldEdit
A Minecraft Map Editor... that runs in-game! With selections, schematics, copy and paste, brushes, and scripting. Use it in creative, or use it temporarily in survival.
11.6MSueta