AssetPackSaveBrowser class
Пакет: com.hypixel.hytale.server.core.ui.browser
Файл: com/hypixel/hytale/server/core/ui/browser/AssetPackSaveBrowser.java
Поля (65)
| Модификаторы | Тип | Имя |
|---|---|---|
final |
HytaleLogger |
LOGGER |
|
|
continue |
|
|
continue |
|
ObjectArrayList |
var1 |
|
List |
var1 |
|
AssetPack |
var1 |
|
List |
var1 |
|
Map |
var1 |
|
PluginManifest |
var1 |
|
UICommandBuilder |
var10 |
|
String |
var10 |
|
String |
var10 |
|
UICommandBuilder |
var11 |
|
Path |
var11 |
|
Comparator |
var11 |
|
UIEventBuilder |
var12 |
|
List |
var12 |
|
UICommandBuilder |
var13 |
|
Path |
var13 |
|
AssetPackSaveBrowser.CreatePackResult |
var14 |
|
String |
var14 |
|
AssetPackSaveBrowser.PackEntry |
var14 |
|
UICommandBuilder |
var15 |
|
UICommandBuilder |
var16 |
|
UICommandBuilder |
var17 |
|
UICommandBuilder |
var18 |
|
UICommandBuilder |
var19 |
|
Path |
var2 |
|
List |
var2 |
|
List |
var2 |
|
AssetPack |
var2 |
|
String |
var2 |
|
String |
var2 |
|
List |
var2 |
|
UIEventBuilder |
var20 |
|
ObjectArrayList |
var3 |
|
ObjectArrayList |
var3 |
|
List |
var3 |
|
String |
var3 |
|
HytaleServerConfig |
var3 |
|
String |
var3 |
|
boolean |
var3 |
|
|
var3 |
|
int |
var4 |
|
PluginManifest |
var4 |
|
String |
var4 |
|
boolean |
var4 |
|
AuthorInfo |
var5 |
|
AssetPackSaveBrowser.PackEntry |
var5 |
|
UICommandBuilder |
var6 |
|
String |
var6 |
|
String |
var6 |
|
String |
var7 |
|
UIEventBuilder |
var7 |
|
Path |
var7 |
|
Path |
var7 |
|
boolean |
var7 |
|
UIEventBuilder |
var8 |
|
|
var8 |
|
Path |
var8 |
|
int |
var8 |
|
String |
var9 |
|
|
var9 |
|
Path |
var9 |
|
String |
var9 |
Методы (40)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
public |
record |
ActionResultrecord ActionResult(@Nonnull UICommandBuilder commandBuilder, @Nullable UIEventBuilder eventBuilder, @Nullable String errorKey, boolean packConfirmed) |
public |
record |
CreatePackResultrecord CreatePackResult(boolean success, @Nullable String errorKey) |
public |
record |
ModsDirectoryrecord ModsDirectory(@Nonnull String langKey, @Nonnull String filterLangKey, @Nonnull Path path) |
private |
record |
PackEntryrecord PackEntry(@Nonnull String key, @Nonnull String displayName, boolean immutable) |
private |
record |
PendingPackrecord PendingPack(@Nonnull String key, @Nonnull String displayName) |
public |
void |
buildCreateFormValidationvoid buildCreateFormValidation(@Nonnull UICommandBuilder var1, @Nullable String var2, @Nullable String var3) |
public |
void |
buildEventBindingsvoid buildEventBindings(@Nonnull UIEventBuilder var1, @Nonnull String var2) |
public |
void |
buildPackListvoid buildPackList(@Nonnull UICommandBuilder var1, @Nonnull UIEventBuilder var2) |
private |
void |
buildSearchInputvoid buildSearchInput(@Nonnull UICommandBuilder var1, @Nonnull UIEventBuilder var2) |
public |
void |
buildUIvoid buildUI(@Nonnull UICommandBuilder var1, @Nonnull UIEventBuilder var2) |
public |
boolean |
checkDuplicatePackboolean checkDuplicatePack(@Nullable String var1, @Nullable String var2) |
private |
List<AssetPackSaveBrowser.PackEntry> |
collectPackEntriesList<AssetPackSaveBrowser.PackEntry> collectPackEntries() |
static |
void |
disambiguateDisplayNamesvoid disambiguateDisplayNames(@Nonnull List<AssetPackSaveBrowser.PackEntry> var0) |
abstract |
|
disambiguateDisplayNames disambiguateDisplayNames(var1) |
abstract |
|
disambiguateDisplayNames disambiguateDisplayNames(var2) |
|
|
for for(AssetPackSaveBrowser.ModsDirectory var5 : var2) |
|
|
for for(AssetPackSaveBrowser.ModsDirectory var5 : var2) |
|
|
for for(AssetPackSaveBrowser.PackEntry var6 : var3) |
|
|
for for(AssetPackSaveBrowser.PackEntry var3 : var0) |
abstract |
|
for for(int var4 = 0; var4 < var0.size() |
public |
boolean |
handleEventboolean handleEvent(@Nonnull AssetPackSaveBrowserEventData var1) |
public |
boolean |
hasSelectedPackboolean hasSelectedPack() |
|
|
if if(Constants.SINGLEPLAYER) |
|
|
if if(Constants.SINGLEPLAYER) |
|
|
if if(var1 == null) |
|
|
if if(var6.immutable) |
|
|
if if(!var6.immutable) |
|
|
if if(var1 == null) |
|
|
if if(this.selectedPackKey == null) |
|
|
if if(var1 == null) |
|
|
if if(var7 == null) |
|
|
if if(var8 == null) |
|
|
if if(var4) |
|
|
if if(var8 <= 0) |
|
|
if if(var7) |
|
|
if if(var3) |
private |
void |
populateDirectoryFilterDropdownvoid populateDirectoryFilterDropdown(@Nonnull UICommandBuilder var1) |
private |
void |
populateTargetDirectoryDropdownvoid populateTargetDirectoryDropdown(@Nonnull UICommandBuilder var1) |
public |
void |
setSelectedPackKeyvoid setSelectedPackKey(@Nullable String var1) |
|
return |
switchreturn switch(var1) |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.server.core.ui.browser;
class="kw">import com.hypixel.hytale.assetstore.AssetPack;
class="kw">import com.hypixel.hytale.common.plugin.AuthorInfo;
class="kw">import com.hypixel.hytale.common.plugin.PluginIdentifier;
class="kw">import com.hypixel.hytale.common.plugin.PluginManifest;
class="kw">import com.hypixel.hytale.common.semver.Semver;
class="kw">import com.hypixel.hytale.common.util.PathUtil;
class="kw">import com.hypixel.hytale.common.util.StringCompareUtil;
class="kw">import com.hypixel.hytale.logger.HytaleLogger;
class="kw">import com.hypixel.hytale.protocol.packets.interface_.CustomUIEventBindingType;
class="kw">import com.hypixel.hytale.server.core.Constants;
class="kw">import com.hypixel.hytale.server.core.HytaleServer;
class="kw">import com.hypixel.hytale.server.core.HytaleServerConfig;
class="kw">import com.hypixel.hytale.server.core.Message;
class="kw">import com.hypixel.hytale.server.core.Options;
class="kw">import com.hypixel.hytale.server.core.asset.AssetModule;
class="kw">import com.hypixel.hytale.server.core.plugin.PluginManager;
class="kw">import com.hypixel.hytale.server.core.ui.DropdownEntryInfo;
class="kw">import com.hypixel.hytale.server.core.ui.LocalizableString;
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.util.BsonUtil;
class="kw">import it.unimi.dsi.fastutil.objects.ObjectArrayList;
class="kw">import java.io.IOException;
class="kw">import java.nio.file.Files;
class="kw">import java.nio.file.Path;
class="kw">import java.util.Comparator;
class="kw">import java.util.HashMap;
class="kw">import java.util.List;
class="kw">import java.util.Locale;
class="kw">import java.util.Map;
class="kw">import java.util.regex.Pattern;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">public class AssetPackSaveBrowser {
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_SELECTED = Value.ref("Pages/BasicTextButton.ui", "SelectedLabelStyle");
class="kw">private class="kw">static class="kw">final Value<String> TOOLTIP_STYLE = Value.ref("Common.ui", "DefaultTextTooltipStyle");
class="kw">private class="kw">static class="kw">final Pattern INVALID_FILENAME_CHARS = Pattern.compile("[<>:\"/\\\\|?*\\x00-\\x1F]");
class="kw">private class="kw">static class="kw">final String DIRECTORY_FILTER_ALL = "";
@Nonnull
class="kw">private class="kw">final AssetPackSaveBrowserConfig config;
@Nonnull
class="kw">private String searchQuery = "";
@Nullable
class="kw">private String selectedPackKey;
@Nullable
class="kw">private AssetPackSaveBrowser.PendingPack pendingPack;
@Nonnull
class="kw">private String selectedDirectoryFilter = "";
class="kw">public class="kw">static class="kw">final String ACTION_OPEN_PACK_BROWSER = "OpenPackBrowser";
class="kw">public class="kw">static class="kw">final String ACTION_CONFIRM_PACK_BROWSER = "ConfirmPackBrowser";
class="kw">public class="kw">static class="kw">final String ACTION_CANCEL_PACK_BROWSER = "CancelPackBrowser";
class="kw">public class="kw">static class="kw">final String ACTION_OPEN_CREATE_PACK = "OpenCreatePack";
class="kw">public class="kw">static class="kw">final String ACTION_CREATE_PACK = "CreatePack";
class="kw">public class="kw">static class="kw">final String ACTION_CANCEL_CREATE_PACK = "CancelCreatePack";
class="kw">public class="kw">static class="kw">final String ACTION_PACK_SEARCH = "PackSearch";
class="kw">public class="kw">static class="kw">final String ACTION_PACK_SELECT = "PackSelect";
class="kw">public AssetPackSaveBrowser(@Nonnull AssetPackSaveBrowserConfig var1) {
this.config = var1;
}
@Nonnull
class="kw">private List<AssetPackSaveBrowser.ModsDirectory> collectModsDirectories() {
ObjectArrayList var1 = new ObjectArrayList();
if (Constants.SINGLEPLAYER) {
var1.add(
new AssetPackSaveBrowser.ModsDirectory(
"server.customUI.assetPackBrowser.create.targetDir.world", "server.customUI.assetPackBrowser.filter.world", PluginManager.MODS_PATH
)
);
for (Path var3 : Options.getOptionSet().valuesOf(Options.MODS_DIRECTORIES)) {
var1.add(
new AssetPackSaveBrowser.ModsDirectory(
"server.customUI.assetPackBrowser.create.targetDir.global", "server.customUI.assetPackBrowser.filter.global", var3
)
);
}
} else {
var1.add(
new AssetPackSaveBrowser.ModsDirectory(
"server.customUI.assetPackBrowser.create.targetDir.server", "server.customUI.assetPackBrowser.filter.server", PluginManager.MODS_PATH
)
);
for (Path var5 : Options.getOptionSet().valuesOf(Options.MODS_DIRECTORIES)) {
var1.add(
new AssetPackSaveBrowser.ModsDirectory(
"server.customUI.assetPackBrowser.create.targetDir.server", "server.customUI.assetPackBrowser.filter.server", var5
)
);
}
}
class="kw">return var1;
}
@Nonnull
class="kw">private Path getDefaultTargetDirectory() {
if (Constants.SINGLEPLAYER) {
List var1 = Options.getOptionSet().valuesOf(Options.MODS_DIRECTORIES);
if (!var1.isEmpty()) {
class="kw">return var1.getFirst();
}
}
class="kw">return PluginManager.MODS_PATH;
}
@Nullable
class="kw">private Path resolveTargetDirectory(@Nullable String var1) {
if (var1 != null && !var1.isBlank()) {
Path var2 = Path.of(var1).normalize();
for (AssetPackSaveBrowser.ModsDirectory var4 : this.collectModsDirectories()) {
if (var4.path().normalize().equals(var2)) {
class="kw">return var4.path();
}
}
class="kw">return null;
} else {
class="kw">return this.getDefaultTargetDirectory();
}
}
class="kw">private void populateTargetDirectoryDropdown(@Nonnull UICommandBuilder var1) {
List var2 = this.collectModsDirectories();
if (var2.size() <= 1) {
var1.set("#CreatePackPage #TargetDirectory.Visible", false);
} else {
var1.set("#CreatePackPage #TargetDirectory.Visible", true);
ObjectArrayList var3 = new ObjectArrayList();
for (AssetPackSaveBrowser.ModsDirectory var5 : var2) {
var3.add(new DropdownEntryInfo(LocalizableString.fromMessageId(var5.langKey()), var5.path().toString()));
}
var1.set("#CreatePackPage #TargetDirDropdown.Entries", var3);
var1.set("#CreatePackPage #TargetDirDropdown.Value", this.getDefaultTargetDirectory().toString());
}
}
class="kw">private void populateDirectoryFilterDropdown(@Nonnull UICommandBuilder var1) {
List var2 = this.collectModsDirectories();
if (var2.size() <= 1) {
var1.set("#PackBrowserPage #DirectoryFilter.Visible", false);
} else {
var1.set("#PackBrowserPage #DirectoryFilter.Visible", true);
ObjectArrayList var3 = new ObjectArrayList();
var3.add(new DropdownEntryInfo(LocalizableString.fromMessageId("server.customUI.assetPackBrowser.filter.all"), ""));
for (AssetPackSaveBrowser.ModsDirectory var5 : var2) {
var3.add(new DropdownEntryInfo(LocalizableString.fromMessageId(var5.filterLangKey()), var5.path().toString()));
}
var1.set("#PackBrowserPage #DirectoryFilter.Entries", var3);
var1.set("#PackBrowserPage #DirectoryFilter.Value", this.selectedDirectoryFilter);
}
}
class="kw">public void setSelectedPackKey(@Nullable String var1) {
if (var1 == null) {
this.selectedPackKey = null;
} else {
AssetPack var2 = AssetModule.get().getAssetPack(var1);
if (var2 != null && !var2.isImmutable() && AssetModule.get().validatePackExistsOnDisk(var2)) {
this.selectedPackKey = var1;
}
}
}
class="kw">public void buildUI(@Nonnull UICommandBuilder var1, @Nonnull UIEventBuilder var2) {
this.buildSearchInput(var1, var2);
this.buildPackList(var1, var2);
}
class="kw">public void buildEventBindings(@Nonnull UIEventBuilder var1, @Nonnull String var2) {
var1.addEventBinding(CustomUIEventBindingType.Activating, var2, new EventData().append("Action", "OpenPackBrowser"));
var1.addEventBinding(CustomUIEventBindingType.Activating, "#PackBrowserPage #SelectButton", new EventData().append("Action", "ConfirmPackBrowser"));
var1.addEventBinding(CustomUIEventBindingType.Activating, "#PackBrowserPage #CancelButton", new EventData().append("Action", "CancelPackBrowser"));
var1.addEventBinding(CustomUIEventBindingType.Activating, "#PackBrowserPage #CreateNewPackButton", new EventData().append("Action", "OpenCreatePack"));
var1.addEventBinding(
CustomUIEventBindingType.Activating,
"#CreatePackPage #CreateButton",
new EventData()
.append("Action", "CreatePack")
.append("@CreateName", "#CreatePackPage #PackName #Input.Value")
.append("@CreateGroup", "#CreatePackPage #PackGroup #Input.Value")
.append("@CreateDescription", "#CreatePackPage #PackDescription #Input.Value")
.append("@CreateVersion", "#CreatePackPage #PackVersion #Input.Value")
.append("@CreateWebsite", "#CreatePackPage #PackWebsite #Input.Value")
.append("@CreateAuthorName", "#CreatePackPage #PackAuthorName #Input.Value")
.append("@CreateTargetDir", "#CreatePackPage #TargetDirDropdown.Value")
);
var1.addEventBinding(CustomUIEventBindingType.Activating, "#CreatePackPage #CancelCreateButton", new EventData().append("Action", "CancelCreatePack"));
var1.addEventBinding(
CustomUIEventBindingType.ValueChanged,
"#CreatePackPage #PackName #Input",
new EventData()
.append("ValidateCreate", "1")
.append("@CreateName", "#CreatePackPage #PackName #Input.Value")
.append("@CreateGroup", "#CreatePackPage #PackGroup #Input.Value"),
false
);
var1.addEventBinding(
CustomUIEventBindingType.ValueChanged,
"#CreatePackPage #PackGroup #Input",
new EventData()
.append("ValidateCreate", "1")
.append("@CreateName", "#CreatePackPage #PackName #Input.Value")
.append("@CreateGroup", "#CreatePackPage #PackGroup #Input.Value"),
false
);
var1.addEventBinding(
CustomUIEventBindingType.ValueChanged,
"#PackBrowserPage #DirectoryFilter",
new EventData().append("@DirectoryFilter", "#PackBrowserPage #DirectoryFilter.Value"),
false
);
}
class="kw">private void buildSearchInput(@Nonnull UICommandBuilder var1, @Nonnull UIEventBuilder var2) {
if (this.config.searchInputId() != null) {
if (!this.searchQuery.isEmpty()) {
var1.set(this.config.searchInputId() + ".Value", this.searchQuery);
}
var2.addEventBinding(
CustomUIEventBindingType.ValueChanged, this.config.searchInputId(), EventData.of("@PackSearch", this.config.searchInputId() + ".Value"), false
);
}
}
class="kw">public void buildPackList(@Nonnull UICommandBuilder var1, @Nonnull UIEventBuilder var2) {
var1.clear(this.config.listElementId());
List var3 = this.collectPackEntries();
int var4 = 0;
for (AssetPackSaveBrowser.PackEntry var6 : var3) {
var1.append(this.config.listElementId(), "Pages/BasicTextButton.ui");
String var7 = this.config.listElementId() + "[" + var4 + "]";
if (var6.immutable) {
var1.set(var7 + ".TextSpans", Message.raw(var6.displayName + " ").insert(Message.translation("server.customUI.assetPackBrowser.readOnly")));
var1.set(var7 + ".Disabled", true);
var1.set(var7 + ".Style.Default.LabelStyle.TextColor", "#6e7da1");
var1.set(var7 + ".TextTooltipStyle", TOOLTIP_STYLE);
var1.set(var7 + ".TooltipTextSpans", Message.translation("server.customUI.assetPackBrowser.readOnlyTooltip"));
} else {
var1.set(var7 + ".Text", var6.displayName);
}
if (var6.key.equals(this.selectedPackKey)) {
var1.set(var7 + ".Style", BUTTON_SELECTED);
}
if (!var6.immutable) {
var2.addEventBinding(CustomUIEventBindingType.Activating, var7, EventData.of("Pack", var6.key));
}
var4++;
}
}
class="kw">public boolean handleEvent(@Nonnull AssetPackSaveBrowserEventData var1) {
if (var1.getSearch() != null) {
this.searchQuery = var1.getSearch().trim().toLowerCase(Locale.ROOT);
class="kw">return true;
} else if (var1.getPack() != null) {
this.selectedPackKey = var1.getPack();
class="kw">return true;
} else if (var1.getDirectoryFilter() != null) {
this.selectedDirectoryFilter = var1.getDirectoryFilter();
class="kw">return true;
} else {
class="kw">return var1.getValidateCreate() != null;
}
}
@Nullable
class="kw">public AssetPackSaveBrowser.ActionResult handleAction(@Nullable String var1, @Nonnull AssetPackSaveBrowserEventData var2, @Nonnull String var3) {
if (var1 == null) {
if (var2.getValidateCreate() != null) {
UICommandBuilder var11 = new UICommandBuilder();
this.buildCreateFormValidation(var11, var2.getCreateName(), var2.getCreateGroup());
class="kw">return new AssetPackSaveBrowser.ActionResult(var11, null, null, false);
} else if (this.handleEvent(var2)) {
UICommandBuilder var10 = new UICommandBuilder();
UIEventBuilder var12 = new UIEventBuilder();
this.buildPackList(var10, var12);
class="kw">return new AssetPackSaveBrowser.ActionResult(var10, var12, null, false);
} else {
class="kw">return null;
}
} else {
class="kw">return class="kw">switch (var1) {
case "OpenPackBrowser" -> {
UICommandBuilder var18 = new UICommandBuilder();
UIEventBuilder var20 = new UIEventBuilder();
var18.set("#PackBrowserPage.Visible", true);
this.populateDirectoryFilterDropdown(var18);
this.buildPackList(var18, var20);
yield new AssetPackSaveBrowser.ActionResult(var18, var20, null, false);
}
case "ConfirmPackBrowser" -> {
UICommandBuilder var17 = new UICommandBuilder();
var17.set("#PackBrowserPage.Visible", false);
if (this.hasSelectedPack()) {
var17.set(var3 + ".Text", this.getSelectedPackDisplayName());
}
yield new AssetPackSaveBrowser.ActionResult(var17, null, null, this.hasSelectedPack());
}
case "CancelPackBrowser" -> {
UICommandBuilder var16 = new UICommandBuilder();
var16.set("#PackBrowserPage.Visible", false);
yield new AssetPackSaveBrowser.ActionResult(var16, null, null, false);
}
case "OpenCreatePack" -> {
UICommandBuilder var15 = new UICommandBuilder();
var15.set("#PackBrowserPage.Visible", false);
var15.set("#CreatePackPage.Visible", true);
var15.set("#CreatePackPage #PackName #Input.Value", "");
var15.set("#CreatePackPage #PackGroup #Input.Value", "");
var15.set("#CreatePackPage #PackDescription #Input.Value", "");
var15.set("#CreatePackPage #PackVersion #Input.Value", "");
var15.set("#CreatePackPage #PackWebsite #Input.Value", "");
var15.set("#CreatePackPage #PackAuthorName #Input.Value", "");
var15.set("#CreatePackPage #CreateErrorText.Visible", false);
var15.set("#CreatePackPage #CreateButton.Disabled", false);
this.populateTargetDirectoryDropdown(var15);
yield new AssetPackSaveBrowser.ActionResult(var15, null, null, false);
}
case "CreatePack" -> {
AssetPackSaveBrowser.CreatePackResult var14 = this.createPack(var2);
UICommandBuilder var19 = new UICommandBuilder();
UIEventBuilder var8 = null;
String var9 = null;
if (var14.success()) {
var8 = new UIEventBuilder();
var19.set("#CreatePackPage.Visible", false);
var19.set("#PackBrowserPage.Visible", true);
this.buildPackList(var19, var8);
} else {
var9 = var14.errorKey();
}
yield new AssetPackSaveBrowser.ActionResult(var19, var8, var9, false);
}
case "CancelCreatePack" -> {
UICommandBuilder var13 = new UICommandBuilder();
var13.set("#CreatePackPage.Visible", false);
var13.set("#PackBrowserPage.Visible", true);
yield new AssetPackSaveBrowser.ActionResult(var13, null, null, false);
}
case "PackSearch", "PackSelect" -> {
this.handleEvent(var2);
UICommandBuilder var6 = new UICommandBuilder();
UIEventBuilder var7 = new UIEventBuilder();
this.buildPackList(var6, var7);
yield new AssetPackSaveBrowser.ActionResult(var6, var7, null, false);
}
class="kw">default -> null;
};
}
}
@Nullable
class="kw">public AssetPack getSelectedPack() {
class="kw">return this.selectedPackKey == null ? null : AssetModule.get().getAssetPack(this.selectedPackKey);
}
class="kw">public boolean hasSelectedPack() {
class="kw">return this.selectedPackKey != null && AssetModule.get().getAssetPack(this.selectedPackKey) != null;
}
@Nonnull
class="kw">public String getSelectedPackDisplayName() {
if (this.selectedPackKey == null) {
class="kw">return "";
}
AssetPack var1 = AssetModule.get().getAssetPack(this.selectedPackKey);
if (var1 == null) {
class="kw">return this.selectedPackKey;
}
String var2 = getPackDisplayName(var1);
for (AssetPack var4 : AssetModule.get().getAssetPacks()) {
if (var4 != var1 && var2.equalsIgnoreCase(getPackDisplayName(var4))) {
class="kw">return var1.getName();
}
}
class="kw">return var2;
}
@Nonnull
class="kw">public AssetPackSaveBrowser.CreatePackResult createPack(@Nonnull AssetPackSaveBrowserEventData var1) {
String var2 = var1.getCreateName();
String var3 = var1.getCreateGroup();
if (var2 == null || var2.isBlank()) {
class="kw">return new AssetPackSaveBrowser.CreatePackResult(false, "server.customUI.assetPackBrowser.create.nameRequired");
}
if (var3 != null && !var3.isBlank()) {
PluginManifest var4 = new PluginManifest();
var4.setName(var2.trim());
var4.setGroup(var3.trim());
if (var1.getCreateDescription() != null && !var1.getCreateDescription().isBlank()) {
var4.setDescription(var1.getCreateDescription().trim());
}
if (var1.getCreateVersion() != null && !var1.getCreateVersion().isBlank()) {
try {
var4.setVersion(Semver.fromString(var1.getCreateVersion().trim()));
} catch (IllegalArgumentException var13) {
}
}
if (var1.getCreateWebsite() != null && !var1.getCreateWebsite().isBlank()) {
var4.setWebsite(var1.getCreateWebsite().trim());
}
if (var1.getCreateAuthorName() != null && !var1.getCreateAuthorName().isBlank()) {
AuthorInfo var5 = new AuthorInfo();
var5.setName(var1.getCreateAuthorName().trim());
var4.setAuthors(List.of(var5));
}
String var14 = new PluginIdentifier(var4).toString();
if (AssetModule.get().getAssetPack(var14) != null) {
class="kw">return new AssetPackSaveBrowser.CreatePackResult(false, "server.customUI.assetPackBrowser.create.alreadyExists");
}
String var6 = INVALID_FILENAME_CHARS.matcher(var3.trim() + "." + var2.trim()).replaceAll("");
Path var7 = this.resolveTargetDirectory(var1.getCreateTargetDir());
if (var7 == null) {
class="kw">return new AssetPackSaveBrowser.CreatePackResult(false, "server.customUI.assetPackBrowser.create.failed");
}
Path var8 = PathUtil.resolveName(var7, var6);
if (var8 == null) {
class="kw">return new AssetPackSaveBrowser.CreatePackResult(false, "server.customUI.assetPackBrowser.create.nameRequired");
}
if (Files.exists(var8)) {
class="kw">return new AssetPackSaveBrowser.CreatePackResult(false, "server.customUI.assetPackBrowser.create.alreadyExists");
}
try {
Files.createDirectories(var8);
Path var9 = var8.resolve("manifest.json");
BsonUtil.writeSync(var9, PluginManifest.CODEC, var4, LOGGER);
String var10 = var14;
Path var11 = var8;
HytaleServer.SCHEDULED_EXECUTOR.execute(() -> {
HytaleServerConfig var3 = HytaleServer.get().getConfig();
HytaleServerConfig.setBoot(var3, new PluginIdentifier(var4), true);
var3.markChanged();
if (var3.consumeHasChanged()) {
HytaleServerConfig.save(var3).join();
}
if (!AssetModule.get().registerPack(var10, var11, var4, AssetPack.PackSource.RUNTIME)) {
((HytaleLogger.Api)LOGGER.atSevere()).log("Failed to register asset pack: %s at %s", var10, var11);
} else {
((HytaleLogger.Api)LOGGER.atInfo()).log("Created new asset pack: %s at %s", var10, var11);
}
});
this.selectedPackKey = var14;
this.pendingPack = new AssetPackSaveBrowser.PendingPack(var14, var2.trim());
class="kw">return new AssetPackSaveBrowser.CreatePackResult(true, null);
} catch (IOException var12) {
((HytaleLogger.Api)((HytaleLogger.Api)LOGGER.atSevere()).withCause(var12)).log("Failed to create asset pack %s", var14);
class="kw">return new AssetPackSaveBrowser.CreatePackResult(false, "server.customUI.assetPackBrowser.create.failed");
}
} else {
class="kw">return new AssetPackSaveBrowser.CreatePackResult(false, "server.customUI.assetPackBrowser.create.groupRequired");
}
}
class="kw">public boolean checkDuplicatePack(@Nullable String var1, @Nullable String var2) {
if (var1 != null && !var1.isBlank() && var2 != null && !var2.isBlank()) {
String var3 = var2.trim() + ":" + var1.trim();
if (AssetModule.get().getAssetPack(var3) != null) {
class="kw">return true;
}
String var4 = INVALID_FILENAME_CHARS.matcher(var2.trim() + "." + var1.trim()).replaceAll("");
for (AssetPackSaveBrowser.ModsDirectory var6 : this.collectModsDirectories()) {
Path var7 = PathUtil.resolveName(var6.path(), var4);
if (var7 != null && Files.exists(var7)) {
class="kw">return true;
}
}
class="kw">return false;
} else {
class="kw">return false;
}
}
class="kw">public void buildCreateFormValidation(@Nonnull UICommandBuilder var1, @Nullable String var2, @Nullable String var3) {
boolean var4 = this.checkDuplicatePack(var2, var3);
var1.set("#CreatePackPage #CreateErrorText.Visible", var4);
if (var4) {
var1.set("#CreatePackPage #CreateErrorText.Text", Message.translation("server.customUI.assetPackBrowser.create.alreadyExists"));
}
var1.set("#CreatePackPage #CreateButton.Disabled", var4);
}
class="kw">private List<AssetPackSaveBrowser.PackEntry> collectPackEntries() {
List var1 = new ObjectArrayList();
List var2 = new ObjectArrayList();
boolean var3 = false;
for (AssetPack var5 : AssetModule.get().getAssetPacks()) {
if (AssetModule.get().validatePackExistsOnDisk(var5)) {
String var6 = getPackDisplayName(var5);
boolean var7 = var5.isImmutable();
if (this.pendingPack != null && var5.getName().equals(this.pendingPack.key)) {
var3 = true;
}
if (!this.searchQuery.isEmpty()) {
int var8 = StringCompareUtil.getFuzzyDistance(var6.toLowerCase(Locale.ROOT), this.searchQuery, Locale.ENGLISH);
if (var8 <= 0) {
class="kw">continue;
}
}
if (!this.selectedDirectoryFilter.isEmpty()) {
Path var13 = Path.of(this.selectedDirectoryFilter);
if (!PathUtil.isChildOf(var13, var5.getPackLocation())) {
class="kw">continue;
}
}
AssetPackSaveBrowser.PackEntry var14 = new AssetPackSaveBrowser.PackEntry(var5.getName(), var6, var7);
if (var7) {
var2.add(var14);
} else {
var1.add(var14);
}
}
}
if (var3) {
this.pendingPack = null;
} else if (this.pendingPack != null) {
String var9 = this.pendingPack.displayName;
if (this.searchQuery.isEmpty() || StringCompareUtil.getFuzzyDistance(var9.toLowerCase(Locale.ROOT), this.searchQuery, Locale.ENGLISH) > 0) {
var1.add(new AssetPackSaveBrowser.PackEntry(this.pendingPack.key, var9, false));
}
}
disambiguateDisplayNames(var1);
disambiguateDisplayNames(var2);
String var10 = AssetModule.get().getBaseAssetPack().getName();
Comparator var11 = Comparator.<AssetPackSaveBrowser.PackEntry, Boolean>comparing(var1x -> !var1x.key.equals(var10))
.thenComparing(var0 -> var0.displayName.toLowerCase(Locale.ROOT));
var1.sort(var11);
var2.sort(var11);
List var12 = new ObjectArrayList(var1.size() + var2.size());
var12.addAll(var1);
var12.addAll(var2);
class="kw">return var12;
}
class="kw">private class="kw">static void disambiguateDisplayNames(@Nonnull List<AssetPackSaveBrowser.PackEntry> var0) {
Map var1 = new HashMap<>();
for (AssetPackSaveBrowser.PackEntry var3 : var0) {
var1.merge(var3.displayName.toLowerCase(Locale.ROOT), 1, Integer::sum);
}
for (int var4 = 0; var4 < var0.size(); var4++) {
AssetPackSaveBrowser.PackEntry var5 = var0.get(var4);
if (var1.getOrDefault(var5.displayName.toLowerCase(Locale.ROOT), 0) > 1) {
var0.set(var4, new AssetPackSaveBrowser.PackEntry(var5.key, var5.key, var5.immutable));
}
}
}
@Nonnull
class="kw">private class="kw">static String getPackDisplayName(@Nonnull AssetPack var0) {
if (var0.equals(AssetModule.get().getBaseAssetPack())) {
class="kw">return "HytaleAssets";
}
PluginManifest var1 = var0.getManifest();
class="kw">return var1 != null ? var1.getName() : var0.getName();
}
class="kw">public record ActionResult(@Nonnull UICommandBuilder commandBuilder, @Nullable UIEventBuilder eventBuilder, @Nullable String errorKey, boolean packConfirmed) {
class="kw">public ActionResult {
}
}
class="kw">public record CreatePackResult(boolean success, @Nullable String errorKey) {
class="kw">public CreatePackResult {
}
}
class="kw">public record ModsDirectory(@Nonnull String langKey, @Nonnull String filterLangKey, @Nonnull Path path) {
class="kw">public ModsDirectory {
}
}
class="kw">private record PackEntry(@Nonnull String key, @Nonnull String displayName, boolean immutable) {
class="kw">private PackEntry {
}
}
class="kw">private record PendingPack(@Nonnull String key, @Nonnull String displayName) {
class="kw">private PendingPack {
}
}
}