public void build() {
        if (built) {
            return;
        }
        built = true;
        FileRef basedir = fileHandle(getClass().getSimpleName().toLowerCase());
        Field[] fields = this.getClass().getFields();

        for (Field field : fields) {
            if (Modifier.isPublic(field.getModifiers()) && this.type.isAssignableFrom(field.getType())) {
                try {
                    T resource = load(basedir, field);
                    field.set(this, resource);
                    this.resources.add(resource);
                } catch (IllegalAccessException e) {
                    throw new RuntimeException("Unable to access a resource field!", e);
                }
            }
        }
    }