PageData class

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

Файл: com/hypixel/hytale/builtin/buildertools/prefabeditor/ui/PrefabTeleportPage.java

Поля (5)

МодификаторыТипИмя
public static final BuilderCodec<PrefabTeleportPage.PageData> CODEC
static final String KEY_PREFAB_UUID
static final String KEY_SEARCH_QUERY
private String prefabUuid
private String searchQuery

Методы (2)

МодификаторыВозвратСигнатура
public String getPrefabUuidpublic String getPrefabUuid()
public String getSearchQuerypublic String getSearchQuery()

Исходный код

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

class="kw">import com.hypixel.hytale.builtin.buildertools.prefabeditor.PrefabEditSession;
class="kw">import com.hypixel.hytale.builtin.buildertools.prefabeditor.PrefabEditingMetadata;
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.common.util.StringCompareUtil;
class="kw">import com.hypixel.hytale.component.Ref;
class="kw">import com.hypixel.hytale.component.Store;
class="kw">import com.hypixel.hytale.math.util.ChunkUtil;
class="kw">import com.hypixel.hytale.math.vector.Rotation3f;
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.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.teleport.Teleport;
class="kw">import com.hypixel.hytale.server.core.prefab.PrefabStore;
class="kw">import com.hypixel.hytale.server.core.ui.Value;
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.chunk.WorldChunk;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
class="kw">import it.unimi.dsi.fastutil.objects.Object2IntMap;
class="kw">import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap;
class="kw">import java.nio.file.Path;
class="kw">import java.util.Comparator;
class="kw">import java.util.List;
class="kw">import java.util.Locale;
class="kw">import java.util.Map;
class="kw">import java.util.UUID;
class="kw">import java.util.stream.Collectors;
class="kw">import javax.annotation.Nonnull;
class="kw">import org.joml.Vector3d;
class="kw">import org.joml.Vector3i;

class="kw">public class PrefabTeleportPage class="kw">extends InteractiveCustomUIPage<PrefabTeleportPage.PageData> {
   class="kw">private class="kw">static class="kw">final Value<String> BUTTON_HIGHLIGHTED = Value.ref("Pages/BasicTextButton.ui", "SelectedLabelStyle");
   @Nonnull
   class="kw">private class="kw">final PrefabEditSession prefabEditSession;
   @Nonnull
   class="kw">private String searchQuery = "";

   class="kw">public PrefabTeleportPage(@Nonnull PlayerRef var1, @Nonnull PrefabEditSession var2) {
      super(var1, CustomPageLifetime.CanDismiss, PrefabTeleportPage.PageData.CODEC);
      this.prefabEditSession = var2;
   }

   @Override
   class="kw">public void build(@Nonnull Ref<EntityStore> var1, @Nonnull UICommandBuilder var2, @Nonnull UIEventBuilder var3, @Nonnull Store<EntityStore> var4) {
      var2.append("Pages/PrefabTeleportPage.ui");
      var3.addEventBinding(CustomUIEventBindingType.ValueChanged, "#SearchInput", EventData.of("@SearchQuery", "#SearchInput.Value"), false);
      this.buildPrefabList(var2, var3);
   }

   class="kw">private void buildPrefabList(@Nonnull UICommandBuilder var1, @Nonnull UIEventBuilder var2) {
      var1.clear("#FileList");
      Map var3 = this.prefabEditSession.getLoadedPrefabMetadata();
      if (!var3.isEmpty()) {
         List var4;
         if (!this.searchQuery.isEmpty()) {
            Object2IntMap var5 = new Object2IntOpenHashMap(var3.size());

            for (PrefabEditingMetadata var7 : var3.values()) {
               String var8 = PrefabStore.stripPrefabSuffix(var7.getPrefabPath().getFileName().toString());
               int var9 = StringCompareUtil.getFuzzyDistance(var8, this.searchQuery, Locale.ENGLISH);
               if (var9 > 0) {
                  var5.put(var7, var9);
               }
            }

            var4 = var5.keySet().stream().sorted(Comparator.comparingInt(var5::getInt).reversed()).collect(Collectors.toList());
         } else {
            var4 = var3.values()
               .stream()
               .sorted(Comparator.comparing(var0 -> var0.getPrefabPath().getFileName().toString().toLowerCase(Locale.ROOT)))
               .collect(Collectors.toList());
         }

         int var10 = 0;

         for (PrefabEditingMetadata var12 : var4) {
            Path var13 = var12.getPrefabPath();
            String var14 = PrefabStore.stripPrefabSuffix(var13.getFileName().toString());
            var1.append("#FileList", "Pages/BasicTextButton.ui");
            var1.set("#FileList[" + var10 + "].Text", var14);
            var1.set("#FileList[" + var10 + "].Style", BUTTON_HIGHLIGHTED);
            var1.set("#FileList[" + var10 + "].TooltipText", var13.toString());
            var2.addEventBinding(CustomUIEventBindingType.Activating, "#FileList[" + var10 + "]", EventData.of("PrefabUuid", var12.getUuid().toString()));
            var10++;
         }
      }
   }

   class="kw">public void handleDataEvent(@Nonnull Ref<EntityStore> var1, @Nonnull Store<EntityStore> var2, @Nonnull PrefabTeleportPage.PageData var3) {
      if (var3.getSearchQuery() != null) {
         this.searchQuery = var3.getSearchQuery().trim().toLowerCase(Locale.ROOT);
         UICommandBuilder var16 = new UICommandBuilder();
         UIEventBuilder var17 = new UIEventBuilder();
         this.buildPrefabList(var16, var17);
         this.sendUpdate(var16, var17, false);
      } else {
         if (var3.getPrefabUuid() != null) {
            try {
               UUID var4 = UUID.fromString(var3.getPrefabUuid());
               PrefabEditingMetadata var5 = this.prefabEditSession.getLoadedPrefabMetadata().get(var4);
               if (var5 != null) {
                  Player var6 = var2.getComponent(var1, Player.getComponentType());
                  assert var6 != null;
                  Vector3i var7 = var5.getMinPoint();
                  Vector3i var8 = var5.getMaxPoint();
                  int var9 = (var7.x + var8.x) / 2;
                  int var10 = (var7.z + var8.z) / 2;
                  World var11 = var2.getExternalData().getWorld();
                  WorldChunk var12 = var11.getChunkIfInMemory(ChunkUtil.indexChunkFromBlock(var9, var10));
                  int var13 = var12 != null ? var12.getHeight(var9, var10) + 8 : var8.y + 8;
                  Vector3d var14 = new Vector3d(var9 + 0.5, var13, var10 + 0.5);
                  var2.addComponent(var1, Teleport.getComponentType(), Teleport.createForPlayer(var14, new Rotation3f()));
                  var6.getPageManager().setPage(var1, var2, Page.None);
               }
            } catch (IllegalArgumentException var15) {
            }
         }
      }
   }

   class="kw">public class="kw">static class PageData {
      class="kw">static class="kw">final String KEY_SEARCH_QUERY = "@SearchQuery";
      class="kw">static class="kw">final String KEY_PREFAB_UUID = "PrefabUuid";
      class="kw">public class="kw">static class="kw">final BuilderCodec<PrefabTeleportPage.PageData> CODEC = BuilderCodec.builder(
            PrefabTeleportPage.PageData.class, PrefabTeleportPage.PageData::new
         )
         .addField(new KeyedCodec<>("@SearchQuery", Codec.STRING), (var0, var1) -> var0.searchQuery = var1, var0 -> var0.searchQuery)
         .addField(new KeyedCodec<>("PrefabUuid", Codec.STRING), (var0, var1) -> var0.prefabUuid = var1, var0 -> var0.prefabUuid)
         .build();
      class="kw">private String searchQuery;
      class="kw">private String prefabUuid;

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

      class="kw">public String getSearchQuery() {
         class="kw">return this.searchQuery;
      }

      class="kw">public String getPrefabUuid() {
         class="kw">return this.prefabUuid;
      }
   }
}