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):
target.setHealth(0); target.setDead();— 杀死原鸡- 在原位置创建
EntityCluckington - 复制原鸡的朝向
- 生成到世界
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 的等级缩放。
相关条目
- Frienderman - 本 mod 另一个实体变种
- 实体注册 - 两个实体的注册表
- Drinking Helmet - 另一处 Boss 战利品