跳到正文

Cobblemon Trainer Battle Commands

作者:hd42

提供用于管理训练师和发起战斗的命令,可作为其他模组(如 Easy NPC)的接口。

收藏

介绍

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

Cobblemon Trainer Battle Commands (TBCS)

提供用于管理训练家并开始战斗的命令,可作为其他模组(例如 Easy NPC)的接口。

此模组主要面向地图制作者和整合包开发者。

支持者

bisecthosting

命令

  • tbcs
    • attach <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 的另一场战斗。这场战斗也带有自己的胜利命令设置,玩家获胜时会获得一颗钻石。

查看命令的实际效果:

Battle Chain Demo

这可以无限重复。请注意,胜利命令嵌套得越深,就需要越多反斜杠(\)来转义命令两侧的撇号(')。


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 示例

Easy NPC Demo

注意:视频录制于较旧版本,现在训练师 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 的其他作品

查看全部 →