OverlayMetadataSection.java
net.minecraft.server.packs.OverlayMetadataSection
信息
- 全限定名:net.minecraft.server.packs.OverlayMetadataSection
- 类型:public record
- 包:net.minecraft.server.packs
- 源码路径:src/main/java/net/minecraft/server/packs/OverlayMetadataSection.java
- 起始行号:L13
- 职责:
TODO
字段/常量
-
DIR_VALIDATOR- 类型:
Pattern - 修饰符:
private static final - 源码定位:
L14 - 说明:
TODO
- 类型:
-
CLIENT_TYPE- 类型:
MetadataSectionType<OverlayMetadataSection> - 修饰符:
public static final - 源码定位:
L15 - 说明:
TODO
- 类型:
-
SERVER_TYPE- 类型:
MetadataSectionType<OverlayMetadataSection> - 修饰符:
public static final - 源码定位:
L18 - 说明:
TODO
- 类型:
内部类/嵌套类型
-
net.minecraft.server.packs.OverlayMetadataSection.OverlayEntry- 类型:
record - 修饰符:
public - 源码定位:
L43 - 说明:
TODO
- 类型:
-
net.minecraft.server.packs.OverlayMetadataSection.OverlayEntry.IntermediateEntry- 类型:
record - 修饰符:
private - 源码定位:
L70 - 说明:
TODO
- 类型:
构造器
- 无
方法
下面的方法块按源码顺序生成。
private static DataResult<String> validateOverlayDir(String path) @ L20
- 方法名:validateOverlayDir
- 源码定位:L20
- 返回类型:DataResult
- 修饰符:private static
参数:
- path: String
说明:
TODO
public static Codec<OverlayMetadataSection> codecForPackType(PackType packType) @ L24
- 方法名:codecForPackType
- 源码定位:L24
- 返回类型:Codec
- 修饰符:public static
参数:
- packType: PackType
说明:
TODO
public static MetadataSectionType<OverlayMetadataSection> forPackType(PackType packType) @ L32
- 方法名:forPackType
- 源码定位:L32
- 返回类型:MetadataSectionType
- 修饰符:public static
参数:
- packType: PackType
说明:
TODO
public List<String> overlaysForVersion(PackFormat version) @ L39
- 方法名:overlaysForVersion
- 源码定位:L39
- 返回类型:List
- 修饰符:public
参数:
- version: PackFormat
说明:
TODO
代码
public record OverlayMetadataSection(List<OverlayMetadataSection.OverlayEntry> overlays) {
private static final Pattern DIR_VALIDATOR = Pattern.compile("[-_a-zA-Z0-9.]+");
public static final MetadataSectionType<OverlayMetadataSection> CLIENT_TYPE = new MetadataSectionType<>(
"overlays", codecForPackType(PackType.CLIENT_RESOURCES)
);
public static final MetadataSectionType<OverlayMetadataSection> SERVER_TYPE = new MetadataSectionType<>("overlays", codecForPackType(PackType.SERVER_DATA));
private static DataResult<String> validateOverlayDir(String path) {
return !DIR_VALIDATOR.matcher(path).matches() ? DataResult.error(() -> path + " is not accepted directory name") : DataResult.success(path);
}
@VisibleForTesting
public static Codec<OverlayMetadataSection> codecForPackType(PackType packType) {
return RecordCodecBuilder.create(
i -> i.group(OverlayMetadataSection.OverlayEntry.listCodecForPackType(packType).fieldOf("entries").forGetter(OverlayMetadataSection::overlays))
.apply(i, OverlayMetadataSection::new)
);
}
public static MetadataSectionType<OverlayMetadataSection> forPackType(PackType packType) {
return switch (packType) {
case CLIENT_RESOURCES -> CLIENT_TYPE;
case SERVER_DATA -> SERVER_TYPE;
};
}
public List<String> overlaysForVersion(PackFormat version) {
return this.overlays.stream().filter(entry -> entry.isApplicable(version)).map(OverlayMetadataSection.OverlayEntry::overlay).toList();
}
public record OverlayEntry(InclusiveRange<PackFormat> format, String overlay) {
private static Codec<List<OverlayMetadataSection.OverlayEntry>> listCodecForPackType(PackType packType) {
int lastPreMinorVersion = PackFormat.lastPreMinorVersion(packType);
return OverlayMetadataSection.OverlayEntry.IntermediateEntry.CODEC
.listOf()
.flatXmap(
list -> PackFormat.validateHolderList(
(List<OverlayMetadataSection.OverlayEntry.IntermediateEntry>)list,
lastPreMinorVersion,
(entry, formats) -> new OverlayMetadataSection.OverlayEntry(formats, entry.overlay())
),
list -> DataResult.success(
list.stream()
.map(
entry -> new OverlayMetadataSection.OverlayEntry.IntermediateEntry(
PackFormat.IntermediaryFormat.fromRange(entry.format(), lastPreMinorVersion), entry.overlay()
)
)
.toList()
)
);
}
public boolean isApplicable(PackFormat formatToTest) {
return this.format.isValueInRange(formatToTest);
}
private record IntermediateEntry(PackFormat.IntermediaryFormat format, String overlay) implements PackFormat.IntermediaryFormatHolder {
private static final Codec<OverlayMetadataSection.OverlayEntry.IntermediateEntry> CODEC = RecordCodecBuilder.create(
i -> i.group(
PackFormat.IntermediaryFormat.OVERLAY_CODEC.forGetter(OverlayMetadataSection.OverlayEntry.IntermediateEntry::format),
Codec.STRING
.validate(OverlayMetadataSection::validateOverlayDir)
.fieldOf("directory")
.forGetter(OverlayMetadataSection.OverlayEntry.IntermediateEntry::overlay)
)
.apply(i, OverlayMetadataSection.OverlayEntry.IntermediateEntry::new)
);
@Override
public String toString() {
return this.overlay;
}
}
}
}引用的其他类
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
字段/返回值
- 引用位置:
-
- 引用位置:
参数/方法调用 - 关联成员:
PackFormat.IntermediaryFormat.fromRange(), PackFormat.lastPreMinorVersion(), PackFormat.validateHolderList()
- 引用位置:
-
- 引用位置:
字段/方法调用 - 关联成员:
Pattern.compile()
- 引用位置: