介绍
Cobblemon Trainer Battle Commands (TBCS)
提供用于管理训练家并开始战斗的命令,可作为其他模组(例如 Easy NPC)的接口。
此模组主要面向地图制作者和整合包开发者。
支持者
命令
tbcsattach <trainerId> <entity>:将指定的训练家附加到指定的实体上(一个训练家只会被附加到一个实体上)。该附加关系在服务器重启后不会保留。battle <battleFormat> <participants1>... vs <participants2>... [rules <battleRules>] [onwin <winCommands>]:使用指定的战斗格式、规则和胜利命令(后两者为可选)在给定的参与者之间开始一场战斗。reload <trainerId>:允许从任意已配置的训练家路径重新加载单个训练家(使用原版/reload命令可重新加载所有训练家)。
重要:自版本 0.14.0-beta 起,attach 命令仍然可用,但通常建议使用 as <trainerId> 参数(详情请参阅参与者)。
所有命令都需要权限等级
2。
参与者
battle 命令支持多种参数类型来指定战斗参与者。这些包括单个实体选择器(如 @s、@e[...,limit=1] 或 @p)、实体 UUID 和训练家 ID。
此外,可选参数 as <trainerId> 可用于在战斗开始时立即将训练家附加到选定的实体上:
- 此参数可跟在任意实体选择器之后,允许指定一个训练家 ID,该训练家将在战斗开始时被附加到该实体上
- 使用此参数等同于对目标实体调用
attach,并使显式调用attach变得多余(虽然attach+battle仍然有效,但通常建议使用battle ... <entity> as <trainerId>) - 当与玩家选择器一起使用时(例如
@s as <trainerId>),玩家将使用该训练家队伍的临时副本进入战斗(尽情设计谜题吧) - 当与另一个训练家 ID 一起使用时(例如
<trainerId_1> as <trainerId_2>),则trainerId_2将被附加到trainerId_1当前所附加的同一实体上(如果可能)
参数
as <traineId>自版本0.14.0-beta起可用。
战斗规则
战斗规则由一个 json 对象描述,具有以下属性:
maxItemUses:指定每位参与者在战斗中可以使用多少道具。
是的,目前只有这一个属性。
胜利命令
胜利命令同样由一个 json 对象描述,但结构稍微更具动态性。一个胜利命令对象可以为每个战斗方(即 1 或 2)定义一个属性,包含一个命令数组,当相应的一方获胜时执行(参见下方示例)。
此外,任何胜利命令都可以使用特殊的选择器(类似于 @s 或 @e),用于在命令中选择任意一名对战参与者。这些选择器的格式如下:@<n>,其中 <n> 指定对战参与者的位置,相对于执行胜利命令的一方。
谈到命令时,有几个重要的问题需要考虑:谁在执行命令?命令会在哪里执行?
胜利命令通常由服务器在所有对战参与者的中心位置执行。不过,也可以让任意一名对战参与者成为命令的执行者;此时,命令也会在该参与者所在的位置执行。
讲完正式说明,接下来看看……
示例
重要提示:以下命令中使用的训练师(例如 tbcs:mytrainer1)仅为示例。你需要提供自己的训练师,或安装其他提供训练师的模组(参见下方的训练师部分)。
tbcs attach tbcs:mytrainer1 @e[type=minecraft:villager,limit=1,sort=nearest]
将 tbcs:mytrainer1 附加到最近的村民身上。
tbcs battle GEN_9_SINGLES @s vs tbcs:mytrainer1
让执行此命令的玩家与 tbcs:mytrainer1 对战(它必须已附加到某个实体)。
tbcs battle GEN_9_SINGLES @s vs tbcs:mytrainer1 rules {maxItemUses: 1}
与上例相同,但会将每一方的物品使用次数限制为 1。
tbcs battle GEN_9_SINGLES @s vs tbcs:mytrainer1 rules {maxItemUses: 1} onwin {1: ['give @1 minecraft:diamond']}
另一个类似的示例,不过这次玩家获胜时会获得一颗钻石(第一方的第一名参与者)。
tbcs battle GEN_9_SINGLES @s vs tbcs:mytrainer1 onwin {1: ['loot spawn ~ ~ ~ loot minecraft:chests/simple_dungeon']}
这是 give 命令的另一种替代方式(通常可以提供更多奖励,但具体取决于战利品表)。胜利命令会由服务器在所有对战参与者的中心位置执行。若要以玩家身份执行命令(也就是直接在玩家身上生成战利品),可以在 loot 命令前加上 @1(另请参阅下方的示例)。
tbcs battle GEN_9_MULTI @s tbcs:mytrainer1 vs tbcs:mytrainer2 tbcs:mytrainer3 onwin {1: ['give @1 minecraft:diamond', '@2 say We got them!']}
这是位置选择器的示例。第一方(也就是玩家所在的一方)获胜时,玩家会获得一颗钻石,而 tbcs:mytrainer1 会说“我们赢了!”。这也展示了命令如何由服务器以外的来源执行(第二条命令会由 tbcs:mytrainer1 所附加的实体执行)。
tbcs battle GEN_9_MULTI @s tbcs:mytrainer1 vs tbcs:mytrainer2 tbcs:mytrainer3 onwin {1: ['give @1 minecraft:diamond', '@2 say We got them!'], 2: ['@3 tp ~ ~10 ~']}
我们可以在上一个示例的基础上,为另一方添加胜利命令;也就是说,如果玩家一方落败,就会执行这些命令。再次提醒,位置参数相对于胜利命令所属的一方,并按从左到右的顺序排列。因此,对于第二方执行的命令,选择器对应关系如下:
@1->tbcs:mytrainer2@2->tbcs:mytrainer3@3->@s@4->tbcs:mytrainer1
作为参考,第一方执行的命令中,选择器对应关系如下:
@1->@s@2->tbcs:mytrainer1@3->tbcs:mytrainer2@4->tbcs:mytrainer3
因此,第二方的胜利命令会在玩家所在方失败时(也就是第二方获胜时)对玩家进行惩罚:将玩家相对于当前位置向上传送 10 格(该命令由玩家执行)。
tbcs battle GEN_9_SINGLES @s vs tbcs:mytrainer1 onwin {1: ['@2 say Not bad, but are you ready for this?!', 'tbcs attach tbcs:mytrainer2 @2', 'tbcs battle GEN_9_SINGLES @1 vs tbcs:mytrainer2 onwin {1: [\'give @1 minecraft:diamond\']}']}
这条命令会将一场战斗接在另一场之后。我们来逐步拆解(以下命令都会在玩家获胜时执行):
- 第一条命令会让
tbcs::mytrainer1的训练师实体说出“Not bad, but are you ready for this?!” - 第二条命令会将另一名训练师
tbcs:mytrainer2附加到与tbcs:mytrainer1相同的实体上。 - 第三条命令会紧接着开始玩家与
tbcs:mytrainer2的另一场战斗。这场战斗也带有自己的胜利命令设置,玩家获胜时会获得一颗钻石。
查看命令的实际效果:

这可以无限重复。请注意,胜利命令嵌套得越深,就需要越多反斜杠(
\)来转义命令两侧的撇号(')。
tbcs battle GEN_9_SINGLES @s vs tbcs:mytrainer1 onwin {2: ['@1 say You need to practice more @2!'], 1: ['@2 say You got me. Take this @1', 'loot spawn ~ ~ ~ loot minecraft:chests/end_city_treasure']}
这里没有新内容。这是我其中一项测试里的命令。
Easy NPC 示例

注意:视频录制于较旧版本,现在训练师 ID 的结构略有不同(可在游戏内查看命令建议),但功能相同。完整视频可在代码仓库中查看。
训练师
结构
训练师可以使用 json 定义。训练师架构由 RCTApi 提供,因此其结构与我的另一个模组 Radical Cobblemon Trainers 大致相同(例外是 identity,该模组中没有此项;此外,battleFormat 和 battleRules 都是命令参数)。更多信息和示例请参阅对应的文档。
位置
每当世界加载时,系统都会在所有 trainerPaths 中搜索训练师文件;这些路径列表中的路径均相对于世界目录。所有训练师都会注册一个根据其文件名生成的 ID。例如,假设我们的 Minecraft 安装目录如下(已简化):
mods
config
trainers
bug_catcher.json
saves
My Cool World
Strong Trainers
Ash Ketchum.json
Boring World
...
其中 trainerPaths 定义为:["Strong Trainers", "../../trainers"]。
- 加载
My Cool World:这将注册训练师tbcs:bug_catcher和tbcs:ash_ketchum。 - 加载
Boring World:这只会注册训练师tbcs:bug_catcher。
如果多个训练师具有相同的 id(即文件夹不同但文件名相同),那么后续注册的训练师会在其 id 后附加计数器(
_n)。
兼容性
该模组兼容其他同样依赖 RCTApi 的模组。安装这些模组时,它们的训练师副本会自动注册到 tbcs(请参阅配置)。
配置
配置文件位于 config/tbcs-server.toml:
[Trainers]
#━━━━━━━━━━
#List of paths, relative to the world directory, to search for trainer
#json files when (re)loading a world.
#
#Default: ["trainers", "../trainers", "../../trainers"]
trainerPaths = ["trainers", "../trainers", "../../trainers"]
#━━━━━━━━━━
#List of mod ids from mods that also rely on RCTApi to define trainers.
#Copies of trainers from the listed mods will also be registered to TBCS.
#
#Default: ["rctmod"]
trainerMods = ["rctmod"]
[Commands]
#━━━━━━━━━━
#Elevated permission level for win commands.
#
#Default: 2
#Range: 1 ~ 4
winCommandsPermission = 2
仅服务端 API
从 0.14.0-beta 版本开始,常规模组之外还会提供一个 API 版本(文件名带有 api 后缀,例如 tbcs-api):
- 所有 API 功能仅在服务端运行,可与任意版本的
tbcs-api一同安装(即客户端无需安装 TBCS) - 如果服务器已安装常规版 TBCS 模组,则不应同时安装
tbcs-api,因为 TBCS 已包含该 API(此时客户端也需要安装 TBCS) - 该模组的 API 版本不提供任何命令,本身不执行任何操作(仅为可能依赖 TBCS 的其他模组提供功能)
依赖项
许可
版权所有 (c) 2026 HDainester。详情请参阅 LICENSE.txt。
常见问题
Cobblemon Trainer Battle Commands 支持哪些 Minecraft 版本?
Cobblemon Trainer Battle Commands 支持 Minecraft Java 版 1.21.1,可用的加载器:Fabric / NeoForge。下载时注意选择和你游戏版本一致的文件。
Cobblemon Trainer Battle Commands 怎么安装?
先用 PCL2 或 HMCL 启动器安装对应版本的 Fabric / NeoForge,再把下载的 .jar 文件放进游戏目录的 mods 文件夹,重新启动游戏即可。开启了版本隔离的,mods 文件夹在 versions/版本名 下面。
hd42 的其他作品
查看全部 →Radical Cobblemon Trainers API
Cobblemon 的训练师管理与对战前置库。
Radical Cobblemon Trainers
超过1500个独特且富有挑战性的训练家,来自宝可梦ROM改版Radical Red(v3.02)和Unbound(v2.0.3.2),以及正作晶灿钻石/明亮珍珠,他们会自然生成在你的世界中。
RCT Badges – Cobblemon Pokemon Badges
Radical Cobblemon Trainers 的首领会掉落 Cobblemon Pokemon Badges 模组中的徽章。
Epic Tweaks
Epic Fight 模组的一个小型附属。

评论
登录后评论和评分