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