InstanceEditCopyCommand class

Пакет: com.hypixel.hytale.builtin.instances.command

Файл: com/hypixel/hytale/builtin/instances/command/InstanceEditCopyCommand.java

extends: AbstractAsyncCommand

Поля (6)

МодификаторыТипИмя
String var2
Path var3
Path var4
WorldConfig var5
var5
Path var6

Методы (2)

МодификаторыВозвратСигнатура
if if(var4 == null)
abstract super super("copy", "server.commands.instances.edit.copy.desc")

Исходный код

Показать/скрыть
class="kw">package com.hypixel.hytale.builtin.instances.command;

class="kw">import com.hypixel.hytale.builtin.instances.InstancesPlugin;
class="kw">import com.hypixel.hytale.common.util.PathUtil;
class="kw">import com.hypixel.hytale.logger.HytaleLogger;
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.RequiredArg;
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.universe.world.WorldConfig;
class="kw">import com.hypixel.hytale.server.core.util.io.FileUtil;
class="kw">import java.nio.file.Files;
class="kw">import java.nio.file.Path;
class="kw">import java.util.UUID;
class="kw">import java.util.concurrent.CompletableFuture;
class="kw">import java.util.logging.Level;
class="kw">import javax.annotation.Nonnull;

class="kw">public class InstanceEditCopyCommand class="kw">extends AbstractAsyncCommand {
   @Nonnull
   class="kw">private class="kw">final RequiredArg<String> originNameArg = this.withRequiredArg("instanceToCopy", "server.commands.instances.editcopy.origin.name", ArgTypes.STRING);
   @Nonnull
   class="kw">private class="kw">final RequiredArg<String> destinationNameArg = this.withRequiredArg(
      "newInstanceName", "server.commands.instances.editcopy.destination.name", ArgTypes.STRING
   );

   class="kw">public InstanceEditCopyCommand() {
      super("copy", "server.commands.instances.edit.copy.desc");
   }

   @Nonnull
   @Override
   class="kw">protected CompletableFuture<Void> executeAsync(@Nonnull CommandContext var1) {
      String var2 = this.originNameArg.get(var1);
      Path var3 = InstancesPlugin.getInstanceAssetPath(var2);
      if (!Files.exists(var3)) {
         var1.sendMessage(Message.translation("server.commands.instances.edit.copy.originNotFound").param("path", var3.toAbsolutePath().toString()));
         class="kw">return CompletableFuture.completedFuture(null);
      }

      if (AssetModule.get().isAssetPathImmutable(var3)) {
         var1.sendMessage(Message.translation("server.commands.instances.edit.assetsImmutable"));
         class="kw">return CompletableFuture.completedFuture(null);
      }

      Path var4 = PathUtil.resolveName(var3.getParent(), this.destinationNameArg.get(var1));
      if (var4 == null) {
         var1.sendMessage(Message.translation("server.commands.instances.edit.copy.invalidPath"));
         class="kw">return CompletableFuture.completedFuture(null);
      }

      if (Files.exists(var4)) {
         var1.sendMessage(Message.translation("server.commands.instances.edit.copy.destinationExists").param("path", var4.toAbsolutePath().toString()));
         class="kw">return CompletableFuture.completedFuture(null);
      }

      WorldConfig var5;
      try {
         var5 = WorldConfig.load(var3.resolve("instance.bson")).join();
      } catch (Throwable var9) {
         var1.sendMessage(Message.translation("server.commands.instances.edit.copy.errorLoading"));
         ((HytaleLogger.Api)InstancesPlugin.get().getLogger().at(Level.SEVERE).withCause(var9)).log("Error loading origin instance config for copy");
         class="kw">return CompletableFuture.completedFuture(null);
      }

      var5.setUuid(UUID.randomUUID());
      Path var6 = var4.resolve("instance.bson");

      try {
         FileUtil.copyDirectory(var3, var4);
         Files.deleteIfExists(var6);
      } catch (Throwable var8) {
         var1.sendMessage(Message.translation("server.commands.instances.edit.copy.errorCopying"));
         ((HytaleLogger.Api)InstancesPlugin.get().getLogger().at(Level.SEVERE).withCause(var8)).log("Error copying instance folder for copy");
         class="kw">return CompletableFuture.completedFuture(null);
      }

      class="kw">return WorldConfig.save(var6, var5)
         .thenRun(
            () -> var1.sendMessage(
               Message.translation("server.commands.instances.copiedInstanceAssetConfig")
                  .param("origin", var2)
                  .param("destination", var4.getFileName().toString())
            )
         );
   }
}