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;
}
}
}