哭泣的苦力怕

哭泣的苦力怕

一个哭泣天使与苦力怕的杂交体。你看着它时它会冻结。你不看时它会更快。只伤害你——从不伤害你的房子。

怪物

Weeping Creeper

一个苦力怕 × 哭泣天使的杂交体,适用于 FabricNeoForge 上的 Minecraft 26.1.x

盯着它:它会冻结。移开视线:它会冲刺。抓住你:它会爆炸 —— 但只伤害,不会破坏地形。想去哪建就去哪建,再也不用害怕那声 psssss

功能特性

  • 被注视时冻结。 任何时刻,当一只哭泣苦力怕落在你前方 120° 的锥形视野内拥有视线时,它会完全停止移动。引信不推进、寻路不更新、原地冻结。移开视线、阻断视线,或者躲到墙后 —— 它会重新开始追击。
  • 比原版更快movementSpeed 为 0.40,原版为 0.25 —— 约等于蜘蛛)。当你不看它时,它会猛烈地拉近距离。
  • 仅对玩家造成爆炸伤害。 不破坏方块。不会对其他生物、你的动物、你的物品展示框、你的潜影盒、你的一切造成附带伤害。只有你。保留原版伤害缩放,因此充能的哭泣苦力怕在零距离能一击秒杀无护甲玩家。
  • 默认替换原版苦力怕。 每一次自然生成的苦力怕都会变成哭泣苦力怕。可从 0%(仅通过刷怪蛋生成)调整到 100%(完全替换)。
  • 雕像美学。 通过实体着色 API 施加细微的更深、略去饱和的色调 —— 并非独立纹理,因此已安装的资源包(Faithful、Sphax 等)仍会应用它们的 HD 苦力怕纹理,只是变暗了。
  • 泪痕位于每只眼睛下方,绘制为半透明叠加层。可开关。
  • 近距离安全网。 走进近战范围后,无论视角如何它都会冻结,因此近距离遭遇不会总以引爆告终。
  • 可选爱心粒子,营造“我看到你在看我”的喜剧效果(默认关闭 —— 若符合你的风格,可在配置中启用)。

配置

配置文件位于 config/weepingcreeper.json(首次启动时创建):

{
  "replacementChance": 1.0,
  "movementSpeed": 0.4,
  "lookArcDegrees": 120.0,
  "proximityFreezeRadius": 1.5,
  "followRange": 64.0,
  "tearsEnabled": true,
  "heartParticlesEnabled": false,
  "heartIntervalTicks": 60,
  "tintBrightness": 0.55,
  "desaturation": 0.25,
  "explosionRadius": 3.0,
  "chargedExplosionRadius": 6.0
}
默认值 说明
replacementChance 1.0 原版苦力怕生成中被替换为哭泣苦力怕的比例。0.0 = 从不替换;1.0 = 始终替换。
movementSpeed 0.4 移动速度属性。原版苦力怕为 0.25
lookArcDegrees 120.0 被视为“正在注视”的前方锥形宽度。
proximityFreezeRadius 1.5 任何在此距离内的玩家都会冻结该苦力怕,无论视角如何。0 表示禁用。
followRange 64.0 侦测/追击范围。原版苦力怕约为 16。
tearsEnabled true 面部泪痕叠加层。
heartParticlesEnabled false 被注视时在苦力怕上方生成爱心粒子。具有喜剧效果,默认关闭。
heartIntervalTicks 60 启用时的爱心间隔刻数。20 = 1 秒。
tintBrightness 0.55 苦力怕纹理的统一亮度乘数。1.0 = 不变。
desaturation 0.25 为呈现雕像效果而进行的逐通道绿色削减。0.0 = 仅统一变暗。
explosionRadius 3.0 玩家伤害半径。与原版苦力怕相同。
chargedExplosionRadius 6.0 被闪电击中时的半径。与原版充能苦力怕相同。

tearsEnabledheartParticlesEnabled 以及色调相关数值在渲染时实时生效。其他数值需要重启。

底层工作原理

  • 自定义实体WeepingCreeperEntity extends Creeper)—— 继承标准的苦力怕 AI、膨胀计时器和充能变体。通过 EntityJoinLevelEvent(NeoForge)/ ServerEntityEvents.ENTITY_LOAD(Fabric)在生成时替换原版苦力怕。
  • 注视检测:玩家视线向量与玩家眼睛到苦力怕中心向量之间的点积,对比 cos(arc / 2),再加上原版的 hasLineOfSight() 检查。
  • 冻结customServerAiStep 停止导航、清除目标、将水平速度归零,并每刻将膨胀引信硬重置为 0。引信重置使用一个极小的 mixin 访问器(CreeperAccessor),因为 swell 字段是私有的,而单纯调用 setSwellDir(-1) 每刻只会递减 1 —— 对于已经处于爆炸中段的苦力怕来说太慢了。
  • 自定义爆炸:另一个极小的 mixin(CreeperTickMixin)包装了 Creeper#tick 内私有的 Creeper#explodeCreeper() 调用。对于哭泣苦力怕,重定向到 WeepingCreeperEntity#explodeWeeping(),它触发一次仅视觉的爆炸(Level.ExplosionInteraction.NONE = 不破坏方块),并仅对半径内的玩家应用原版苦力怕伤害缩放。原版苦力怕不受影响。
  • 着色:重写 LivingEntityRenderer#getModelTint(state),使用逐通道 ARGB 乘数。保留原版苦力怕纹理路径,因此资源包重绘仍会通过着色生效。

两个 mixin 都只针对原版 Creeper.class 中极小的字节码范围。应与任何不重定向同一私有调用的内容良好兼容。

需求

  • Minecraft 26.1.x
  • Java 25
  • Fabric Loader 0.18.4+ 配合 Fabric API NeoForge 26.1+

许可证

CC0-1.0 —— 公有领域,随意使用。

源代码

https://github.com/kestalkayden/weeping-creeper