PrefabEditSaveAsCommand class

Пакет: com.hypixel.hytale.builtin.buildertools.prefabeditor.commands

Файл: com/hypixel/hytale/builtin/buildertools/prefabeditor/commands/PrefabEditSaveAsCommand.java

extends: AbstractAsyncPlayerCommand

Поля (16)

МодификаторыТипИмя
PrefabSaverSettings var10
boolean var11
boolean var12
PrefabEditingMetadata var13
String var14
Path var15
AssetPack var16
Path var17
String var18
Path var19
var19
BlockSelection var20
Player var6
UUID var7
PrefabEditSessionManager var8
PrefabEditSession var9

Методы (5)

МодификаторыВозвратСигнатура
if if(var9 == null)
if if(var12)
if if(var16 == null)
if if(var13 == null)
abstract super super("saveas", "server.commands.editprefab.saveAs.desc")

Исходный код

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

class="kw">import com.hypixel.hytale.assetstore.AssetPack;
class="kw">import com.hypixel.hytale.builtin.buildertools.BuilderToolsPlugin;
class="kw">import com.hypixel.hytale.builtin.buildertools.BuilderToolsUserData;
class="kw">import com.hypixel.hytale.builtin.buildertools.prefabeditor.PrefabEditSession;
class="kw">import com.hypixel.hytale.builtin.buildertools.prefabeditor.PrefabEditSessionManager;
class="kw">import com.hypixel.hytale.builtin.buildertools.prefabeditor.PrefabEditingMetadata;
class="kw">import com.hypixel.hytale.builtin.buildertools.prefabeditor.saving.PrefabSaver;
class="kw">import com.hypixel.hytale.builtin.buildertools.prefabeditor.saving.PrefabSaverSettings;
class="kw">import com.hypixel.hytale.builtin.buildertools.prefabeditor.saving.SupportMode;
class="kw">import com.hypixel.hytale.common.util.PathUtil;
class="kw">import com.hypixel.hytale.component.Ref;
class="kw">import com.hypixel.hytale.component.Store;
class="kw">import com.hypixel.hytale.server.core.Message;
class="kw">import com.hypixel.hytale.server.core.command.system.CommandContext;
class="kw">import com.hypixel.hytale.server.core.command.system.arguments.system.DefaultArg;
class="kw">import com.hypixel.hytale.server.core.command.system.arguments.system.FlagArg;
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.AbstractAsyncPlayerCommand;
class="kw">import com.hypixel.hytale.server.core.entity.entities.Player;
class="kw">import com.hypixel.hytale.server.core.modules.singleplayer.SingleplayerModule;
class="kw">import com.hypixel.hytale.server.core.prefab.PrefabFormat;
class="kw">import com.hypixel.hytale.server.core.prefab.PrefabStore;
class="kw">import com.hypixel.hytale.server.core.prefab.selection.standard.BlockSelection;
class="kw">import com.hypixel.hytale.server.core.universe.PlayerRef;
class="kw">import com.hypixel.hytale.server.core.universe.world.World;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
class="kw">import java.nio.file.Path;
class="kw">import java.util.UUID;
class="kw">import java.util.concurrent.CompletableFuture;
class="kw">import javax.annotation.Nonnull;

class="kw">public class PrefabEditSaveAsCommand class="kw">extends AbstractAsyncPlayerCommand {
   @Nonnull
   class="kw">private class="kw">static class="kw">final Message MESSAGE_NOT_IN_EDIT_WORLD = Message.translation("server.commands.editprefab.notInEditWorldWarning");
   class="kw">private class="kw">final RequiredArg<String> fileNameArg = this.withRequiredArg("fileNameArg", "server.commands.editprefab.save.saveAs.desc", ArgTypes.STRING);
   class="kw">private class="kw">final FlagArg noEntitiesArg = this.withFlagArg("noEntities", "server.commands.editprefab.save.noEntities.desc");
   class="kw">private class="kw">final FlagArg overwriteArg = this.withFlagArg("overwrite", "server.commands.editprefab.save.overwrite.desc");
   class="kw">private class="kw">final FlagArg emptyArg = this.withFlagArg("empty", "server.commands.editprefab.save.empty.desc");
   class="kw">private class="kw">final FlagArg noUpdateArg = this.withFlagArg("noUpdate", "server.commands.editprefab.saveAs.noUpdate.desc");
   class="kw">private class="kw">final FlagArg removeSupportArg = this.withFlagArg("removeSupport", "server.commands.editprefab.save.removeSupport.desc");
   class="kw">private class="kw">final FlagArg setupSupportArg = this.withFlagArg("setupSupport", "server.commands.editprefab.save.setupSupport.desc");
   class="kw">private class="kw">final FlagArg compressedArg = this.withFlagArg("compressed", "server.commands.editprefab.save.compressed.desc");
   class="kw">private class="kw">final DefaultArg<String> packArg = this.withDefaultArg(
      "pack", "server.commands.editprefab.save.pack.desc", ArgTypes.STRING, "", "server.commands.editprefab.save.pack.desc"
   );

   class="kw">public PrefabEditSaveAsCommand() {
      super("saveas", "server.commands.editprefab.saveAs.desc");
   }

   @Nonnull
   @Override
   class="kw">protected CompletableFuture<Void> executeAsync(
      @Nonnull CommandContext var1, @Nonnull Store<EntityStore> var2, @Nonnull Ref<EntityStore> var3, @Nonnull PlayerRef var4, @Nonnull World var5
   ) {
      Player var6 = var2.getComponent(var3, Player.getComponentType());
      assert var6 != null;
      UUID var7 = var4.getUuid();
      PrefabEditSessionManager var8 = BuilderToolsPlugin.get().getPrefabEditSessionManager();
      PrefabEditSession var9 = var8.getPrefabEditSession(var7);
      if (var9 == null) {
         var1.sendMessage(Message.translation("server.commands.editprefab.notInEditSession"));
         class="kw">return CompletableFuture.completedFuture(null);
      }

      if (!var8.isInEditWorld(var4, var2)) {
         var1.sendMessage(MESSAGE_NOT_IN_EDIT_WORLD);
         class="kw">return CompletableFuture.completedFuture(null);
      }

      PrefabSaverSettings var10 = new PrefabSaverSettings();
      var10.setBlocks(true);
      var10.setEntities(!this.noEntitiesArg.provided(var1));
      var10.setOverwriteExisting(this.overwriteArg.get(var1));
      var10.setEmpty(this.emptyArg.get(var1));
      var10.setPrefabFormat(this.compressedArg.get(var1) ? PrefabFormat.COMPRESSED : PrefabFormat.AUTO);
      boolean var11 = this.removeSupportArg.get(var1);
      boolean var12 = this.setupSupportArg.get(var1);
      if (var12) {
         var10.setSupportMode(SupportMode.CALCULATE);
      } else if (var11) {
         var10.setSupportMode(SupportMode.REMOVE);
      }

      PrefabEditingMetadata var13 = var9.getSelectedPrefab(var7);
      String var14 = this.packArg.get(var1);
      Path var15 = var13 != null ? var13.getPrefabPath() : null;
      AssetPack var16 = BuilderToolsPlugin.resolveTargetPack(var14 != null ? var14 : "", var15, var6, var1);
      if (var16 == null) {
         class="kw">return CompletableFuture.completedFuture(null);
      }

      BuilderToolsUserData.get(var6).setLastSavePack(var16.getName());
      Path var17 = PrefabStore.get().getAssetPrefabsPathForPack(var16);
      String var18 = this.fileNameArg.get(var1).trim();
      if (var18.isBlank()) {
         var1.sendMessage(Message.translation("server.builderTools.prefabSave.nameRequired"));
         class="kw">return CompletableFuture.completedFuture(null);
      }

      if (var18.contains("..")) {
         var1.sendMessage(Message.translation("server.builderTools.attemptedToSaveOutsidePrefabsDir"));
         class="kw">return CompletableFuture.completedFuture(null);
      }

      if (!PathUtil.isChildOf(var17, var17.resolve(var18)) && !SingleplayerModule.isOwner(var4)) {
         var1.sendMessage(Message.translation("server.builderTools.attemptedToSaveOutsidePrefabsDir"));
         class="kw">return CompletableFuture.completedFuture(null);
      }

      Path var19 = var17.resolve(var18);
      if (var19.toString().endsWith("/")) {
         var1.sendMessage(Message.translation("server.commands.editprefab.saveAs.errors.notAFile"));
         class="kw">return CompletableFuture.completedFuture(null);
      }

      if (!var9.toString().endsWith(".prefab.json")) {
         var19 = Path.of(var19 + ".prefab.json");
      }

      if (var13 == null) {
         var1.sendMessage(Message.translation("server.commands.editprefab.noPrefabSelected"));
         class="kw">return CompletableFuture.completedFuture(null);
      }

      BlockSelection var20 = BuilderToolsPlugin.getState(var6, var4).getSelection();
      if (var13.getMinPoint().equals(var20.getSelectionMin()) && var13.getMaxPoint().equals(var20.getSelectionMax())) {
         if (!this.noUpdateArg.provided(var1)) {
            var8.updatePathOfLoadedPrefab(var13.getPrefabPath(), var19);
            var13.setPrefabPath(var19);
         }

         class="kw">return PrefabSaver.savePrefab(
               var4,
               var5,
               var19,
               var13.getAnchorPoint(),
               var13.getMinPoint(),
               var13.getMaxPoint(),
               var13.getPastePosition(),
               var13.getOriginalFileAnchor(),
               var10
            )
            .thenAccept(
               var3x -> var1.sendMessage(
                  Message.translation("server.commands.editprefab.save." + (var3x != null ? "success.pack" : "failure.pack"))
                     .param("name", (var3x != null ? var3x : var13.getPrefabPath()).toString())
                     .param("pack", var16.getName())
               )
            );
      } else {
         var1.sendMessage(Message.translation("server.commands.editprefab.save.selectionMismatch"));
         class="kw">return CompletableFuture.completedFuture(null);
      }
   }
}