Sable 生物交互

Sable 生物交互

让原版和模组Minecraft生物与Sable子层级进行交互、将其设为目标并对其造成伤害,无需逐个模组进行集成。

冒险

Sable Mob Interactions

给任何生物一个攻击你船只的理由,让它们建造属于自己的荒地

Version Minecraft NeoForge Sable


教程可通过 wiki 链接获取 ->


目录


概述

Sable 子层级为 Create Aeronautics 和 Create Submarine 生态系统中的船只、飞艇、漫游车和其他载具提供动力,但直到现在,世界中没有任何东西能真正威胁到它们。敌对生物会径直走过被攻击的船只,箭矢会直接穿过船体,而被围攻的基地可以毫不犹豫地把舰队停泊在开阔水域。

Sable Mob Interactions 改变了这一点。它让原版生物以及任何其他模组的生物能够真正看到、瞄准并伤害 Sable 子层级,而无需该模组的作者知道 Sable 的存在。

这不是一个针对单个生物的内容包。它是一个通用的交互层:任何到达后备等级的敌对生物都会在子层级方块上获得一个真实、持久的目标,并且它自身的原生攻击目标(近战、自定义武器系统,或原作者编写的任何内容)会自然地对其发动攻击,使用生物真实的动画、音效和行为。

从 1.1.0 开始,生物们可以驾车反击了。自定义载具会作为物理子层级生成在世界中,由坐在 Create 座椅上的生物驾驶,四处行驶,追逐玩家并猎杀挡路的一切。


功能一览

  • 原版生物,正确调校。 骷髅射出真正的箭矢。溺尸如果手持三叉戟就会投掷它。僵尸和大多数其他近战生物会击穿船体。苦力怕在你的船只附近爆炸。守卫者充能发射光束。末影人会偷走你的装饰品。
  • 任何模组的生物,自动生效。 一个通用后备目标为任何其他敌对生物提供真实目标并退居幕后,让其自身的攻击 AI(近战、远程或完全自定义的武器逻辑)完成剩余工作,该模组作者无需编写任何代码。
  • 任何模组的弹射物,自动生效。 箭矢、三叉戟、子弹、炮弹,任何继承原版 Projectile 类的内容在命中时都会正确地伤害子层级方块,无论由哪个模组发射。
  • 生物驱动的载具。 汽车作为物理子层级生成,由生物坐在方向盘后,通过 Mob Transmitter 方块驾驶。
  • 生成节点。 道路结构会在开阔生物群系中的平整垫层上生成,并自行填充汽车。
  • 自带汽车。 将 .nbt 载具文件放入你世界的文件夹中,它们就会加入你所选等级的生成池。
  • 智能驾驶员。 驾驶员会追逐、游荡、避开障碍物和彼此、远离水域和悬崖、在转弯时减速,并在翻车时自行扶正。
  • 感知船只的瞄准。 子层级只有由真正的推进/结构部件(可配置的方块标签)建造并且附近有玩家时才会成为有效目标,因此闲置的玩家建筑和废弃的测试装置默认不会受到威胁。
  • 可选的深度兼容。 如果安装了 Create: Big Cannons,其自身的方块护甲/硬度值会决定一个方块需要多少次命中才能被破坏。
  • 完全可配置。 搜索半径、攻击范围、射速、命中阈值、苦力怕破坏、末影人偷窃、船只检测严格度、载具等级、驾驶目标等等。

工作原理

子层级方块并不存在于你所看到的位置。Sable 将每个子层级的真实方块数据存储在世界其他地方的一个隔离地块中,只在当前游戏内位置对其进行视觉摆位。此模组添加的每一次交互(寻找附近方块、瞄准弹射物、击穿船体)都会在原始存储空间与子层级的摆位视觉位置之间正确变换,因此生物和弹射物会精确命中它们看似瞄准的位置。

伤害通过共享的命中计数器按方块追踪,在方块实际破坏之前驱动 Minecraft 自身的裂纹进度叠加层,因此与船只的战斗看起来和感觉起来就像与任何其他结构的战斗一样。


生物驱动的载具

载具是 Sable 子层级的普通结构模板。当需要载具时,模组会将模板放置在世界中,触发其中的物理装配器,找到 Create 座椅,并让一名驾驶员就座。驾驶员通过 Mob Transmitter 驾驶,该方块将生物的决定转化为载具的转向和油门。

  • 汽车会自行校准转向和油门方向,因此大多数设计无需设置即可正确行驶。
  • 每个等级都有自己的 max_speed。
  • 如果你离开区域或重载世界,驾驶员会重生,而驾驶员被击杀的汽车会作为残骸留在原地。
  • 始终无法完成装配的汽车会变成残骸,而不是留下散落的方块。

生成节点

每个等级都有一个节点:一个道路结构,会在世界中生成,并在玩家靠近时在其周围生成汽车。

  • 节点位于带有自然收窄边缘的平整垫层上,因此会避开树木和山丘。
  • 垫层与其周围环境匹配:沙漠中为砂岩和沙子,恶地中为压实泥土、红沙和陶瓦,雪地生物群系中为雪,石岸上为沙砾和石头,其他地方为泥土和草。
  • 节点只在开阔生物群系(平原、沙漠、热带草原、恶地及类似区域)中生成。该列表是一个可编辑的生物群系标签:sablemobinteractions:vehicle_node_biomes。
  • 节点遵循每个等级的环带(min_radius 和 max_radius),从世界原点测量,并在陡峭地形和水域附近跳过。
  • 汽车只放置在平坦、空旷的地面上,绝不会在树木内部或彼此内部。
  • /place structure 对节点有效,并忽略生物群系、环带、平坦度和海平面检查,因此你可以将其放置在任何地方进行测试。

节点只会在新生成的区块中出现,因此现有世界会在你探索时看到它们。


自定义汽车

将你自己的 .nbt 汽车文件放入 saves/<world>/vehicles/<tier>,例如 saves/<world>/vehicles/tier_1_scrap。它们会加入该等级的池中,并在文件更改时重新扫描。

  • 内置汽车会在首次需要时被复制到等级 1 文件夹中。如果你不想让它出现在你的池中,请从该文件夹中删除它。
  • 如果某个等级的文件夹为空,内置汽车会再次被安装,以确保该等级始终有东西可生成。
  • 汽车需要一个 Create 座椅供驾驶员乘坐,并且结构内部需要一个物理装配器方块。
  • 每辆生成的汽车的红石链接频率都会随机化,因此两辆相同的汽车永远不会互相干扰。
  • 自定义汽车不会在世界之间自动复制。

载具等级

等级是 data/sablemobinteractions/vehicle_tiers/ 中的 JSON 文件,每个等级一个(包含从 tier_1_scrap 到 tier_5_boss)。一个等级控制:

  • 它生成的环带(min_radius、max_radius)以及其站点的稀有程度
  • 每个站点出现多少辆汽车以及它们之间的最小距离
  • 最高速度
  • 哪些生物驾驶汽车
  • 驾驶员使用哪些驾驶目标,按优先级顺序排列

structures 列表用于数据包提供的汽车。将其保留为 [] 以仅使用世界 vehicles 文件夹中的汽车。


驾驶目标

目标按等级 JSON 中列出的顺序运行。第一个想要控制的目标会操控汽车。

目标 作用
chase 驶向目标玩家,在距离过近时环绕并后退
wander 没有可追逐目标时漫无目的地行驶
avoid 绕开障碍物和其他载具
avoid_water 远离深水和熔岩
avoid_cliffs 远离大型落差
slow_turn 在急转弯前减速,使汽车更不容易翻车
stay_upright 在倾斜时降低速度,并扶正已翻倒并停止的汽车
unstick 倒车脱离卡住状态

如果你有来自旧版本的自定义等级 JSON 文件,请在 unstick 之前添加 avoid_water、avoid_cliffs、slow_turn 和 stay_upright。


命令

  • /sablemobinteractions vehicles 列出已追踪的载具、它们的状态和驾驶员
  • /sablemobinteractions customcars 列出每个等级找到的自定义汽车
  • /sablemobinteractions clearvehicles 移除模组生成的每辆汽车,绝不会移除玩家建造的载具(需要 SableCat)
  • /sablemobinteractions debugdrive <true|false> 打印每个驾驶员正在思考的内容

配置

可在游戏内通过 Mods → Sable Mob Interactions → Config 访问,或直接编辑 sablemobinteractions-common.toml。包括:

  • 每个生物的搜索半径、攻击范围和射击冷却
  • 破坏方块所需的基础命中次数,可选硬度缩放
  • 子层级成为可攻击目标前所需的玩家存在范围
  • 切换是否要求船只必要方块才能让子层级成为可攻击目标
  • 分别切换苦力怕破坏和末影人偷窃
  • 用于扩展可偷窃或船只必要方块范围的模组命名空间和方块标签

载具行为在等级 JSON 文件中按等级配置,节点生物群系在生物群系标签中配置。


针对此模组开发

想要让你自己的生物对如何攻击子层级拥有更紧密、专门构建的控制,而不是依赖通用后备方案?在你的生物实体类上实现 SubLevelAttacker:

public interface SubLevelAttacker {
    void attackSubLevelBlock(Vec3 targetWorldPos, SubLevel subLevel, BlockPos localPos);
    default double getSubLevelAttackRange() { return 15.0; }
    default int getSubLevelAttackCooldownTicks() { return 40; }
}

任何实现此接口的生物都会被自动识别,你无需进行注册。


依赖

  • Sable(必需)
  • SableCat 1.0.3 或更新版本(必需,它提供了此模组依赖的延迟修复和载具清理功能)
  • Create(必需,汽车使用 Create 座椅)
  • Simulated(必需,将生成的汽车转化为子层级的物理装配器)
  • Create Connected(必需,内置汽车使用其变速箱)
  • Offroad(必需,内置汽车使用其轮胎)

其他所有内容都是可选的。Create Aeronautics、Create Submarine 和 Create: Big Cannons 仅在存在时用于增强特定行为,模组在没有它们的情况下也能完全正常工作。