PrefabEditorSaveSettingsPage class
Пакет: com.hypixel.hytale.builtin.buildertools.prefabeditor.ui
Файл: com/hypixel/hytale/builtin/buildertools/prefabeditor/ui/PrefabEditorSaveSettingsPage.java
extends: InteractiveCustomUIPage<PrefabEditorSaveSettingsPage.PageData>
Поля (119)
| Модификаторы | Тип | Имя |
|---|---|---|
|
public static final String |
BROWSER_SEARCH |
|
public static final BuilderCodec<PrefabEditorSaveSettingsPage.PageData> |
CODEC |
|
public static final String |
COMPRESSED |
|
public static final String |
EMPTY |
|
public static final String |
ENTITIES |
final |
HytaleLogger |
LOGGER |
|
public static final String |
PREFABS_TO_SAVE |
|
public static final String |
PREFAB_UUID |
|
Save,
Cancel,
SelectAll,
SelectEdited,
OpenBrowser,
BrowserSearch,
BrowserTogglePrefab,
BrowserSelectAll,
ConfirmBrowser,
CancelBrowser,
BackFromSaving,
ConfirmOverwrite,
CancelOverwrite,
RemoveSupportChanged,
SetupSupportChanged,
OpenPackBrowser,
ConfirmPackBrowser,
CancelPackBrowser,
OpenCreatePack,
CreatePack,
CancelCreatePack,
PackSearch, |
PackSelect |
|
public static final String |
REMOVE_SUPPORT |
|
public static final String |
SETUP_SUPPORT |
|
public PrefabEditorSaveSettingsPage.Action |
action |
|
|
break |
|
|
break |
|
|
break |
|
|
break |
|
|
break |
|
|
break |
|
|
break |
|
|
break |
|
|
break |
|
|
break |
|
|
break |
|
|
break |
|
|
break |
|
|
break |
|
|
break |
|
public String |
browserSearchStr |
|
UICommandBuilder |
commandBuilderx |
|
UICommandBuilder |
commandBuilderx |
|
UICommandBuilder |
commandBuilderx |
|
public boolean |
compressed |
|
public boolean |
empty |
|
public boolean |
entities |
|
UIEventBuilder |
eventBuilderx |
|
public final AssetPackSaveBrowserEventData |
packBrowserData |
|
public String |
prefabUuid |
|
public String |
prefabsToSave |
|
public boolean |
removeSupport |
|
|
return |
|
|
return |
|
|
return |
|
|
return |
|
|
return |
|
|
return |
|
|
return |
|
public boolean |
setupSupport |
|
List |
var10 |
|
boolean |
var10 |
|
boolean |
var11 |
|
World |
var11 |
|
String |
var12 |
|
int |
var12 |
|
String |
var13 |
|
CompletableFuture[] |
var13 |
|
|
var14 |
|
String |
var14 |
|
AtomicInteger |
var14 |
|
String |
var15 |
|
int |
var16 |
|
PrefabEditingMetadata |
var16 |
|
String |
var17 |
|
Path |
var17 |
|
PrefabEditSessionManager |
var18 |
|
Path |
var19 |
|
World |
var19 |
|
AssetPack |
var2 |
|
UICommandBuilder |
var2 |
|
UICommandBuilder |
var20 |
|
String |
var20 |
|
UICommandBuilder |
var21 |
|
UICommandBuilder |
var22 |
|
List |
var23 |
|
UICommandBuilder |
var25 |
|
UUID |
var26 |
|
UICommandBuilder |
var27 |
|
UICommandBuilder |
var28 |
|
String |
var29 |
|
Map |
var3 |
|
PrefabStore |
var3 |
|
String |
var30 |
|
String |
var31 |
|
UICommandBuilder |
var32 |
|
UIEventBuilder |
var34 |
|
UIEventBuilder |
var36 |
|
UIEventBuilder |
var37 |
|
UICommandBuilder |
var38 |
|
UICommandBuilder |
var39 |
|
Player |
var4 |
|
List |
var4 |
|
|
var4 |
|
|
var4 |
|
Path |
var4 |
|
int |
var4 |
|
PrefabSaverSettings |
var40 |
|
String[] |
var42 |
|
ObjectArrayList |
var43 |
|
UICommandBuilder |
var45 |
|
Path |
var48 |
|
Player |
var5 |
|
PlayerRef |
var5 |
|
Object2IntMap |
var5 |
|
long |
var5 |
|
PrefabEditingMetadata |
var6 |
|
AssetPackSaveBrowser.ActionResult |
var6 |
|
String |
var7 |
|
UICommandBuilder |
var7 |
|
float |
var7 |
|
AssetPack |
var8 |
|
String |
var8 |
|
int |
var8 |
|
UICommandBuilder |
var8 |
|
int |
var8 |
|
String |
var9 |
|
|
var9 |
|
|
var9 |
|
|
var9 |
|
int |
var9 |
|
int |
var9 |
Методы (36)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
|
|
Action Action() |
|
public |
PageDatapublic PageData() |
private |
void |
buildPrefabListvoid buildPrefabList(@Nonnull UICommandBuilder var1, @Nonnull UIEventBuilder var2) |
private |
void |
executeSavevoid executeSave(@Nonnull Ref<EntityStore> var1,
@Nonnull Store<EntityStore> var2,
@Nonnull Player var3,
@Nonnull PlayerRef var4,
@Nonnull PrefabSaverSettings var5,
@Nonnull List<PrefabEditingMetadata> var6) |
|
|
for for(String var14 : var42) |
|
|
for for(PrefabEditingMetadata var46 : var10) |
|
|
for for(PrefabEditingMetadata var18 : var4) |
|
|
for for(PrefabEditingMetadata var10 : var6) |
|
|
for for(int var15 = 0; var15 < var12; var15++) |
|
|
for for(CompletableFuture var13 : var13) |
public |
void |
handleDataEventvoid handleDataEvent(@Nonnull Ref<EntityStore> var1, @Nonnull Store<EntityStore> var2, @Nonnull PrefabEditorSaveSettingsPage.PageData var3) |
|
|
if if(this.exitOnSave) |
|
|
if if(var6 != null) |
|
|
if if(var5 != null) |
|
|
if if(var6 != null) |
|
|
if if(var8 != null) |
|
|
if if(var6 != null) |
|
|
if if(this.isSaving) |
|
|
if if(var4 != null) |
|
|
if if(var3.setupSupport) |
|
|
if if(var3.compressed) |
|
|
if if(var3.prefabUuid != null) |
|
|
if if(this.isSaving || this.pendingSaveSettings == null || this.pendingSavePrefabs == null) |
|
|
if if(var3.removeSupport) |
|
|
if if(var3.setupSupport) |
|
|
if if(var9 > 0) |
|
|
if if(var11) |
|
|
if if(var10) |
|
|
if if(var8 > 0) |
|
|
if if(var5 - this.lastProgressUpdateTime >= 100L || var4 == var12) |
|
|
if if(var9 == 0) |
|
|
if if(this.exitOnSave) |
private |
void |
onSavingFailedvoid onSavingFailed(@Nonnull Message var1) |
abstract |
|
super super(var1, CustomPageLifetime.CanDismissOrCloseThroughInteraction, PrefabEditorSaveSettingsPage.PageData.CODEC) |
|
|
switch switch(var3.action) |
abstract |
|
this this(var1, var2, false) |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.builtin.buildertools.prefabeditor.ui;
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.PrefabEditSession;
class="kw">import com.hypixel.hytale.builtin.buildertools.prefabeditor.PrefabEditSessionManager;
class="kw">import com.hypixel.hytale.builtin.buildertools.prefabeditor.PrefabEditingMetadata;
class="kw">import com.hypixel.hytale.builtin.buildertools.prefabeditor.saving.PrefabSaver;
class="kw">import com.hypixel.hytale.builtin.buildertools.prefabeditor.saving.PrefabSaverSettings;
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.StringCompareUtil;
class="kw">import com.hypixel.hytale.component.Ref;
class="kw">import com.hypixel.hytale.component.Store;
class="kw">import com.hypixel.hytale.logger.HytaleLogger;
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.asset.AssetModule;
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.prefab.PrefabFormat;
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.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.Universe;
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 it.unimi.dsi.fastutil.objects.Object2IntMap;
class="kw">import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap;
class="kw">import it.unimi.dsi.fastutil.objects.ObjectArrayList;
class="kw">import java.nio.file.Path;
class="kw">import java.util.Comparator;
class="kw">import java.util.HashSet;
class="kw">import java.util.List;
class="kw">import java.util.Locale;
class="kw">import java.util.Map;
class="kw">import java.util.Set;
class="kw">import java.util.UUID;
class="kw">import java.util.concurrent.CompletableFuture;
class="kw">import java.util.concurrent.atomic.AtomicInteger;
class="kw">import java.util.stream.Collectors;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">public class PrefabEditorSaveSettingsPage class="kw">extends InteractiveCustomUIPage<PrefabEditorSaveSettingsPage.PageData> {
class="kw">private class="kw">static class="kw">final HytaleLogger LOGGER = HytaleLogger.forEnclosingClass();
class="kw">private class="kw">static class="kw">final Value<String> BUTTON_HIGHLIGHTED = Value.ref("Pages/BasicTextButton.ui", "SelectedLabelStyle");
class="kw">private class="kw">static class="kw">final Value<String> BUTTON_SELECTED = Value.ref("Pages/BasicTextButton.ui", "SelectedLabelStyle");
@Nonnull
class="kw">private class="kw">final PrefabEditSession prefabEditSession;
class="kw">private class="kw">final AssetPackSaveBrowser packBrowser = new AssetPackSaveBrowser(AssetPackSaveBrowserConfig.defaults());
class="kw">private class="kw">final boolean exitOnSave;
class="kw">private class="kw">volatile boolean isSaving = false;
class="kw">private class="kw">volatile long lastProgressUpdateTime = 0L;
class="kw">private class="kw">static class="kw">final long PROGRESS_UPDATE_INTERVAL_MS = 100L;
@Nullable
class="kw">private PrefabSaverSettings pendingSaveSettings;
@Nullable
class="kw">private List<PrefabEditingMetadata> pendingSavePrefabs;
@Nonnull
class="kw">private String browserSearchQuery = "";
class="kw">private class="kw">final Set<UUID> selectedPrefabUuids = new HashSet<>();
class="kw">public PrefabEditorSaveSettingsPage(@Nonnull PlayerRef var1, @Nonnull PrefabEditSession var2) {
this(var1, var2, false);
}
class="kw">public PrefabEditorSaveSettingsPage(@Nonnull PlayerRef var1, @Nonnull PrefabEditSession var2, boolean var3) {
super(var1, CustomPageLifetime.CanDismissOrCloseThroughInteraction, PrefabEditorSaveSettingsPage.PageData.CODEC);
this.prefabEditSession = var2;
this.exitOnSave = var3;
}
@Override
class="kw">public void build(@Nonnull Ref<EntityStore> var1, @Nonnull UICommandBuilder var2, @Nonnull UIEventBuilder var3, @Nonnull Store<EntityStore> var4) {
var2.append("Pages/PrefabEditorSaveSettings.ui");
if (this.exitOnSave) {
var2.set("#MainPage #TitleLabel.Text", Message.translation("server.customUI.prefabEditorSaveSettings.titleSaveAndExit"));
var2.set("#MainPage #SaveButton.Text", Message.translation("server.customUI.prefabEditorSaveSettings.saveAndExit"));
}
Player var5 = var4.getComponent(var1, Player.getComponentType());
PrefabEditingMetadata var6 = this.prefabEditSession.getSelectedPrefab(this.playerRef.getUuid());
if (var6 != null) {
String var7 = this.toDisplayPath(var6);
var2.set("#MainPage #PrefabsToSave #Input.Value", var7);
this.selectedPrefabUuids.add(var6.getUuid());
}
if (var5 != null) {
String var9 = null;
if (var6 != null) {
AssetPack var8 = PrefabStore.get().findAssetPackForPrefabPath(var6.getPrefabPath());
if (var8 != null) {
if (!var8.isImmutable()) {
var9 = var8.getName();
}
} else if (!var6.isReadOnly()) {
var9 = BuilderToolsUserData.get(var5).getLastSavePack();
}
} else {
var9 = BuilderToolsUserData.get(var5).getLastSavePack();
}
this.packBrowser.setSelectedPackKey(var9);
if (var9 != null && !this.packBrowser.hasSelectedPack()) {
this.playerRef.sendMessage(Message.translation("server.customUI.assetPackBrowser.packNoLongerAvailable"));
}
}
var2.set("#MainPage #Entities #CheckBox.Value", true);
var2.set("#MainPage #Empty #CheckBox.Value", false);
var2.set("#MainPage #RemoveSupport #CheckBox.Value", false);
var2.set("#MainPage #SetupSupport #CheckBox.Value", false);
var2.set("#MainPage #Compressed #CheckBox.Value", false);
if (this.packBrowser.hasSelectedPack()) {
var2.set("#MainPage #SelectedPackLabel.Text", this.packBrowser.getSelectedPackDisplayName());
}
var2.set("#PackBrowserPage.Visible", false);
var2.set("#CreatePackPage.Visible", false);
var2.set("#SavingPage.Visible", false);
var2.set("#SavingPage #ProgressBar.Value", 0.0F);
var2.set("#SavingPage #StatusText.TextSpans", Message.translation("server.commands.editprefab.save.saving"));
var2.set("#SavingPage #ErrorText.Visible", false);
var2.set("#OverwriteConfirmPage.Visible", false);
var3.addEventBinding(
CustomUIEventBindingType.Activating,
"#MainPage #SaveButton",
new EventData()
.append("Action", PrefabEditorSaveSettingsPage.Action.Save.name())
.append("@PrefabsToSave", "#MainPage #PrefabsToSave #Input.Value")
.append("@Entities", "#MainPage #Entities #CheckBox.Value")
.append("@Empty", "#MainPage #Empty #CheckBox.Value")
.append("@RemoveSupport", "#MainPage #RemoveSupport #CheckBox.Value")
.append("@SetupSupport", "#MainPage #SetupSupport #CheckBox.Value")
.append("@Compressed", "#MainPage #Compressed #CheckBox.Value"),
false
);
var3.addEventBinding(
CustomUIEventBindingType.Activating, "#MainPage #CancelButton", new EventData().append("Action", PrefabEditorSaveSettingsPage.Action.Cancel.name())
);
var3.addEventBinding(
CustomUIEventBindingType.Activating,
"#MainPage #PrefabsToSave #BrowseButton",
new EventData().append("Action", PrefabEditorSaveSettingsPage.Action.OpenBrowser.name())
);
var3.addEventBinding(
CustomUIEventBindingType.Activating,
"#MainPage #PrefabsToSave #SelectAllButton",
new EventData().append("Action", PrefabEditorSaveSettingsPage.Action.SelectAll.name())
);
var3.addEventBinding(
CustomUIEventBindingType.Activating,
"#MainPage #PrefabsToSave #SelectEditedButton",
new EventData().append("Action", PrefabEditorSaveSettingsPage.Action.SelectEdited.name())
);
var3.addEventBinding(
CustomUIEventBindingType.ValueChanged,
"#BrowserPage #SearchInput",
new EventData().append("Action", PrefabEditorSaveSettingsPage.Action.BrowserSearch.name()).append("@BrowserSearch", "#BrowserPage #SearchInput.Value"),
false
);
var3.addEventBinding(
CustomUIEventBindingType.Activating,
"#BrowserPage #BrowserButtons #SelectAllBrowserButton",
new EventData().append("Action", PrefabEditorSaveSettingsPage.Action.BrowserSelectAll.name())
);
var3.addEventBinding(
CustomUIEventBindingType.Activating,
"#BrowserPage #BrowserButtons #ConfirmButton",
new EventData().append("Action", PrefabEditorSaveSettingsPage.Action.ConfirmBrowser.name())
);
var3.addEventBinding(
CustomUIEventBindingType.Activating,
"#BrowserPage #BrowserButtons #CancelButton",
new EventData().append("Action", PrefabEditorSaveSettingsPage.Action.CancelBrowser.name())
);
var3.addEventBinding(
CustomUIEventBindingType.Activating,
"#SavingPage #BackButton",
new EventData().append("Action", PrefabEditorSaveSettingsPage.Action.BackFromSaving.name())
);
var3.addEventBinding(
CustomUIEventBindingType.ValueChanged,
"#MainPage #RemoveSupport #CheckBox",
new EventData()
.append("Action", PrefabEditorSaveSettingsPage.Action.RemoveSupportChanged.name())
.append("@RemoveSupport", "#MainPage #RemoveSupport #CheckBox.Value"),
false
);
var3.addEventBinding(
CustomUIEventBindingType.ValueChanged,
"#MainPage #SetupSupport #CheckBox",
new EventData()
.append("Action", PrefabEditorSaveSettingsPage.Action.SetupSupportChanged.name())
.append("@SetupSupport", "#MainPage #SetupSupport #CheckBox.Value"),
false
);
var3.addEventBinding(
CustomUIEventBindingType.Activating,
"#OverwriteConfirmPage #ConfirmOverwriteButton",
new EventData().append("Action", PrefabEditorSaveSettingsPage.Action.ConfirmOverwrite.name()),
false
);
var3.addEventBinding(
CustomUIEventBindingType.Activating,
"#OverwriteConfirmPage #CancelOverwriteButton",
new EventData().append("Action", PrefabEditorSaveSettingsPage.Action.CancelOverwrite.name()),
false
);
this.packBrowser.buildEventBindings(var3, "#MainPage #BrowsePackButton");
this.packBrowser.buildUI(var2, var3);
var2.set("#BrowserPage.Visible", false);
}
class="kw">public void handleDataEvent(@Nonnull Ref<EntityStore> var1, @Nonnull Store<EntityStore> var2, @Nonnull PrefabEditorSaveSettingsPage.PageData var3) {
Player var4 = var2.getComponent(var1, Player.getComponentType());
assert var4 != null;
PlayerRef var5 = var2.getComponent(var1, PlayerRef.getComponentType());
assert var5 != null;
AssetPackSaveBrowser.ActionResult var6 = this.packBrowser
.handleAction(var3.action != null ? var3.action.name() : null, var3.packBrowserData, "#MainPage #SelectedPackLabel");
if (var6 != null) {
if (var6.errorKey() != null) {
this.playerRef.sendMessage(Message.translation(var6.errorKey()));
}
if (var6.packConfirmed() && this.packBrowser.hasSelectedPack()) {
BuilderToolsUserData.get(var4).setLastSavePack(this.packBrowser.getSelectedPack().getName());
}
this.sendUpdate(var6.commandBuilder(), var6.eventBuilder(), false);
} else {
class="kw">switch (var3.action) {
case Save:
if (this.isSaving) {
class="kw">return;
}
if (this.packBrowser.getSelectedPack() == null) {
this.playerRef.sendMessage(Message.translation("server.customUI.assetPackBrowser.packRequired"));
class="kw">return;
}
if (!AssetModule.get().validatePackExistsOnDisk(this.packBrowser.getSelectedPack())) {
this.playerRef.sendMessage(Message.translation("server.customUI.assetPackBrowser.packRequired"));
class="kw">return;
}
if (var4 != null) {
BuilderToolsUserData.get(var4).setLastSavePack(this.packBrowser.getSelectedPack().getName());
}
String var31 = var3.prefabsToSave;
if (var31 == null || var31.isBlank()) {
this.playerRef.sendMessage(Message.translation("server.commands.editprefab.save.noPrefabsSelected"));
class="kw">return;
}
PrefabSaverSettings var40 = new PrefabSaverSettings();
var40.setBlocks(true);
var40.setEntities(var3.entities);
var40.setEmpty(var3.empty);
var40.setOverwriteExisting(false);
if (var3.setupSupport) {
var40.setSupportMode(SupportMode.CALCULATE);
} else if (var3.removeSupport) {
var40.setSupportMode(SupportMode.REMOVE);
}
if (var3.compressed) {
var40.setPrefabFormat(PrefabFormat.COMPRESSED);
}
String[] var42 = var31.split("[,\\n]", 0);
List var10 = new ObjectArrayList();
for (String var14 : var42) {
var14 = var14.trim();
if (!var14.isEmpty()) {
for (PrefabEditingMetadata var16 : this.prefabEditSession.getLoadedPrefabMetadata().values()) {
String var17 = var16.getPrefabPath().toString().replace('\\', '/');
if (var17.equals(var14) || var17.endsWith(var14)) {
var10.add(var16);
break;
}
}
}
}
if (var10.isEmpty()) {
this.onSavingFailed(Message.translation("server.commands.editprefab.save.noPrefabsFound"));
class="kw">return;
}
ObjectArrayList var43 = new ObjectArrayList();
for (PrefabEditingMetadata var46 : var10) {
Path var48 = this.getWritableSavePath(var46);
if (PrefabStore.get().prefabExists(var48)) {
var43.add(var48.getFileName().toString());
}
}
if (!var43.isEmpty()) {
this.pendingSaveSettings = var40;
this.pendingSavePrefabs = var10;
UICommandBuilder var45 = new UICommandBuilder();
var45.set("#MainPage.Visible", false);
var45.set("#OverwriteConfirmPage.Visible", true);
if (var43.size() == 1) {
var45.set(
"#OverwriteConfirmPage #MessageText.TextSpans",
Message.translation("server.customUI.prefabEditorSaveSettings.overwriteConfirm.messageSingle").param("name", (String)var43.getFirst())
);
} else {
var45.set(
"#OverwriteConfirmPage #MessageText.TextSpans",
Message.translation("server.customUI.prefabEditorSaveSettings.overwriteConfirm.messageMultiple")
);
}
this.sendUpdate(var45);
class="kw">return;
}
this.executeSave(var1, var2, var4, var5, var40, var10);
break;
case Cancel:
var4.getPageManager().setPage(var1, var2, Page.None);
break;
case SelectAll: {
String var30 = this.prefabEditSession.getLoadedPrefabMetadata().values().stream().map(this::toDisplayPath).collect(Collectors.joining("\n"));
UICommandBuilder var39 = new UICommandBuilder();
var39.set("#MainPage #PrefabsToSave #Input.Value", var30);
this.sendUpdate(var39);
break;
}
case SelectEdited: {
String var29 = this.prefabEditSession
.getLoadedPrefabMetadata()
.values()
.stream()
.filter(PrefabEditingMetadata::isDirty)
.map(this::toDisplayPath)
.collect(Collectors.joining("\n"));
UICommandBuilder var38 = new UICommandBuilder();
var38.set("#MainPage #PrefabsToSave #Input.Value", var29);
this.sendUpdate(var38);
if (var29.isEmpty()) {
this.playerRef.sendMessage(Message.translation("server.commands.editprefab.save.noEditedPrefabs"));
}
break;
}
case OpenBrowser: {
this.browserSearchQuery = "";
this.selectedPrefabUuids.clear();
UICommandBuilder var28 = new UICommandBuilder();
UIEventBuilder var37 = new UIEventBuilder();
var28.set("#MainPage.Visible", false);
var28.set("#BrowserPage.Visible", true);
var28.set("#BrowserPage #SearchInput.Value", "");
this.buildPrefabList(var28, var37);
this.sendUpdate(var28, var37, false);
break;
}
case BrowserSearch: {
this.browserSearchQuery = var3.browserSearchStr != null ? var3.browserSearchStr.trim().toLowerCase(Locale.ROOT) : "";
UICommandBuilder var27 = new UICommandBuilder();
UIEventBuilder var36 = new UIEventBuilder();
this.buildPrefabList(var27, var36);
this.sendUpdate(var27, var36, false);
break;
}
case BrowserTogglePrefab:
if (var3.prefabUuid != null) {
try {
UUID var26 = UUID.fromString(var3.prefabUuid);
if (this.selectedPrefabUuids.contains(var26)) {
this.selectedPrefabUuids.remove(var26);
} else {
this.selectedPrefabUuids.add(var26);
}
UICommandBuilder commandBuilderx = new UICommandBuilder();
UIEventBuilder eventBuilderx = new UIEventBuilder();
this.buildPrefabList(commandBuilderx, eventBuilderx);
this.sendUpdate(commandBuilderx, eventBuilderx, false);
} catch (IllegalArgumentException var18) {
}
}
break;
case BrowserSelectAll: {
this.selectedPrefabUuids.clear();
for (PrefabEditingMetadata var33 : this.prefabEditSession.getLoadedPrefabMetadata().values()) {
this.selectedPrefabUuids.add(var33.getUuid());
}
UICommandBuilder var25 = new UICommandBuilder();
UIEventBuilder var34 = new UIEventBuilder();
this.buildPrefabList(var25, var34);
this.sendUpdate(var25, var34, false);
break;
}
case ConfirmBrowser: {
List var23 = new ObjectArrayList();
for (PrefabEditingMetadata var9 : this.prefabEditSession.getLoadedPrefabMetadata().values()) {
if (this.selectedPrefabUuids.contains(var9.getUuid())) {
var23.add(this.toDisplayPath(var9));
}
}
UICommandBuilder var32 = new UICommandBuilder();
var32.set("#MainPage #PrefabsToSave #Input.Value", String.join("\n", var23));
var32.set("#BrowserPage.Visible", false);
var32.set("#MainPage.Visible", true);
this.sendUpdate(var32);
break;
}
case CancelBrowser: {
UICommandBuilder var22 = new UICommandBuilder();
var22.set("#BrowserPage.Visible", false);
var22.set("#MainPage.Visible", true);
this.sendUpdate(var22);
break;
}
case BackFromSaving: {
this.isSaving = false;
UICommandBuilder var21 = new UICommandBuilder();
var21.set("#SavingPage.Visible", false);
var21.set("#MainPage.Visible", true);
this.sendUpdate(var21);
break;
}
case ConfirmOverwrite:
if (this.isSaving || this.pendingSaveSettings == null || this.pendingSavePrefabs == null) {
class="kw">return;
}
this.pendingSaveSettings.setOverwriteExisting(true);
this.executeSave(var1, var2, var4, var5, this.pendingSaveSettings, this.pendingSavePrefabs);
this.pendingSaveSettings = null;
this.pendingSavePrefabs = null;
break;
case CancelOverwrite: {
this.pendingSaveSettings = null;
this.pendingSavePrefabs = null;
UICommandBuilder var20 = new UICommandBuilder();
var20.set("#OverwriteConfirmPage.Visible", false);
var20.set("#MainPage.Visible", true);
this.sendUpdate(var20);
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);
}
case OpenPackBrowser:
case ConfirmPackBrowser:
case CancelPackBrowser:
case OpenCreatePack:
case CreatePack:
case CancelCreatePack:
case PackSearch:
case PackSelect:
}
}
}
class="kw">private void buildPrefabList(@Nonnull UICommandBuilder var1, @Nonnull UIEventBuilder var2) {
var1.clear("#BrowserPage #FileList");
Map var3 = this.prefabEditSession.getLoadedPrefabMetadata();
if (!var3.isEmpty()) {
List var4;
if (!this.browserSearchQuery.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.browserSearchQuery, 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 var16 = 0;
for (PrefabEditingMetadata var18 : var4) {
Path var19 = var18.getPrefabPath();
String var20 = PrefabStore.stripPrefabSuffix(var19.getFileName().toString());
boolean var10 = this.selectedPrefabUuids.contains(var18.getUuid());
boolean var11 = var18.isReadOnly();
String var12 = var10 ? "[x] " : "[ ] ";
String var13 = var19.toString().replace('\\', '/');
String var14 = var11 ? var13 + "\n(Will save to Server/Prefabs)" : var13;
var1.append("#BrowserPage #FileList", "Pages/BasicTextButton.ui");
String var15 = "#BrowserPage #FileList[" + var16 + "]";
if (var11) {
var1.set(var15 + ".Text", Message.raw(var12 + var20 + " ").insert(Message.translation("server.customUI.assetPackBrowser.readOnly")));
} else {
var1.set(var15 + ".Text", var12 + var20);
}
var1.set(var15 + ".TooltipText", var14);
if (var10) {
var1.set(var15 + ".Style", BUTTON_SELECTED);
}
var2.addEventBinding(
CustomUIEventBindingType.Activating,
var15,
new EventData()
.append("Action", PrefabEditorSaveSettingsPage.Action.BrowserTogglePrefab.name())
.append("PrefabUuid", var18.getUuid().toString())
);
var16++;
}
}
}
@Nonnull
class="kw">private String toDisplayPath(@Nonnull PrefabEditingMetadata var1) {
class="kw">return PrefabStore.get().getRelativePrefabPath(var1.getPrefabPath()).toString().replace('\\', '/');
}
@Nonnull
class="kw">private Path getWritableSavePath(@Nonnull PrefabEditingMetadata var1) {
AssetPack var2 = this.packBrowser.getSelectedPack();
assert var2 != null;
PrefabStore var3 = PrefabStore.get();
Path var4 = var3.getAssetPrefabsPathForPack(var2);
class="kw">return var4.resolve(var3.getRelativePrefabPath(var1.getPrefabPath())).toAbsolutePath().normalize();
}
class="kw">private void executeSave(
@Nonnull Ref<EntityStore> var1,
@Nonnull Store<EntityStore> var2,
@Nonnull Player var3,
@Nonnull PlayerRef var4,
@Nonnull PrefabSaverSettings var5,
@Nonnull List<PrefabEditingMetadata> var6
) {
this.isSaving = true;
UICommandBuilder var7 = new UICommandBuilder();
var7.set("#MainPage.Visible", false);
var7.set("#BrowserPage.Visible", false);
var7.set("#OverwriteConfirmPage.Visible", false);
var7.set("#SavingPage.Visible", true);
var7.set("#SavingPage #ProgressBar.Value", 0.0F);
var7.set("#SavingPage #StatusText.TextSpans", Message.translation("server.commands.editprefab.save.saving"));
var7.set("#SavingPage #ErrorText.Visible", false);
var7.set("#SavingPage #BackButton.Visible", false);
this.sendUpdate(var7);
int var8 = 0;
for (PrefabEditingMetadata var10 : var6) {
if (var10.isReadOnly()) {
var8++;
}
}
if (var8 > 0) {
this.playerRef.sendMessage(Message.translation("server.commands.editprefab.save.readOnlyRedirect").param("count", var8));
}
PrefabEditSessionManager var18 = BuilderToolsPlugin.get().getPrefabEditSessionManager();
World var19 = var2.getExternalData().getWorld();
World var11 = Universe.get().getWorld(var18.getPrefabEditSession(this.playerRef.getUuid()).getWorldName());
int var12 = var6.size();
CompletableFuture[] var13 = new CompletableFuture[var12];
AtomicInteger var14 = new AtomicInteger(0);
this.lastProgressUpdateTime = 0L;
for (int var15 = 0; var15 < var12; var15++) {
PrefabEditingMetadata var16 = var6.get(var15);
Path var17 = this.getWritableSavePath(var16);
var13[var15] = PrefabSaver.savePrefab(
var4,
var11,
var17,
var16.getAnchorPoint(),
var16.getMinPoint(),
var16.getMaxPoint(),
var16.getPastePosition(),
var16.getOriginalFileAnchor(),
var5
)
.thenApply(
var3x -> {
int var4 = var14.incrementAndGet();
long var5 = System.currentTimeMillis();
if (var5 - this.lastProgressUpdateTime >= 100L || var4 == var12) {
this.lastProgressUpdateTime = var5;
float var7 = (float)var4 / var12;
UICommandBuilder var8 = new UICommandBuilder();
var8.set("#SavingPage #ProgressBar.Value", var7);
var8.set(
"#SavingPage #StatusText.TextSpans",
Message.translation("server.commands.editprefab.save.progress").param("current", var4).param("total", var12)
);
this.sendUpdate(var8);
}
class="kw">return (Path)var3x;
}
);
}
CompletableFuture.allOf(var13).thenAccept(var7x -> {
int var8 = 0;
int var9 = 0;
for (CompletableFuture var13 : var13) {
if (var13.join() != null) {
var8++;
} else {
var9++;
}
}
this.isSaving = false;
if (var9 == 0) {
this.playerRef.sendMessage(Message.translation("server.commands.editprefab.save.saveAll.success").param("successes", var8).param("failures", var9));
var3.getPageManager().setPage(var1, var2, Page.None);
if (this.exitOnSave) {
var18.exitEditSession(var1, var19, this.playerRef, var2);
}
} else {
this.onSavingFailed(Message.translation("server.commands.editprefab.save.saveAll.success").param("successes", var8).param("failures", var9));
}
}).exceptionally(var1x -> {
this.isSaving = false;
((HytaleLogger.Api)((HytaleLogger.Api)LOGGER.atWarning()).withCause(var1x)).log("Error saving prefabs");
this.onSavingFailed(Message.raw(var1x.getMessage() != null ? var1x.getMessage() : "Unknown error"));
class="kw">return null;
});
}
class="kw">private void onSavingFailed(@Nonnull Message var1) {
this.isSaving = false;
UICommandBuilder var2 = new UICommandBuilder();
var2.set("#SavingPage #ProgressBar.Value", 0.0F);
var2.set("#SavingPage #StatusText.TextSpans", Message.translation("server.commands.editprefab.save.error"));
var2.set("#SavingPage #ErrorText.Visible", true);
var2.set("#SavingPage #ErrorText.TextSpans", var1);
var2.set("#SavingPage #BackButton.Visible", true);
this.sendUpdate(var2);
}
class="kw">public enum Action {
Save,
Cancel,
SelectAll,
SelectEdited,
OpenBrowser,
BrowserSearch,
BrowserTogglePrefab,
BrowserSelectAll,
ConfirmBrowser,
CancelBrowser,
BackFromSaving,
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 PREFABS_TO_SAVE = "@PrefabsToSave";
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 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 String BROWSER_SEARCH = "@BrowserSearch";
class="kw">public class="kw">static class="kw">final String PREFAB_UUID = "PrefabUuid";
class="kw">public class="kw">static class="kw">final BuilderCodec<PrefabEditorSaveSettingsPage.PageData> CODEC = BuilderCodec.builder(
PrefabEditorSaveSettingsPage.PageData.class, PrefabEditorSaveSettingsPage.PageData::new
)
.append(
new KeyedCodec<>("Action", new EnumCodec<>(PrefabEditorSaveSettingsPage.Action.class, EnumCodec.EnumStyle.LEGACY)),
(var0, var1) -> var0.action = var1,
var0 -> var0.action
)
.add()
.append(new KeyedCodec<>("@PrefabsToSave", Codec.STRING), (var0, var1) -> var0.prefabsToSave = var1, var0 -> var0.prefabsToSave)
.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<>("@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<>("@BrowserSearch", Codec.STRING), (var0, var1) -> var0.browserSearchStr = var1, var0 -> var0.browserSearchStr)
.add()
.append(new KeyedCodec<>("PrefabUuid", Codec.STRING), (var0, var1) -> var0.prefabUuid = var1, var0 -> var0.prefabUuid)
.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 PrefabEditorSaveSettingsPage.Action action;
class="kw">public String prefabsToSave;
class="kw">public boolean entities = true;
class="kw">public boolean empty = false;
class="kw">public boolean removeSupport;
class="kw">public boolean setupSupport;
class="kw">public boolean compressed;
class="kw">public String browserSearchStr;
class="kw">public String prefabUuid;
class="kw">public class="kw">final AssetPackSaveBrowserEventData packBrowserData = new AssetPackSaveBrowserEventData();
class="kw">public PageData() {
}
}
}