diff --git a/chunk.py b/chunk.py index 63de064..b9bc817 100644 --- a/chunk.py +++ b/chunk.py @@ -73,10 +73,10 @@ def get_blockarray(level): Block array, which just contains all the block ids""" return numpy.frombuffer(level['Blocks'], dtype=numpy.uint8).reshape((16,16,128)) -def get_blockarray_fromfile(world,filename): - """Same as get_blockarray except takes a filename and uses get_lvldata to - open it. This is a shortcut""" - level = get_lvldata(world,filename) +def get_blockarray_fromfile(filename): + """Same as get_blockarray except takes a filename. This is a shortcut""" + d = nbt.load_from_region(filename, x, y) + level = return d[1]['Level'] return get_blockarray(level) def get_skylight_array(level): diff --git a/contrib/findSigns.py b/contrib/findSigns.py index c390654..9e3b621 100644 --- a/contrib/findSigns.py +++ b/contrib/findSigns.py @@ -33,30 +33,34 @@ if os.path.exists(worlddir): else: sys.exit("Bad WorldDir") -matcher = re.compile(r"^c\..*\.dat$") +matcher = re.compile(r"^r\..*\.mcr$") POI = [] for dirpath, dirnames, filenames in os.walk(worlddir): for f in filenames: if matcher.match(f): + print f full = os.path.join(dirpath, f) - #print "inspecting %s" % full - data = nbt.load(full)[1]['Level']['TileEntities'] - for entity in data: - if entity['id'] == 'Sign': - msg=' \n'.join([entity['Text1'], entity['Text2'], entity['Text3'], entity['Text4']]) - #print "checking -->%s<--" % msg.strip() - if msg.strip(): - newPOI = dict(type="sign", - x= entity['x'], - y= entity['y'], - z= entity['z'], - msg=msg, - chunk= (entity['x']/16, entity['z']/16), - ) - POI.append(newPOI) - print "Found sign at (%d, %d, %d): %r" % (newPOI['x'], newPOI['y'], newPOI['z'], newPOI['msg']) + r = nbt.load_region(full) + chunks = r.get_chunks() + for x,y in chunks: + chunk = r.load_chunk(x,y).read_all() + data = chunk[1]['Level']['TileEntities'] + for entity in data: + if entity['id'] == 'Sign': + msg=' \n'.join([entity['Text1'], entity['Text2'], entity['Text3'], entity['Text4']]) + #print "checking -->%s<--" % msg.strip() + if msg.strip(): + newPOI = dict(type="sign", + x= entity['x'], + y= entity['y'], + z= entity['z'], + msg=msg, + chunk= (entity['x']/16, entity['z']/16), + ) + POI.append(newPOI) + print "Found sign at (%d, %d, %d): %r" % (newPOI['x'], newPOI['y'], newPOI['z'], newPOI['msg']) diff --git a/contrib/rerenderBlocks.py b/contrib/rerenderBlocks.py index 51940df..d0fa0df 100644 --- a/contrib/rerenderBlocks.py +++ b/contrib/rerenderBlocks.py @@ -7,8 +7,8 @@ blockID. The output is a chunklist file that is suitable to use with the Example: -python contrib/rerenderBlocks.py --ids=46,79,91 --world=world/> chunklist.txt - python overviewer.py --chunklist=chunklist.txt world/ output_dir/ +python contrib/rerenderBlocks.py --ids=46,79,91 --world=world/> regionlist.txt + python overviewer.py --regionlist=regionlist.txt world/ output_dir/ This will rerender any chunks that contain either TNT (46), Ice (79), or a Jack-O-Lantern (91) @@ -42,15 +42,20 @@ ids = map(lambda x: int(x),options.ids.split(",")) sys.stderr.write("Searching for these blocks: %r...\n" % ids) -matcher = re.compile(r"^c\..*\.dat$") +matcher = re.compile(r"^r\..*\.mcr$") for dirpath, dirnames, filenames in os.walk(options.world): for f in filenames: if matcher.match(f): full = os.path.join(dirpath, f) - blocks = get_blockarray_fromfile(full) - for i in ids: - if i in blocks: - print full - break + r = nbt.load_region(full) + chunks = r.get_chunks() + for x,y in chunks: + chunk = r.load_chunk(x,y).read_all() + blocks = get_blockarray(chunk[1]['Level']) + for i in ids: + if i in blocks: + print full + break +