PrefabSavePage class

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

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

extends: InteractiveCustomUIPage<PrefabSavePage.PageData>

Поля (58)

МодификаторыТипИмя
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
Save, Cancel, ConfirmOverwrite, CancelOverwrite, RemoveSupportChanged, SetupSupportChanged, OpenPackBrowser, ConfirmPackBrowser, CancelPackBrowser, OpenCreatePack, CreatePack, CancelCreatePack, PackSearch, PackSelect
public static final String REMOVE_SUPPORT
public static final String SETUP_SUPPORT
public static final String USE_PLAYER_ANCHOR
public PrefabSavePage.Action action
break
break
break
break
break
UICommandBuilder commandBuilderx
UICommandBuilder commandBuilderx
UICommandBuilder commandBuilderx
UICommandBuilder commandBuilderx
UICommandBuilder commandBuilderx
public boolean compressed
public boolean empty
public boolean entities
public boolean fromClipboard
public String name
public final AssetPackSaveBrowserEventData packBrowserData
public boolean removeSupport
return
return
return
return
return
return
public boolean setupSupport
public boolean usePlayerAnchor
SupportMode var10
var10
var10
var10
PrefabFormat var11
String var12
var12
Path var13
Path var14
UICommandBuilder var15
UICommandBuilder var17
PrefabSavePage.PendingSave var18
String var19
Player var4
TransformComponent var4
Player var5
AssetPackSaveBrowser.ActionResult var5
Vector3d var5
String var6
UICommandBuilder var7
AssetPack var8
Vector3i var9

Методы (18)

МодификаторыВозвратСигнатура
Action Action()
public PageDatapublic PageData()
private record PendingSaverecord 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)
public void handleDataEventvoid handleDataEvent(@Nonnull Ref<EntityStore> var1, @Nonnull Store<EntityStore> var2, @Nonnull PrefabSavePage.PageData var3)
if if(!this.initialized)
if if(var5 != null)
if if(var5 != null)
if if(var8 == null)
if if(var3.setupSupport)
if if(this.pendingSave == null)
if if(var3.removeSupport)
if if(var3.setupSupport)
if if(!var3)
if if(var4 == null)
if if(var5)
private void queueSavevoid 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)
abstract super super(var1, CustomPageLifetime.CanDismissOrCloseThroughInteraction, PrefabSavePage.PageData.CODEC)
switch switch(var3.action)

Исходный код

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