83 lines
2.1 KiB
Python
83 lines
2.1 KiB
Python
'''
|
|
Created on Jul 22, 2011
|
|
|
|
@author: Rio
|
|
'''
|
|
|
|
from contextlib import contextmanager
|
|
from logging import getLogger
|
|
import sys
|
|
import os
|
|
|
|
log = getLogger(__name__)
|
|
|
|
@contextmanager
|
|
def notclosing(f):
|
|
yield f
|
|
|
|
|
|
class PlayerNotFound(Exception):
|
|
pass
|
|
|
|
|
|
class ChunkNotPresent(Exception):
|
|
pass
|
|
|
|
|
|
class RegionMalformed(Exception):
|
|
pass
|
|
|
|
|
|
class ChunkMalformed(ChunkNotPresent):
|
|
pass
|
|
|
|
|
|
def exhaust(_iter):
|
|
"""Functions named ending in "Iter" return an iterable object that does
|
|
long-running work and yields progress information on each call. exhaust()
|
|
is used to implement the non-Iter equivalents"""
|
|
i = None
|
|
for i in _iter:
|
|
pass
|
|
return i
|
|
|
|
|
|
|
|
def win32_appdata():
|
|
# try to use win32 api to get the AppData folder since python doesn't populate os.environ with unicode strings.
|
|
|
|
try:
|
|
import win32com.client
|
|
objShell = win32com.client.Dispatch("WScript.Shell")
|
|
return objShell.SpecialFolders("AppData")
|
|
except Exception, e:
|
|
print "Error while getting AppData folder using WScript.Shell.SpecialFolders: {0!r}".format(e)
|
|
try:
|
|
from win32com.shell import shell, shellcon
|
|
return shell.SHGetPathFromIDListEx(
|
|
shell.SHGetSpecialFolderLocation(0, shellcon.CSIDL_APPDATA)
|
|
)
|
|
except Exception, e:
|
|
print "Error while getting AppData folder using SHGetSpecialFolderLocation: {0!r}".format(e)
|
|
|
|
return os.environ['APPDATA'].decode(sys.getfilesystemencoding())
|
|
|
|
if sys.platform == "win32":
|
|
appDataDir = win32_appdata()
|
|
minecraftDir = os.path.join(appDataDir, u".minecraft")
|
|
appSupportDir = os.path.join(appDataDir, u"pymclevel")
|
|
|
|
elif sys.platform == "darwin":
|
|
appDataDir = os.path.expanduser(u"~/Library/Application Support")
|
|
minecraftDir = os.path.join(appDataDir, u"minecraft")
|
|
appSupportDir = os.path.expanduser(u"~/Library/Application Support/pymclevel/")
|
|
|
|
else:
|
|
appDataDir = os.path.expanduser(u"~")
|
|
minecraftDir = os.path.expanduser(u"~/.minecraft")
|
|
appSupportDir = os.path.expanduser(u"~/.pymclevel")
|
|
|
|
saveFileDir = os.path.join(minecraftDir, u"saves")
|
|
|
|
|