def load(self):
        """
        Loads from the usercache.json file if it exists, if not an empty one will be generated
        """
        self._cache = {"Version": 2, "Connection Timeout": 10, "Cache": {}}
        if not os.path.exists(self._PATH):
            fp = open(self._PATH, 'w')
            json.dump(self._cache, fp)
            fp.close()
        fp = open(self._PATH, 'r')
        try:
            json_in = json.load(fp)
            if "Version" not in json_in or json_in.get("Version", 0) != 2:
                self.__convert(json_in)
            else:
                self._cache = json_in
        except:
            log.warning("Usercache.json may be corrupted")
        finally:
            fp.close()
        self.temp_skin_cache = {}
        self.TIMEOUT = self._cache.get("Connection Timeout", 2.5)
        self.cache_lock = threading.RLock()
        self.player_refeshing = threading.Thread(target=self._batchRefreshPlayers)
        #self.player_refeshing.daemon(True) # No idea whether to use the property setter function or the attribute, so I'll use both
        self.player_refeshing.daemon = True
        self.player_refeshing.start()

        Loads from the usercache.json file if it exists, if not an empty one will be generated
        
player_cache.py