PrefabDeleteCommand class

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

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

extends: CommandBase

Поля (13)

МодификаторыТипИмя
private final RequiredArg<String> nameArg
return
Path var11
String var2
var2
PrefabStore var3
Path var4
Path var5
Ref var6
boolean var7
var7
Store var8
PlayerRef var9

Методы (3)

МодификаторыВозвратСигнатура
protected void executeSyncprotected void executeSync(@Nonnull CommandContext var1)
if if(var9 != null)
abstract super super("delete", "server.commands.prefab.delete.desc", true)

Исходный код

Показать/скрыть
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()));
      }
   }
}