PrefabTeleportPage class

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

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

extends: InteractiveCustomUIPage<PrefabTeleportPage.PageData>

Поля (29)

МодификаторыТипИмя
final Value<String> BUTTON_HIGHLIGHTED
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
int var10
int var10
World var11
WorldChunk var12
Path var13
int var13
String var14
Vector3d var14
UICommandBuilder var16
UIEventBuilder var17
Map var3
List var4
var4
var4
UUID var4
Object2IntMap var5
PrefabEditingMetadata var5
Player var6
Vector3i var7
String var8
Vector3i var8
int var9
int var9

Методы (9)

МодификаторыВозвратСигнатура
public PageDatapublic PageData()
private void buildPrefabListvoid buildPrefabList(@Nonnull UICommandBuilder var1, @Nonnull UIEventBuilder var2)
for for(PrefabEditingMetadata var12 : var4)
public String getPrefabUuidpublic String getPrefabUuid()
public String getSearchQuerypublic String getSearchQuery()
public void handleDataEventvoid handleDataEvent(@Nonnull Ref<EntityStore> var1, @Nonnull Store<EntityStore> var2, @Nonnull PrefabTeleportPage.PageData var3)
if if(var9 > 0)
if if(var5 != null)
abstract super super(var1, CustomPageLifetime.CanDismiss, PrefabTeleportPage.PageData.CODEC)

Исходный код

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