Action enum

Пакет: com.hypixel.hytale.builtin.instances.page

Файл: com/hypixel/hytale/builtin/instances/page/InstanceListPage.java

Поля (1)

МодификаторыТипИмя
Select, Load, Spawn

Исходный код

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

class="kw">import com.hypixel.hytale.assetstore.AssetPack;
class="kw">import com.hypixel.hytale.builtin.instances.InstancesPlugin;
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.component.Ref;
class="kw">import com.hypixel.hytale.component.Store;
class="kw">import com.hypixel.hytale.math.vector.Rotation3f;
class="kw">import com.hypixel.hytale.math.vector.Transform;
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.server.core.Message;
class="kw">import com.hypixel.hytale.server.core.asset.AssetModule;
class="kw">import com.hypixel.hytale.server.core.entity.entities.player.pages.InteractiveCustomUIPage;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.HeadRotation;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.TransformComponent;
class="kw">import com.hypixel.hytale.server.core.modules.entity.teleport.Teleport;
class="kw">import com.hypixel.hytale.server.core.ui.browser.FileBrowserConfig;
class="kw">import com.hypixel.hytale.server.core.ui.browser.FileBrowserEventData;
class="kw">import com.hypixel.hytale.server.core.ui.browser.ServerFileBrowser;
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.World;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
class="kw">import java.nio.file.Files;
class="kw">import java.nio.file.Path;
class="kw">import java.util.Locale;
class="kw">import java.util.concurrent.CompletableFuture;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">import org.joml.Vector3d;

class="kw">public class InstanceListPage class="kw">extends InteractiveCustomUIPage<InstanceListPage.PageData> {
   @Nonnull
   class="kw">private class="kw">static class="kw">final String ASSET_PACK_SUB_PATH = "Server/Instances";
   @Nullable
   class="kw">private String selectedInstance;
   @Nonnull
   class="kw">private class="kw">final ServerFileBrowser browser;

   class="kw">public InstanceListPage(@Nonnull PlayerRef var1) {
      super(var1, CustomPageLifetime.CanDismiss, InstanceListPage.PageData.CODEC);
      FileBrowserConfig var2 = FileBrowserConfig.builder()
         .listElementId("#List")
         .searchInputId("#SearchInput")
         .currentPathId("#CurrentPath")
         .enableRootSelector(false)
         .enableSearch(true)
         .enableDirectoryNav(true)
         .maxResults(50)
         .assetPackMode(true, "Server/Instances")
         .terminalDirectoryPredicate(var0 -> Files.exists(var0.resolve("instance.bson")))
         .build();
      this.browser = new ServerFileBrowser(var2);
   }

   @Override
   class="kw">public void build(@Nonnull Ref<EntityStore> var1, @Nonnull UICommandBuilder var2, @Nonnull UIEventBuilder var3, @Nonnull Store<EntityStore> var4) {
      var2.append("Pages/InstanceListPage.ui");
      var3.addEventBinding(CustomUIEventBindingType.Activating, "#Spawn", EventData.of("Action", InstanceListPage.Action.Spawn.toString()));
      var3.addEventBinding(CustomUIEventBindingType.Activating, "#Load", EventData.of("Action", InstanceListPage.Action.Load.toString()));
      var2.set("#Load.Visible", hasEditablePack());
      this.browser.buildCurrentPath(var2);
      this.browser.buildSearchInput(var2, var3);
      this.browser.buildFileList(var2, var3);
      var2.set("#Name.Text", this.selectedInstance != null ? this.selectedInstance : "");
      var2.set("#Name.Visible", this.selectedInstance != null);
      var2.set("#Spawn.Disabled", this.selectedInstance == null);
      var2.set("#Load.Disabled", this.selectedInstance == null);
   }

   class="kw">public void handleDataEvent(@Nonnull Ref<EntityStore> var1, @Nonnull Store<EntityStore> var2, @Nonnull InstanceListPage.PageData var3) {
      if (var3.searchQuery != null) {
         this.browser.setSearchQuery(var3.searchQuery.trim().toLowerCase(Locale.ROOT));
         UICommandBuilder var8 = new UICommandBuilder();
         UIEventBuilder var11 = new UIEventBuilder();
         this.browser.buildCurrentPath(var8);
         this.browser.buildFileList(var8, var11);
         this.sendUpdate(var8, var11, false);
      } else if (var3.searchResult != null) {
         Path var7 = this.browser.resolveAssetPackPath(var3.searchResult);
         if (var7 != null && this.isInstance(var7)) {
            this.updateSelection(var3.searchResult);
         }
      } else if (var3.file != null) {
         String var4 = var3.file;
         if ("..".equals(var4)) {
            this.browser.navigateUp();
            this.selectedInstance = null;
            UICommandBuilder var10 = new UICommandBuilder();
            UIEventBuilder var13 = new UIEventBuilder();
            this.browser.buildCurrentPath(var10);
            this.browser.buildFileList(var10, var13);
            var10.set("#Name.Text", "");
            var10.set("#Name.Visible", false);
            var10.set("#Spawn.Disabled", true);
            var10.set("#Load.Disabled", true);
            this.sendUpdate(var10, var13, false);
         } else {
            if (this.browser.handleEvent(FileBrowserEventData.file(var4))) {
               this.selectedInstance = null;
               UICommandBuilder var5 = new UICommandBuilder();
               UIEventBuilder var6 = new UIEventBuilder();
               this.browser.buildCurrentPath(var5);
               this.browser.buildFileList(var5, var6);
               var5.set("#Name.Text", "");
               var5.set("#Name.Visible", false);
               var5.set("#Spawn.Disabled", true);
               var5.set("#Load.Disabled", true);
               this.sendUpdate(var5, var6, false);
            } else {
               String var9 = this.browser.getAssetPackCurrentPath().isEmpty() ? var4 : this.browser.getAssetPackCurrentPath() + "/" + var4;
               Path var12 = this.browser.resolveAssetPackPath(var9);
               if (var12 != null && this.isInstance(var12)) {
                  this.updateSelection(var9);
               }
            }
         }
      } else {
         if (var3.getAction() != null) {
            class="kw">switch (var3.getAction()) {
               case Select:
               class="kw">default:
                  break;
               case Load:
                  if (this.selectedInstance != null) {
                     this.load(var1, var2);
                     this.close();
                  }
                  break;
               case Spawn:
                  if (this.selectedInstance != null) {
                     this.spawn(var1, var2);
                     this.close();
                  }
            }
         }
      }
   }

   class="kw">private boolean isInstance(@Nonnull Path var1) {
      class="kw">return Files.isDirectory(var1) && Files.exists(var1.resolve("instance.bson"));
   }

   class="kw">private void load(@Nonnull Ref<EntityStore> var1, @Nonnull Store<EntityStore> var2) {
      String var3 = this.getInstanceNameFromVirtualPath(this.selectedInstance);
      if (var3 != null) {
         if (AssetModule.get().isAssetPathImmutable(InstancesPlugin.getInstanceAssetPath(var3))) {
            this.playerRef.sendMessage(Message.translation("server.commands.instances.edit.assetsImmutable"));
         } else {
            InstancesPlugin.loadInstanceAssetForEdit(var3).thenAccept(var1x -> {
               Store var2 = var1.getStore();
               World var3 = var2.getExternalData().getWorld();
               var3.execute(() -> {
                  Transform var3 = var1x.getWorldConfig().getSpawnProvider().getSpawnPoint(var1, var2);
                  Teleport var4 = Teleport.createForPlayer(var1x, var3);
                  var2.addComponent(var1, Teleport.getComponentType(), var4);
               });
            }).exceptionally(var0 -> {
               var0.printStackTrace();
               class="kw">return null;
            });
         }
      }
   }

   class="kw">private class="kw">static boolean hasEditablePack() {
      for (AssetPack var1 : AssetModule.get().getAssetPacks()) {
         if (!var1.isImmutable()) {
            class="kw">return true;
         }
      }

      class="kw">return false;
   }

   class="kw">private void spawn(@Nonnull Ref<EntityStore> var1, @Nonnull Store<EntityStore> var2) {
      String var3 = this.getInstanceNameFromVirtualPath(this.selectedInstance);
      if (var3 != null) {
         World var4 = var2.getExternalData().getWorld();
         var4.execute(() -> {
            TransformComponent var4 = var2.getComponent(var1, TransformComponent.getComponentType());
            HeadRotation var5 = var2.getComponent(var1, HeadRotation.getComponentType());
            assert var4 != null;
            Vector3d var6 = var4.getPosition();
            Transform var7 = new Transform(new Vector3d(var6), new Rotation3f(var5.getRotation()));
            CompletableFuture var8 = InstancesPlugin.get().spawnInstance(var3, var4, var7);
            InstancesPlugin.teleportPlayerToLoadingInstance(var1, var2, var8, null);
         });
      }
   }

   @Nullable
   class="kw">private String getInstanceNameFromVirtualPath(@Nullable String var1) {
      if (var1 != null && !var1.isEmpty()) {
         String var2 = var1.replace('\\', '/');
         String[] var3 = var2.split("/", 2);
         class="kw">return var3.length > 1 ? var3[1] : var2;
      } else {
         class="kw">return null;
      }
   }

   class="kw">private void updateSelection(@Nonnull String var1) {
      this.selectedInstance = var1;
      UICommandBuilder var2 = new UICommandBuilder();
      String var3 = var1.contains("/") ? var1.substring(var1.lastIndexOf(47) + 1) : var1;
      var2.set("#Name.Text", var3);
      var2.set("#Name.Visible", true);
      var2.set("#Spawn.Disabled", false);
      var2.set("#Load.Disabled", false);
      this.sendUpdate(var2, false);
   }

   class="kw">public enum Action {
      Select,
      Load,
      Spawn;

      Action() {
      }
   }

   class="kw">public class="kw">static class PageData {
      @Nonnull
      class="kw">public class="kw">static class="kw">final String KEY_INSTANCE = "Instance";
      @Nonnull
      class="kw">public class="kw">static class="kw">final String KEY_ACTION = "Action";
      @Nonnull
      class="kw">public class="kw">static class="kw">final BuilderCodec<InstanceListPage.PageData> CODEC = BuilderCodec.builder(InstanceListPage.PageData.class, InstanceListPage.PageData::new)
         .addField(new KeyedCodec<>("Instance", BuilderCodec.STRING), (var0, var1) -> var0.instance = var1, var0 -> var0.instance)
         .addField(new KeyedCodec<>("Action", new EnumCodec<>(InstanceListPage.Action.class)), (var0, var1) -> var0.action = var1, var0 -> var0.action)
         .addField(new KeyedCodec<>("File", Codec.STRING), (var0, var1) -> var0.file = var1, var0 -> var0.file)
         .addField(new KeyedCodec<>("@SearchQuery", Codec.STRING), (var0, var1) -> var0.searchQuery = var1, var0 -> var0.searchQuery)
         .addField(new KeyedCodec<>("SearchResult", Codec.STRING), (var0, var1) -> var0.searchResult = var1, var0 -> var0.searchResult)
         .build();
      class="kw">private String instance;
      class="kw">private InstanceListPage.Action action;
      @Nullable
      class="kw">private String file;
      @Nullable
      class="kw">private String searchQuery;
      @Nullable
      class="kw">private String searchResult;

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

      class="kw">public String getInstance() {
         class="kw">return this.instance;
      }

      class="kw">public InstanceListPage.Action getAction() {
         class="kw">return this.action;
      }
   }
}