Merge remote branch 'rmrector/configurable-north' into configurable-north
Conflicts: overviewer.py overviewer_core/world.py
This commit is contained in:
@@ -69,10 +69,11 @@ class World(object):
|
||||
|
||||
mincol = maxcol = minrow = maxrow = 0
|
||||
|
||||
def __init__(self, worlddir, outputdir, useBiomeData=False,regionlist=None):
|
||||
def __init__(self, worlddir, outputdir, useBiomeData=False, regionlist=None, north_direction="lower-left"):
|
||||
self.worlddir = worlddir
|
||||
self.outputdir = outputdir
|
||||
self.useBiomeData = useBiomeData
|
||||
self.north_direction = north_direction
|
||||
|
||||
#find region files, or load the region list
|
||||
#this also caches all the region file header info
|
||||
@@ -169,6 +170,18 @@ class World(object):
|
||||
data = nbt.read_all()
|
||||
level = data[1]['Level']
|
||||
chunk_data = level
|
||||
chunk_data['Blocks'] = numpy.array(numpy.rot90(numpy.frombuffer(
|
||||
level['Blocks'], dtype=numpy.uint8).reshape((16,16,128)),
|
||||
self._get_north_rotations()))
|
||||
chunk_data['Data'] = numpy.array(numpy.rot90(numpy.frombuffer(
|
||||
level['Data'], dtype=numpy.uint8).reshape((16,16,64)),
|
||||
self._get_north_rotations()))
|
||||
chunk_data['SkyLight'] = numpy.array(numpy.rot90(numpy.frombuffer(
|
||||
level['SkyLight'], dtype=numpy.uint8).reshape((16,16,64)),
|
||||
self._get_north_rotations()))
|
||||
chunk_data['BlockLight'] = numpy.array(numpy.rot90(numpy.frombuffer(
|
||||
level['BlockLight'], dtype=numpy.uint8).reshape((16,16,64)),
|
||||
self._get_north_rotations()))
|
||||
#chunk_data = {}
|
||||
#chunk_data['skylight'] = chunk.get_skylight_array(level)
|
||||
#chunk_data['blocklight'] = chunk.get_blocklight_array(level)
|
||||
@@ -185,7 +198,7 @@ class World(object):
|
||||
if self.regions.get(filename) is not None:
|
||||
self.regions[filename][0].closefile()
|
||||
chunkcache = {}
|
||||
mcr = nbt.MCRFileReader(filename)
|
||||
mcr = nbt.MCRFileReader(filename, self.north_direction)
|
||||
self.regions[filename] = (mcr,os.path.getmtime(filename),chunkcache)
|
||||
return mcr
|
||||
|
||||
@@ -201,7 +214,7 @@ class World(object):
|
||||
in the image each one should be. Returns (col, row)."""
|
||||
|
||||
# columns are determined by the sum of the chunk coords, rows are the
|
||||
# difference (TODO: be able to change direction of north)
|
||||
# difference
|
||||
# change this function, and you MUST change unconvert_coords
|
||||
return (chunkx + chunky, chunky - chunkx)
|
||||
|
||||
@@ -219,9 +232,20 @@ class World(object):
|
||||
|
||||
## read spawn info from level.dat
|
||||
data = nbt.load(os.path.join(self.worlddir, "level.dat"))[1]
|
||||
spawnX = data['Data']['SpawnX']
|
||||
disp_spawnX = spawnX = data['Data']['SpawnX']
|
||||
spawnY = data['Data']['SpawnY']
|
||||
spawnZ = data['Data']['SpawnZ']
|
||||
disp_spawnZ = spawnZ = data['Data']['SpawnZ']
|
||||
if self.north_direction == 'upper-left':
|
||||
temp = spawnX
|
||||
spawnX = -spawnZ
|
||||
spawnZ = temp
|
||||
elif self.north_direction == 'upper-right':
|
||||
spawnX = -spawnX
|
||||
spawnZ = -spawnZ
|
||||
elif self.north_direction == 'lower-right':
|
||||
temp = spawnX
|
||||
spawnX = spawnZ
|
||||
spawnZ = -temp
|
||||
|
||||
## The chunk that holds the spawn location
|
||||
chunkX = spawnX/16
|
||||
@@ -231,7 +255,7 @@ class World(object):
|
||||
## The filename of this chunk
|
||||
chunkFile = self.get_region_path(chunkX, chunkY)
|
||||
if chunkFile is not None:
|
||||
data = nbt.load_from_region(chunkFile, chunkX, chunkY)[1]
|
||||
data = nbt.load_from_region(chunkFile, chunkX, chunkY, self.north_direction)[1]
|
||||
if data is not None:
|
||||
level = data['Level']
|
||||
blockArray = numpy.frombuffer(level['Blocks'], dtype=numpy.uint8).reshape((16,16,128))
|
||||
@@ -248,9 +272,9 @@ class World(object):
|
||||
except ChunkCorrupt:
|
||||
#ignore corrupt spawn, and continue
|
||||
pass
|
||||
self.POI.append( dict(x=spawnX, y=spawnY, z=spawnZ,
|
||||
self.POI.append( dict(x=disp_spawnX, y=spawnY, z=disp_spawnZ,
|
||||
msg="Spawn", type="spawn", chunk=(chunkX, chunkY)))
|
||||
self.spawn = (spawnX, spawnY, spawnZ)
|
||||
self.spawn = (disp_spawnX, spawnY, disp_spawnZ)
|
||||
|
||||
def go(self, procs):
|
||||
"""Scan the world directory, to fill in
|
||||
@@ -296,6 +320,16 @@ class World(object):
|
||||
|
||||
self.findTrueSpawn()
|
||||
|
||||
def _get_north_rotations(self):
|
||||
if self.north_direction == 'upper-left':
|
||||
return 1
|
||||
elif self.north_direction == 'upper-right':
|
||||
return 2
|
||||
elif self.north_direction == 'lower-right':
|
||||
return 3
|
||||
elif self.north_direction == 'lower-left':
|
||||
return 0
|
||||
|
||||
def _iterate_regionfiles(self,regionlist=None):
|
||||
"""Returns an iterator of all of the region files, along with their
|
||||
coordinates
|
||||
@@ -312,7 +346,20 @@ class World(object):
|
||||
if f.startswith("r.") and f.endswith(".mcr"):
|
||||
p = f.split(".")
|
||||
logging.debug("Using path %s from regionlist", f)
|
||||
yield (int(p[1]), int(p[2]), join(self.worlddir, 'region', f))
|
||||
x = int(p[1])
|
||||
y = int(p[2])
|
||||
if self.north_direction == 'upper-left':
|
||||
temp = x
|
||||
x = -y-1
|
||||
y = temp
|
||||
elif self.north_direction == 'upper-right':
|
||||
x = -x-1
|
||||
y = -y-1
|
||||
elif self.north_direction == 'lower-right':
|
||||
temp = x
|
||||
x = y
|
||||
y = -temp-1
|
||||
yield (x, y, join(self.worlddir, 'region', f))
|
||||
else:
|
||||
logging.warning("Ignore path '%s' in regionlist", f)
|
||||
|
||||
@@ -320,7 +367,20 @@ class World(object):
|
||||
for path in glob(os.path.join(self.worlddir, 'region') + "/r.*.*.mcr"):
|
||||
dirpath, f = os.path.split(path)
|
||||
p = f.split(".")
|
||||
yield (int(p[1]), int(p[2]), join(dirpath, f))
|
||||
x = int(p[1])
|
||||
y = int(p[2])
|
||||
if self.north_direction == 'upper-left':
|
||||
temp = x
|
||||
x = -y-1
|
||||
y = temp
|
||||
elif self.north_direction == 'upper-right':
|
||||
x = -x-1
|
||||
y = -y-1
|
||||
elif self.north_direction == 'lower-right':
|
||||
temp = x
|
||||
x = y
|
||||
y = -temp-1
|
||||
yield (x, y, join(dirpath, f))
|
||||
|
||||
def get_save_dir():
|
||||
"""Returns the path to the local saves directory
|
||||
|
||||
Reference in New Issue
Block a user