跳到正文

Cobblemon Ranked

作者:Kurt5

新增排名系统和跨服务器匹配功能,支持 Cobblemon。

收藏

截图

介绍

介绍由机器翻译自 CurseForge 原页面,仅供参考。

📊 CobblemonRanked 排位系统文档

常见问题


此模组只需安装在服务器端。
安装客户端后,默认按下 X 键即可打开图形界面。
💡 若要使用 enableTeamPreview 功能,客户端也需要安装此模组。

🎯 功能概览

  • 内置多语言支持(中文和英文),易于扩展
  • 可配置的战斗场地,支持自动传送和返回
  • 可自定义段位称号和 Elo 阈值
  • 支持三种模式:单打、双打和2v2 单打
  • 每种对战格式均独立计算 Elo 排名
  • 每种对战格式均拥有独立的奖励系统,并可自定义命令
  • 内置赛季系统,可自动轮换并重置数据
  • 基于 Elo 的匹配队列,可选择根据等待时间放宽匹配条件
  • 断线将视为失败,并扣除 Elo
  • 完全由图形界面驱动,包含可点击的文本菜单和图形界面
  • 支持跨服务器匹配
  • 将 enableTeamPreview 设为 True 后,如果宝可梦数量超过设定上限,就会触发选择参战宝可梦的界面;如果数量未超过上限,则不会触发该界面。
    例如,如果将 singlesPickCountNumber 设为 3:
    玩家 1 有 5 只宝可梦,将触发选择界面,需要选出 3 只参战。
    玩家 2 只有 2 只宝可梦,因此不会触发选择界面;玩家 1 选完后,战斗将直接开始。

🌐 跨服务器匹配(不再维护)

v1.2.0 及以上版本可用 — 支持从任意服务器或单人世界连接(需要正版 Minecraft 账号)
跨服务器匹配演示和配置:YouTube
你可以在此下载服务器端文件并搭建自己的服务器。下载

✅ 使用方法

  1. 在配置中启用 enableCrossServer
  2. 修改 cloudServerId,确保它与其他服务器不重复(默认值 server 可能已被其他人使用)
  3. 输入 /rank reload 重新加载配置,或重启服务器。
  4. 输入 /rank cross start 连接到云服务器

⚠️ 当前限制

  • 仅支持单打模式
  • 某些道具和技能效果可能不会生效
  • 来自同一服务器的玩家不会互相匹配

🌐 跨服务器命令

命令 描述 权限
/rank cross start 连接到云端服务器 OP
/rank cross stop 断开与云端的连接 OP
/rank cross chat 与对手聊天 所有人
/rank cross join singles 加入单打匹配 所有人
/rank cross leave 退出匹配队列 所有人
/rank cross battle move [1-4] 在对战中使用招式 所有人
/rank cross battle switch [1-6] 切换宝可梦 所有人
/rank cross battle forfeit 认输并结束对战 所有人

📌 命令概览

所有命令均以 /rank 开头


🎮 玩家命令

命令 描述
/rank gui 打开主菜单界面
/rank gui_top 打开排行榜格式选择界面
/rank gui_info 查看你的详细 Elo 统计数据
/rank gui_info_players 分页列出在线玩家,可查看他们的排名
/rank gui_myinfo 快速查看自己的排名
/rank gui_queue 打开匹配菜单
/rank gui_info_format <player> <format> 通过界面查看其他玩家本赛季的统计数据
/rank queue join [format] 加入排位队列
/rank queue leave 退出所有匹配队列
/rank status 显示你当前的队列状态
/rank info <format> <season> 显示你在指定对战格式和赛季中的统计数据
/rank info <player> <format> [season] 查看其他玩家在指定对战格式和赛季中的排名
/rank top 查看默认对战格式和当前赛季的排行榜
/rank top <format> [season] [page] [count] 分页查看指定对战格式和赛季的排行榜
/rank season 查看当前赛季信息(开始/结束时间、参与情况等)
/rank pokemon_usage <season> <page> 查看宝可梦的使用统计数据

🛡️ 管理员命令(需要 OP 权限)

命令 描述
/rank gui_reward 打开奖励格式选择界面
/rank gui_reset 分页列出在线玩家,可重置其排名
/rank reset <player> <format> 重置玩家当前赛季和指定对战格式的数据
/rank reward <player> <format> <rank> 根据指定排名向玩家发放奖励
/rank season end 强制结束当前赛季
/rank reload 重新加载配置文件(语言、排名设置等)
/rank setseasonname <seasonId> <name> 设置赛季名称

以下是修订后的 Wiki 内容:


占位符 API

基础占位符(使用默认格式)

占位符 说明
%cobblemon_ranked:elo% ELO 分数
%cobblemon_ranked:rank_title% 段位名称
%cobblemon_ranked:win_rate% 胜率
%cobblemon_ranked:wins% 胜场数
%cobblemon_ranked:losses% 败场数
%cobblemon_ranked:total_games% 总对战场次
%cobblemon_ranked:streak% 当前连胜场次
%cobblemon_ranked:best_streak% 最高连胜场次
%cobblemon_ranked:flee_count% 逃跑/退出次数
%cobblemon_ranked:rank% 当前排名(例如:#1)

赛季相关占位符

占位符 说明
%cobblemon_ranked:season_name% 赛季名称
%cobblemon_ranked:season_id% 赛季 ID
%cobblemon_ranked:season_days_left% 赛季剩余天数
%cobblemon_ranked:season_time_left% 格式化的剩余时间

段位晋升占位符

占位符 说明
%cobblemon_ranked:next_rank_elo% 晋升到下一段位所需的 ELO
%cobblemon_ranked:next_rank_name% 下一段位名称

队列状态占位符

占位符 说明
%cobblemon_ranked:queue_status% 当前队列状态

格式支持(指定对战格式)

支持三种对战格式:singles、doubles、2v2singles

用法:在占位符后添加 _format

占位符 说明
%cobblemon_ranked:elo_singles% 单打 ELO 分数
%cobblemon_ranked:elo_doubles% 双打 ELO 分数
%cobblemon_ranked:elo_2v2singles% 2v2 单打 ELO 分数
%cobblemon_ranked:rank_title_singles% 单打段位名称
%cobblemon_ranked:rank_title_doubles% 双打段位名称
%cobblemon_ranked:win_rate_singles% 单打胜率
%cobblemon_ranked:win_rate_doubles% 双打胜率
%cobblemon_ranked:wins_singles% 单打胜场数
%cobblemon_ranked:wins_doubles% 双打胜场数
%cobblemon_ranked:rank_singles% 单打排名
%cobblemon_ranked:rank_doubles% 双打排名
%cobblemon_ranked:next_rank_elo_singles% 单打晋升到下一段位所需的 ELO
%cobblemon_ranked:next_rank_name_singles% 单打下一段位名称

注意:赛季相关占位符(season_name、season_id、season_days_left、season_time_left)和 queue_status 不支持格式参数,因为它们与对战格式无关。


⚙️ 配置文件参考(cobblemon_ranked.json)

<details> <summary>点击展开完整配置参考(含内联注释)</summary>

{
  "defaultLang": "en",                     // 默认语言:'en' 或 'zh'
  "defaultFormat": "singles",              // 默认对战模式
  "minTeamSize": 1,                        // 队伍中宝可梦的最少数量
  "maxTeamSize": 6,                        // 队伍中宝可梦的最多数量
  "allowDuplicateItems": false,            // 队伍中是否允许携带重复道具
  "enableTeamPreview": true,               // 启用队伍预览和选择(携带 6 只,选择 3/4 只)
  "teamSelectionTime": 90,                 // 队伍选择时间(秒)
  "turnActionTimeoutSeconds": 90,          // 每回合选择行动的时限(秒;0 = 禁用)
  "singlesPickCount": 3,                   // 单打选择的宝可梦数量(通常为 3 只)
  "doublesPickCount": 4,                   // 双打选择的宝可梦数量(通常为 4 只)
  "maxEloDiff": 200,                       // 匹配时允许的最大 Elo 分差
  "maxQueueTime": 300,                     // 放宽 Elo 匹配规则前的最长等待时间(秒)
  "maxEloMultiplier": 3.0,                 // 放宽 Elo 分差时的最大倍数
  "seasonDuration": 30,                    // 赛季时长(天)
  "initialElo": 1000,                      // 赛季开始时的 Elo 分
  "eloKFactor": 32,                        // Elo K 系数(影响 Elo 分变化幅度)
  "minElo": 0,                             // Elo 分下限
  "loserProtectionRate": 1.0,              // 失败者保护比例(0.0 到 1.0)。失败者最多损失(胜者所得分 × 失败者保护比例)。1.0 = 无保护
  "bannedPokemon": ["Mewtwo", "Arceus"],   // 禁用的宝可梦(例如传说宝可梦)
  "restrictedPokemon": ["Mew", "Celebi"],  // 受限宝可梦名单
  "maxRestrictedCount": 2,                 // 队伍中允许的受限宝可梦数量上限
  "bannedHeldItems": ["cobblemon:leftovers"], // 宝可梦禁用的携带道具
  "bannedCarriedItems": ["cobblemon:leftovers"], // 玩家物品栏中禁用的道具
  "bannedMoves": ["leechseed"],            // 宝可梦禁用的招式
  "bannedNatures": ["cobblemon:naughty"],  // 宝可梦禁用的性格
  "bannedAbilities": [],                   // 宝可梦禁用的特性
  "bannedGenders": ["MALE"],               // 宝可梦禁用的性别
  "bannedShiny": false,                    // 是否禁止闪光宝可梦参加对战
  "allowedFormats": ["singles", "doubles", "2v2singles"], // 支持的对战模式
  "maxLevel": 0,                           // 宝可梦等级上限(0 = 无限制)
  "allowDuplicateSpecies": false,          // 是否允许队伍中出现重复种类的宝可梦
  "enableCustomLevel": false,              // 启用强制调整宝可梦等级
  "customBattleLevel": 50,                 // 强制调整宝可梦的等级
  "preventBlockBreaking": true,            // 排位对战期间禁止玩家破坏方块
  "restorePokemonHpAfterBattle": true,     // 对战结束后恢复宝可梦的 HP
  "battleArenas": [                        // 场地列表(对战时的传送位置)
    {
      "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": [                      // 胜利奖励配置(每次获胜后发放)
    "give {player} minecraft:experience_bottle 5",
    "give {player} minecraft:emerald 1"
  ],
  "rankRewards": {                         // 按对战模式配置的段位奖励(基于命令)
    "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 分阈值 → 段位名称
    "3500": "Master",
    "3000": "Diamond",
    "2500": "Platinum",
    "2000": "Gold",
    "1500": "Silver",
    "0": "Bronze"
  },
  "rankRequirements": {              // 各段位奖励的最低胜率要求(0.0 ~ 1.0)
    "Bronze": 0.0,
    "Silver": 0.3,
    "Gold": 0.3,
    "Platinum": 0.3,
    "Diamond": 0.3,
    "Master": 0.3
  },
  "enableCrossServer": true,       // 启用跨服务器匹配
  "cloudServerId": "server",       // 此服务器的云服务器 ID(不能与其他服务器重复)
  "cloudToken": "",                // 云服务器身份验证令牌(使用公共云服务器时留空)
  "cloudApiUrl": "http://139.196.103.55:8000",  // 云 API 地址(可填写 IP 或域名)
  "cloudWebSocketUrl": "ws://139.196.103.55:8000/ws/" // 云 WebSocket 地址(可填写 IP 或域名)
}

</details>

<details> <summary>点击展开 database.json</summary>

“`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” } }

常见问题

Cobblemon Ranked 支持哪些 Minecraft 版本?

Cobblemon Ranked 支持 Minecraft Java 版 1.21.1,可用的加载器:Fabric / NeoForge。下载时注意选择和你游戏版本一致的文件。

Cobblemon Ranked 怎么安装?

先用 PCL2 或 HMCL 启动器安装对应版本的 Fabric / NeoForge,再把下载的 .jar 文件放进游戏目录的 mods 文件夹,重新启动游戏即可。开启了版本隔离的,mods 文件夹在 versions/版本名 下面。

评论

登录后评论和评分

Kurt5 的其他作品

查看全部 →