FileRelation.java

net.minecraft.util.filefix.access.FileRelation

信息

  • 全限定名:net.minecraft.util.filefix.access.FileRelation
  • 类型:public interface
  • 包:net.minecraft.util.filefix.access
  • 源码路径:src/main/java/net/minecraft/util/filefix/access/FileRelation.java
  • 起始行号:L14
  • 职责:

    TODO

字段/常量

  • LOGGER

    • 类型: Logger
    • 修饰符: package-private
    • 源码定位: L15
    • 说明:

      TODO

  • ORIGIN

    • 类型: FileRelation
    • 修饰符: package-private
    • 源码定位: L16
    • 说明:

      TODO

  • REGION

    • 类型: FileRelation
    • 修饰符: package-private
    • 源码定位: L17
    • 说明:

      TODO

  • DATA

    • 类型: FileRelation
    • 修饰符: package-private
    • 源码定位: L18
    • 说明:

      TODO

  • PLAYER_DATA

    • 类型: FileRelation
    • 修饰符: package-private
    • 源码定位: L19
    • 说明:

      TODO

  • DIMENSIONS

    • 类型: FileRelation
    • 修饰符: package-private
    • 源码定位: L20
    • 说明:

      TODO

  • DIMENSIONS_DATA

    • 类型: FileRelation
    • 修饰符: package-private
    • 源码定位: L21
    • 说明:

      TODO

  • GENERATED_NAMESPACES

    • 类型: FileRelation
    • 修饰符: package-private
    • 源码定位: L22
    • 说明:

      TODO

  • OLD_OVERWORLD

    • 类型: FileRelation
    • 修饰符: package-private
    • 源码定位: L23
    • 说明:

      TODO

  • OLD_NETHER

    • 类型: FileRelation
    • 修饰符: package-private
    • 源码定位: L24
    • 说明:

      TODO

  • OLD_END

    • 类型: FileRelation
    • 修饰符: package-private
    • 源码定位: L25
    • 说明:

      TODO

内部类/嵌套类型

构造器

方法

下面的方法块按源码顺序生成。

List<Path> getPaths(Path basePath) @ L27

  • 方法名:getPaths
  • 源码定位:L27
  • 返回类型:List
  • 修饰符:package-private

参数:

  • basePath: Path

说明:

TODO

static FileRelation forDataFileInDimension(String dimension, String fileName) @ L29

  • 方法名:forDataFileInDimension
  • 源码定位:L29
  • 返回类型:FileRelation
  • 修饰符:static

参数:

  • dimension: String
  • fileName: String

说明:

TODO

default FileRelation forFile(String fileName) @ L33

  • 方法名:forFile
  • 源码定位:L33
  • 返回类型:FileRelation
  • 修饰符:default

参数:

  • fileName: String

说明:

TODO

default FileRelation resolve(FileRelation other) @ L37

  • 方法名:resolve
  • 源码定位:L37
  • 返回类型:FileRelation
  • 修饰符:default

参数:

  • other: FileRelation

说明:

TODO

default FileRelation join(FileRelation... relations) @ L41

  • 方法名:join
  • 源码定位:L41
  • 返回类型:FileRelation
  • 修饰符:default

参数:

  • relations: FileRelation…

说明:

TODO

private static List<Path> discoverDimensions(Path basePath) @ L53

  • 方法名:discoverDimensions
  • 源码定位:L53
  • 返回类型:List
  • 修饰符:private static

参数:

  • basePath: Path

说明:

TODO

static List<Path> directoriesInPath(Path path) @ L75

  • 方法名:directoriesInPath
  • 源码定位:L75
  • 返回类型:List
  • 修饰符:static

参数:

  • path: Path

说明:

TODO

private static List<Path> getDefaultDimensions(Path basePath) @ L88

  • 方法名:getDefaultDimensions
  • 源码定位:L88
  • 返回类型:List
  • 修饰符:private static

参数:

  • basePath: Path

说明:

TODO

代码

@FunctionalInterface
public interface FileRelation {
    Logger LOGGER = LogUtils.getLogger();
    FileRelation ORIGIN = List::of;
    FileRelation REGION = basePath -> List.of(basePath.resolve("region"));
    FileRelation DATA = basePath -> List.of(basePath.resolve("data"));
    FileRelation PLAYER_DATA = basePath -> List.of(basePath.resolve("players/data"));
    FileRelation DIMENSIONS = FileRelation::discoverDimensions;
    FileRelation DIMENSIONS_DATA = DIMENSIONS.resolve(DATA);
    FileRelation GENERATED_NAMESPACES = ORIGIN.resolve(basePath -> directoriesInPath(basePath.resolve("generated")));
    FileRelation OLD_OVERWORLD = ORIGIN;
    FileRelation OLD_NETHER = ORIGIN.resolve(basePath -> List.of(basePath.resolve("DIM-1")));
    FileRelation OLD_END = ORIGIN.resolve(basePath -> List.of(basePath.resolve("DIM1")));
 
    List<Path> getPaths(final Path basePath);
 
    static FileRelation forDataFileInDimension(String dimension, String fileName) {
        return basePath -> List.of(basePath.resolve("dimensions/minecraft/" + dimension + "/data/" + fileName));
    }
 
    default FileRelation forFile(String fileName) {
        return this.resolve(basePath -> List.of(basePath.resolve(fileName)));
    }
 
    default FileRelation resolve(FileRelation other) {
        return basePath -> this.getPaths(basePath).stream().flatMap(path -> other.getPaths(path).stream()).toList();
    }
 
    default FileRelation join(FileRelation... relations) {
        return basePath -> {
            Set<Path> paths = new HashSet<>();
 
            for (FileRelation relation : relations) {
                paths.addAll(relation.getPaths(basePath));
            }
 
            return List.copyOf(paths);
        };
    }
 
    private static List<Path> discoverDimensions(Path basePath) {
        Path dimensionsRoot = basePath.resolve("dimensions");
        if (!Files.exists(dimensionsRoot)) {
            return getDefaultDimensions(basePath);
        } else {
            try {
                List var4;
                try (Stream<Path> namespacePaths = Files.list(dimensionsRoot)) {
                    List<Path> discoveredDimensions = namespacePaths.filter(x$0 -> Files.isDirectory(x$0))
                        .flatMap(path -> directoriesInPath(path).stream())
                        .toList();
                    var4 = discoveredDimensions.isEmpty() ? getDefaultDimensions(basePath) : discoveredDimensions;
                }
 
                return var4;
            } catch (IOException var7) {
                LOGGER.warn("Failed to discover dimensions, assuming default: {}", var7.toString());
                return getDefaultDimensions(basePath);
            }
        }
    }
 
    static List<Path> directoriesInPath(Path path) {
        try {
            List var2;
            try (Stream<Path> dimensionPaths = Files.list(path)) {
                var2 = dimensionPaths.filter(x$0 -> Files.isDirectory(x$0)).toList();
            }
 
            return var2;
        } catch (IOException var6) {
            return List.of();
        }
    }
 
    private static List<Path> getDefaultDimensions(Path basePath) {
        return List.of(
            basePath.resolve("dimensions/minecraft/overworld"),
            basePath.resolve("dimensions/minecraft/the_nether"),
            basePath.resolve("dimensions/minecraft/the_end")
        );
    }
}

引用的其他类