diff --git a/chunk.py b/chunk.py index b3e702c..13a387b 100644 --- a/chunk.py +++ b/chunk.py @@ -211,6 +211,8 @@ class ChunkRenderer(object): if self.world.useBiomeData: + # make sure we've at least *tried* to load the color arrays in this process... + textures.prepareBiomeData(self.world.worlddir) if not textures.grasscolor or not textures.foliagecolor: raise Exception("Can't find grasscolor.png or foliagecolor.png") @@ -905,18 +907,18 @@ class ChunkRenderer(object): for entity in tileEntities: if entity['id'] == 'Sign': - - # convert the blockID coordinates from local chunk - # coordinates to global world coordinates - newPOI = dict(type="sign", - x= entity['x'], - y= entity['y'], - z= entity['z'], - msg="%s \n%s \n%s \n%s" % - (entity['Text1'], entity['Text2'], entity['Text3'], entity['Text4']), - chunk= (self.chunkX, self.chunkY), - ) - self.queue.put(["newpoi", newPOI]) + msg=' \n'.join([entity['Text1'], entity['Text2'], entity['Text3'], entity['Text4']]) + if msg.strip(): + # convert the blockID coordinates from local chunk + # coordinates to global world coordinates + newPOI = dict(type="sign", + x= entity['x'], + y= entity['y'], + z= entity['z'], + msg=msg, + chunk= (self.chunkX, self.chunkY), + ) + self.queue.put(["newpoi", newPOI]) # check to see if there are any signs in the persistentData list that are from this chunk. diff --git a/composite.py b/composite.py index 45719a9..abe5562 100644 --- a/composite.py +++ b/composite.py @@ -28,7 +28,7 @@ try: from _composite import alpha_over as _extension_alpha_over extension_alpha_over = _extension_alpha_over except ImportError: - logging.warning("alpha_over extension not found; using default PIL paste()") + pass def alpha_over(dest, src, pos_or_rect=(0, 0), mask=None): """Composite src over dest, using mask as the alpha channel (if diff --git a/contrib/findSigns.py b/contrib/findSigns.py index 104cb42..a5bfa5d 100644 --- a/contrib/findSigns.py +++ b/contrib/findSigns.py @@ -45,16 +45,18 @@ for dirpath, dirnames, filenames in os.walk(worlddir): data = nbt.load(full)[1]['Level']['TileEntities'] for entity in data: if entity['id'] == 'Sign': - newPOI = dict(type="sign", - x= entity['x'], - y= entity['y'], - z= entity['z'], - msg="%s \n%s \n%s \n%s" % - (entity['Text1'], entity['Text2'], entity['Text3'], entity['Text4']), - 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']) + 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/gmap.py b/gmap.py index 728ef77..5ab81d4 100755 --- a/gmap.py +++ b/gmap.py @@ -28,6 +28,7 @@ import multiprocessing import time import logging import optimizeimages +import composite logging.basicConfig(level=logging.INFO,format="%(asctime)s [%(levelname)s] %(message)s") @@ -123,6 +124,8 @@ def main(): logging.info("Welcome to Minecraft Overviewer!") logging.debug("Current log level: {0}".format(logging.getLogger().level)) + if not composite.extension_alpha_over: + logging.info("Notice: alpha_over extension not found; using default PIL paste()") useBiomeData = os.path.exists(os.path.join(worlddir, 'EXTRACTEDBIOMES')) if not useBiomeData: diff --git a/textures.py b/textures.py index 499ce6f..4c93b98 100644 --- a/textures.py +++ b/textures.py @@ -749,42 +749,50 @@ def prepareLeafTexture(color): currentBiomeFile = None currentBiomeData = None +grasscolor = None +foliagecolor = None def prepareBiomeData(worlddir): + global grasscolor, foliagecolor + + # skip if the color files are already loaded + if grasscolor and foliagecolor: + return + biomeDir = os.path.join(worlddir, "EXTRACTEDBIOMES") if not os.path.exists(biomeDir): raise Exception("EXTRACTEDBIOMES not found") - t = sys.modules[__name__] - # try to find the biome color images. If _find_file can't locate them # then try looking in the EXTRACTEDBIOMES folder try: - t.grasscolor = list(Image.open(_find_file("grasscolor.png")).getdata()) - t.foliagecolor = list(Image.open(_find_file("foliagecolor.png")).getdata()) + grasscolor = list(Image.open(_find_file("grasscolor.png")).getdata()) + foliagecolor = list(Image.open(_find_file("foliagecolor.png")).getdata()) except IOError: try: - t.grasscolor = list(Image.open(os.path.join(biomeDir,"grasscolor.png")).getdata()) - t.foliagecolor = list(Image.open(os.path.join(biomeDir,"foliagecolor.png")).getdata()) + grasscolor = list(Image.open(os.path.join(biomeDir,"grasscolor.png")).getdata()) + foliagecolor = list(Image.open(os.path.join(biomeDir,"foliagecolor.png")).getdata()) except: - t.grasscolor = None - t.foliagecolor = None + # clear anything that managed to get set + grasscolor = None + foliagecolor = None def getBiomeData(worlddir, chunkX, chunkY): '''Opens the worlddir and reads in the biome color information from the .biome files. See also: http://www.minecraftforum.net/viewtopic.php?f=25&t=80902 ''' - t = sys.modules[__name__] + + global currentBiomeFile, currentBiomeData biomeFile = "%d.%d.biome" % ( int(math.floor(chunkX/8)*8), int(math.floor(chunkY/8)*8) ) - if biomeFile == t.currentBiomeFile: + if biomeFile == currentBiomeFile: return currentBiomeData - t.currentBiomeFile = biomeFile + currentBiomeFile = biomeFile f = open(os.path.join(worlddir, "EXTRACTEDBIOMES", biomeFile), "rb") rawdata = f.read() @@ -792,7 +800,7 @@ def getBiomeData(worlddir, chunkX, chunkY): data = numpy.frombuffer(rawdata, dtype=numpy.dtype(">u2")) - t.currentBiomeData = data + currentBiomeData = data return data # This set holds block ids that require special pre-computing. These are typically diff --git a/world.py b/world.py index ed4d1a3..e655273 100644 --- a/world.py +++ b/world.py @@ -222,7 +222,8 @@ class WorldRenderer(object): ## find the first air block while (blockArray[inChunkX, inChunkZ, spawnY] != 0): spawnY += 1 - + if spawnY == 128: + break self.POI.append( dict(x=spawnX, y=spawnY, z=spawnZ, msg="Spawn", type="spawn", chunk=(inChunkX,inChunkZ)))