What's an acceptable Diamond/Stone ratio to determine if somebody is cheating?

From the Minecraft Wiki:

There is an average of 3.097 diamond ore per chunk.

Assuming that the player mines a chunk (16/16/256 blocks) that is only half filled with blocks (32,768 blocks), there is only an approximately 0.000091552734375% chance that the player will encounter a diamond. However, this is unlikely, as most mining is not directly aligned to the borders of a chunk and some people prefer to mine in branch patterns or through spelunking.

So, assuming that the player is mining a 2x2 tunnel through a chunk with no deviations, the player breaks 64 blocks per chunk, but comes into contact with 192 blocks due to the walls of the tunnel. The probability of encountering a diamond(s) is exponentially lower.

However, there are many other factors:

  • the actual location of the diamond(s) within the chunk
  • the method the player is using to mine
  • what height the player is mining at
  • the amount of stone in the chunk that the player is mining in
  • the amount of blocks other than stone and diamond that are in the chunk that the player is mining in
  • if the player is mining with other people
  • if there are any diamonds in the chunk at all (average of 3.097 diamonds per chunk)
  • luck
  • Enchantments (as mentioned by Zoredache)
  • much more not named

tl;dr - there is no reliable ratio.


I worked some mysql-fu and figured out my first subselect query that returns a table that's nicely organized with the player name, their diamond count, stone count and ratio of diamond to stone. It still doesn't answer my question of what an appropriate ratio is, but I figure it will be useful to other people.

Note this is stored in a database named "minecraft", hence the schemas. This should work for you if you're using hawkeye with mysql.

SELECT diamond.player, diamond.count as dcount, stone.count as scount, (diamond.count / stone.count) as ratio
FROM
(
SELECT minecraft.hawk_players.player as player, count(minecraft.hawkeye.action) as count
    FROM minecraft.hawkeye, minecraft.hawk_players
    WHERE minecraft.hawkeye.player_id = minecraft.hawk_players.player_id 
        and minecraft.hawkeye.data = '16'
        and minecraft.hawkeye.action = '0'
        and minecraft.hawkeye.y < 16
        and minecraft.hawkeye.date > '2012-05-01 00:00:00'
        and minecraft.hawkeye.date < '2012-06-01 00:00:00'
    GROUP BY player
) 
AS diamond, 
( 
SELECT minecraft.hawk_players.player as player, count(minecraft.hawkeye.action) as count
    FROM minecraft.hawkeye, minecraft.hawk_players
    WHERE minecraft.hawkeye.player_id = minecraft.hawk_players.player_id 
        and minecraft.hawkeye.data = '1'
        and minecraft.hawkeye.action = '0'
        and minecraft.hawkeye.y < 16
        and minecraft.hawkeye.date > '2012-05-01 00:00:00'
        and minecraft.hawkeye.date < '2012-06-01 00:00:00'
    GROUP BY player
) 
AS stone
WHERE diamond.player = stone.player
ORDER BY ratio DESC
;