📊 CobblemonRanked Ranked System Documentation
This mod only needs to be installed on the server side.
After the client is installed, pressing theXkey will open the graphical GUI by default.
💡 In order to use theenableTeamPreviewfeature, this mod is also required on the client side.
🎯 Features Overview
- Built-in multi-language support (Chinese & English), easy to extend
- Configurable battle arenas with auto-teleport and return
- Customizable rank titles and Elo thresholds
- Supports three modes: Singles, Doubles, and 2v2singles
- Elo ranking system calculated independently per format
- Independent reward system per format with customizable commands
- Built-in season system with automatic rotation and data reset
- Elo-based matchmaking queue with optional waiting-time-based relaxation
- Disconnects are treated as losses; Elo is deducted
- Fully GUI-driven with clickable text menus and graphical GUI
- Cross-server matchmaking support
- After
enableTeamPreviewisTrue, if the number of Pokémon exceeds the set limit, the interface for selecting Pokémon to battle will be triggered. If the number does not exceed the limit, the interface will not be triggered.
For example, ifsinglesPickCountNumberis set to 3:
Player 1 has 5 Pokémon, which will trigger the selection interface, requiring them to choose 3 for battle.
Player 2 has only 2 Pokémon, so the selection interface will not be triggered. Instead, after Player 1 completes their selection, the battle will begin directly.
🌐 Cross-Server Matchmakin(No longer maintained)
Available from v1.2.0+ — Supports connecting from any server or single-player world (requires official Minecraft account)
Cross server matching demonstration and configuration: Youtube
You can download the server here to set up your own server.Download
✅ How to Use
- Enable
enableCrossServerin the config - Modify
cloudServerId, which should not be duplicated with other servers (the defaultservermay already be used by someone) - Enter
/rank reloadto reload the configuration or restart the server. - Enter
/rank cross startto connect to the cloud server
⚠️ Current Limitations
- Only singles mode is supported
- Certain items and skill effects may not take effect
- Players from the same server won’t be matched together
🌐 Cross-Server Commands
| Command | Description | Permission |
|---|---|---|
/rank cross start |
Connect to the cloud server | OP |
/rank cross stop |
Disconnect from the cloud | OP |
/rank cross chat |
Chat with your opponent | All |
/rank cross join singles |
Enter singles matchmaking | All |
/rank cross leave |
Leave matchmaking queue | All |
/rank cross battle move [1-4] |
Use move in battle | All |
/rank cross battle switch [1-6] |
Switch Pokémon | All |
/rank cross battle forfeit |
Surrender the battle | All |
📌 Command Overview
All commands start with
/rank
🎮 Player Commands
| Command | Description |
|---|---|
/rank gui |
Opens the main menu GUI |
/rank gui_top |
Opens the leaderboard format selection GUI |
/rank gui_info |
View your detailed Elo stats |
/rank gui_info_players |
Paginated list of online players to inspect their rankings |
/rank gui_myinfo |
Quick access to your own ranking |
/rank gui_queue |
Opens the matchmaking menu |
/rank gui_info_format <player> <format> |
GUI view of another player's seasonal stats |
/rank queue join [format] |
Join a ranked queue |
/rank queue leave |
Leave all matchmaking queues |
/rank status |
Show your current queue status |
/rank info <format> <season> |
Show your stats for the given format and season |
/rank info <player> <format> [season] |
View another player's ranking for a specific format and season |
/rank top |
View leaderboard for default format and current season |
/rank top <format> [season] [page] [count] |
Paginated leaderboard for given format and season |
/rank season |
View current season info (start/end time, participation, etc.) |
/rank pokemon_usage <season> <page> |
view the usage statistics of Pokémon |
🛡️ Admin Commands (Requires OP)
| Command | Description |
|---|---|
/rank gui_reward |
Opens the reward format selection GUI |
/rank gui_reset |
Paginated list of online players to reset rankings |
/rank reset <player> <format> |
Reset a player's data for the current season and format |
/rank reward <player> <format> <rank> |
Grant a reward to a player for a specific rank |
/rank season end |
Force-end the current season |
/rank reload |
Reload config files (language, rank settings, etc.) |
/rank setseasonname <seasonId> <name> |
Set Season Name |
Here's the revised Wiki content in English:
Placeholder API
Basic Placeholders (using default format)
| Placeholder | Description |
|---|---|
%cobblemon_ranked:elo% |
ELO score |
%cobblemon_ranked:rank_title% |
Rank title |
%cobblemon_ranked:win_rate% |
Win rate |
%cobblemon_ranked:wins% |
Wins |
%cobblemon_ranked:losses% |
Losses |
%cobblemon_ranked:total_games% |
Total games played |
%cobblemon_ranked:streak% |
Current win streak |
%cobblemon_ranked:best_streak% |
Best win streak |
%cobblemon_ranked:flee_count% |
Number of flee/quit |
%cobblemon_ranked:rank% |
Current ranking (e.g., #1) |
Season Related Placeholders
| Placeholder | Description |
|---|---|
%cobblemon_ranked:season_name% |
Season name |
%cobblemon_ranked:season_id% |
Season ID |
%cobblemon_ranked:season_days_left% |
Days remaining in season |
%cobblemon_ranked:season_time_left% |
Formatted time remaining |
Rank Progression Placeholders
| Placeholder | Description |
|---|---|
%cobblemon_ranked:next_rank_elo% |
ELO required for next rank |
%cobblemon_ranked:next_rank_name% |
Next rank name |
Queue Status Placeholder
| Placeholder | Description |
|---|---|
%cobblemon_ranked:queue_status% |
Current queue status |
Format Support (Specify Battle Format)
Three battle formats are supported: singles, doubles, 2v2singles
Usage: Add _format to the placeholder
| Placeholder | Description |
|---|---|
%cobblemon_ranked:elo_singles% |
Singles ELO score |
%cobblemon_ranked:elo_doubles% |
Doubles ELO score |
%cobblemon_ranked:elo_2v2singles% |
2v2 Singles ELO score |
%cobblemon_ranked:rank_title_singles% |
Singles rank title |
%cobblemon_ranked:rank_title_doubles% |
Doubles rank title |
%cobblemon_ranked:win_rate_singles% |
Singles win rate |
%cobblemon_ranked:win_rate_doubles% |
Doubles win rate |
%cobblemon_ranked:wins_singles% |
Singles wins |
%cobblemon_ranked:wins_doubles% |
Doubles wins |
%cobblemon_ranked:rank_singles% |
Singles ranking |
%cobblemon_ranked:rank_doubles% |
Doubles ranking |
%cobblemon_ranked:next_rank_elo_singles% |
Next rank ELO for singles |
%cobblemon_ranked:next_rank_name_singles% |
Next rank name for singles |
Note: Season-related placeholders (season_name, season_id, season_days_left, season_time_left) and queue_status do not support format parameters as they are not format-specific.
⚙️ Configuration File Reference (cobblemon_ranked.json)
Click to expand full config reference (with inline comments)
{
"defaultLang": "en", // Default language: 'en' or 'zh'
"defaultFormat": "singles", // Default battle format
"minTeamSize": 1, // Minimum Pokémon per team
"maxTeamSize": 6, // Maximum Pokémon per team
"allowDuplicateItems": false, // Allow duplicate held items in a team
"enableTeamPreview": true, // Enable Team Preview and Selection (Bring 6 Pick 3/4)
"teamSelectionTime": 90, // Time allowed for team selection in seconds
"turnActionTimeoutSeconds": 90, // Time allowed to choose an action each turn in seconds (0 = disabled)
"singlesPickCount": 3, // Number of Pokemon to select for Singles (usually 3)
"doublesPickCount": 4, // Number of Pokemon to select for Doubles (usually 4)
"maxEloDiff": 200, // Max Elo gap for matchmaking
"maxQueueTime": 300, // Max wait time (seconds) before relaxing Elo rules
"maxEloMultiplier": 3.0, // Max multiplier for Elo diff relaxation
"seasonDuration": 30, // Season duration (days)
"initialElo": 1000, // Elo at the beginning of a season
"eloKFactor": 32, // Elo K-factor (affects Elo change magnitude)
"minElo": 0, // Minimum Elo floor
"loserProtectionRate": 1.0, // Loser protection rate (0.0 to 1.0). Loser will lose at most (winner_gain * loserProtectionRate). 1.0 = no protection
"bannedPokemon": ["Mewtwo", "Arceus"], // Banned Pokémon (e.g., legendaries)
"restrictedPokemon": ["Mew", "Celebi"], // Restricted Pokémon list
"maxRestrictedCount": 2, // Maximum number of restricted Pokémon allowed in a team
"bannedHeldItems": ["cobblemon:leftovers"], // Banned held items for Pokémon
"bannedCarriedItems": ["cobblemon:leftovers"], // Banned items in player's inventory
"bannedMoves": ["leechseed"], // Banned moves for Pokémon
"bannedNatures": ["cobblemon:naughty"], // Banned personalities for Pokémon
"bannedAbilities": [], // Banned abilities for Pokémon
"bannedGenders": ["MALE"], // Banned gender for Pokémon
"bannedShiny": false, // Banned shiny Pokémon from participating in battles
"allowedFormats": ["singles", "doubles", "2v2singles"], // Supported battle formats
"maxLevel": 0, // Max Pokémon level (0 = no limit)
"allowDuplicateSpecies": false, // Whether duplicate Pokémon species are allowed
"enableCustomLevel": false, // Enable forced modification of Pokémon levels
"customBattleLevel": 50, // Forcefully modify the level of Pokémon
"preventBlockBreaking": true, // Prevent players from breaking blocks during ranked battles
"restorePokemonHpAfterBattle": true, // Restore Pokémon HP after battle
"battleArenas": [ // List of arenas (teleport locations for battles)
{
"world": "minecraft:overworld",
"playerPositions": [
{ "x": 0.0, "y": 70.0, "z": 0.0 },
{ "x": 10.0, "y": 70.0, "z": 0.0 }
]
},
{
"world": "minecraft:overworld",
"playerPositions": [
{ "x": 100.0, "y": 65.0, "z": 100.0 },
{ "x": 110.0, "y": 65.0, "z": 100.0 }
]
}
],
"victoryRewards": [ // Victory rewards configuration (executed after each win)
"give {player} minecraft:experience_bottle 5",
"give {player} minecraft:emerald 1"
],
"rankRewards": { // Format-specific rank rewards (command-based)
"singles": {
"Bronze": ["give {player} minecraft:apple 5"],
"Silver": ["give {player} minecraft:golden_apple 3"],
"Gold": ["give {player} minecraft:diamond 2", "give {player} minecraft:emerald 5"],
"Platinum": ["give {player} minecraft:diamond_block 1", "effect give {player} minecraft:strength 3600 1"],
"Diamond": ["give {player} minecraft:netherite_ingot 1", "give {player} minecraft:elytra 1"],
"Master": ["give {player} minecraft:netherite_block 2", "give {player} minecraft:totem_of_undying 1", "effect give {player} minecraft:resistance 7200 2"]
},
"doubles": {
"Bronze": ["give {player} minecraft:bread 5"],
"Silver": ["give {player} minecraft:gold_nugget 10"],
"Gold": ["give {player} minecraft:emerald 1"],
"Platinum": ["give {player} minecraft:golden_apple 1"],
"Diamond": ["give {player} minecraft:totem_of_undying 1"],
"Master": ["give {player} minecraft:netherite_ingot 2"]
},
"2v2singles": {
"Bronze": ["give {player} minecraft:bread 5"],
"Silver": ["give {player} minecraft:gold_nugget 10"],
"Gold": ["give {player} minecraft:emerald 1"],
"Platinum": ["give {player} minecraft:golden_apple 1"],
"Diamond": ["give {player} minecraft:totem_of_undying 1"],
"Master": ["give {player} minecraft:netherite_ingot 2"]
}
},
"rankTitles": { // Elo thresholds → rank names
"3500": "Master",
"3000": "Diamond",
"2500": "Platinum",
"2000": "Gold",
"1500": "Silver",
"0": "Bronze"
},
"rankRequirements": { // Minimum winning rate requirement for each rank reward(0.0 ~ 1.0)
"Bronze": 0.0,
"Silver": 0.3,
"Gold": 0.3,
"Platinum": 0.3,
"Diamond": 0.3,
"Master": 0.3
},
"enableCrossServer": true, // Enable cross-server matchmaking
"cloudServerId": "server", // Cloud server ID for this server(Cannot be repeated with others)
"cloudToken": "", // Cloud server auth token(Leave blank for the public cloud server)
"cloudApiUrl": "http://139.196.103.55:8000", // Cloud API address(Either IP or domain name is acceptable)
"cloudWebSocketUrl": "ws://139.196.103.55:8000/ws/" // Cloud WebSocket Address(Either IP or domain name is acceptable)
}
Click to expand `database.json`
{
// Database type: 'sqlite' or 'mysql'
"databaseType": "sqlite",
// SQLite database file path (relative to config folder)
"sqliteFile": "ranked.db",
// MySQL configuration
"mysql": {
// MySQL host address
"host": "localhost",
// MySQL port
"port": 3306,
// MySQL database name
"database": "cobblemon_ranked",
// MySQL username
"username": "root",
// MySQL password
"password": "",
// MySQL connection pool size
"poolSize": 10,
// MySQL connection timeout (ms)
"connectionTimeout": 5000,
// Additional MySQL connection parameters
"parameters": "useSSL=false&serverTimezone=UTC&characterEncoding=utf8"
}
} All Versions
+ Add VersionturnActionTimeoutSeconds: Time allowed to choose an action each turn in seconds 2. Fixed some known issues, prioritizing performance.
preventBlockBreaking: Whether to prevent players from breaking blocks during battles restorePokemonHpAfterBattle: Whether to restore Pokémon HP after a battle ends restrictedPokemon: List of restricted Pokémon maxRestrictedCount: Maximum allowed number of restricted Pokémon in a team 2. Localized Pokémon names in the selection screen
3. Fixed some PlaceholderAPI placeholders
2. Modifying levels no longer requires cloning Pokémon, so there is no need to clear field drops and Pokémon anymore.
3. Fix some known issues.
loserProtectionRate (range: 1.0-0.0). When enabled, the points deducted from the loser will be Elo * loserProtectionRate.2. Removed the legitimate account verification in cross-server matchmaking.
3. Upgraded Kotlin to version 1.13.8 + kotlin.2.3.0.
4. Fix some known issues.
2. After a battle ends, all Pokémon entities and corresponding item drops within a 50-block radius of the arena will be cleared. During battles, corresponding item drops will also be cleared in real time to prevent any residues.
3. Block destruction is prohibited during battles.
4. Fix some known issues.
2. Optimize the matchmaking algorithm for 2v2single battles.
- This is a client and server update
When
enableTeamPreview is set to True, clients must also have the mod installed; otherwise, they cannot join the match. The interface should be locked and cannot be closed until the selection is finalized...
2. Fix some known issues
- This is a client and server update
allowDuplicateItemsAllow duplicate held items in a team enableTeamPreviewEnable Team Preview and Selection (Bring 6 Pick 3/4) teamSelectionTimeTime allowed for team selection in seconds singlesPickCountNumber of Pokemon to select for Singles (usually 3) doublesPickCountNumber of Pokemon to select for Doubles (usually 4) 2.
customBattleLevel will now create a copy of the Pokémon instead of directly modifying its level to prevent certain bugs.banUsageBelowBan Pokémon with usage rate below this threshold (0 to disable, 0.1 = 10%) banUsageAboveBan Pokémon with usage rate above this threshold (0 to disable, 0.1 = 10%) banTopUsedBan top N most used Pokémon (0 to disable) onlyBaseFormWithEvolutionOnly allow base form Pokémon that can evolve 2. Fix some known issues
2. Supports MySQL, can be modified in
database.json2. Support Placeholder API
victoryRewards2. Added server wide notification when joining the matching queue
customBattleLevel configuration, which allows forcefully modifying the level during Pokémon ranked battles2. Modified the previously confusing
bannedGenders to bannedGenders and bannedAbilities3. After modifying the
cloudServerId, you can reload using /rank reload; there is no longer a need to restart the server4. Fixed a bug where rank rewards could be obtained repeatedly in some cases (for version upgrades, the following SQL command can be used to clean up some erroneous data)
UPDATE player_rank_data
SET claimed_ranks = (
SELECT GROUP_CONCAT(entry.value)
FROM (
SELECT value
FROM json_each('["' || REPLACE(claimed_ranks, ',', '","') || '"]')
WHERE value LIKE '%:' || format || ':%'
) AS entry
)
WHERE claimed_ranks LIKE '%,%';)2. Added the option to view the usage statistics of Pokémon. You can click on
/rank gui in the text menu or enter /rank pokemon_usage <season> <page>2. Added the
/rank setseasonname <seasonId> <name> command to customize season names3. Fixed an issue where rank names in Chinese displayed as Unicode codes in the game
2. Fixed some issues and optimized some logic
3. The
config folder and modid name have been changed from cobblemon-ranked to cobblemon_ranked. When upgrading, you can directly modify the original config folder name, delete the messages.json file, and the new file will be automatically generated upon running2. Added a default client simple GUI, which opens by pressing the Z key by default
3. Fixed some issues and optimized some logic