PageData class
Пакет: com.hypixel.hytale.builtin.buildertools.prefablist
Файл: com/hypixel/hytale/builtin/buildertools/prefablist/PrefabSavePage.java
Поля (19)
| Модификаторы | Тип | Имя |
|---|---|---|
|
public static final BuilderCodec<PrefabSavePage.PageData> |
CODEC |
|
public static final String |
COMPRESSED |
|
public static final String |
EMPTY |
|
public static final String |
ENTITIES |
|
public static final String |
FROM_CLIPBOARD |
|
public static final String |
NAME |
|
public static final String |
REMOVE_SUPPORT |
|
public static final String |
SETUP_SUPPORT |
|
public static final String |
USE_PLAYER_ANCHOR |
|
public PrefabSavePage.Action |
action |
|
public boolean |
compressed |
|
public boolean |
empty |
|
public boolean |
entities |
|
public boolean |
fromClipboard |
|
public String |
name |
|
public final AssetPackSaveBrowserEventData |
packBrowserData |
|
public boolean |
removeSupport |
|
public boolean |
setupSupport |
|
public boolean |
usePlayerAnchor |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.builtin.buildertools.prefablist;
class="kw">import com.hypixel.hytale.assetstore.AssetPack;
class="kw">import com.hypixel.hytale.builtin.buildertools.BuilderToolsPlugin;
class="kw">import com.hypixel.hytale.builtin.buildertools.BuilderToolsUserData;
class="kw">import com.hypixel.hytale.builtin.buildertools.prefabeditor.saving.SupportMode;
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.common.util.PathUtil;
class="kw">import com.hypixel.hytale.component.Ref;
class="kw">import com.hypixel.hytale.component.Store;
class="kw">import com.hypixel.hytale.math.util.MathUtil;
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.Message;
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.component.TransformComponent;
class="kw">import com.hypixel.hytale.server.core.modules.singleplayer.SingleplayerModule;
class="kw">import com.hypixel.hytale.server.core.prefab.PrefabFormat;
class="kw">import com.hypixel.hytale.server.core.prefab.PrefabStore;
class="kw">import com.hypixel.hytale.server.core.ui.browser.AssetPackSaveBrowser;
class="kw">import com.hypixel.hytale.server.core.ui.browser.AssetPackSaveBrowserConfig;
class="kw">import com.hypixel.hytale.server.core.ui.browser.AssetPackSaveBrowserEventData;
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.storage.EntityStore;
class="kw">import java.nio.file.Path;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">import org.joml.Vector3d;
class="kw">import org.joml.Vector3i;
class="kw">public class PrefabSavePage class="kw">extends InteractiveCustomUIPage<PrefabSavePage.PageData> {
@Nonnull
class="kw">private class="kw">static class="kw">final Message MESSAGE_NAME_REQUIRED = Message.translation("server.customUI.prefabSavePage.required");
@Nonnull
class="kw">private class="kw">static class="kw">final Message MESSAGE_NAME_INVALID = Message.translation("server.customUI.prefabSavePage.invalid");
@Nonnull
class="kw">private class="kw">static class="kw">final Message MESSAGE_PACK_REQUIRED = Message.translation("server.customUI.assetPackBrowser.packRequired");
class="kw">private class="kw">final AssetPackSaveBrowser packBrowser = new AssetPackSaveBrowser(AssetPackSaveBrowserConfig.defaults());
class="kw">private boolean initialized = false;
@Nullable
class="kw">private PrefabSavePage.PendingSave pendingSave;
class="kw">public PrefabSavePage(@Nonnull PlayerRef var1) {
super(var1, CustomPageLifetime.CanDismissOrCloseThroughInteraction, PrefabSavePage.PageData.CODEC);
}
@Override
class="kw">public void build(@Nonnull Ref<EntityStore> var1, @Nonnull UICommandBuilder var2, @Nonnull UIEventBuilder var3, @Nonnull Store<EntityStore> var4) {
if (!this.initialized) {
this.initialized = true;
Player var5 = var4.getComponent(var1, Player.getComponentType());
if (var5 != null) {
String var6 = BuilderToolsUserData.get(var5).getLastSavePack();
this.packBrowser.setSelectedPackKey(var6);
if (var6 != null && !this.packBrowser.hasSelectedPack()) {
this.playerRef.sendMessage(Message.translation("server.customUI.assetPackBrowser.packNoLongerAvailable"));
}
}
}
var2.append("Pages/PrefabSavePage.ui");
var2.set("#PackBrowserPage.Visible", false);
var2.set("#CreatePackPage.Visible", false);
if (this.packBrowser.hasSelectedPack()) {
var2.set("#MainPage #SelectedPackLabel.Text", this.packBrowser.getSelectedPackDisplayName());
}
var2.set("#MainPage #NameRequiredText.Visible", false);
var2.set("#MainPage #Entities #CheckBox.Value", true);
var2.set("#MainPage #Empty #CheckBox.Value", false);
var2.set("#MainPage #FromClipboard #CheckBox.Value", false);
var2.set("#MainPage #UsePlayerAnchor #CheckBox.Value", false);
var2.set("#MainPage #RemoveSupport #CheckBox.Value", false);
var2.set("#MainPage #SetupSupport #CheckBox.Value", false);
var2.set("#MainPage #Compressed #CheckBox.Value", false);
var2.set("#OverwriteConfirmPage.Visible", false);
var3.addEventBinding(
CustomUIEventBindingType.Activating,
"#MainPage #SaveButton",
new EventData()
.append("Action", PrefabSavePage.Action.Save.name())
.append("@Name", "#MainPage #NameInput.Value")
.append("@Entities", "#MainPage #Entities #CheckBox.Value")
.append("@Empty", "#MainPage #Empty #CheckBox.Value")
.append("@FromClipboard", "#MainPage #FromClipboard #CheckBox.Value")
.append("@UsePlayerAnchor", "#MainPage #UsePlayerAnchor #CheckBox.Value")
.append("@RemoveSupport", "#MainPage #RemoveSupport #CheckBox.Value")
.append("@SetupSupport", "#MainPage #SetupSupport #CheckBox.Value")
.append("@Compressed", "#MainPage #Compressed #CheckBox.Value")
);
var3.addEventBinding(
CustomUIEventBindingType.Activating, "#MainPage #CancelButton", new EventData().append("Action", PrefabSavePage.Action.Cancel.name())
);
var3.addEventBinding(
CustomUIEventBindingType.ValueChanged,
"#MainPage #RemoveSupport #CheckBox",
new EventData()
.append("Action", PrefabSavePage.Action.RemoveSupportChanged.name())
.append("@RemoveSupport", "#MainPage #RemoveSupport #CheckBox.Value"),
false
);
var3.addEventBinding(
CustomUIEventBindingType.ValueChanged,
"#MainPage #SetupSupport #CheckBox",
new EventData().append("Action", PrefabSavePage.Action.SetupSupportChanged.name()).append("@SetupSupport", "#MainPage #SetupSupport #CheckBox.Value"),
false
);
var3.addEventBinding(
CustomUIEventBindingType.Activating,
"#OverwriteConfirmPage #ConfirmOverwriteButton",
new EventData().append("Action", PrefabSavePage.Action.ConfirmOverwrite.name()),
false
);
var3.addEventBinding(
CustomUIEventBindingType.Activating,
"#OverwriteConfirmPage #CancelOverwriteButton",
new EventData().append("Action", PrefabSavePage.Action.CancelOverwrite.name()),
false
);
this.packBrowser.buildEventBindings(var3, "#MainPage #BrowsePackButton");
this.packBrowser.buildUI(var2, var3);
}
class="kw">public void handleDataEvent(@Nonnull Ref<EntityStore> var1, @Nonnull Store<EntityStore> var2, @Nonnull PrefabSavePage.PageData var3) {
Player var4 = var2.getComponent(var1, Player.getComponentType());
assert var4 != null;
AssetPackSaveBrowser.ActionResult var5 = this.packBrowser
.handleAction(var3.action != null ? var3.action.name() : null, var3.packBrowserData, "#MainPage #SelectedPackLabel");
if (var5 != null) {
if (var5.errorKey() != null) {
this.playerRef.sendMessage(Message.translation(var5.errorKey()));
}
if (var5.packConfirmed() && this.packBrowser.hasSelectedPack()) {
BuilderToolsUserData.get(var4).setLastSavePack(this.packBrowser.getSelectedPack().getName());
}
this.sendUpdate(var5.commandBuilder(), var5.eventBuilder(), false);
} else {
class="kw">switch (var3.action) {
case Save:
String var19 = var3.name != null ? var3.name.trim() : null;
if (var19 == null || var19.isBlank()) {
UICommandBuilder commandBuilderx = new UICommandBuilder();
commandBuilderx.set("#MainPage #NameRequiredText.Visible", true);
commandBuilderx.set("#MainPage #NameRequiredText.TextSpans", MESSAGE_NAME_REQUIRED);
this.sendUpdate(commandBuilderx, null, false);
class="kw">return;
}
if (var19.contains("..")) {
UICommandBuilder commandBuilderx = new UICommandBuilder();
commandBuilderx.set("#MainPage #NameInput.Value", var19);
commandBuilderx.set("#MainPage #NameRequiredText.Visible", true);
commandBuilderx.set("#MainPage #NameRequiredText.TextSpans", MESSAGE_NAME_INVALID);
this.sendUpdate(commandBuilderx, null, false);
class="kw">return;
}
UICommandBuilder var7 = new UICommandBuilder();
var7.set("#MainPage #NameInput.Value", var19);
var7.set("#MainPage #NameRequiredText.Visible", false);
this.sendUpdate(var7, null, false);
AssetPack var8 = this.packBrowser.getSelectedPack();
if (var8 == null) {
this.playerRef.sendMessage(MESSAGE_PACK_REQUIRED);
this.sendUpdate(null, null, false);
class="kw">return;
}
BuilderToolsUserData.get(var4).setLastSavePack(var8.getName());
Vector3i var9 = this.getPlayerAnchor(var1, var2, var3.usePlayerAnchor && !var3.fromClipboard);
SupportMode var10;
if (var3.setupSupport) {
var10 = SupportMode.CALCULATE;
} else if (var3.removeSupport) {
var10 = SupportMode.REMOVE;
} else {
var10 = SupportMode.KEEP_EXISTING;
}
PrefabFormat var11 = var3.compressed ? PrefabFormat.COMPRESSED : PrefabFormat.AUTO;
String var12 = var19;
if (!PrefabStore.isPrefabFileName(var12)) {
var12 = var12 + ".prefab.json";
}
Path var13 = PrefabStore.get().getAssetPrefabsPathForPack(var8);
Path var14 = var13.resolve(var12).toAbsolutePath().normalize();
if (!PathUtil.isChildOf(var13, var14) && !SingleplayerModule.isOwner(this.playerRef)) {
UICommandBuilder commandBuilderx = new UICommandBuilder();
commandBuilderx.set("#MainPage #NameRequiredText.Visible", true);
commandBuilderx.set("#MainPage #NameRequiredText.TextSpans", MESSAGE_NAME_INVALID);
this.sendUpdate(commandBuilderx, null, false);
class="kw">return;
}
if (PrefabStore.get().prefabExists(var14)) {
this.pendingSave = new PrefabSavePage.PendingSave(var19, var3.entities, var3.empty, var3.fromClipboard, var9, var10, var11, var8, var4);
UICommandBuilder var15 = new UICommandBuilder();
var15.set("#MainPage.Visible", false);
var15.set("#OverwriteConfirmPage.Visible", true);
var15.set(
"#OverwriteConfirmPage #MessageText.TextSpans",
Message.translation("server.customUI.prefabSavePage.overwriteConfirm.messageSingle").param("name", var14.getFileName().toString())
);
this.sendUpdate(var15);
class="kw">return;
}
var4.getPageManager().setPage(var1, var2, Page.None);
this.queueSave(var4, var19, var3.entities, var3.empty, var3.fromClipboard, var9, var10, var11, var8, false);
break;
case Cancel:
var4.getPageManager().setPage(var1, var2, Page.None);
break;
case ConfirmOverwrite:
if (this.pendingSave == null) {
class="kw">return;
}
PrefabSavePage.PendingSave var18 = this.pendingSave;
this.pendingSave = null;
var18.playerComponent.getPageManager().setPage(var1, var2, Page.None);
this.queueSave(
var18.playerComponent,
var18.name,
var18.entities,
var18.empty,
var18.fromClipboard,
var18.playerAnchor,
var18.supportMode,
var18.format,
var18.targetPack,
true
);
break;
case CancelOverwrite:
this.pendingSave = null;
UICommandBuilder var17 = new UICommandBuilder();
var17.set("#OverwriteConfirmPage.Visible", false);
var17.set("#MainPage.Visible", true);
this.sendUpdate(var17);
break;
case RemoveSupportChanged:
if (var3.removeSupport) {
UICommandBuilder commandBuilderx = new UICommandBuilder();
commandBuilderx.set("#MainPage #SetupSupport #CheckBox.Value", false);
this.sendUpdate(commandBuilderx, null, false);
}
break;
case SetupSupportChanged:
if (var3.setupSupport) {
UICommandBuilder commandBuilderx = new UICommandBuilder();
commandBuilderx.set("#MainPage #RemoveSupport #CheckBox.Value", false);
this.sendUpdate(commandBuilderx, null, false);
}
}
}
}
@Nullable
class="kw">private Vector3i getPlayerAnchor(@Nonnull Ref<EntityStore> var1, @Nonnull Store<EntityStore> var2, boolean var3) {
if (!var3) {
class="kw">return null;
}
TransformComponent var4 = var2.getComponent(var1, TransformComponent.getComponentType());
if (var4 == null) {
class="kw">return null;
}
Vector3d var5 = var4.getPosition();
class="kw">return new Vector3i(MathUtil.floor(var5.x()), MathUtil.floor(var5.y()), MathUtil.floor(var5.z()));
}
class="kw">private void queueSave(
@Nonnull Player var1,
@Nonnull String var2,
boolean var3,
boolean var4,
boolean var5,
@Nullable Vector3i var6,
@Nonnull SupportMode var7,
@Nonnull PrefabFormat var8,
@Nonnull AssetPack var9,
boolean var10
) {
BuilderToolsPlugin.addToQueue(var1, this.playerRef, (var9x, var10x, var11) -> {
if (var5) {
var10x.save(var9x, var2, true, var10, var7, var9, var8, var11);
} else {
var10x.saveFromSelection(var9x, var2, true, var10, var3, var4, var6, var7, var9, var8, var11);
}
});
}
class="kw">public enum Action {
Save,
Cancel,
ConfirmOverwrite,
CancelOverwrite,
RemoveSupportChanged,
SetupSupportChanged,
OpenPackBrowser,
ConfirmPackBrowser,
CancelPackBrowser,
OpenCreatePack,
CreatePack,
CancelCreatePack,
PackSearch,
PackSelect;
Action() {
}
}
class="kw">protected class="kw">static class PageData {
class="kw">public class="kw">static class="kw">final String NAME = "@Name";
class="kw">public class="kw">static class="kw">final String ENTITIES = "@Entities";
class="kw">public class="kw">static class="kw">final String EMPTY = "@Empty";
class="kw">public class="kw">static class="kw">final String FROM_CLIPBOARD = "@FromClipboard";
class="kw">public class="kw">static class="kw">final String USE_PLAYER_ANCHOR = "@UsePlayerAnchor";
class="kw">public class="kw">static class="kw">final String REMOVE_SUPPORT = "@RemoveSupport";
class="kw">public class="kw">static class="kw">final String SETUP_SUPPORT = "@SetupSupport";
class="kw">public class="kw">static class="kw">final String COMPRESSED = "@Compressed";
class="kw">public class="kw">static class="kw">final BuilderCodec<PrefabSavePage.PageData> CODEC = BuilderCodec.builder(PrefabSavePage.PageData.class, PrefabSavePage.PageData::new)
.append(
new KeyedCodec<>("Action", new EnumCodec<>(PrefabSavePage.Action.class, EnumCodec.EnumStyle.LEGACY)),
(var0, var1) -> var0.action = var1,
var0 -> var0.action
)
.add()
.append(new KeyedCodec<>("@Name", Codec.STRING), (var0, var1) -> var0.name = var1, var0 -> var0.name)
.add()
.append(new KeyedCodec<>("@Entities", Codec.BOOLEAN), (var0, var1) -> var0.entities = var1, var0 -> var0.entities)
.add()
.append(new KeyedCodec<>("@Empty", Codec.BOOLEAN), (var0, var1) -> var0.empty = var1, var0 -> var0.empty)
.add()
.append(new KeyedCodec<>("@FromClipboard", Codec.BOOLEAN), (var0, var1) -> var0.fromClipboard = var1, var0 -> var0.fromClipboard)
.add()
.append(new KeyedCodec<>("@UsePlayerAnchor", Codec.BOOLEAN), (var0, var1) -> var0.usePlayerAnchor = var1, var0 -> var0.usePlayerAnchor)
.add()
.append(new KeyedCodec<>("@RemoveSupport", Codec.BOOLEAN), (var0, var1) -> var0.removeSupport = var1, var0 -> var0.removeSupport)
.add()
.append(new KeyedCodec<>("@SetupSupport", Codec.BOOLEAN), (var0, var1) -> var0.setupSupport = var1, var0 -> var0.setupSupport)
.add()
.append(new KeyedCodec<>("@Compressed", Codec.BOOLEAN), (var0, var1) -> var0.compressed = var1, var0 -> var0.compressed)
.add()
.append(new KeyedCodec<>("Pack", Codec.STRING), (var0, var1) -> var0.packBrowserData.pack = var1, var0 -> var0.packBrowserData.pack)
.add()
.append(new KeyedCodec<>("@PackSearch", Codec.STRING), (var0, var1) -> var0.packBrowserData.search = var1, var0 -> var0.packBrowserData.search)
.add()
.append(new KeyedCodec<>("@CreateName", Codec.STRING), (var0, var1) -> var0.packBrowserData.createName = var1, var0 -> var0.packBrowserData.createName)
.add()
.append(
new KeyedCodec<>("@CreateGroup", Codec.STRING), (var0, var1) -> var0.packBrowserData.createGroup = var1, var0 -> var0.packBrowserData.createGroup
)
.add()
.append(
new KeyedCodec<>("@CreateDescription", Codec.STRING),
(var0, var1) -> var0.packBrowserData.createDescription = var1,
var0 -> var0.packBrowserData.createDescription
)
.add()
.append(
new KeyedCodec<>("@CreateVersion", Codec.STRING),
(var0, var1) -> var0.packBrowserData.createVersion = var1,
var0 -> var0.packBrowserData.createVersion
)
.add()
.append(
new KeyedCodec<>("@CreateWebsite", Codec.STRING),
(var0, var1) -> var0.packBrowserData.createWebsite = var1,
var0 -> var0.packBrowserData.createWebsite
)
.add()
.append(
new KeyedCodec<>("@CreateAuthorName", Codec.STRING),
(var0, var1) -> var0.packBrowserData.createAuthorName = var1,
var0 -> var0.packBrowserData.createAuthorName
)
.add()
.append(
new KeyedCodec<>("ValidateCreate", Codec.STRING),
(var0, var1) -> var0.packBrowserData.validateCreate = var1,
var0 -> var0.packBrowserData.validateCreate
)
.add()
.build();
class="kw">public PrefabSavePage.Action action;
class="kw">public String name;
class="kw">public boolean entities = true;
class="kw">public boolean empty = false;
class="kw">public boolean fromClipboard = false;
class="kw">public boolean usePlayerAnchor = false;
class="kw">public boolean removeSupport = false;
class="kw">public boolean setupSupport = false;
class="kw">public boolean compressed = false;
class="kw">public class="kw">final AssetPackSaveBrowserEventData packBrowserData = new AssetPackSaveBrowserEventData();
class="kw">public PageData() {
}
}
class="kw">private record PendingSave(
@Nonnull String name,
boolean entities,
boolean empty,
boolean fromClipboard,
@Nullable Vector3i playerAnchor,
@Nonnull SupportMode supportMode,
@Nonnull PrefabFormat format,
@Nonnull AssetPack targetPack,
@Nonnull Player playerComponent
) {
class="kw">private PendingSave {
}
}
}