PageData class
Пакет: com.hypixel.hytale.builtin.blockspawner.ui
Файл: com/hypixel/hytale/builtin/blockspawner/ui/BlockSpawnerSettingsPage.java
Поля (16)
| Модификаторы | Тип | Имя |
|---|---|---|
|
public static final BuilderCodec<BlockSpawnerSettingsPage.PageData> |
CODEC |
|
public static final String |
KEY_ACTION |
|
public static final String |
KEY_ASSET_NAME |
|
public static final String |
KEY_FIELD |
|
public static final String |
KEY_INDEX |
|
public static final String |
KEY_SPAWNER_ASSET |
|
public static final String |
KEY_VALUE_NUM |
|
public static final String |
KEY_VALUE_STR |
|
private String |
action |
|
private String |
assetName |
|
private String |
field |
|
private String |
index |
|
private final AssetPackSaveBrowserEventData |
packBrowserData |
|
private String |
spawnerAsset |
|
private Double |
valueNum |
|
private String |
valueStr |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.builtin.blockspawner.ui;
class="kw">import com.hypixel.hytale.assetstore.AssetPack;
class="kw">import com.hypixel.hytale.assetstore.AssetRegistry;
class="kw">import com.hypixel.hytale.assetstore.AssetStore;
class="kw">import com.hypixel.hytale.assetstore.map.DefaultAssetMap;
class="kw">import com.hypixel.hytale.builtin.blockspawner.BlockSpawnerEntry;
class="kw">import com.hypixel.hytale.builtin.blockspawner.BlockSpawnerTable;
class="kw">import com.hypixel.hytale.builtin.blockspawner.state.BlockSpawner;
class="kw">import com.hypixel.hytale.codec.Codec;
class="kw">import com.hypixel.hytale.codec.ExtraInfo;
class="kw">import com.hypixel.hytale.codec.KeyedCodec;
class="kw">import com.hypixel.hytale.codec.builder.BuilderCodec;
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.logger.sentry.SkipSentryException;
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.HytaleServer;
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.asset.type.blocktype.config.BlockType;
class="kw">import com.hypixel.hytale.server.core.asset.type.item.config.Item;
class="kw">import com.hypixel.hytale.server.core.asset.type.item.config.ItemDropList;
class="kw">import com.hypixel.hytale.server.core.entity.entities.player.pages.InteractiveCustomUIPage;
class="kw">import com.hypixel.hytale.server.core.modules.block.BlockModule;
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.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.World;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
class="kw">import com.hypixel.hytale.server.core.util.BsonUtil;
class="kw">import it.unimi.dsi.fastutil.objects.ObjectArrayList;
class="kw">import java.nio.file.Files;
class="kw">import java.nio.file.Path;
class="kw">import java.util.ArrayList;
class="kw">import java.util.List;
class="kw">import java.util.Map.Entry;
class="kw">import java.util.logging.Level;
class="kw">import java.util.regex.Pattern;
class="kw">import java.util.stream.Collectors;
class="kw">import javax.annotation.Nonnull;
class="kw">import org.bson.BsonArray;
class="kw">import org.bson.BsonDocument;
class="kw">import org.bson.BsonDouble;
class="kw">import org.bson.BsonString;
class="kw">import org.bson.BsonValue;
class="kw">public class BlockSpawnerSettingsPage class="kw">extends InteractiveCustomUIPage<BlockSpawnerSettingsPage.PageData> {
@Nonnull
class="kw">private class="kw">static class="kw">final HytaleLogger LOGGER = HytaleLogger.forEnclosingClass();
class="kw">private class="kw">static class="kw">final String MAIN_PAGE = "Pages/BlockSpawner/BlockSpawnerMainPage.ui";
class="kw">private class="kw">static class="kw">final String EDIT_SPAWNER_PAGE = "Pages/BlockSpawner/BlockSpawnerCreateSpawnerPage.ui";
class="kw">private class="kw">static class="kw">final String SPAWNER_ENTRY_ROW = "Pages/BlockSpawner/BlockSpawnerSpawnerEntryRow.ui";
class="kw">private class="kw">static class="kw">final String FURNITURE_CONTAINER_CATEGORY = "Furniture.Containers";
class="kw">private class="kw">static class="kw">final Pattern ASSET_NAME_PATTERN = Pattern.compile("^[A-Za-z0-9_]+$");
class="kw">private class="kw">final BlockModule.BlockStateInfo info;
class="kw">private class="kw">final BlockSpawner state;
class="kw">private class="kw">final AssetPackSaveBrowser packBrowser = new AssetPackSaveBrowser(AssetPackSaveBrowserConfig.defaults());
class="kw">private BlockSpawnerSettingsPage.Mode mode = BlockSpawnerSettingsPage.Mode.MAIN;
class="kw">private String editingId;
class="kw">private class="kw">final List<BsonDocument> spawnerEntries = new ArrayList<>();
class="kw">private String statusKey;
class="kw">public BlockSpawnerSettingsPage(
@Nonnull PlayerRef var1, @Nonnull BlockModule.BlockStateInfo var2, @Nonnull BlockSpawner var3, @Nonnull CustomPageLifetime var4
) {
super(var1, var4, BlockSpawnerSettingsPage.PageData.CODEC);
this.info = var2;
this.state = var3;
}
@Override
class="kw">public void build(@Nonnull Ref<EntityStore> var1, @Nonnull UICommandBuilder var2, @Nonnull UIEventBuilder var3, @Nonnull Store<EntityStore> var4) {
class="kw">switch (this.mode) {
case MAIN:
this.buildMain(var2, var3);
break;
case EDIT_SPAWNER:
this.buildEditSpawner(var2, var3);
}
this.applyStatus(var2);
}
class="kw">private void buildMain(@Nonnull UICommandBuilder var1, @Nonnull UIEventBuilder var2) {
var1.append("Pages/BlockSpawner/BlockSpawnerMainPage.ui");
var1.set("#SpawnerAsset.Entries", assetDropdownEntries(BlockSpawnerTable.getAssetMap().getAssetMap().keySet()));
if (this.state.getBlockSpawnerId() != null) {
var1.set("#SpawnerAsset.Value", this.state.getBlockSpawnerId());
}
var2.addEventBinding(
CustomUIEventBindingType.Activating,
"#SaveButton",
new EventData().append("Action", BlockSpawnerSettingsPage.Action.APPLY.name()).append("@SpawnerAsset", "#SpawnerAsset.Value")
);
var2.addEventBinding(
CustomUIEventBindingType.Activating,
"#CreateSpawnerButton",
new EventData().append("Action", BlockSpawnerSettingsPage.Action.GOTO_EDIT_SPAWNER.name()),
false
);
}
class="kw">private void buildEditSpawner(@Nonnull UICommandBuilder var1, @Nonnull UIEventBuilder var2) {
var1.append("Pages/BlockSpawner/BlockSpawnerCreateSpawnerPage.ui");
var1.set("#EditExisting.Entries", assetDropdownEntries(BlockSpawnerTable.getAssetMap().getAssetMap().keySet()));
if (this.editingId != null) {
var1.set("#EditExisting.Value", this.editingId);
}
this.buildSpawnerEntries(var1, var2);
this.bindEditorChrome(var2, BlockSpawnerSettingsPage.Action.SPAWNER_ADD);
this.bindSaveDialog(var1, var2);
}
class="kw">private void bindEditorChrome(@Nonnull UIEventBuilder var1, BlockSpawnerSettingsPage.Action var2) {
var1.addEventBinding(
CustomUIEventBindingType.ValueChanged,
"#EditExisting",
new EventData().append("Action", BlockSpawnerSettingsPage.Action.LOAD_EXISTING.name()).append("@ValueStr", "#EditExisting.Value"),
false
);
var1.addEventBinding(
CustomUIEventBindingType.Activating, "#NewButton", new EventData().append("Action", BlockSpawnerSettingsPage.Action.NEW_ASSET.name()), false
);
if (var2 != null) {
var1.addEventBinding(CustomUIEventBindingType.Activating, "#AddEntryButton", new EventData().append("Action", var2.name()), false);
}
var1.addEventBinding(
CustomUIEventBindingType.Activating, "#SaveButton", new EventData().append("Action", BlockSpawnerSettingsPage.Action.OPEN_SAVE.name()), false
);
var1.addEventBinding(
CustomUIEventBindingType.Activating, "#DeleteButton", new EventData().append("Action", BlockSpawnerSettingsPage.Action.DELETE.name()), false
);
var1.addEventBinding(
CustomUIEventBindingType.Activating, "#CancelButton", new EventData().append("Action", BlockSpawnerSettingsPage.Action.GOTO_MAIN.name()), false
);
}
class="kw">private void bindSaveDialog(@Nonnull UICommandBuilder var1, @Nonnull UIEventBuilder var2) {
this.packBrowser.buildUI(var1, var2);
this.packBrowser.buildEventBindings(var2, "#BrowsePackButton");
var2.addEventBinding(
CustomUIEventBindingType.ValueChanged,
"#SaveAssetName #Input",
new EventData().append("Action", BlockSpawnerSettingsPage.Action.SAVE_NAME_CHANGED.name()).append("@AssetName", "#SaveAssetName #Input.Value"),
false
);
var2.addEventBinding(
CustomUIEventBindingType.Activating,
"#ConfirmSaveButton",
new EventData().append("Action", BlockSpawnerSettingsPage.Action.CONFIRM_SAVE.name()).append("@AssetName", "#SaveAssetName #Input.Value"),
false
);
var2.addEventBinding(
CustomUIEventBindingType.Activating, "#CancelSaveButton", new EventData().append("Action", BlockSpawnerSettingsPage.Action.CANCEL_SAVE.name()), false
);
}
class="kw">private void buildSpawnerEntries(@Nonnull UICommandBuilder var1, @Nonnull UIEventBuilder var2) {
List var3 = furnitureContainerBlockEntries();
List var4 = assetDropdownEntries(ItemDropList.getAssetMap().getAssetMap().keySet());
for (int var5 = 0; var5 < this.spawnerEntries.size(); var5++) {
BsonDocument var6 = this.spawnerEntries.get(var5);
String var7 = "#EntryList[" + var5 + "]";
String var8 = Integer.toString(var5);
var1.append("#EntryList", "Pages/BlockSpawner/BlockSpawnerSpawnerEntryRow.ui");
var1.set(var7 + " #Name.Entries", var3);
var1.set(var7 + " #Name.Value", getString(var6, "Name", ""));
var1.set(var7 + " #Weight.Value", getDouble(var6, "Weight", 100.0));
var1.set(var7 + " #Droplist.Entries", var4);
var1.set(var7 + " #Droplist.Value", extractDroplistId(var6));
var2.addEventBinding(
CustomUIEventBindingType.ValueChanged,
var7 + " #Name",
fieldUpdate(var8, BlockSpawnerSettingsPage.Field.SP_NAME, "@ValueStr", var7 + " #Name.Value"),
false
);
var2.addEventBinding(
CustomUIEventBindingType.ValueChanged,
var7 + " #Weight",
fieldUpdate(var8, BlockSpawnerSettingsPage.Field.SP_WEIGHT, "@ValueNum", var7 + " #Weight.Value"),
false
);
var2.addEventBinding(
CustomUIEventBindingType.ValueChanged,
var7 + " #Droplist",
fieldUpdate(var8, BlockSpawnerSettingsPage.Field.SP_DROPLIST, "@ValueStr", var7 + " #Droplist.Value"),
false
);
var2.addEventBinding(
CustomUIEventBindingType.Activating,
var7 + " #RemoveButton",
new EventData().append("Action", BlockSpawnerSettingsPage.Action.SPAWNER_REMOVE.name()).append("Index", var8),
false
);
}
}
class="kw">private class="kw">static EventData fieldUpdate(String var0, BlockSpawnerSettingsPage.Field var1, String var2, String var3) {
class="kw">return new EventData()
.append("Action", BlockSpawnerSettingsPage.Action.SPAWNER_UPDATE.name())
.append("Index", var0)
.append("Field", var1.name())
.append(var2, var3);
}
class="kw">public void handleDataEvent(@Nonnull Ref<EntityStore> var1, @Nonnull Store<EntityStore> var2, @Nonnull BlockSpawnerSettingsPage.PageData var3) {
AssetPackSaveBrowser.ActionResult var4 = this.packBrowser.handleAction(var3.action, var3.packBrowserData, "#SavePage #SelectedPackLabel");
if (var4 != null) {
if (var4.errorKey() != null) {
this.playerRef.sendMessage(Message.translation(var4.errorKey()));
}
this.sendUpdate(var4.commandBuilder(), var4.eventBuilder(), false);
} else {
BlockSpawnerSettingsPage.Action var5 = var3.action == null ? null : parseAction(var3.action);
if (var5 != null) {
class="kw">switch (var5) {
case APPLY:
this.applySelectedAsset(var3);
break;
case GOTO_MAIN:
this.mode = BlockSpawnerSettingsPage.Mode.MAIN;
this.rebuild();
break;
case GOTO_EDIT_SPAWNER:
this.mode = BlockSpawnerSettingsPage.Mode.EDIT_SPAWNER;
this.editingId = null;
this.resetDraft();
this.rebuild();
break;
case LOAD_EXISTING:
this.loadExisting(var3.valueStr);
break;
case NEW_ASSET:
this.editingId = null;
this.resetDraft();
this.rebuild();
break;
case SPAWNER_ADD:
this.spawnerEntries.add(defaultSpawnerEntry());
this.refreshSpawnerEntries();
break;
case SPAWNER_REMOVE:
int var6 = parseIndex(var3.index);
if (var6 >= 0 && var6 < this.spawnerEntries.size()) {
this.spawnerEntries.remove(var6);
this.refreshSpawnerEntries();
}
break;
case SPAWNER_UPDATE:
this.updateSpawnerEntry(var3);
break;
case OPEN_SAVE:
this.openSaveDialog();
break;
case SAVE_NAME_CHANGED:
this.onSaveNameChanged(var3);
break;
case CONFIRM_SAVE:
this.saveCurrent(var2.getExternalData().getWorld(), var3);
break;
case CANCEL_SAVE:
this.closeSaveDialog();
break;
case DELETE:
this.deleteAsset(var2.getExternalData().getWorld());
}
}
}
}
class="kw">private void applySelectedAsset(@Nonnull BlockSpawnerSettingsPage.PageData var1) {
if (BlockSpawnerTable.getAssetMap().getAsset(var1.spawnerAsset) == null) {
this.statusKey = "server.customUI.blockSpawner.status.errorAssetNotFound";
this.rebuild();
} else {
this.state.setBlockSpawnerId(var1.spawnerAsset);
this.info.markNeedsSaving();
this.close();
}
}
class="kw">private void loadExisting(String var1) {
if (var1 != null && !var1.isEmpty()) {
ExtraInfo var2 = ExtraInfo.THREAD_LOCAL.get();
this.spawnerEntries.clear();
BlockSpawnerTable var3 = BlockSpawnerTable.getAssetMap().getAsset(var1);
if (var3 != null && var3.getEntries() != null) {
for (BlockSpawnerEntry var7 : var3.getEntries().internalKeys()) {
this.spawnerEntries.add(BlockSpawnerEntry.CODEC.encode(var7, var2).asDocument());
}
}
if (this.spawnerEntries.isEmpty()) {
this.spawnerEntries.add(defaultSpawnerEntry());
}
this.editingId = var1;
this.rebuild();
}
}
class="kw">private void resetDraft() {
this.spawnerEntries.clear();
this.spawnerEntries.add(defaultSpawnerEntry());
}
class="kw">private void updateSpawnerEntry(@Nonnull BlockSpawnerSettingsPage.PageData var1) {
int var2 = parseIndex(var1.index);
if (var2 >= 0 && var2 < this.spawnerEntries.size() && var1.field != null) {
BsonDocument var3 = this.spawnerEntries.get(var2);
class="kw">switch (parseField(var1.field)) {
case SP_NAME:
if (var1.valueStr != null) {
var3.put("Name", new BsonString(var1.valueStr));
}
break;
case SP_WEIGHT:
var3.put("Weight", new BsonDouble(dbl(var1.valueNum)));
break;
case SP_DROPLIST:
setDroplistId(var3, var1.valueStr);
}
}
}
class="kw">private void openSaveDialog() {
UICommandBuilder var1 = new UICommandBuilder();
if (this.editingId != null) {
String var2 = ((DefaultAssetMap)this.spawnerStore().getAssetMap()).getAssetPack(this.editingId);
if (var2 != null) {
this.packBrowser.setSelectedPackKey(var2);
}
}
var1.set("#SavePage.Visible", true);
var1.set("#SaveAssetName #Input.Value", this.editingId == null ? "" : this.editingId);
var1.set("#SaveStatus.Text", "");
var1.set("#ConfirmSaveButton.Disabled", this.editingId == null);
if (this.packBrowser.hasSelectedPack()) {
var1.set("#SavePage #SelectedPackLabel.Text", this.packBrowser.getSelectedPackDisplayName());
}
this.sendUpdate(var1, false);
}
class="kw">private void closeSaveDialog() {
UICommandBuilder var1 = new UICommandBuilder();
var1.set("#SavePage.Visible", false);
this.sendUpdate(var1, false);
}
class="kw">private void onSaveNameChanged(@Nonnull BlockSpawnerSettingsPage.PageData var1) {
UICommandBuilder var2 = new UICommandBuilder();
var2.set("#ConfirmSaveButton.Disabled", var1.assetName == null || var1.assetName.isBlank());
this.sendUpdate(var2, false);
}
class="kw">private void dialogError(@Nonnull String var1) {
UICommandBuilder var2 = new UICommandBuilder();
var2.set("#SaveStatus.Text", Message.translation(var1));
this.sendUpdate(var2, false);
}
class="kw">private void saveCurrent(@Nonnull World var1, @Nonnull BlockSpawnerSettingsPage.PageData var2) {
String var3 = var2.assetName == null ? "" : var2.assetName.trim();
if (!ASSET_NAME_PATTERN.matcher(var3).matches()) {
this.dialogError("server.customUI.blockSpawner.status.errorName");
} else {
ExtraInfo var4 = ExtraInfo.THREAD_LOCAL.get();
if (this.spawnerEntries.isEmpty()) {
this.dialogError("server.customUI.blockSpawner.status.errorFields");
} else {
for (BsonDocument var6 : this.spawnerEntries) {
String var7 = getString(var6, "Name", "");
if (var7.isEmpty() || BlockType.getAssetMap().getAsset(var7) == null) {
this.dialogError("server.customUI.blockSpawner.status.errorFields");
class="kw">return;
}
try {
BlockSpawnerEntry.CODEC.decode(var6, var4);
} catch (Exception var15) {
this.dialogError("server.customUI.blockSpawner.status.errorShape");
class="kw">return;
}
}
AssetStore var16 = this.spawnerStore();
DefaultAssetMap var17 = (DefaultAssetMap<String, BlockSpawnerTable>)var16.getAssetMap();
BsonDocument var18 = new BsonDocument().append("Entries", new BsonArray(new ArrayList<>(this.spawnerEntries)));
String var8 = "New";
String var9 = "server.customUI.blockSpawner.status.spawnerSaved";
Path var12 = var17.getPath(var3);
String var13 = var17.getAssetPack(var3);
AssetPack var14 = var13 == null ? null : AssetModule.get().getAssetPack(var13);
AssetPack var10;
Path var11;
if (var12 != null && var14 != null && !var14.isImmutable()) {
var10 = var14;
var11 = var12;
} else {
var10 = this.packBrowser.getSelectedPack();
if (var10 == null) {
this.dialogError("server.customUI.blockSpawner.status.errorPack");
class="kw">return;
}
var11 = var10.getRoot().resolve("Server").resolve(var16.getPath()).resolve(var8).resolve(var3 + var16.getExtension());
}
this.editingId = var3;
this.writeAssetAsync(var1, var16, var10, var11, var18, var9);
}
}
}
class="kw">private void writeAssetAsync(
@Nonnull World var1, @Nonnull AssetStore<?, ?, ?> var2, @Nonnull AssetPack var3, @Nonnull Path var4, @Nonnull BsonDocument var5, @Nonnull String var6
) {
HytaleServer.SCHEDULED_EXECUTOR.execute(() -> {
boolean var7 = this.writeAsset(var2, var3, var4, var5);
var1.execute(() -> {
if (var7) {
this.statusKey = var6;
this.mode = BlockSpawnerSettingsPage.Mode.MAIN;
} else {
this.statusKey = "server.customUI.blockSpawner.status.errorWrite";
}
this.rebuild();
});
});
}
class="kw">private boolean writeAsset(@Nonnull AssetStore<?, ?, ?> var1, @Nonnull AssetPack var2, @Nonnull Path var3, @Nonnull BsonDocument var4) {
try {
ExtraInfo var5 = ExtraInfo.THREAD_LOCAL.get();
BlockSpawnerTable var6 = BlockSpawnerTable.CODEC.decode(var4, var5);
BsonUtil.writeSync(var3, BlockSpawnerTable.CODEC, var6, LOGGER);
var1.loadAssetsFromPaths(var2.getName(), List.of(var3));
class="kw">return true;
} catch (Exception var7) {
((HytaleLogger.Api)LOGGER.at(Level.WARNING).withCause(new SkipSentryException(var7))).log("Failed to write block spawner asset to '%s'", var3);
class="kw">return false;
}
}
class="kw">private void deleteAsset(@Nonnull World var1) {
if (this.editingId == null) {
this.statusKey = "server.customUI.blockSpawner.status.errorSelection";
this.rebuild();
} else {
AssetStore var2 = this.spawnerStore();
DefaultAssetMap var3 = (DefaultAssetMap<String, BlockSpawnerTable>)var2.getAssetMap();
Path var4 = var3.getPath(this.editingId);
String var5 = var3.getAssetPack(this.editingId);
AssetPack var6 = var5 == null ? null : AssetModule.get().getAssetPack(var5);
if (var4 != null && var6 != null && !var6.isImmutable()) {
AssetStore var7 = var2;
String var8 = var5;
Path var9 = var4;
HytaleServer.SCHEDULED_EXECUTOR
.execute(
() -> {
boolean var5;
try {
var7.removeAssetWithPaths(var8, List.of(var9));
Files.deleteIfExists(var9);
var5 = true;
} catch (Exception var7) {
((HytaleLogger.Api)LOGGER.at(Level.WARNING).withCause(new SkipSentryException(var7)))
.log("Failed to delete block spawner asset at '%s'", var9);
var5 = false;
}
boolean var6 = var5;
var1.execute(() -> {
if (var6) {
this.statusKey = "server.customUI.blockSpawner.status.deleted";
this.editingId = null;
this.resetDraft();
} else {
this.statusKey = "server.customUI.blockSpawner.status.errorWrite";
}
this.rebuild();
});
}
);
} else {
this.statusKey = "server.customUI.blockSpawner.status.errorPack";
this.rebuild();
}
}
}
class="kw">private void refreshSpawnerEntries() {
UICommandBuilder var1 = new UICommandBuilder();
UIEventBuilder var2 = new UIEventBuilder();
var1.clear("#EntryList");
this.buildSpawnerEntries(var1, var2);
this.sendUpdate(var1, var2, false);
}
class="kw">private void applyStatus(@Nonnull UICommandBuilder var1) {
if (this.statusKey != null) {
var1.set("#Status.Text", Message.translation(this.statusKey));
this.statusKey = null;
}
}
@Nonnull
class="kw">private class="kw">static BsonDocument defaultSpawnerEntry() {
class="kw">return new BsonDocument().append("Name", new BsonString("")).append("Weight", new BsonDouble(100.0));
}
@Nonnull
class="kw">private class="kw">static String extractDroplistId(@Nonnull BsonDocument var0) {
BsonDocument var1 = var0.getDocument("Components", null);
if (var1 == null) {
class="kw">return "";
}
BsonDocument var2 = var1.getDocument("Components", null);
if (var2 == null) {
class="kw">return "";
}
BsonDocument var3 = var2.getDocument("ItemContainerBlock", null);
class="kw">return var3 == null ? "" : getString(var3, "Droplist", "");
}
class="kw">private class="kw">static void setDroplistId(@Nonnull BsonDocument var0, String var1) {
if (var1 != null && !var1.isEmpty()) {
BsonDocument var5 = var0.getDocument("Components", null);
if (var5 == null) {
var5 = new BsonDocument();
var0.put("Components", var5);
}
BsonDocument var6 = var5.getDocument("Components", null);
if (var6 == null) {
var6 = new BsonDocument();
var5.put("Components", var6);
}
BsonDocument var4 = var6.getDocument("ItemContainerBlock", null);
if (var4 == null) {
var4 = new BsonDocument();
var6.put("ItemContainerBlock", var4);
}
var4.put("Droplist", new BsonString(var1));
} else {
BsonDocument var2 = var0.getDocument("Components", null);
if (var2 != null) {
BsonDocument var3 = var2.getDocument("Components", null);
if (var3 != null) {
var3.remove("ItemContainerBlock");
}
}
}
}
@Nonnull
class="kw">private AssetStore<String, BlockSpawnerTable, DefaultAssetMap<String, BlockSpawnerTable>> spawnerStore() {
class="kw">return AssetRegistry.getAssetStore(BlockSpawnerTable.class);
}
class="kw">private class="kw">static List<DropdownEntryInfo> furnitureContainerBlockEntries() {
ArrayList var0 = new ArrayList<>();
for (Entry var2 : Item.getAssetMap().getAssetMap().entrySet()) {
String[] var3 = var2.getValue().getCategories();
if (var3 != null) {
for (String var7 : var3) {
if ("Furniture.Containers".equals(var7)) {
if (BlockType.getAssetMap().getAsset(var2.getKey()) != null) {
var0.add(var2.getKey());
}
break;
}
}
}
}
var0.sort(String.CASE_INSENSITIVE_ORDER);
ObjectArrayList var8 = new ObjectArrayList();
var8.add(new DropdownEntryInfo(LocalizableString.fromString("Empty"), "Empty"));
for (String var10 : var0) {
var8.add(new DropdownEntryInfo(LocalizableString.fromString(var10), var10));
}
class="kw">return var8;
}
class="kw">private class="kw">static List<DropdownEntryInfo> assetDropdownEntries(@Nonnull Iterable<String> var0) {
ArrayList var1 = new ArrayList<>();
for (String var3 : var0) {
if (var3 != null) {
var1.add(var3);
}
}
var1.sort(String.CASE_INSENSITIVE_ORDER);
class="kw">return var1.stream()
.map(var0x -> new DropdownEntryInfo(LocalizableString.fromString(var0x), var0x))
.collect(Collectors.toCollection(ObjectArrayList::new));
}
class="kw">private class="kw">static String getString(@Nonnull BsonDocument var0, @Nonnull String var1, @Nonnull String var2) {
BsonValue var3 = var0.get(var1);
class="kw">return var3 != null && var3.isString() ? var3.asString().getValue() : var2;
}
class="kw">private class="kw">static double getDouble(@Nonnull BsonDocument var0, @Nonnull String var1, double var2) {
BsonValue var4 = var0.get(var1);
class="kw">return var4 != null && var4.isNumber() ? var4.asNumber().doubleValue() : var2;
}
class="kw">private class="kw">static BlockSpawnerSettingsPage.Action parseAction(@Nonnull String var0) {
try {
class="kw">return BlockSpawnerSettingsPage.Action.valueOf(var0);
} catch (IllegalArgumentException var2) {
class="kw">return null;
}
}
class="kw">private class="kw">static BlockSpawnerSettingsPage.Field parseField(@Nonnull String var0) {
try {
class="kw">return BlockSpawnerSettingsPage.Field.valueOf(var0);
} catch (IllegalArgumentException var2) {
class="kw">return BlockSpawnerSettingsPage.Field.SP_NAME;
}
}
class="kw">private class="kw">static double dbl(Double var0) {
class="kw">return var0 == null ? 0.0 : var0;
}
class="kw">private class="kw">static int parseIndex(String var0) {
if (var0 == null) {
class="kw">return -1;
}
try {
class="kw">return Integer.parseInt(var0);
} catch (NumberFormatException var2) {
class="kw">return -1;
}
}
class="kw">private enum Action {
APPLY,
GOTO_MAIN,
GOTO_EDIT_SPAWNER,
LOAD_EXISTING,
NEW_ASSET,
SPAWNER_ADD,
SPAWNER_REMOVE,
SPAWNER_UPDATE,
OPEN_SAVE,
SAVE_NAME_CHANGED,
CONFIRM_SAVE,
CANCEL_SAVE,
DELETE;
Action() {
}
}
class="kw">private enum Field {
SP_NAME,
SP_WEIGHT,
SP_DROPLIST;
Field() {
}
}
class="kw">private enum Mode {
MAIN,
EDIT_SPAWNER;
Mode() {
}
}
class="kw">public class="kw">static class PageData {
class="kw">public class="kw">static class="kw">final String KEY_ACTION = "Action";
class="kw">public class="kw">static class="kw">final String KEY_INDEX = "Index";
class="kw">public class="kw">static class="kw">final String KEY_FIELD = "Field";
class="kw">public class="kw">static class="kw">final String KEY_VALUE_STR = "@ValueStr";
class="kw">public class="kw">static class="kw">final String KEY_VALUE_NUM = "@ValueNum";
class="kw">public class="kw">static class="kw">final String KEY_SPAWNER_ASSET = "@SpawnerAsset";
class="kw">public class="kw">static class="kw">final String KEY_ASSET_NAME = "@AssetName";
class="kw">public class="kw">static class="kw">final BuilderCodec<BlockSpawnerSettingsPage.PageData> CODEC = BuilderCodec.builder(
BlockSpawnerSettingsPage.PageData.class, BlockSpawnerSettingsPage.PageData::new
)
.addField(new KeyedCodec<>("Action", Codec.STRING), (var0, var1) -> var0.action = var1, var0 -> var0.action)
.addField(new KeyedCodec<>("Index", Codec.STRING), (var0, var1) -> var0.index = var1, var0 -> var0.index)
.addField(new KeyedCodec<>("Field", Codec.STRING), (var0, var1) -> var0.field = var1, var0 -> var0.field)
.addField(new KeyedCodec<>("@ValueStr", Codec.STRING), (var0, var1) -> var0.valueStr = var1, var0 -> var0.valueStr)
.addField(new KeyedCodec<>("@ValueNum", Codec.DOUBLE), (var0, var1) -> var0.valueNum = var1, var0 -> var0.valueNum)
.addField(new KeyedCodec<>("@SpawnerAsset", Codec.STRING), (var0, var1) -> var0.spawnerAsset = var1, var0 -> var0.spawnerAsset)
.addField(new KeyedCodec<>("@AssetName", Codec.STRING), (var0, var1) -> var0.assetName = var1, var0 -> var0.assetName)
.addField(new KeyedCodec<>("Pack", Codec.STRING), (var0, var1) -> var0.packBrowserData.pack = var1, var0 -> var0.packBrowserData.pack)
.addField(new KeyedCodec<>("@PackSearch", Codec.STRING), (var0, var1) -> var0.packBrowserData.search = var1, var0 -> var0.packBrowserData.search)
.addField(
new KeyedCodec<>("@CreateName", Codec.STRING), (var0, var1) -> var0.packBrowserData.createName = var1, var0 -> var0.packBrowserData.createName
)
.addField(
new KeyedCodec<>("@CreateGroup", Codec.STRING), (var0, var1) -> var0.packBrowserData.createGroup = var1, var0 -> var0.packBrowserData.createGroup
)
.addField(
new KeyedCodec<>("@CreateDescription", Codec.STRING),
(var0, var1) -> var0.packBrowserData.createDescription = var1,
var0 -> var0.packBrowserData.createDescription
)
.addField(
new KeyedCodec<>("@CreateVersion", Codec.STRING),
(var0, var1) -> var0.packBrowserData.createVersion = var1,
var0 -> var0.packBrowserData.createVersion
)
.addField(
new KeyedCodec<>("@CreateWebsite", Codec.STRING),
(var0, var1) -> var0.packBrowserData.createWebsite = var1,
var0 -> var0.packBrowserData.createWebsite
)
.addField(
new KeyedCodec<>("@CreateAuthorName", Codec.STRING),
(var0, var1) -> var0.packBrowserData.createAuthorName = var1,
var0 -> var0.packBrowserData.createAuthorName
)
.addField(
new KeyedCodec<>("ValidateCreate", Codec.STRING),
(var0, var1) -> var0.packBrowserData.validateCreate = var1,
var0 -> var0.packBrowserData.validateCreate
)
.addField(
new KeyedCodec<>("@CreateTargetDir", Codec.STRING),
(var0, var1) -> var0.packBrowserData.createTargetDir = var1,
var0 -> var0.packBrowserData.createTargetDir
)
.addField(
new KeyedCodec<>("@DirectoryFilter", Codec.STRING),
(var0, var1) -> var0.packBrowserData.directoryFilter = var1,
var0 -> var0.packBrowserData.directoryFilter
)
.build();
class="kw">private String action;
class="kw">private String index;
class="kw">private String field;
class="kw">private String valueStr;
class="kw">private Double valueNum;
class="kw">private String spawnerAsset;
class="kw">private String assetName;
class="kw">private class="kw">final AssetPackSaveBrowserEventData packBrowserData = new AssetPackSaveBrowserEventData();
class="kw">public PageData() {
}
}
}