跳到主要内容

BTCMobs

开发中:自定义生物和 NPC,包含技能、刷怪点、掉落表和任务事件。

即将推出实体与模型
依赖TypeWriter0.9.0-beta-177 (BTC build)QuestRoadNetworkGUI可选ModelEngine可选BetterModel可选MiniPlaceholders可选PacketEvents可选

开发中。首个版本发布前,条目和字段仍可能变动。

开发中

BTCMobs 是一个**即将推出(Soon)**的扩展。它尚未发布,目前还没有下载和版本号,并且条目或字段在发布前可能会发生变化。本页记录的是当前的开发构建版本,仅供参考。它不是旧的 “BTC Mob” 插件:怪物引擎现在位于扩展本身之中,无需安装单独的插件。

概览​

BTCMobs

BTCMobs 让你完全通过 TypeWriter 网页面板来构建自定义怪物和可交互的 NPC。怪物模板描述一种生物:其基础 Minecraft 实体、等级、生命值、护甲、技能、掉落物、阵营、可选的 3D 模型和可选的繁殖。刷怪器和自然生成决定模板在世界中何时何地出现。技能和掉落表定义怪物的行为以及它留下的东西。

怪物所做的一切都会反馈给 TypeWriter。当怪物生成、受到伤害、释放技能或死亡时会触发事件。事实和变量会报告生命值、等级、数量或距离。动作可以生成、移除怪物,或让怪物释放技能。这使得任务、对话和过场动画可以对战斗作出反应,或发起战斗。

同一个扩展还提供了 NPC 侧:怪物模板可以显示为客户端 NPC,带有对话交互、任务目标、镜头过场动画(包括附着在模型骨骼上的镜头)、按玩家设置的骨骼可见性,以及 ModelEngine 或 BetterModel 的动画控制。该扩展面向 TypeWriter 的 BTC 构建版本(Paper/Folia)。

功能​

  • 怪物模板 — 每种生物一个 btc_mob_template 条目:实体类型、等级、生命值、攻击伤害、护甲、技能、掉落物、阵营、仇恨表、模型和动画。
  • 刷怪器 — 基于区域的刷怪器,带有生成上限、生成节奏和预热,可由事实驱动,因此每位玩家可以看到不同的节奏。
  • 自然生成替换 — 逐条规则地,按世界、生物群系和概率,将原版生物的生成替换为 BTC 怪物。
  • 技能 — 技能是一份有序的 TypeWriter 动作列表,或一行脚本。模板将技能附加到生成、攻击、受伤、死亡或重复计时器等触发器上。
  • 掉落表与物品 — 原版材质、自定义物品、经验和可重复使用的表,其概率和数量会随怪物等级缩放。
  • 任务钩子 — 事件、事实、变量和一个技能目标,使剧情能够对怪物和战斗作出反应。
  • NPC — 基于模板的客户端 NPC,带有对话、交互、注视和镜头行为。
  • 过场动画 — 在 TypeWriter 过场动画期间生成怪物、释放技能、聚焦于某个 NPC 或骑乘模型骨骼。
  • 持久化 — 当配置了存储构件时,技能冷却、计数器、光环、仇恨表和 Boss 血条在重启后依然保留。
  • MythicMobs 导入 — 管理员命令可将 MythicMobs 包转换为 BTCMobs 页面。

安装​

BTCMobs 正在开发中,没有公开下载。以下说明描述的是开发构建版本的接入方式。

  1. 运行 TypeWriter 的 BTC 构建版本(BTC Core,Paper 或 Folia),并安装该构建版本声明为依赖项的 Quest 和 RoadNetwork 扩展。
  2. 将 BTCMobs 的 JAR 放入 plugins/Typewriter/extensions/ 并重启服务器。它自带怪物引擎,因此不需要单独的 BTCMobs 插件。
  3. 安装你想要的可选集成。扩展会在运行时检测它们:用于 3D 模型的 ModelEngine 或 BetterModel、用于公开占位符的 MiniPlaceholders,以及 PacketEvents、Vault、DecentHolograms 和 WorldGuard。
  4. 若要打开怪物目录菜单,必须安装 BTC GUI 扩展。
  5. 在网页面板中,创建一个 btcmobs_storage 构件,并从 btcmobs_config 条目中引用它(见下文),以便保存游戏状态。

快速上手​

本演示会创建一个僵尸 Boss,让它在竞技场中生成,并对其死亡作出反应。

  1. 在 TypeWriter 网页面板中,打开一个**清单(manifest)**页面。添加一个 BTCMobs Storage 构件,然后添加一个 BTCMobs Global Configuration 条目,并将 storage 设为该构件。
  2. 打开一个**静态(static)**页面,添加一个 Native BTC mob template。为它设置一个你之后会重复使用的 id(例如 crypt_warden)。将 entityType 设为 ZOMBIE,display 设为玩家看到的名称,然后设置 level、maxHealth、attackDamage 和 armor。
  3. 添加一个 Native BTC mob drop table,并列出其 drops,每行一个声明,例如 DIAMOND 1 0.25(材质、数量、概率)或 exp 20to40。在模板的 drops 列表中通过其 id 引用该表。
  4. 添加一个 Native BTC mob skill,并在 actions 中按顺序填入它所运行的 TypeWriter 动作。在模板中,将该技能 id 添加到 skills,例如 warden_slam~onTimer:100 表示每 100 tick 释放一次。
  5. 添加一个 BTCMobs Spawner。将 mobType 设为模板的 id(而不是它的显示名称),设置 world、区域的两个角 corner1 和 corner2、defaultMaxMobs 以及 defaultCooldown(单位为 tick)。
  6. 添加一个 On BTCMob die 事件,将 mobName 设为模板 id,并将其 triggers 链接到对话、奖励或事实修改器。
  7. 发布这些页面,走到距区域中心 defaultActivationRange(默认 24 格)以内,怪物就会出现。使用 /tw btcmobs spawners force <id> 可以不用等待直接测试。
快速测试怪物

/tw btcmobs spawn <template> <level> <amount> 会在你身旁以你选择的等级生成一个模板。该命令会提示已加载的模板 id。

工作原理​

模板只是一份描述。当刷怪器、自然生成、Spawn a mob 动作或 spawn 命令请求时,才会创建一个存活的怪物。此后,怪物会运行附加到其触发器上的技能,并在死亡时判定其掉落声明。每一步也会引发一个 TypeWriter 事件,任务和对话正是借此跟随战斗。

技能与触发器​

模板的 skills 列表中的条目写作 skillId 或 skillId~trigger。id 是某个 btc_mob_skill 条目的 id(或名称)。触发器说明怪物何时运行它:onSpawn、onAttack、onDamaged、onDeath、onKill、onDespawn、onInteract、onTeleport、onExplode、onRanged、onProjectile,或用于重复技能的 onTimer:<ticks>(也接受以秒为单位的 onTimer:5s)。没有触发器的技能会在怪物引发的每一个触发器上运行,因此请务必添加一个。conditions 会过滤每一行技能,targeters 则选择它们共用的目标。

掉落声明​

掉落表的每一行,或模板 drops 列表的每一行,是以下之一:

  • 带有可选数量和概率的原版材质,例如 BONE 2 0.5;
  • 某个 btc_mob_item 条目的 id 或名称,带有可选的数量和概率;
  • exp 10 或 exp 10to20,表示经验;
  • btc:<item_id> [amount or range] [chance] [+n/m],表示 BTC 目录中的物品。没有 +n/m 令牌时,数量会随怪物等级增长,从 1 级时的 x1 到 100 级时的 x6;
  • 另一个掉落表的 id,它会就地展开。

未知的声明会被记录为警告并跳过。

NPC​

NPC 是以客户端实体的形式向玩家显示的模板。BtcMob NPC definition 在 mobType 中指明模板,并设置显示名称、偏移量以及是否执行 tick。BtcMob NPC instance 通过 spawnLocation、可选的 activity、一个 group 和额外的 data 来放置它。NPC 数据条目会改变模型的外观:按玩家设置的骨骼可见性、用另一个模型的骨骼替换某个骨骼的附件、用于白天和黑夜的 ModelEngine 姿态,以及行走速度。

命令​

所有命令都位于 /tw btcmobs 之下。简短的别名 /tw btc 和 /tw btcmobsadmin 运行同一个命令树。每个节点都有 btcmobs.command.<node> 形式的权限(见下文)。

命令说明
/tw btcmobs mobs [list]列出已加载的怪物模板。
/tw btcmobs mobs listactive列出当前存活的怪物。
/tw btcmobs spawn <template> [level] [amount]在你身旁生成一个模板(数量 1 到 64)。summon 和 mobs spawn 与之等效。
/tw btcmobs mobs kill <template> [radius]击杀你周围某个模板的怪物(默认半径 48)。
/tw btcmobs mobs killall [radius]击杀你周围的所有 BTC 怪物(默认半径 48)。
/tw btcmobs mobs info显示你正在注视的怪物的信息。
/tw btcmobs skills [list]列出已加载的技能。
/tw btcmobs cast <skill>从你自己身上释放一个技能(skills cast、test cast 和 profile cast 与之等效)。
/tw btcmobs spawners [list]列出刷怪器条目。
/tw btcmobs spawners info <id>显示一个刷怪器。
/tw btcmobs spawners force <id> [amount]强制生成,忽略条件和上限。
/tw btcmobs spawners reload重新加载原生条目。
/tw btcmobs reload重新加载原生条目。
/tw btcmobs menu打开怪物目录菜单(前 45 个模板,按字母顺序)。
/tw btcmobs items list 和 get <item> [amount]列出或领取目录中的一个物品。
/tw btcmobs items give <player> <item> [amount]将一个目录物品给予某位玩家。
/tw btcmobs signal <uuid> <signal>向一个活动的怪物发送信号。
/tw btcmobs test mechanic、condition、targeter <line>将一行脚本作为测试运行。
/tw btcmobs test on <uuid or nearest> <line>在某个特定的活动怪物上运行一行脚本。
/tw btcmobs import mythic [path]将 MythicMobs 包转换为 BTCMobs 页面(默认文件夹为 TypeWriter 数据文件夹中的 import/BtcMob)。migrate mythic 与之等效。
/tw btcmobs audit、coverage、registrydump、variables、placeholders有关已加载模板、技能、刷怪器和注册表的诊断。
/tw btcmobs debug、version、modeldiag运行时诊断、版本,以及附近怪物的 BetterModel 状态。

权限​

权限授予
btcmobs.command.main/tw btcmobs 根命令及其帮助。默认授予所有人。
btcmobs.command.versionversion 和 v。默认授予所有人。
btcmobs.command.mobs、.mobs.spawn、.mobs.kill、.mobs.killall、.mobs.info、.mobs.listactive、.mobs.statsmobs 和 spawn 命令。
btcmobs.command.skills、.skills.cast列出和释放技能。
btcmobs.command.spawners、.spawners.list、.spawners.info、.spawners.force、.spawners.reloadspawners 命令。
btcmobs.command.items、.items.list、.items.get、.items.giveitems 命令。
btcmobs.command.menu、.menu.open目录菜单。
btcmobs.command.import、.migrate、.migrate.mythic、btcmobs.importMythicMobs 导入。
btcmobs.command.test、.test.mechanic、.test.condition、.test.targeter、.test.casttest 命令。
btcmobs.command.audit、.variables、.debug、.modeldiag、.signal、.reload、.profile对应的诊断命令。
btcmobs.command.admin、btcmobs.admin管理根命令(/tw btcmobsadmin)。
btcmobs.command.*、btcmobs.*以上全部。

除 btcmobs.command.main 和 btcmobs.command.version 外,所有权限默认仅限管理员。modeldiag 命令会检查 btcmobs.command.modeldiag,该权限由扩展注册(默认授予管理员)。

占位符​

占位符只发布到 MiniPlaceholders;不使用 PlaceholderAPI 来发布它们。语法为 <name:argument:argument>。

占位符返回
<btcmobs_caster> 和 <btcmobs_caster:field>模板 id,或与玩家绑定的怪物的某个字段:name、type、level、hp、maxhp、percent、uuid。
<btcmobs_looking> 和 <btcmobs_looking:field>玩家正在注视的 BTC 怪物的相同字段(在注视范围内),没有时为空。
<btcmobs_var:name>某个全局 BTCMobs 变量的值。
<btcmobsdamage_top:BOSS:POSITION:field>Boss 伤害排行榜某个名次上的玩家。字段:name、damage、raw_damage、percent、uuid。
<btcmobsdamage_self:BOSS:field>查看者自己的排名。字段:damage、raw_damage、percent、position。
<btcmobsdamage_participants:BOSS>、_total、_max_health、_last_updateBoss 伤害排行榜的合计数据。

条目​

57 个条目,由扩展源码生成。

动作7
事件9
目标2
事实9
过场动画5
实体2
实体数据4
交互边界3
变量8
构件1
清单1
定义6

故障排查​

刷怪器没有任何作用,且日志显示 "references unknown mob template"。 mobType 必须是某个 btc_mob_template 的 id,而不是编辑器中显示的名称。请从模板条目中复制 id。同样的规则适用于 btc_natural_spawn、生成和移除动作以及 NPC 定义。

刷怪器始终达不到上限,或停在 1。 两个角为同一个点的区域会将 defaultMaxMobs 限制为 1。上限统计的是该刷怪器拥有的怪物,无论它们在哪里。只有当玩家位于区域中心的 defaultActivationRange 以内时,刷怪器才会工作。

刷怪器对部分玩家什么也不做。 对于区域附近的每名玩家,刷怪器依次检查世界、conditionLines 和 criteria,全部通过后才会查看区域、冷却和生成。未通过 criteria 的玩家会被跳过(每名玩家只会记录一次诊断信息“criteria did not match”)。criteria 绝不会移除已经生成的怪物。...Fact 字段(maxMobsFact、mobsPerSpawnFact 等)仍然会覆盖数值默认值。

自然生成替换从不触发。 该条目只会替换服务器已经产生的生成(自然生成、区块生成或默认生成)。如果世界在 paper-world-defaults.yml 中的 spawn-limits 为 0,原版生物永远不会生成,也就没有任何东西可被替换。第一条匹配的规则生效,并且 maxNearby 设为 0 表示没有上限,而不是零个怪物。

怪物循环播放 Attack 或 Death 动画,或者不走路。 附加模型时,modelAnimations 只会循环播放待机类动画;放在其中的攻击和死亡名称会被忽略。一次性动画在模板的 modelLifecycle 中设置(生成、攻击、受击、死亡),并在对应时刻播放;死亡动画会播放到结束,模型随后才消失。模型中不存在的名称会按模板记录一次,该时刻保持无动画。行走动画尚不由怪物驱动,仅在 NPC 一侧可用。

某个技能或掉落物静默地缺失。 请查看服务器日志:未知的掉落声明、未知的物品和无效的概率会被记录为警告并跳过。当怪物释放技能时,如果 skills 条目的 id 与任何 btc_mob_skill 条目都不匹配,则会被记录。

On BTCMob despawn 不触发。 当被追踪的怪物未死亡就离开世界(自然消失、被插件移除、掉出世界),且 radius 格内有玩家时,该事件会触发。怪物死亡时(请使用 On BTCMob die)、仅区块被卸载时(重新加载时会重新接管该怪物),以及你用 Despawn 动作或 /tw btcmobs mobs kill 移除它时,都不会触发。mobName 为空时匹配所有怪物;spawn、die、damage 和 interact 事件同样如此。

相关扩展​

  • BetterModel — BetterModel 是 BTCMobs 可以驱动怪物和 NPC 模型的两种模型后端(modelProvider)之一。