@Override
    public Location read(Object value) {
        ConfigurationNode node = new ConfigurationNode(value);
        Double x = node.getDouble("x");
        Double y = node.getDouble("y");
        Double z = node.getDouble("z");

        if (x == null || y == null || z == null) {
            return null;
        }

        World world = null;

        if (defaultWorld != null) {
            world = defaultWorld;
        } else {
            String worldName = node.getString("world");
            Long leastSigBits = node.getLong("world-uuid-least");
            Long mostSigBits = node.getLong("world-uuid-most");

            if (leastSigBits != null && mostSigBits != null) {
                world = server.getWorld(new UUID(mostSigBits, leastSigBits));
            } else {
                world = server.getWorld(worldName);
            }
        }

        if (world == null) {
            return null;
        }

        return new Location(world, x, y, z);
    }