NbtToSnbt.java
net.minecraft.data.structures.NbtToSnbt
信息
- 全限定名:net.minecraft.data.structures.NbtToSnbt
- 类型:public class
- 包:net.minecraft.data.structures
- 源码路径:src/main/java/net/minecraft/data/structures/NbtToSnbt.java
- 起始行号:L28
- 实现:DataProvider
- 职责:
TODO
字段/常量
-
LOGGER- 类型:
Logger - 修饰符:
private static final - 源码定位:
L29 - 说明:
TODO
- 类型:
-
inputFolders- 类型:
Iterable<Path> - 修饰符:
private final - 源码定位:
L30 - 说明:
TODO
- 类型:
-
output- 类型:
PackOutput - 修饰符:
private final - 源码定位:
L31 - 说明:
TODO
- 类型:
内部类/嵌套类型
- 无
构造器
public NbtToSnbt(PackOutput output, Collection<Path> inputFolders) @ L33
- 构造器名:NbtToSnbt
- 源码定位:L33
- 修饰符:public
参数:
- output: PackOutput
- inputFolders: Collection
说明:
TODO
方法
下面的方法块按源码顺序生成。
public CompletableFuture<?> run(CachedOutput cache) @ L38
- 方法名:run
- 源码定位:L38
- 返回类型:CompletableFuture<?>
- 修饰符:public
参数:
- cache: CachedOutput
说明:
TODO
public final String getName() @ L76
- 方法名:getName
- 源码定位:L76
- 返回类型:String
- 修饰符:public final
参数:
- 无
说明:
TODO
private static String getName(Path root, Path path) @ L81
- 方法名:getName
- 源码定位:L81
- 返回类型:String
- 修饰符:private static
参数:
- root: Path
- path: Path
说明:
TODO
public static Path convertStructure(CachedOutput cache, Path path, String name, Path output) @ L86
- 方法名:convertStructure
- 源码定位:L86
- 返回类型:Path
- 修饰符:public static
参数:
- cache: CachedOutput
- path: Path
- name: String
- output: Path
说明:
TODO
public static void writeSnbt(CachedOutput cache, Path destination, String text) @ L106
- 方法名:writeSnbt
- 源码定位:L106
- 返回类型:void
- 修饰符:public static
参数:
- cache: CachedOutput
- destination: Path
- text: String
说明:
TODO
代码
public class NbtToSnbt implements DataProvider {
private static final Logger LOGGER = LogUtils.getLogger();
private final Iterable<Path> inputFolders;
private final PackOutput output;
public NbtToSnbt(PackOutput output, Collection<Path> inputFolders) {
this.inputFolders = inputFolders;
this.output = output;
}
@Override
public CompletableFuture<?> run(CachedOutput cache) {
Path output = this.output.getOutputFolder();
List<CompletableFuture<?>> tasks = new ArrayList<>();
for (Path input : this.inputFolders) {
tasks.add(
CompletableFuture.<CompletableFuture>supplyAsync(
() -> {
try {
CompletableFuture t$;
try (Stream<Path> walk = Files.walk(input)) {
t$ = CompletableFuture.allOf(
walk.filter(path -> path.toString().endsWith(".nbt"))
.map(
path -> CompletableFuture.runAsync(
() -> convertStructure(cache, path, getName(input, path), output), Util.ioPool()
)
)
.toArray(CompletableFuture[]::new)
);
}
return t$;
} catch (IOException var8) {
LOGGER.error("Failed to read structure input directory", (Throwable)var8);
return CompletableFuture.completedFuture(null);
}
},
Util.backgroundExecutor().forName("NbtToSnbt")
)
.thenCompose(v -> v)
);
}
return CompletableFuture.allOf(tasks.toArray(CompletableFuture[]::new));
}
@Override
public final String getName() {
return "NBT -> SNBT";
}
private static String getName(Path root, Path path) {
String name = root.relativize(path).toString().replaceAll("\\\\", "/");
return name.substring(0, name.length() - ".nbt".length());
}
public static @Nullable Path convertStructure(CachedOutput cache, Path path, String name, Path output) {
try {
Path var7;
try (
InputStream rawInput = Files.newInputStream(path);
InputStream input = new FastBufferedInputStream(rawInput);
) {
Path resultPath = output.resolve(name + ".snbt");
writeSnbt(cache, resultPath, NbtUtils.structureToSnbt(NbtIo.readCompressed(input, NbtAccounter.unlimitedHeap())));
LOGGER.info("Converted {} from NBT to SNBT", name);
var7 = resultPath;
}
return var7;
} catch (IOException var12) {
LOGGER.error("Couldn't convert {} from NBT to SNBT at {}", name, path, var12);
return null;
}
}
public static void writeSnbt(CachedOutput cache, Path destination, String text) throws IOException {
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
HashingOutputStream hashedBytes = new HashingOutputStream(Hashing.sha1(), bytes);
hashedBytes.write(text.getBytes(StandardCharsets.UTF_8));
hashedBytes.write(10);
cache.writeIfNeeded(destination, bytes.toByteArray(), hashedBytes.hash());
}
}引用的其他类
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
实现
- 引用位置:
-
- 引用位置:
参数/字段
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
NbtAccounter.unlimitedHeap()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
NbtIo.readCompressed()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
NbtUtils.structureToSnbt()
- 引用位置:
-
- 引用位置:
构造调用 - 关联成员:
FastBufferedInputStream()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
Util.backgroundExecutor(), Util.ioPool()
- 引用位置: