Action enum

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

Файл: com/hypixel/hytale/builtin/buildertools/prefablist/PrefabSavePage.java

Поля (1)

МодификаторыТипИмя
Save, Cancel, ConfirmOverwrite, CancelOverwrite, RemoveSupportChanged, SetupSupportChanged, OpenPackBrowser, ConfirmPackBrowser, CancelPackBrowser, OpenCreatePack, CreatePack, CancelCreatePack, PackSearch, PackSelect

Исходный код

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

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.codec.Codec;
class="kw">import com.hypixel.hytale.codec.KeyedCodec;
class="kw">import com.hypixel.hytale.codec.builder.BuilderCodec;
class="kw">import com.hypixel.hytale.codec.codecs.EnumCodec;
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.protocol.packets.interface_.CustomPageLifetime;
class="kw">import com.hypixel.hytale.protocol.packets.interface_.CustomUIEventBindingType;
class="kw">import com.hypixel.hytale.protocol.packets.interface_.Page;
class="kw">import com.hypixel.hytale.server.core.Message;
class="kw">import com.hypixel.hytale.server.core.entity.entities.Player;
class="kw">import com.hypixel.hytale.server.core.entity.entities.player.pages.InteractiveCustomUIPage;
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.prefab.PrefabFormat;
class="kw">import com.hypixel.hytale.server.core.prefab.PrefabStore;
class="kw">import com.hypixel.hytale.server.core.ui.browser.AssetPackSaveBrowser;
class="kw">import com.hypixel.hytale.server.core.ui.browser.AssetPackSaveBrowserConfig;
class="kw">import com.hypixel.hytale.server.core.ui.browser.AssetPackSaveBrowserEventData;
class="kw">import com.hypixel.hytale.server.core.ui.builder.EventData;
class="kw">import com.hypixel.hytale.server.core.ui.builder.UICommandBuilder;
class="kw">import com.hypixel.hytale.server.core.ui.builder.UIEventBuilder;
class="kw">import com.hypixel.hytale.server.core.universe.PlayerRef;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
class="kw">import java.nio.file.Path;
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 PrefabSavePage class="kw">extends InteractiveCustomUIPage<PrefabSavePage.PageData> {
   @Nonnull
   class="kw">private class="kw">static class="kw">final Message MESSAGE_NAME_REQUIRED = Message.translation("server.customUI.prefabSavePage.required");
   @Nonnull
   class="kw">private class="kw">static class="kw">final Message MESSAGE_NAME_INVALID = Message.translation("server.customUI.prefabSavePage.invalid");
   @Nonnull
   class="kw">private class="kw">static class="kw">final Message MESSAGE_PACK_REQUIRED = Message.translation("server.customUI.assetPackBrowser.packRequired");
   class="kw">private class="kw">final AssetPackSaveBrowser packBrowser = new AssetPackSaveBrowser(AssetPackSaveBrowserConfig.defaults());
   class="kw">private boolean initialized = false;
   @Nullable
   class="kw">private PrefabSavePage.PendingSave pendingSave;

   class="kw">public PrefabSavePage(@Nonnull PlayerRef var1) {
      super(var1, CustomPageLifetime.CanDismissOrCloseThroughInteraction, PrefabSavePage.PageData.CODEC);
   }

   @Override
   class="kw">public void build(@Nonnull Ref<EntityStore> var1, @Nonnull UICommandBuilder var2, @Nonnull UIEventBuilder var3, @Nonnull Store<EntityStore> var4) {
      if (!this.initialized) {
         this.initialized = true;
         Player var5 = var4.getComponent(var1, Player.getComponentType());
         if (var5 != null) {
            String var6 = BuilderToolsUserData.get(var5).getLastSavePack();
            this.packBrowser.setSelectedPackKey(var6);
            if (var6 != null && !this.packBrowser.hasSelectedPack()) {
               this.playerRef.sendMessage(Message.translation("server.customUI.assetPackBrowser.packNoLongerAvailable"));
            }
         }
      }

      var2.append("Pages/PrefabSavePage.ui");
      var2.set("#PackBrowserPage.Visible", false);
      var2.set("#CreatePackPage.Visible", false);
      if (this.packBrowser.hasSelectedPack()) {
         var2.set("#MainPage #SelectedPackLabel.Text", this.packBrowser.getSelectedPackDisplayName());
      }

      var2.set("#MainPage #NameRequiredText.Visible", false);
      var2.set("#MainPage #Entities #CheckBox.Value", true);
      var2.set("#MainPage #Empty #CheckBox.Value", false);
      var2.set("#MainPage #FromClipboard #CheckBox.Value", false);
      var2.set("#MainPage #UsePlayerAnchor #CheckBox.Value", false);
      var2.set("#MainPage #RemoveSupport #CheckBox.Value", false);
      var2.set("#MainPage #SetupSupport #CheckBox.Value", false);
      var2.set("#MainPage #Compressed #CheckBox.Value", false);
      var2.set("#OverwriteConfirmPage.Visible", false);
      var3.addEventBinding(
         CustomUIEventBindingType.Activating,
         "#MainPage #SaveButton",
         new EventData()
            .append("Action", PrefabSavePage.Action.Save.name())
            .append("@Name", "#MainPage #NameInput.Value")
            .append("@Entities", "#MainPage #Entities #CheckBox.Value")
            .append("@Empty", "#MainPage #Empty #CheckBox.Value")
            .append("@FromClipboard", "#MainPage #FromClipboard #CheckBox.Value")
            .append("@UsePlayerAnchor", "#MainPage #UsePlayerAnchor #CheckBox.Value")
            .append("@RemoveSupport", "#MainPage #RemoveSupport #CheckBox.Value")
            .append("@SetupSupport", "#MainPage #SetupSupport #CheckBox.Value")
            .append("@Compressed", "#MainPage #Compressed #CheckBox.Value")
      );
      var3.addEventBinding(
         CustomUIEventBindingType.Activating, "#MainPage #CancelButton", new EventData().append("Action", PrefabSavePage.Action.Cancel.name())
      );
      var3.addEventBinding(
         CustomUIEventBindingType.ValueChanged,
         "#MainPage #RemoveSupport #CheckBox",
         new EventData()
            .append("Action", PrefabSavePage.Action.RemoveSupportChanged.name())
            .append("@RemoveSupport", "#MainPage #RemoveSupport #CheckBox.Value"),
         false
      );
      var3.addEventBinding(
         CustomUIEventBindingType.ValueChanged,
         "#MainPage #SetupSupport #CheckBox",
         new EventData().append("Action", PrefabSavePage.Action.SetupSupportChanged.name()).append("@SetupSupport", "#MainPage #SetupSupport #CheckBox.Value"),
         false
      );
      var3.addEventBinding(
         CustomUIEventBindingType.Activating,
         "#OverwriteConfirmPage #ConfirmOverwriteButton",
         new EventData().append("Action", PrefabSavePage.Action.ConfirmOverwrite.name()),
         false
      );
      var3.addEventBinding(
         CustomUIEventBindingType.Activating,
         "#OverwriteConfirmPage #CancelOverwriteButton",
         new EventData().append("Action", PrefabSavePage.Action.CancelOverwrite.name()),
         false
      );
      this.packBrowser.buildEventBindings(var3, "#MainPage #BrowsePackButton");
      this.packBrowser.buildUI(var2, var3);
   }

   class="kw">public void handleDataEvent(@Nonnull Ref<EntityStore> var1, @Nonnull Store<EntityStore> var2, @Nonnull PrefabSavePage.PageData var3) {
      Player var4 = var2.getComponent(var1, Player.getComponentType());
      assert var4 != null;
      AssetPackSaveBrowser.ActionResult var5 = this.packBrowser
         .handleAction(var3.action != null ? var3.action.name() : null, var3.packBrowserData, "#MainPage #SelectedPackLabel");
      if (var5 != null) {
         if (var5.errorKey() != null) {
            this.playerRef.sendMessage(Message.translation(var5.errorKey()));
         }

         if (var5.packConfirmed() && this.packBrowser.hasSelectedPack()) {
            BuilderToolsUserData.get(var4).setLastSavePack(this.packBrowser.getSelectedPack().getName());
         }

         this.sendUpdate(var5.commandBuilder(), var5.eventBuilder(), false);
      } else {
         class="kw">switch (var3.action) {
            case Save:
               String var19 = var3.name != null ? var3.name.trim() : null;
               if (var19 == null || var19.isBlank()) {
                  UICommandBuilder commandBuilderx = new UICommandBuilder();
                  commandBuilderx.set("#MainPage #NameRequiredText.Visible", true);
                  commandBuilderx.set("#MainPage #NameRequiredText.TextSpans", MESSAGE_NAME_REQUIRED);
                  this.sendUpdate(commandBuilderx, null, false);
                  class="kw">return;
               }

               if (var19.contains("..")) {
                  UICommandBuilder commandBuilderx = new UICommandBuilder();
                  commandBuilderx.set("#MainPage #NameInput.Value", var19);
                  commandBuilderx.set("#MainPage #NameRequiredText.Visible", true);
                  commandBuilderx.set("#MainPage #NameRequiredText.TextSpans", MESSAGE_NAME_INVALID);
                  this.sendUpdate(commandBuilderx, null, false);
                  class="kw">return;
               }

               UICommandBuilder var7 = new UICommandBuilder();
               var7.set("#MainPage #NameInput.Value", var19);
               var7.set("#MainPage #NameRequiredText.Visible", false);
               this.sendUpdate(var7, null, false);
               AssetPack var8 = this.packBrowser.getSelectedPack();
               if (var8 == null) {
                  this.playerRef.sendMessage(MESSAGE_PACK_REQUIRED);
                  this.sendUpdate(null, null, false);
                  class="kw">return;
               }

               BuilderToolsUserData.get(var4).setLastSavePack(var8.getName());
               Vector3i var9 = this.getPlayerAnchor(var1, var2, var3.usePlayerAnchor && !var3.fromClipboard);
               SupportMode var10;
               if (var3.setupSupport) {
                  var10 = SupportMode.CALCULATE;
               } else if (var3.removeSupport) {
                  var10 = SupportMode.REMOVE;
               } else {
                  var10 = SupportMode.KEEP_EXISTING;
               }

               PrefabFormat var11 = var3.compressed ? PrefabFormat.COMPRESSED : PrefabFormat.AUTO;
               String var12 = var19;
               if (!PrefabStore.isPrefabFileName(var12)) {
                  var12 = var12 + ".prefab.json";
               }

               Path var13 = PrefabStore.get().getAssetPrefabsPathForPack(var8);
               Path var14 = var13.resolve(var12).toAbsolutePath().normalize();
               if (!PathUtil.isChildOf(var13, var14) && !SingleplayerModule.isOwner(this.playerRef)) {
                  UICommandBuilder commandBuilderx = new UICommandBuilder();
                  commandBuilderx.set("#MainPage #NameRequiredText.Visible", true);
                  commandBuilderx.set("#MainPage #NameRequiredText.TextSpans", MESSAGE_NAME_INVALID);
                  this.sendUpdate(commandBuilderx, null, false);
                  class="kw">return;
               }

               if (PrefabStore.get().prefabExists(var14)) {
                  this.pendingSave = new PrefabSavePage.PendingSave(var19, var3.entities, var3.empty, var3.fromClipboard, var9, var10, var11, var8, var4);
                  UICommandBuilder var15 = new UICommandBuilder();
                  var15.set("#MainPage.Visible", false);
                  var15.set("#OverwriteConfirmPage.Visible", true);
                  var15.set(
                     "#OverwriteConfirmPage #MessageText.TextSpans",
                     Message.translation("server.customUI.prefabSavePage.overwriteConfirm.messageSingle").param("name", var14.getFileName().toString())
                  );
                  this.sendUpdate(var15);
                  class="kw">return;
               }

               var4.getPageManager().setPage(var1, var2, Page.None);
               this.queueSave(var4, var19, var3.entities, var3.empty, var3.fromClipboard, var9, var10, var11, var8, false);
               break;
            case Cancel:
               var4.getPageManager().setPage(var1, var2, Page.None);
               break;
            case ConfirmOverwrite:
               if (this.pendingSave == null) {
                  class="kw">return;
               }

               PrefabSavePage.PendingSave var18 = this.pendingSave;
               this.pendingSave = null;
               var18.playerComponent.getPageManager().setPage(var1, var2, Page.None);
               this.queueSave(
                  var18.playerComponent,
                  var18.name,
                  var18.entities,
                  var18.empty,
                  var18.fromClipboard,
                  var18.playerAnchor,
                  var18.supportMode,
                  var18.format,
                  var18.targetPack,
                  true
               );
               break;
            case CancelOverwrite:
               this.pendingSave = null;
               UICommandBuilder var17 = new UICommandBuilder();
               var17.set("#OverwriteConfirmPage.Visible", false);
               var17.set("#MainPage.Visible", true);
               this.sendUpdate(var17);
               break;
            case RemoveSupportChanged:
               if (var3.removeSupport) {
                  UICommandBuilder commandBuilderx = new UICommandBuilder();
                  commandBuilderx.set("#MainPage #SetupSupport #CheckBox.Value", false);
                  this.sendUpdate(commandBuilderx, null, false);
               }
               break;
            case SetupSupportChanged:
               if (var3.setupSupport) {
                  UICommandBuilder commandBuilderx = new UICommandBuilder();
                  commandBuilderx.set("#MainPage #RemoveSupport #CheckBox.Value", false);
                  this.sendUpdate(commandBuilderx, null, false);
               }
         }
      }
   }

   @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()));
   }

   class="kw">private void queueSave(
      @Nonnull Player var1,
      @Nonnull String var2,
      boolean var3,
      boolean var4,
      boolean var5,
      @Nullable Vector3i var6,
      @Nonnull SupportMode var7,
      @Nonnull PrefabFormat var8,
      @Nonnull AssetPack var9,
      boolean var10
   ) {
      BuilderToolsPlugin.addToQueue(var1, this.playerRef, (var9x, var10x, var11) -> {
         if (var5) {
            var10x.save(var9x, var2, true, var10, var7, var9, var8, var11);
         } else {
            var10x.saveFromSelection(var9x, var2, true, var10, var3, var4, var6, var7, var9, var8, var11);
         }
      });
   }

   class="kw">public enum Action {
      Save,
      Cancel,
      ConfirmOverwrite,
      CancelOverwrite,
      RemoveSupportChanged,
      SetupSupportChanged,
      OpenPackBrowser,
      ConfirmPackBrowser,
      CancelPackBrowser,
      OpenCreatePack,
      CreatePack,
      CancelCreatePack,
      PackSearch,
      PackSelect;

      Action() {
      }
   }

   class="kw">protected class="kw">static class PageData {
      class="kw">public class="kw">static class="kw">final String NAME = "@Name";
      class="kw">public class="kw">static class="kw">final String ENTITIES = "@Entities";
      class="kw">public class="kw">static class="kw">final String EMPTY = "@Empty";
      class="kw">public class="kw">static class="kw">final String FROM_CLIPBOARD = "@FromClipboard";
      class="kw">public class="kw">static class="kw">final String USE_PLAYER_ANCHOR = "@UsePlayerAnchor";
      class="kw">public class="kw">static class="kw">final String REMOVE_SUPPORT = "@RemoveSupport";
      class="kw">public class="kw">static class="kw">final String SETUP_SUPPORT = "@SetupSupport";
      class="kw">public class="kw">static class="kw">final String COMPRESSED = "@Compressed";
      class="kw">public class="kw">static class="kw">final BuilderCodec<PrefabSavePage.PageData> CODEC = BuilderCodec.builder(PrefabSavePage.PageData.class, PrefabSavePage.PageData::new)
         .append(
            new KeyedCodec<>("Action", new EnumCodec<>(PrefabSavePage.Action.class, EnumCodec.EnumStyle.LEGACY)),
            (var0, var1) -> var0.action = var1,
            var0 -> var0.action
         )
         .add()
         .append(new KeyedCodec<>("@Name", Codec.STRING), (var0, var1) -> var0.name = var1, var0 -> var0.name)
         .add()
         .append(new KeyedCodec<>("@Entities", Codec.BOOLEAN), (var0, var1) -> var0.entities = var1, var0 -> var0.entities)
         .add()
         .append(new KeyedCodec<>("@Empty", Codec.BOOLEAN), (var0, var1) -> var0.empty = var1, var0 -> var0.empty)
         .add()
         .append(new KeyedCodec<>("@FromClipboard", Codec.BOOLEAN), (var0, var1) -> var0.fromClipboard = var1, var0 -> var0.fromClipboard)
         .add()
         .append(new KeyedCodec<>("@UsePlayerAnchor", Codec.BOOLEAN), (var0, var1) -> var0.usePlayerAnchor = var1, var0 -> var0.usePlayerAnchor)
         .add()
         .append(new KeyedCodec<>("@RemoveSupport", Codec.BOOLEAN), (var0, var1) -> var0.removeSupport = var1, var0 -> var0.removeSupport)
         .add()
         .append(new KeyedCodec<>("@SetupSupport", Codec.BOOLEAN), (var0, var1) -> var0.setupSupport = var1, var0 -> var0.setupSupport)
         .add()
         .append(new KeyedCodec<>("@Compressed", Codec.BOOLEAN), (var0, var1) -> var0.compressed = var1, var0 -> var0.compressed)
         .add()
         .append(new KeyedCodec<>("Pack", Codec.STRING), (var0, var1) -> var0.packBrowserData.pack = var1, var0 -> var0.packBrowserData.pack)
         .add()
         .append(new KeyedCodec<>("@PackSearch", Codec.STRING), (var0, var1) -> var0.packBrowserData.search = var1, var0 -> var0.packBrowserData.search)
         .add()
         .append(new KeyedCodec<>("@CreateName", Codec.STRING), (var0, var1) -> var0.packBrowserData.createName = var1, var0 -> var0.packBrowserData.createName)
         .add()
         .append(
            new KeyedCodec<>("@CreateGroup", Codec.STRING), (var0, var1) -> var0.packBrowserData.createGroup = var1, var0 -> var0.packBrowserData.createGroup
         )
         .add()
         .append(
            new KeyedCodec<>("@CreateDescription", Codec.STRING),
            (var0, var1) -> var0.packBrowserData.createDescription = var1,
            var0 -> var0.packBrowserData.createDescription
         )
         .add()
         .append(
            new KeyedCodec<>("@CreateVersion", Codec.STRING),
            (var0, var1) -> var0.packBrowserData.createVersion = var1,
            var0 -> var0.packBrowserData.createVersion
         )
         .add()
         .append(
            new KeyedCodec<>("@CreateWebsite", Codec.STRING),
            (var0, var1) -> var0.packBrowserData.createWebsite = var1,
            var0 -> var0.packBrowserData.createWebsite
         )
         .add()
         .append(
            new KeyedCodec<>("@CreateAuthorName", Codec.STRING),
            (var0, var1) -> var0.packBrowserData.createAuthorName = var1,
            var0 -> var0.packBrowserData.createAuthorName
         )
         .add()
         .append(
            new KeyedCodec<>("ValidateCreate", Codec.STRING),
            (var0, var1) -> var0.packBrowserData.validateCreate = var1,
            var0 -> var0.packBrowserData.validateCreate
         )
         .add()
         .build();
      class="kw">public PrefabSavePage.Action action;
      class="kw">public String name;
      class="kw">public boolean entities = true;
      class="kw">public boolean empty = false;
      class="kw">public boolean fromClipboard = false;
      class="kw">public boolean usePlayerAnchor = false;
      class="kw">public boolean removeSupport = false;
      class="kw">public boolean setupSupport = false;
      class="kw">public boolean compressed = false;
      class="kw">public class="kw">final AssetPackSaveBrowserEventData packBrowserData = new AssetPackSaveBrowserEventData();

      class="kw">public PageData() {
      }
   }

   class="kw">private record PendingSave(
      @Nonnull String name,
      boolean entities,
      boolean empty,
      boolean fromClipboard,
      @Nullable Vector3i playerAnchor,
      @Nonnull SupportMode supportMode,
      @Nonnull PrefabFormat format,
      @Nonnull AssetPack targetPack,
      @Nonnull Player playerComponent
   ) {
      class="kw">private PendingSave {
      }
   }
}