PageData class

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

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

Поля (19)

МодификаторыТипИмя
public static final BuilderCodec<PrefabSavePage.PageData> CODEC
public static final String COMPRESSED
public static final String EMPTY
public static final String ENTITIES
public static final String FROM_CLIPBOARD
public static final String NAME
public static final String REMOVE_SUPPORT
public static final String SETUP_SUPPORT
public static final String USE_PLAYER_ANCHOR
public PrefabSavePage.Action action
public boolean compressed
public boolean empty
public boolean entities
public boolean fromClipboard
public String name
public final AssetPackSaveBrowserEventData packBrowserData
public boolean removeSupport
public boolean setupSupport
public boolean usePlayerAnchor

Исходный код

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