ValidateCPBCommand class
Пакет: com.hypixel.hytale.server.core.command.commands.utility
Файл: com/hypixel/hytale/server/core/command/commands/utility/ValidateCPBCommand.java
extends: AbstractAsyncCommand
Поля (4)
| Модификаторы | Тип | Имя |
|---|---|---|
final |
String |
UNABLE_TO_LOAD_MODEL |
|
Path |
var2 |
|
List |
var2 |
|
CompletableFuture[] |
var4 |
Методы (3)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
static |
void |
convertPrefabsvoid convertPrefabs(@Nonnull CommandContext var0, @Nonnull Path var1) |
|
|
if if(var3 != null) |
abstract |
|
super super("validatecpb", "server.commands.validatecpb.desc") |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.server.core.command.commands.utility;
class="kw">import com.hypixel.hytale.assetstore.AssetPack;
class="kw">import com.hypixel.hytale.common.util.PathUtil;
class="kw">import com.hypixel.hytale.server.core.Message;
class="kw">import com.hypixel.hytale.server.core.asset.AssetModule;
class="kw">import com.hypixel.hytale.server.core.command.system.CommandContext;
class="kw">import com.hypixel.hytale.server.core.command.system.arguments.system.OptionalArg;
class="kw">import com.hypixel.hytale.server.core.command.system.arguments.types.ArgTypes;
class="kw">import com.hypixel.hytale.server.core.command.system.basecommands.AbstractAsyncCommand;
class="kw">import com.hypixel.hytale.server.core.prefab.PrefabStore;
class="kw">import com.hypixel.hytale.server.core.prefab.selection.buffer.BsonPrefabBufferDeserializer;
class="kw">import com.hypixel.hytale.server.core.prefab.selection.buffer.PrefabBufferUtil;
class="kw">import com.hypixel.hytale.server.core.prefab.selection.buffer.impl.PrefabBuffer;
class="kw">import com.hypixel.hytale.server.core.util.BsonUtil;
class="kw">import com.hypixel.hytale.server.core.util.io.FileUtil;
class="kw">import com.hypixel.hytale.sneakythrow.SneakyThrow;
class="kw">import it.unimi.dsi.fastutil.objects.ObjectArrayList;
class="kw">import java.io.IOException;
class="kw">import java.nio.file.Files;
class="kw">import java.nio.file.Path;
class="kw">import java.util.List;
class="kw">import java.util.concurrent.CompletableFuture;
class="kw">import java.util.stream.Stream;
class="kw">import javax.annotation.Nonnull;
class="kw">public class ValidateCPBCommand class="kw">extends AbstractAsyncCommand {
class="kw">private class="kw">static class="kw">final String UNABLE_TO_LOAD_MODEL = "Unable to load entity with model ";
class="kw">private class="kw">static class="kw">final String FAILED_TO_FIND_BLOCK = "Failed to find block ";
@Nonnull
class="kw">private class="kw">final OptionalArg<String> pathArg = this.withOptionalArg("path", "server.commands.validatecpb.path.desc", ArgTypes.STRING);
class="kw">public ValidateCPBCommand() {
super("validatecpb", "server.commands.validatecpb.desc");
}
@Nonnull
@Override
class="kw">protected CompletableFuture<Void> executeAsync(@Nonnull CommandContext var1) {
if (this.pathArg.provided(var1)) {
Path var2 = Path.of(this.pathArg.get(var1));
if (!PathUtil.isInTrustedRoot(var2)) {
var1.sendMessage(Message.translation("server.commands.validatecpb.invalidPath"));
class="kw">return CompletableFuture.completedFuture(null);
} else {
class="kw">return CompletableFuture.runAsync(() -> convertPrefabs(var1, var2));
}
} else {
class="kw">return CompletableFuture.runAsync(() -> {
for (AssetPack var2 : AssetModule.get().getAssetPacks()) {
convertPrefabs(var1, var2.getRoot());
}
});
}
}
class="kw">private class="kw">static void convertPrefabs(@Nonnull CommandContext var0, @Nonnull Path var1) {
List var2 = new ObjectArrayList();
try (Stream var3 = Files.walk(var1, FileUtil.DEFAULT_WALK_TREE_OPTIONS_ARRAY)) {
CompletableFuture[] var4 = var3.filter(var0x -> Files.isRegularFile(var0x) && PrefabStore.PREFAB_FILTER.test(var0x))
.map(
var2x -> readPrefabBuffer(var2x)
.thenAccept(var2xx -> var0.sendMessage(Message.translation("server.general.loadedPrefab").param("name", var2x.toString())))
.exceptionally(var2xx -> {
String var3 = var2xx.getCause().getMessage();
if (var3 != null) {
if (var3.contains("Failed to find block ")) {
var2.add("Failed to load " + var2x + " because " + var3);
class="kw">return null;
}
if (var3.contains("Unable to load entity with model ")) {
var2.add("Failed to load " + var2x + " because " + var3);
class="kw">return null;
}
}
var2.add("Failed to load " + var2x + " because " + (var3 != null ? var3 : var2xx.getCause().getClass()));
new Exception("Failed to load " + var2x, var2xx.getCause()).printStackTrace();
class="kw">return null;
})
)
.toArray(CompletableFuture[]::new);
CompletableFuture.allOf(var4).join();
} catch (IOException var8) {
throw SneakyThrow.sneakyThrow(var8);
}
if (!var2.isEmpty()) {
var0.sendMessage(Message.translation("server.commands.validatecpb.failed").param("failed", var2.toString()));
}
var0.sendMessage(Message.translation("server.commands.prefabConvertionDone").param("path", var1.toString()));
}
@Nonnull
class="kw">private class="kw">static CompletableFuture<PrefabBuffer> readPrefabBuffer(@Nonnull Path var0) {
class="kw">return var0.toString().endsWith(".lpf")
? PrefabBufferUtil.readFromFileAsync(var0)
: BsonUtil.readDocument(var0, false).thenApply(var1 -> BsonPrefabBufferDeserializer.INSTANCE.deserialize(var0, var1));
}
}