FolderRepositorySource.java
net.minecraft.server.packs.repository.FolderRepositorySource
信息
- 全限定名:net.minecraft.server.packs.repository.FolderRepositorySource
- 类型:public class
- 包:net.minecraft.server.packs.repository
- 源码路径:src/main/java/net/minecraft/server/packs/repository/FolderRepositorySource.java
- 起始行号:L29
- 实现:RepositorySource
- 职责:
TODO
字段/常量
-
LOGGER- 类型:
Logger - 修饰符:
private static final - 源码定位:
L30 - 说明:
TODO
- 类型:
-
DISCOVERED_PACK_SELECTION_CONFIG- 类型:
PackSelectionConfig - 修饰符:
private static final - 源码定位:
L31 - 说明:
TODO
- 类型:
-
folder- 类型:
Path - 修饰符:
private final - 源码定位:
L32 - 说明:
TODO
- 类型:
-
packType- 类型:
PackType - 修饰符:
private final - 源码定位:
L33 - 说明:
TODO
- 类型:
-
packSource- 类型:
PackSource - 修饰符:
private final - 源码定位:
L34 - 说明:
TODO
- 类型:
-
validator- 类型:
DirectoryValidator - 修饰符:
private final - 源码定位:
L35 - 说明:
TODO
- 类型:
内部类/嵌套类型
net.minecraft.server.packs.repository.FolderRepositorySource.FolderPackDetector- 类型:
class - 修饰符:
private static - 源码定位:
L91 - 说明:
TODO
- 类型:
构造器
public FolderRepositorySource(Path folder, PackType packType, PackSource packSource, DirectoryValidator validator) @ L37
- 构造器名:FolderRepositorySource
- 源码定位:L37
- 修饰符:public
参数:
- folder: Path
- packType: PackType
- packSource: PackSource
- validator: DirectoryValidator
说明:
TODO
方法
下面的方法块按源码顺序生成。
private static String nameFromPath(Path content) @ L44
- 方法名:nameFromPath
- 源码定位:L44
- 返回类型:String
- 修饰符:private static
参数:
- content: Path
说明:
TODO
public void loadPacks(Consumer<Pack> result) @ L48
- 方法名:loadPacks
- 源码定位:L48
- 返回类型:void
- 修饰符:public
参数:
- result: Consumer
说明:
TODO
private PackLocationInfo createDiscoveredFilePackInfo(Path content) @ L64
- 方法名:createDiscoveredFilePackInfo
- 源码定位:L64
- 返回类型:PackLocationInfo
- 修饰符:private
参数:
- content: Path
说明:
TODO
public static void discoverPacks(Path folder, DirectoryValidator validator, BiConsumer<Path,Pack.ResourcesSupplier> result) @ L69
- 方法名:discoverPacks
- 源码定位:L69
- 返回类型:void
- 修饰符:public static
参数:
- folder: Path
- validator: DirectoryValidator
- result: BiConsumer<Path,Pack.ResourcesSupplier>
说明:
TODO
代码
public class FolderRepositorySource implements RepositorySource {
private static final Logger LOGGER = LogUtils.getLogger();
private static final PackSelectionConfig DISCOVERED_PACK_SELECTION_CONFIG = new PackSelectionConfig(false, Pack.Position.TOP, false);
private final Path folder;
private final PackType packType;
private final PackSource packSource;
private final DirectoryValidator validator;
public FolderRepositorySource(Path folder, PackType packType, PackSource packSource, DirectoryValidator validator) {
this.folder = folder;
this.packType = packType;
this.packSource = packSource;
this.validator = validator;
}
private static String nameFromPath(Path content) {
return content.getFileName().toString();
}
@Override
public void loadPacks(Consumer<Pack> result) {
try {
FileUtil.createDirectoriesSafe(this.folder);
discoverPacks(this.folder, this.validator, (content, resources) -> {
PackLocationInfo locationInfo = this.createDiscoveredFilePackInfo(content);
Pack pack = Pack.readMetaAndCreate(locationInfo, resources, this.packType, DISCOVERED_PACK_SELECTION_CONFIG);
if (pack != null) {
result.accept(pack);
}
});
} catch (IOException var3) {
LOGGER.warn("Failed to list packs in {}", this.folder, var3);
}
}
private PackLocationInfo createDiscoveredFilePackInfo(Path content) {
String name = nameFromPath(content);
return new PackLocationInfo("file/" + name, Component.literal(name), this.packSource, Optional.empty());
}
public static void discoverPacks(Path folder, DirectoryValidator validator, BiConsumer<Path, Pack.ResourcesSupplier> result) throws IOException {
FolderRepositorySource.FolderPackDetector detector = new FolderRepositorySource.FolderPackDetector(validator);
try (DirectoryStream<Path> contents = Files.newDirectoryStream(folder)) {
for (Path content : contents) {
try {
List<ForbiddenSymlinkInfo> validationIssues = new ArrayList<>();
Pack.ResourcesSupplier resources = detector.detectPackResources(content, validationIssues);
if (!validationIssues.isEmpty()) {
LOGGER.warn("Ignoring potential pack entry: {}", ContentValidationException.getMessage(content, validationIssues));
} else if (resources != null) {
result.accept(content, resources);
} else {
LOGGER.info("Found non-pack entry '{}', ignoring", content);
}
} catch (IOException var10) {
LOGGER.warn("Failed to read properties of '{}', ignoring", content, var10);
}
}
}
}
private static class FolderPackDetector extends PackDetector<Pack.ResourcesSupplier> {
protected FolderPackDetector(DirectoryValidator validator) {
super(validator);
}
protected Pack.@Nullable ResourcesSupplier createZipPack(Path content) {
FileSystem fileSystem = content.getFileSystem();
if (fileSystem != FileSystems.getDefault() && !(fileSystem instanceof LinkFileSystem)) {
FolderRepositorySource.LOGGER.info("Can't open pack archive at {}", content);
return null;
} else {
return new FilePackResources.FileResourcesSupplier(content);
}
}
protected Pack.ResourcesSupplier createDirectoryPack(Path content) {
return new PathPackResources.PathResourcesSupplier(content);
}
}
}引用的其他类
-
- 引用位置:
方法调用 - 关联成员:
Component.literal()
- 引用位置:
-
- 引用位置:
方法调用/构造调用 - 关联成员:
FilePackResources.FileResourcesSupplier(), FileResourcesSupplier()
- 引用位置:
-
- 引用位置:
构造调用/返回值 - 关联成员:
PackLocationInfo()
- 引用位置:
-
- 引用位置:
字段/构造调用 - 关联成员:
PackSelectionConfig()
- 引用位置:
-
- 引用位置:
参数/字段
- 引用位置:
-
- 引用位置:
方法调用/构造调用 - 关联成员:
PathPackResources.PathResourcesSupplier(), PathResourcesSupplier()
- 引用位置:
-
- 引用位置:
参数/方法调用 - 关联成员:
Pack.readMetaAndCreate()
- 引用位置:
-
- 引用位置:
参数/字段
- 引用位置:
-
- 引用位置:
实现
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
FileUtil.createDirectoriesSafe()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
ContentValidationException.getMessage()
- 引用位置:
-
- 引用位置:
参数/字段
- 引用位置: