PrefabCommand class

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

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

extends: AbstractCommandCollection

Поля (80)

МодификаторыТипИмя
private static final Message MESSAGE_NO_SELECTION
private final FlagArg childrenFlag
private final FlagArg compressedFlag
private final FlagArg emptyFlag
private final FlagArg entitiesFlag
private final RequiredArg<String> nameArg
private final RequiredArg<String> nameArg
private final RequiredArg<String> nameArg
yield null
private final FlagArg overwriteFlag
private final DefaultArg<String> packArg
private final FlagArg playerAnchorFlag
private final FlagArg removeSupportFlag
return
private final FlagArg setupSupportFlag
private final DefaultArg<String> storeNameArg
private final DefaultArg<String> storeTypeArg
private final FlagArg textFlag
World var10
Path var10
var10
var10
var10
boolean var10
Path var11
Path var11
var11
boolean var11
String var12
boolean var12
Function var13
boolean var13
boolean var14
SupportMode var15
var15
var15
Path var16
SupportMode var16
BiFunction var17
var17
var17
Vector3i var17
Path var18
PrefabFormat var18
Path var19
String var2
var2
Ref var2
Player var2
boolean var20
PrefabStore var3
PlayerRef var3
final List var3
Path var4
BuilderToolsPlugin.BuilderState var4
TransformComponent var4
Path var5
Vector3d var5
Ref var6
final Path var6
Player var6
Player var6
Player var6
Player var6
boolean var7
var7
final String var7
String var7
BuilderToolsPlugin.BuilderState var7
BuilderToolsPlugin.BuilderState var7
String var7
Store var8
String var8
BlockSelection var8
AssetPack var8
PlayerRef var9
Store var9
String var9
var9
String var9

Методы (29)

МодификаторыВозвратСигнатура
public PrefabDeleteCommandpublic PrefabDeleteCommand()
public PrefabListCommandpublic PrefabListCommand()
public PrefabLoadByNameCommandpublic PrefabLoadByNameCommand()
public PrefabLoadCommandpublic PrefabLoadCommand()
public PrefabSaveCommandpublic PrefabSaveCommand()
public PrefabSaveDirectCommandpublic PrefabSaveDirectCommand()
protected void executeprotected void execute(@Nonnull CommandContext var1, @Nonnull Store<EntityStore> var2, @Nonnull Ref<EntityStore> var3, @Nonnull PlayerRef var4, @Nonnull World var5)
protected void executeprotected void execute(@Nonnull CommandContext var1, @Nonnull Store<EntityStore> var2, @Nonnull Ref<EntityStore> var3, @Nonnull PlayerRef var4, @Nonnull World var5)
protected void executeprotected void execute(@Nonnull CommandContext var1, @Nonnull Store<EntityStore> var2, @Nonnull Ref<EntityStore> var3, @Nonnull PlayerRef var4, @Nonnull World var5)
protected void executeprotected void execute(@Nonnull CommandContext var1, @Nonnull Store<EntityStore> var2, @Nonnull Ref<EntityStore> var3, @Nonnull PlayerRef var4, @Nonnull World var5)
protected void executeSyncprotected void executeSync(@Nonnull CommandContext var1)
protected void executeSyncprotected void executeSync(@Nonnull CommandContext var1)
private Vector3i getPlayerAnchorprivate Vector3i getPlayerAnchor(@Nonnull Ref<EntityStore> var1, @Nonnull Store<EntityStore> var2, boolean var3)
if if(var9 != null)
if if(var19 != null)
if if(var13 != null)
if if(var20)
if if(var8 != null)
if if(var14)
if if(!var3)
if if(var4 == null)
abstract super super("prefab", "server.commands.prefab.desc")
abstract super super("delete", "server.commands.prefab.delete.desc", true)
abstract super super("list", "server.commands.prefab.list.desc")
abstract super super("server.commands.prefab.load.desc")
abstract super super("load", "server.commands.prefab.load.desc")
abstract super super("save", "server.commands.prefab.save.desc")
abstract super super("server.commands.prefab.save.desc")
public FileVisitResult visitFilepublic FileVisitResult visitFile(@Nonnull Path var1, @Nonnull BasicFileAttributes var2)

Исходный код

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