PrefabLoadByNameCommand class

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

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

extends: AbstractPlayerCommand

Поля (25)

МодификаторыТипИмя
private final FlagArg childrenFlag
private final RequiredArg<String> nameArg
yield null
private final DefaultArg<String> storeNameArg
private final DefaultArg<String> storeTypeArg
Path var10
var10
var10
var10
Path var11
var11
String var12
Function var13
Path var16
BiFunction var17
var17
var17
Path var18
Path var19
boolean var20
Player var6
String var7
String var8
String var9
var9

Методы (5)

МодификаторыВозвратСигнатура
protected void executeprotected void execute(@Nonnull CommandContext var1, @Nonnull Store<EntityStore> var2, @Nonnull Ref<EntityStore> var3, @Nonnull PlayerRef var4, @Nonnull World var5)
if if(var19 != null)
if if(var13 != null)
if if(var20)
abstract super super("server.commands.prefab.load.desc")

Исходный код

Показать/скрыть
class="kw">package com.hypixel.hytale.builtin.buildertools.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.saving.SupportMode;
class="kw">import com.hypixel.hytale.builtin.buildertools.prefablist.PrefabPage;
class="kw">import com.hypixel.hytale.builtin.buildertools.prefablist.PrefabSavePage;
class="kw">import com.hypixel.hytale.builtin.buildertools.utils.RecursivePrefabLoader;
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.math.util.MathUtil;
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.AbstractCommandCollection;
class="kw">import com.hypixel.hytale.server.core.command.system.basecommands.AbstractPlayerCommand;
class="kw">import com.hypixel.hytale.server.core.command.system.basecommands.CommandBase;
class="kw">import com.hypixel.hytale.server.core.entity.entities.Player;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.TransformComponent;
class="kw">import com.hypixel.hytale.server.core.modules.singleplayer.SingleplayerModule;
class="kw">import com.hypixel.hytale.server.core.permissions.HytalePermissions;
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 com.hypixel.hytale.server.core.util.io.FileUtil;
class="kw">import com.hypixel.hytale.server.core.util.message.MessageFormat;
class="kw">import it.unimi.dsi.fastutil.objects.ObjectArrayList;
class="kw">import java.io.IOException;
class="kw">import java.nio.file.FileVisitResult;
class="kw">import java.nio.file.Files;
class="kw">import java.nio.file.Path;
class="kw">import java.nio.file.SimpleFileVisitor;
class="kw">import java.nio.file.attribute.BasicFileAttributes;
class="kw">import java.util.List;
class="kw">import java.util.Random;
class="kw">import java.util.function.BiFunction;
class="kw">import java.util.function.Function;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">import org.joml.Vector3d;
class="kw">import org.joml.Vector3i;

class="kw">public class PrefabCommand class="kw">extends AbstractCommandCollection {
   class="kw">public PrefabCommand() {
      super("prefab", "server.commands.prefab.desc");
      this.addAliases("p");
      this.setPermissionGroups("hytale:WorldEditor");
      this.addSubCommand(new PrefabCommand.PrefabSaveCommand());
      this.addSubCommand(new PrefabCommand.PrefabLoadCommand());
      this.addSubCommand(new PrefabCommand.PrefabDeleteCommand());
      this.addSubCommand(new PrefabCommand.PrefabListCommand());
   }

   class="kw">private class="kw">static class PrefabDeleteCommand class="kw">extends CommandBase {
      @Nonnull
      class="kw">private class="kw">final RequiredArg<String> nameArg = this.withRequiredArg("name", "server.commands.prefab.delete.name.desc", ArgTypes.STRING);

      class="kw">public PrefabDeleteCommand() {
         super("delete", "server.commands.prefab.delete.desc", true);
         this.requirePermission(HytalePermissions.EDITOR_PREFAB_MANAGE);
      }

      @Override
      class="kw">protected void executeSync(@Nonnull CommandContext var1) {
         String var2 = this.nameArg.get(var1);
         if (!PrefabStore.isPrefabFileName(var2)) {
            var2 = var2 + ".prefab.json";
         }

         PrefabStore var3 = PrefabStore.get();
         Path var4 = var3.getServerPrefabsPath();
         Path var5 = var4.resolve(var2);

         try {
            Ref var6 = var1.senderAsPlayerRef();
            boolean var7 = false;
            if (var6 != null && var6.isValid()) {
               Store var8 = var6.getStore();
               PlayerRef var9 = var8.getComponent(var6, PlayerRef.getComponentType());
               if (var9 != null) {
                  var7 = SingleplayerModule.isOwner(var9);
               }
            }

            if (!PathUtil.isChildOf(var4, var5) && !var7) {
               var1.sendMessage(Message.translation("server.builderTools.attemptedToSaveOutsidePrefabsDir"));
               class="kw">return;
            }

            Path var11 = PathUtil.relativize(var4, var5);
            if (var3.deletePrefab(var5)) {
               var1.sendMessage(Message.translation("server.builderTools.prefab.deleted").param("name", var11.toString()));
            } else {
               var1.sendMessage(Message.translation("server.builderTools.prefab.prefabNotFound").param("name", var11.toString()));
            }
         } catch (IOException var10) {
            var1.sendMessage(Message.translation("server.builderTools.prefab.errorOccured").param("reason", var10.getMessage()));
         }
      }
   }

   class="kw">private class="kw">static class PrefabListCommand class="kw">extends CommandBase {
      @Nonnull
      class="kw">private class="kw">final FlagArg textFlag = this.withFlagArg("text", "server.commands.prefab.list.text.desc");

      class="kw">public PrefabListCommand() {
         super("list", "server.commands.prefab.list.desc");
      }

      @Override
      class="kw">protected void executeSync(@Nonnull CommandContext var1) {
         Ref var2 = var1.senderAsPlayerRef();
         if (var2 != null && var2.isValid() && !this.textFlag.get(var1)) {
            Store var9 = var2.getStore();
            World var10 = var9.getExternalData().getWorld();
            var10.execute(() -> {
               Player var2 = var9.getComponent(var2, Player.getComponentType());
               assert var2 != null;
               PlayerRef var3 = var9.getComponent(var2, PlayerRef.getComponentType());
               assert var3 != null;
               BuilderToolsPlugin.BuilderState var4 = BuilderToolsPlugin.getState(var2, var3);
               var2.getPageManager().openCustomPage(var2, var9, new PrefabPage(var3, var4));
            });
         } else {
            try {
               class="kw">final List var3 = new ObjectArrayList();

               for (PrefabStore.AssetPackPrefabPath var5 : PrefabStore.get().getAllBrowsablePrefabPaths()) {
                  class="kw">final Path var6 = var5.prefabsPath();
                  class="kw">final String var7 = "[" + var5.getDisplayName() + "] ";
                  if (Files.isDirectory(var6)) {
                     Files.walkFileTree(var6, FileUtil.DEFAULT_WALK_TREE_OPTIONS_SET, Integer.MAX_VALUE, new SimpleFileVisitor<Path>() {
                        @Nonnull
                        class="kw">public FileVisitResult visitFile(@Nonnull Path var1, @Nonnull BasicFileAttributes var2) {
                           if (PrefabStore.PREFAB_FILTER.test(var1)) {
                              var3.add(Message.raw(var7 + PathUtil.relativize(var6, var1)));
                           }

                           class="kw">return FileVisitResult.CONTINUE;
                        }
                     });
                  }
               }

               var1.sendMessage(MessageFormat.list(Message.translation("server.commands.prefab.list.header"), var3));
            } catch (IOException var8) {
               var1.sendMessage(Message.translation("server.builderTools.prefab.errorListingPrefabs").param("reason", var8.getMessage()));
            }
         }
      }
   }

   class="kw">private class="kw">static class PrefabLoadByNameCommand class="kw">extends AbstractPlayerCommand {
      @Nonnull
      class="kw">private class="kw">final RequiredArg<String> nameArg = this.withRequiredArg("name", "server.commands.prefab.load.name.desc", ArgTypes.STRING);
      @Nonnull
      class="kw">private class="kw">final DefaultArg<String> storeTypeArg = this.withDefaultArg(
         "storeType", "server.commands.prefab.load.storeType.desc", ArgTypes.STRING, "asset", "server.commands.prefab.load.storeType.desc"
      );
      @Nonnull
      class="kw">private class="kw">final DefaultArg<String> storeNameArg = this.withDefaultArg("storeName", "server.commands.prefab.load.storeName.desc", ArgTypes.STRING, null, "");
      @Nonnull
      class="kw">private class="kw">final FlagArg childrenFlag = this.withFlagArg("children", "server.commands.prefab.load.children.desc");

      class="kw">public PrefabLoadByNameCommand() {
         super("server.commands.prefab.load.desc");
      }

      @Override
      class="kw">protected void execute(
         @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;
         String var7 = this.storeTypeArg.get(var1);
         String var8 = this.storeNameArg.get(var1);
         String var9 = this.nameArg.get(var1);
         if (!PrefabStore.isPrefabFileName(var9)) {
            var9 = var9 + ".prefab.json";
         }

         Path var10 = null;
         Path var11 = null;
         String var12 = var9;

         Function var13 = class="kw">switch (var7) {
            case "server" -> {
               var10 = PrefabStore.get().getServerPrefabsPath();
               yield PrefabStore.get()::getServerPrefab;
            }
            case "asset" -> {
               Path var19 = PrefabStore.get().findAssetPrefabPath(var12);
               if (var19 != null) {
                  var11 = var19;
                  var10 = var19.getParent();
                  yield var1x -> PrefabStore.get().getPrefab(var19);
               } else {
                  var10 = PrefabStore.get().getAssetPrefabsPath();
                  yield PrefabStore.get()::getAssetPrefab;
               }
            }
            case "worldgen" -> {
               Path var16 = PrefabStore.get().getWorldGenPrefabsPath(var8);
               var10 = PrefabStore.get().getWorldGenPrefabsPath(var8);
               yield var1x -> PrefabStore.get().getWorldGenPrefab(var16, var1x);
            }
            class="kw">default -> {
               var1.sendMessage(Message.translation("server.commands.prefab.invalidStoreType").param("storeType", var7));
               yield null;
            }
         };
         if (var13 != null) {
            Path var18 = var10;
            BiFunction var17;
            if (this.childrenFlag.get(var1)) {
               var17 = new RecursivePrefabLoader.BlockSelectionLoader(var18, var13);
            } else {
               var17 = (var1x, var2x) -> var13.apply(var1x);
            }

            boolean var20 = var11 != null && PrefabStore.get().prefabExists(var11) || PrefabStore.get().prefabExists(var10.resolve(var9));
            if (var20) {
               BuilderToolsPlugin.addToQueue(var6, var4, (var2x, var3x, var4x) -> var3x.load(var12, var17.apply(var12, var3x.getRandom()), var4x));
            } else {
               var1.sendMessage(Message.translation("server.builderTools.prefab.prefabNotFound").param("name", var9));
            }
         }
      }
   }

   class="kw">private class="kw">static class PrefabLoadCommand class="kw">extends AbstractPlayerCommand {
      class="kw">public PrefabLoadCommand() {
         super("load", "server.commands.prefab.load.desc");
         this.requirePermission(HytalePermissions.EDITOR_PREFAB_USE);
         this.addUsageVariant(new PrefabCommand.PrefabLoadByNameCommand());
      }

      @Override
      class="kw">protected void execute(
         @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;
         BuilderToolsPlugin.BuilderState var7 = BuilderToolsPlugin.getState(var6, var4);
         var6.getPageManager().openCustomPage(var3, var2, new PrefabPage(var4, var7));
      }
   }

   class="kw">private class="kw">static class PrefabSaveCommand class="kw">extends AbstractPlayerCommand {
      class="kw">private class="kw">static class="kw">final Message MESSAGE_NO_SELECTION = Message.translation("server.builderTools.noSelection");

      class="kw">public PrefabSaveCommand() {
         super("save", "server.commands.prefab.save.desc");
         this.requirePermission(HytalePermissions.EDITOR_PREFAB_MANAGE);
         this.addUsageVariant(new PrefabCommand.PrefabSaveDirectCommand());
      }

      @Override
      class="kw">protected void execute(
         @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;
         BuilderToolsPlugin.BuilderState var7 = BuilderToolsPlugin.getState(var6, var4);
         BlockSelection var8 = var7.getSelection();
         if (var8 != null && var8.hasSelectionBounds()) {
            var6.getPageManager().openCustomPage(var3, var2, new PrefabSavePage(var4));
         } else {
            var1.sendMessage(MESSAGE_NO_SELECTION);
         }
      }
   }

   class="kw">private class="kw">static class PrefabSaveDirectCommand class="kw">extends AbstractPlayerCommand {
      @Nonnull
      class="kw">private class="kw">final RequiredArg<String> nameArg = this.withRequiredArg("name", "server.commands.prefab.save.name.desc", ArgTypes.STRING);
      @Nonnull
      class="kw">private class="kw">final FlagArg overwriteFlag = this.withFlagArg("overwrite", "server.commands.prefab.save.overwrite.desc");
      @Nonnull
      class="kw">private class="kw">final FlagArg entitiesFlag = this.withFlagArg("entities", "server.commands.prefab.save.entities.desc");
      @Nonnull
      class="kw">private class="kw">final FlagArg emptyFlag = this.withFlagArg("empty", "server.commands.prefab.save.empty.desc");
      @Nonnull
      class="kw">private class="kw">final FlagArg playerAnchorFlag = this.withFlagArg("playerAnchor", "server.commands.prefab.save.playerAnchor.desc");
      @Nonnull
      class="kw">private class="kw">final FlagArg removeSupportFlag = this.withFlagArg("removeSupport", "server.commands.editprefab.save.removeSupport.desc");
      @Nonnull
      class="kw">private class="kw">final FlagArg setupSupportFlag = this.withFlagArg("setupSupport", "server.commands.editprefab.save.setupSupport.desc");
      @Nonnull
      class="kw">private class="kw">final DefaultArg<String> packArg = this.withDefaultArg(
         "pack", "server.commands.prefab.save.pack.desc", ArgTypes.STRING, "", "server.commands.prefab.save.pack.desc"
      );
      @Nonnull
      class="kw">private class="kw">final FlagArg compressedFlag = this.withFlagArg("compressed", "server.commands.prefab.save.compressed.desc");

      class="kw">public PrefabSaveDirectCommand() {
         super("server.commands.prefab.save.desc");
      }

      @Override
      class="kw">protected void execute(
         @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;
         String var7 = this.packArg.get(var1);
         AssetPack var8 = BuilderToolsPlugin.resolveTargetPack(var7 != null ? var7 : "", var6, var1);
         if (var8 != null) {
            BuilderToolsUserData.get(var6).setLastSavePack(var8.getName());
            String var9 = this.nameArg.get(var1).trim();
            if (var9.isBlank()) {
               var1.sendMessage(Message.translation("server.builderTools.prefabSave.nameRequired"));
            } else if (var9.contains("..")) {
               var1.sendMessage(Message.translation("server.builderTools.attemptedToSaveOutsidePrefabsDir"));
            } else {
               boolean var10 = this.overwriteFlag.get(var1);
               boolean var11 = this.entitiesFlag.get(var1);
               boolean var12 = this.emptyFlag.get(var1);
               boolean var13 = this.removeSupportFlag.get(var1);
               boolean var14 = this.setupSupportFlag.get(var1);
               SupportMode var15 = SupportMode.KEEP_EXISTING;
               if (var14) {
                  var15 = SupportMode.CALCULATE;
               } else if (var13) {
                  var15 = SupportMode.REMOVE;
               }

               SupportMode var16 = var15;
               Vector3i var17 = this.getPlayerAnchor(var3, var2, this.playerAnchorFlag.get(var1));
               PrefabFormat var18 = this.compressedFlag.get(var1) ? PrefabFormat.COMPRESSED : PrefabFormat.AUTO;
               BuilderToolsPlugin.addToQueue(
                  var6, var4, (var8x, var9x, var10x) -> var9x.saveFromSelection(var8x, var9, true, var10, var11, var12, var17, var16, var8, var18, var10x)
               );
            }
         }
      }

      @Nullable
      class="kw">private Vector3i getPlayerAnchor(@Nonnull Ref<EntityStore> var1, @Nonnull Store<EntityStore> var2, boolean var3) {
         if (!var3) {
            class="kw">return null;
         }

         TransformComponent var4 = var2.getComponent(var1, TransformComponent.getComponentType());
         if (var4 == null) {
            class="kw">return null;
         }

         Vector3d var5 = var4.getPosition();
         class="kw">return new Vector3i(MathUtil.floor(var5.x()), MathUtil.floor(var5.y()), MathUtil.floor(var5.z()));
      }
   }
}