生物头颅掉落机制 Mob Head Drops

生物头颅 与 神秘道具 的产出规则,同时是挖掘等级提升的第二条途径(配合 Mining Level Boost)。

  • 实现:iguanaman.iguanatweakstconstruct.mobheads.handlers.MobHeadHandler
  • 模块:MobHeads(脉冲 MobHeads)
  • 事件:LivingDropsEvent,优先级 LOWEST

第一步:清除原版头颅掉落

方法开头先遍历 event.drops,移除所有 Items.skull 且 getItemDamage() != 3 的掉落物:

if (item.getItem() == Items.skull && item.getItemDamage() != 3) i.remove();

注释 // remove regular skull drops (because we modify its drop chance)。meta 3 被特意保留——原版 3 号是普通骷髅头,走下面的统一概率重掷不会被误删。

第二步:计算概率

Entity entity = event.source.getEntity();
if (entity == null) return;
if (!(entity instanceof EntityPlayer)) return;
if (entity instanceof FakePlayer && !Config.headsFromFakePlayerKills) return;

然后读取玩家手中工具的 Beheading 等级:

int beheading = 0;
if (stack != null && stack.hasTagCompound() && stack.getItem() instanceof ToolCore) {
    beheading = stack.getTagCompound().getCompoundTag("InfiTool").getInteger("Beheading");
    if (stack.getItem() == TinkerTools.cleaver) beheading += 2;   // 屠宰刀自带 +2
}

最终判定(nextInt(100) > 阈值 则放弃,即 nextInt(100) <= 阈值 时掉落):

阈值 = beheading × beheadingHeadDropChance + baseHeadDropChance
默认阈值 = beheading × 2 + 5        (单位:百分数,0~99)
Beheading 等级 阈值 实际掉落概率
0(无修饰符) 5 6%
1 7 8%
2 9 10%
5 15 16%
10 25 26%
47 99 100%(上限饱和)

Beheading 等级 ≥ 47 时阈值已达 99,再高也不再提升。若要 100% 掉落需改大 beheadingDropChange。

两个配置项(分类 MobHeads,见 MobHeads 配置):

配置键 类型 默认 范围 含义
baseDropChange int 5 0~100 基础掉落百分数
beheadingDropChange int 2 1~100 每级 Beheading 增加的百分点
headsFromFakePlayerKills boolean false — 是否允许假玩家(自动化)击杀掉头颅

第三步:目标生物 → 掉落物

概率通过后,按生物类型查表(源码 if/else if 链):

目标生物 掉落物品 meta 说明
EntitySkeleton(含凋灵骷髅) 原版 minecraft:skull ((EntitySkeleton) mob).getSkeletonType() 动态取骨骼类型,因此僵尸骷髅/骷髅/凋灵骷髅自动区分
EntityPigZombie Iguana Skull META_PIGZOMBIE
EntityZombie 原版 minecraft:skull 2 僵尸头
EntityCreeper 原版 minecraft:skull 4 苦力怕头
EntityEnderman Iguana Skull META_ENDERMAN
EntityBlaze Iguana Skull META_BLAZE
名为 "Blizz" 的实体 Iguana Skull META_BLIZZ 走 EntityList.getEntityString 的 mod 支持分支
其他 无(skullItem == null → return) — 不产生任何掉落

注意:僵尸、苦力怕、骷髅用的是原版头颅物品,只有末影人、猪灵、烈焰人、暴雪怪用本 mod 的 Iguana Skull。Blizz 分支没有额外的 mod 加载守卫,只按实体注册名匹配。

末影人的下颚彩蛋

} else if (mob instanceof EntityEnderman) {
    skullItem = IguanaMobHeads.skullItem;
    skullId = IguanaSkull.META_ENDERMAN;
    // sometimes, very very rarely, you'll only get the jaw :D
    if (IguanaTweaksTConstruct.random.nextInt(1000) == 0) {
        skullItem = IguanaMobHeads.wearables;
        skullId = 2;
    }
}

末影人命中掉落后,还有 1/1000 的独立判定把奖励换成 神秘道具 meta 2(末影人下颚)。

熔岩桶的裂桶彩蛋

同一段 1/1000 逻辑也出现在 黏土岩浆桶:桶被销毁且 MobHeads 脉冲已加载时,1/1000 出 神秘道具 meta 1。

掉落物生成

EntityItem entityitem = new EntityItem(mob.worldObj, mob.posX, mob.posY, mob.posZ,
        new ItemStack(skullItem, 1, skullId));
entityitem.delayBeforeCanPickup = 10;
event.drops.add(entityitem);

10 tick(0.5 秒)拾取延迟。

工具 tooltip 提示

MobHeadHandler 还订阅 PlayerEvent.ItemCraftedEvent:玩家合成任何 instanceof ItemSkull 的物品时,向其 tooltip 追加一行 tooltip.decorative(装饰说明),用于区分「装饰用头颅」与功能性头颅。