From 420188994185e5625eef861df6b28ab7a199a741 Mon Sep 17 00:00:00 2001 From: Andrew Brown Date: Thu, 2 Sep 2010 23:21:09 -0400 Subject: [PATCH] added a block totaling function --- blockcounter.py | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 blockcounter.py diff --git a/blockcounter.py b/blockcounter.py new file mode 100644 index 0000000..b3603d3 --- /dev/null +++ b/blockcounter.py @@ -0,0 +1,43 @@ +import world, chunk + +import sys +from numpy import * + +def block_breakdown(worlddir): + """Analyzes the given world dir and tallys up total block counts for each + type. Returns two arrays. + The first is a mapping from (blocktype, z-height) to count + The second is a mapping from blocktype to total count + """ + # Maps (blocktype, z-height) to count + heights = zeros((256,128), dtype=int) + + # Maps (blocktype) to total + totals = zeros((256,), dtype=int) + + all_chunks = world.find_chunkfiles(worlddir) + for i, (chunkx, chunky, chunkfile) in enumerate(all_chunks): + print "{0} / {1}".format(i, len(all_chunks)) + sys.stdout.flush() + blockarr = chunk.get_blockarray_fromfile(chunkfile) + + for coord, blocktype in ndenumerate(blockarr): + totals[blocktype] += 1 + heights[blocktype, coord[2]] += 1 + + return heights, totals + +# Some data from my world on iron +iron = array([ 0, 329, 1978, 4454, 6068, 7057, 7116, 7070, 7232, 7441, 7198, + 7206, 7163, 6846, 6965, 7145, 7251, 7136, 6878, 7142, 7421, 7206, + 7163, 7264, 7311, 7355, 7145, 7117, 7181, 7424, 7304, 7560, 7591, + 7321, 7528, 7487, 7355, 7198, 7334, 7566, 7518, 7146, 7510, 7577, + 7532, 7681, 7612, 7376, 7319, 7216, 7195, 6863, 6399, 6198, 5983, + 5599, 5320, 4861, 4604, 4250, 3531, 3129, 3045, 2782, 2433, 1966, + 891, 117, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0]) +totaliron = 416159