126 lines
6.7 KiB
Java
126 lines
6.7 KiB
Java
package io.gitlab.jfronny.inceptum.gtk.window.edit;
|
|
|
|
import io.gitlab.jfronny.commons.ArgumentsTokenizer;
|
|
import io.gitlab.jfronny.commons.io.JFiles;
|
|
import io.gitlab.jfronny.inceptum.common.*;
|
|
import io.gitlab.jfronny.inceptum.gtk.control.*;
|
|
import io.gitlab.jfronny.inceptum.gtk.util.I18n;
|
|
import io.gitlab.jfronny.inceptum.gtk.window.InstanceSettingsWindow;
|
|
import io.gitlab.jfronny.inceptum.launcher.api.McApi;
|
|
import io.gitlab.jfronny.inceptum.launcher.model.inceptum.InstanceMeta;
|
|
import io.gitlab.jfronny.inceptum.launcher.model.mojang.VersionsList;
|
|
import io.gitlab.jfronny.inceptum.launcher.system.instance.*;
|
|
import org.gtk.gtk.*;
|
|
|
|
import java.io.IOException;
|
|
import java.nio.file.Files;
|
|
import java.nio.file.Path;
|
|
import java.util.Date;
|
|
import java.util.List;
|
|
|
|
public class GeneralTab extends SettingsTab {
|
|
private static final VersionsList VERSIONS = McApi.getVersions();
|
|
|
|
public GeneralTab(Instance instance, InstanceSettingsWindow window) {
|
|
super(instance, window);
|
|
section(null, section -> {
|
|
var row = section.row("instance.settings.general.name", "instance.settings.general.name.placeholder");
|
|
Button apply = Button.newWithLabel(I18n.get("instance.settings.apply"));
|
|
Entry entry = row.setEntry(instance.name, s -> apply.sensitive = !s.equals(instance.name));
|
|
entry.placeholderText = I18n.get("instance.settings.general.name.placeholder");
|
|
apply.valign = Align.CENTER;
|
|
apply.onClicked(() -> {
|
|
try {
|
|
Path newPath = MetaHolder.INSTANCE_DIR.resolve(InstanceNameTool.getNextValid(entry.text));
|
|
Files.move(instance.path, newPath);
|
|
window.close();
|
|
new InstanceSettingsWindow(window.application, InstanceList.read(newPath)).show();
|
|
} catch (IOException e) {
|
|
showError("Could not rename", e);
|
|
}
|
|
});
|
|
apply.sensitive = false;
|
|
row.append(apply);
|
|
});
|
|
section("instance.settings.general.game", section -> {
|
|
var row = section.row("instance.settings.general.game.version", "instance.settings.general.game.version.subtitle");
|
|
String[] versions = VERSIONS.versions.stream()
|
|
.filter(s -> InceptumConfig.snapshots || s.type.equals("release"))
|
|
.map(s -> s.id)
|
|
.toArray(String[]::new);
|
|
int def = 0;
|
|
for (int i = 0; i < versions.length; i++) if (versions[i].equals(VERSIONS.latest.release)) def = i;
|
|
row.setDropdown(
|
|
versions,
|
|
def,
|
|
i -> {
|
|
instance.meta.gameVersion = versions[i];
|
|
instance.writeMeta();
|
|
});
|
|
//TODO Fabric support (checkbox) + dropdown: Loader version
|
|
//TODO Custom Java (checkbox) + String: path
|
|
//TODO minMem/maxMem (slider?)
|
|
});
|
|
section("instance.settings.general.args", section -> {
|
|
if (instance.meta.arguments == null) instance.meta.arguments = new InstanceMeta.Arguments(List.of(), List.of(), List.of());
|
|
if (instance.meta.arguments.jvm == null) instance.meta.arguments = instance.meta.arguments.withJvm(List.of());
|
|
if (instance.meta.arguments.client == null) instance.meta.arguments = instance.meta.arguments.withClient(List.of());
|
|
if (instance.meta.arguments.server == null) instance.meta.arguments = instance.meta.arguments.withServer(List.of());
|
|
{
|
|
var row = section.row("instance.settings.general.args.jvm", "instance.settings.general.args.jvm.subtitle");
|
|
row.setEntry(ArgumentsTokenizer.join(instance.meta.arguments.jvm.toArray(String[]::new)), s -> {
|
|
instance.meta.arguments = instance.meta.arguments.withJvm(List.of(ArgumentsTokenizer.tokenize(s)));
|
|
instance.writeMeta();
|
|
});
|
|
}
|
|
{
|
|
var row = section.row("instance.settings.general.args.client", "instance.settings.general.args.client.subtitle");
|
|
row.setEntry(ArgumentsTokenizer.join(instance.meta.arguments.client.toArray(String[]::new)), s -> {
|
|
instance.meta.arguments = instance.meta.arguments.withClient(List.of(ArgumentsTokenizer.tokenize(s)));
|
|
instance.writeMeta();
|
|
});
|
|
}
|
|
{
|
|
var row = section.row("instance.settings.general.args.server", "instance.settings.general.args.server.subtitle");
|
|
row.setEntry(ArgumentsTokenizer.join(instance.meta.arguments.server.toArray(String[]::new)), s -> {
|
|
instance.meta.arguments = instance.meta.arguments.withServer(List.of(ArgumentsTokenizer.tokenize(s)));
|
|
instance.writeMeta();
|
|
});
|
|
}
|
|
});
|
|
section("instance.settings.general.manage", section -> {
|
|
{
|
|
var row = section.row("instance.delete", "instance.delete.subtitle");
|
|
row.setButton("instance.delete", () -> {
|
|
MessageDialog dialog = new MessageDialog(window, DialogFlags.MODAL.or(DialogFlags.DESTROY_WITH_PARENT), MessageType.WARNING, ButtonsType.OK_CANCEL, null);
|
|
dialog.markup = I18n.get("instance.delete.confirm");
|
|
dialog.title = I18n.get("instance.delete.confirm.title");
|
|
dialog.onResponse(responseId -> {
|
|
switch (ResponseType.of(responseId)) {
|
|
case OK -> {
|
|
try {
|
|
JFiles.deleteRecursive(instance.path);
|
|
dialog.close();
|
|
window.close();
|
|
} catch (IOException e) {
|
|
showError("Could not delete the instance", e);
|
|
}
|
|
dialog.close();
|
|
}
|
|
case CLOSE, CANCEL -> dialog.close();
|
|
case DELETE_EVENT -> dialog.destroy();
|
|
}
|
|
});
|
|
dialog.show();
|
|
});
|
|
}
|
|
{
|
|
var row = section.row("instance.directory", "instance.directory.subtitle");
|
|
row.setButton("instance.directory", () -> Utils.openFile(instance.path.toFile()));
|
|
}
|
|
});
|
|
long timestamp = instance.meta.lastLaunched == null ? 0 : instance.meta.lastLaunched;
|
|
append(new ILabel("instance.settings.general.last-launched", ILabel.Mode.SUBTITLE, new Date(timestamp * 1000).toString()));
|
|
}
|
|
}
|