Terraria – Can enemies from statues drop a hardmode dungeon key

terraria

The (gamepedia) wiki claims that "every enemy" has a chance of dropping a dungeon key for the biome that it is in, and I see nothing to suggest otherwise in the other wiki or update logs, yet it seems strange that all farming tutorials for the keys are making use of spike traps and meteor heads rather than statues hooked up to a timer.

If it were the case that statues could spawn mobs that could drop keys then I'd imagine people would be making massive statue farms for insane rates rather than an unexpandable meteor head farm. Or is there perhaps some reason why this method would be slower or wouldn't work?

Was it confirmed by somebody that statue summoned mobs can't drop hardmode keys, or was it just assumed to be the case? Is it true?

Edit: (For bounty I'd rather the answer to show the code or an official dev statement, not from the wiki, it appears that the wiki has now changed its statement)

Best Answer

Enemies spawned from statues cannot drop a dungeon key.

Below is the code that spawns the key drop as you kill an enemy in a biome (the only code that spawns a dungeon key in the game). As you can see, the chance is one in 4000. (On average, every 4000th enemy drops a key.)

I changed the random number to be a confirmed key drop instead, and built a contraption with statues to spawn enemies in an ice biome. I killed a few normally spawned enemies in the biome and all of them dropped a key. Then I spawned a few enemies from the statues and none of them dropped a key.

if (Main.hardMode && this.value > 0f)
{
    if (Main.rand.Next(4000) == 0 && Main.player[(int)Player.FindClosest(this.position, this.width, this.height)].zoneJungle)
    {
        Item.NewItem((int)this.position.X, (int)this.position.Y, this.width, this.height, 1533, 1, false, 0, false);
    }
    if (Main.rand.Next(4000) == 0 && Main.player[(int)Player.FindClosest(this.position, this.width, this.height)].zoneEvil)
    {
        Item.NewItem((int)this.position.X, (int)this.position.Y, this.width, this.height, 1534, 1, false, 0, false);
    }
    if (Main.rand.Next(4000) == 0 && Main.player[(int)Player.FindClosest(this.position, this.width, this.height)].zoneBlood)
    {
        Item.NewItem((int)this.position.X, (int)this.position.Y, this.width, this.height, 1535, 1, false, 0, false);
    }
    if (Main.rand.Next(4000) == 0 && Main.player[(int)Player.FindClosest(this.position, this.width, this.height)].zoneHoly)
    {
        Item.NewItem((int)this.position.X, (int)this.position.Y, this.width, this.height, 1536, 1, false, 0, false);
    }
    if (Main.rand.Next(4000) == 0 && Main.player[(int)Player.FindClosest(this.position, this.width, this.height)].zoneSnow)
    {
        Item.NewItem((int)this.position.X, (int)this.position.Y, this.width, this.height, 1537, 1, false, 0, false);
    }
}