Cluckington

基本信息

属性 值
注册名 Cluckington
内部名称 EntityCluckington
类 net.mcft.betterstorage.entity.EntityCluckington
基类 EntityChicken(鸡)
实体 ID 2
追踪范围 64
更新频率 4
发送恶魂 是(registerModEntity 末参 true)
固定名称 Cluckington

来源:src/main/java/net/mcft/betterstorage/content/BetterStorageEntities.java:22-23;src/main/java/net/mcft/betterstorage/entity/EntityCluckington.java。

功能

Cluckington 是一个手持「Cluckington」名牌的成年鸡时转化出的迷你 Boss:体型是普通鸡,但生命值 30、攻击力 2,并会攻击僵尸与玩家。

数值

属性 值 原版鸡 来源
最大生命值 30.0 4 EntityCluckington.java:42
移动速度 0.35 0.25 EntityCluckington.java:43
攻击力 2.0 — EntityCluckington.java:44-45
碰撞箱 宽 0.6F × 高 0.8F 宽 0.4F × 高 0.7F EntityCluckington.java:24
自愈 每 40 tick 回复 1.0 生命 — EntityCluckington.java:66-69

AI 行为

构造函数(EntityCluckington.java:22-37)移除了 4 项原版鸡的 AI 任务并添加了自己的:

移除(按 tasks.taskEntries 索引,:25-32):

索引 原版任务
1 panic(恐慌逃跑)
2 mate(求偶)
3 tempt(被种子吸引)
4 follow(跟随主人)

添加:

优先级 任务 目标
2 EntityAIAttackOnCollide EntityZombie(距离 1.0D)
2 EntityAIAttackOnCollide EntityPlayer(距离 1.0D)
target 1 EntityAIHurtByTarget 被攻击时反击
target 2 EntityAINearestAttackableTarget 主动寻找 EntityZombie

即:会主动攻击僵尸,也会攻击玩家,且被僵尸攻击时会反击。

固定名称

public boolean hasCustomNameTag() { return true; }
public String getCustomNameTag() { return "Cluckington"; }

来源:EntityCluckington.java:49-56。名称恒为 Cluckington,不可通过命名牌修改。

触发方式

spawn(EntityChicken target)(EntityCluckington.java:79-86)——杀掉原鸡并在同位置生成 Cluckington,同时产生一次爆炸(强度 1)。

触发条件在 src/main/java/net/mcft/betterstorage/proxy/CommonProxy.java:295-300:

if ((target.getClass() == EntityChicken.class) && (holding != null) && (holding.getItem() == Items.name_tag)) {
    EntityChicken chicken = (EntityChicken) target;
    if (!chicken.isDead && !chicken.isChild() && "Cluckington".equals(holding.getDisplayName()))
        EntityCluckington.spawn(chicken);
}

即:用显示名为 Cluckington 的命名牌右键一只成年鸡即可触发(必须是成年,!chicken.isChild())。

生成过程(EntityCluckington.java:79-86):

  1. target.setHealth(0); target.setDead(); — 杀死原鸡
  2. 在原位置创建 EntityCluckington
  3. 复制原鸡的朝向
  4. 生成到世界
  5. createExplosion(..., 1, true) — 强度 1 的爆炸

繁殖判定

public boolean isBreedingItem(ItemStack stack) {
    return ((stack.getItem() == Items.skull) && "wyld".equalsIgnoreCase(StackUtils.get(stack, "", "SkullOwner")));
}

来源:EntityCluckington.java:59-61。只有头颅方块且头颅主人为 wyld 时才算繁殖物品——该判定沿用自原版鸡的 isBreedingItem 模式,但被本 mod 覆写为固定值。

攻击实现

public boolean attackEntityAsMob(Entity target) {
    return target.attackEntityFrom(DamageSource.causeMobDamage(this),
        (float) getEntityAttribute(SharedMonsterAttributes.attackDamage).getBaseValue());
}

来源:EntityCluckington.java:73-77。伤害取自 attackDamage 属性的基础值(2.0),而非原版 strengthBasedOnMob 的等级缩放。

相关条目