@@ -0,0 +1,235 @@
|
|||||||
|
package org.jackhuang.hmcl.ui.versions;
|
||||||
|
|
||||||
|
import com.jfoenix.controls.JFXTextField;
|
||||||
|
import javafx.beans.binding.Bindings;
|
||||||
|
import javafx.beans.property.ObjectProperty;
|
||||||
|
import javafx.beans.property.ReadOnlyObjectProperty;
|
||||||
|
import javafx.beans.property.SimpleObjectProperty;
|
||||||
|
import javafx.scene.control.Label;
|
||||||
|
import javafx.scene.control.ScrollPane;
|
||||||
|
import javafx.scene.layout.*;
|
||||||
|
import org.jackhuang.hmcl.game.NativesDirectoryType;
|
||||||
|
import org.jackhuang.hmcl.setting.Profile;
|
||||||
|
import org.jackhuang.hmcl.setting.VersionSetting;
|
||||||
|
import org.jackhuang.hmcl.ui.FXUtils;
|
||||||
|
import org.jackhuang.hmcl.ui.construct.*;
|
||||||
|
import org.jackhuang.hmcl.ui.decorator.DecoratorPage;
|
||||||
|
|
||||||
|
import java.nio.file.Paths;
|
||||||
|
import java.util.Arrays;
|
||||||
|
|
||||||
|
import static org.jackhuang.hmcl.util.i18n.I18n.i18n;
|
||||||
|
|
||||||
|
public final class AdvancedVersionSettingPage extends StackPane implements DecoratorPage {
|
||||||
|
|
||||||
|
private final ObjectProperty<State> stateProperty;
|
||||||
|
|
||||||
|
private final Profile profile;
|
||||||
|
private final String versionId;
|
||||||
|
private final VersionSetting versionSetting;
|
||||||
|
|
||||||
|
private final JFXTextField txtJVMArgs;
|
||||||
|
private final JFXTextField txtGameArgs;
|
||||||
|
private final JFXTextField txtMetaspace;
|
||||||
|
private final JFXTextField txtWrapper;
|
||||||
|
private final JFXTextField txtPreLaunchCommand;
|
||||||
|
private final JFXTextField txtPostExitCommand;
|
||||||
|
private final OptionToggleButton noJVMArgsPane;
|
||||||
|
private final OptionToggleButton noGameCheckPane;
|
||||||
|
private final OptionToggleButton noJVMCheckPane;
|
||||||
|
private final OptionToggleButton noNativesPatchPane;
|
||||||
|
private final OptionToggleButton useSoftwareRenderer;
|
||||||
|
private final OptionToggleButton useNativeGLFWPane;
|
||||||
|
private final OptionToggleButton useNativeOpenALPane;
|
||||||
|
private final ComponentSublist nativesDirSublist;
|
||||||
|
private final MultiFileItem<NativesDirectoryType> nativesDirItem;
|
||||||
|
private final MultiFileItem.FileOption<NativesDirectoryType> nativesDirCustomOption;
|
||||||
|
|
||||||
|
public AdvancedVersionSettingPage(Profile profile, String versionId, VersionSetting versionSetting) {
|
||||||
|
this.profile = profile;
|
||||||
|
this.versionId = versionId;
|
||||||
|
this.versionSetting = versionSetting;
|
||||||
|
this.stateProperty = new SimpleObjectProperty<>(State.fromTitle(
|
||||||
|
versionId == null ? i18n("settings.advanced") : i18n("settings.advanced.title", versionId)
|
||||||
|
));
|
||||||
|
|
||||||
|
ScrollPane scrollPane = new ScrollPane();
|
||||||
|
scrollPane.setFitToHeight(true);
|
||||||
|
scrollPane.setFitToWidth(true);
|
||||||
|
scrollPane.setVbarPolicy(ScrollPane.ScrollBarPolicy.AS_NEEDED);
|
||||||
|
getChildren().setAll(scrollPane);
|
||||||
|
|
||||||
|
VBox rootPane = new VBox();
|
||||||
|
rootPane.setFillWidth(true);
|
||||||
|
scrollPane.setContent(rootPane);
|
||||||
|
FXUtils.smoothScrolling(scrollPane);
|
||||||
|
rootPane.getStyleClass().add("card-list");
|
||||||
|
|
||||||
|
ComponentList customCommandsPane = new ComponentList();
|
||||||
|
{
|
||||||
|
GridPane pane = new GridPane();
|
||||||
|
pane.setHgap(16);
|
||||||
|
pane.setVgap(8);
|
||||||
|
pane.getColumnConstraints().setAll(new ColumnConstraints(), FXUtils.getColumnHgrowing());
|
||||||
|
|
||||||
|
txtGameArgs = new JFXTextField();
|
||||||
|
txtGameArgs.setPromptText(i18n("settings.advanced.minecraft_arguments.prompt"));
|
||||||
|
txtGameArgs.getStyleClass().add("fit-width");
|
||||||
|
pane.addRow(0, new Label(i18n("settings.advanced.minecraft_arguments")), txtGameArgs);
|
||||||
|
|
||||||
|
txtPreLaunchCommand = new JFXTextField();
|
||||||
|
txtPreLaunchCommand.setPromptText(i18n("settings.advanced.precall_command.prompt"));
|
||||||
|
txtPreLaunchCommand.getStyleClass().add("fit-width");
|
||||||
|
pane.addRow(1, new Label(i18n("settings.advanced.precall_command")), txtPreLaunchCommand);
|
||||||
|
|
||||||
|
txtWrapper = new JFXTextField();
|
||||||
|
txtWrapper.setPromptText(i18n("settings.advanced.wrapper_launcher.prompt"));
|
||||||
|
txtWrapper.getStyleClass().add("fit-width");
|
||||||
|
pane.addRow(2, new Label(i18n("settings.advanced.wrapper_launcher")), txtWrapper);
|
||||||
|
|
||||||
|
txtPostExitCommand = new JFXTextField();
|
||||||
|
txtPostExitCommand.setPromptText(i18n("settings.advanced.post_exit_command.prompt"));
|
||||||
|
txtPostExitCommand.getStyleClass().add("fit-width");
|
||||||
|
pane.addRow(3, new Label(i18n("settings.advanced.post_exit_command")), txtPostExitCommand);
|
||||||
|
|
||||||
|
HintPane hintPane = new HintPane();
|
||||||
|
hintPane.setText(i18n("settings.advanced.custom_commands.hint"));
|
||||||
|
GridPane.setColumnSpan(hintPane, 2);
|
||||||
|
pane.addRow(4, hintPane);
|
||||||
|
|
||||||
|
customCommandsPane.getContent().setAll(pane);
|
||||||
|
}
|
||||||
|
|
||||||
|
ComponentList jvmPane = new ComponentList();
|
||||||
|
{
|
||||||
|
GridPane pane = new GridPane();
|
||||||
|
ColumnConstraints title = new ColumnConstraints();
|
||||||
|
ColumnConstraints value = new ColumnConstraints();
|
||||||
|
value.setFillWidth(true);
|
||||||
|
value.setHgrow(Priority.ALWAYS);
|
||||||
|
pane.setHgap(16);
|
||||||
|
pane.setVgap(8);
|
||||||
|
pane.getColumnConstraints().setAll(title, value);
|
||||||
|
|
||||||
|
txtJVMArgs = new JFXTextField();
|
||||||
|
txtJVMArgs.getStyleClass().add("fit-width");
|
||||||
|
pane.addRow(0, new Label(i18n("settings.advanced.jvm_args")), txtJVMArgs);
|
||||||
|
|
||||||
|
HintPane hintPane = new HintPane();
|
||||||
|
hintPane.setText(i18n("settings.advanced.jvm_args.prompt"));
|
||||||
|
GridPane.setColumnSpan(hintPane, 2);
|
||||||
|
pane.addRow(4, hintPane);
|
||||||
|
|
||||||
|
txtMetaspace = new JFXTextField();
|
||||||
|
txtMetaspace.setPromptText(i18n("settings.advanced.java_permanent_generation_space.prompt"));
|
||||||
|
txtMetaspace.getStyleClass().add("fit-width");
|
||||||
|
FXUtils.setValidateWhileTextChanged(txtMetaspace, true);
|
||||||
|
txtMetaspace.setValidators(new NumberValidator(i18n("input.number"), true));
|
||||||
|
pane.addRow(1, new Label(i18n("settings.advanced.java_permanent_generation_space")), txtMetaspace);
|
||||||
|
|
||||||
|
jvmPane.getContent().setAll(pane);
|
||||||
|
}
|
||||||
|
|
||||||
|
ComponentList workaroundPane = new ComponentList();
|
||||||
|
|
||||||
|
HintPane workaroundWarning = new HintPane(MessageDialogPane.MessageType.WARNING);
|
||||||
|
workaroundWarning.setText(i18n("settings.advanced.workaround.warning"));
|
||||||
|
|
||||||
|
{
|
||||||
|
nativesDirItem = new MultiFileItem<>();
|
||||||
|
nativesDirSublist = new ComponentSublist();
|
||||||
|
nativesDirSublist.getContent().add(nativesDirItem);
|
||||||
|
nativesDirSublist.setTitle(i18n("settings.advanced.natives_directory"));
|
||||||
|
nativesDirSublist.setHasSubtitle(true);
|
||||||
|
nativesDirCustomOption = new MultiFileItem.FileOption<>(i18n("settings.advanced.natives_directory.custom"), NativesDirectoryType.CUSTOM)
|
||||||
|
.setChooserTitle(i18n("settings.advanced.natives_directory.choose"))
|
||||||
|
.setDirectory(true);
|
||||||
|
nativesDirItem.loadChildren(Arrays.asList(
|
||||||
|
new MultiFileItem.Option<>(i18n("settings.advanced.natives_directory.default"), NativesDirectoryType.VERSION_FOLDER),
|
||||||
|
nativesDirCustomOption
|
||||||
|
));
|
||||||
|
HintPane nativesDirHint = new HintPane(MessageDialogPane.MessageType.WARNING);
|
||||||
|
nativesDirHint.setText(i18n("settings.advanced.natives_directory.hint"));
|
||||||
|
nativesDirItem.getChildren().add(nativesDirHint);
|
||||||
|
|
||||||
|
noJVMArgsPane = new OptionToggleButton();
|
||||||
|
noJVMArgsPane.setTitle(i18n("settings.advanced.no_jvm_args"));
|
||||||
|
|
||||||
|
noGameCheckPane = new OptionToggleButton();
|
||||||
|
noGameCheckPane.setTitle(i18n("settings.advanced.dont_check_game_completeness"));
|
||||||
|
|
||||||
|
noJVMCheckPane = new OptionToggleButton();
|
||||||
|
noJVMCheckPane.setTitle(i18n("settings.advanced.dont_check_jvm_validity"));
|
||||||
|
|
||||||
|
noNativesPatchPane = new OptionToggleButton();
|
||||||
|
noNativesPatchPane.setTitle(i18n("settings.advanced.dont_patch_natives"));
|
||||||
|
|
||||||
|
useSoftwareRenderer = new OptionToggleButton();
|
||||||
|
useSoftwareRenderer.setTitle(i18n("settings.advanced.use_software_renderer"));
|
||||||
|
|
||||||
|
useNativeGLFWPane = new OptionToggleButton();
|
||||||
|
useNativeGLFWPane.setTitle(i18n("settings.advanced.use_native_glfw"));
|
||||||
|
|
||||||
|
useNativeOpenALPane = new OptionToggleButton();
|
||||||
|
useNativeOpenALPane.setTitle(i18n("settings.advanced.use_native_openal"));
|
||||||
|
|
||||||
|
workaroundPane.getContent().setAll(
|
||||||
|
nativesDirSublist,
|
||||||
|
noJVMArgsPane, noGameCheckPane, noJVMCheckPane, noNativesPatchPane,
|
||||||
|
useSoftwareRenderer, useNativeGLFWPane, useNativeOpenALPane);
|
||||||
|
}
|
||||||
|
|
||||||
|
rootPane.getChildren().addAll(
|
||||||
|
ComponentList.createComponentListTitle(i18n("settings.advanced.custom_commands")), customCommandsPane,
|
||||||
|
ComponentList.createComponentListTitle(i18n("settings.advanced.jvm")), jvmPane,
|
||||||
|
ComponentList.createComponentListTitle(i18n("settings.advanced.workaround")), workaroundWarning, workaroundPane
|
||||||
|
);
|
||||||
|
|
||||||
|
bindProperties();
|
||||||
|
}
|
||||||
|
|
||||||
|
void bindProperties() {
|
||||||
|
nativesDirCustomOption.bindBidirectional(versionSetting.nativesDirProperty());
|
||||||
|
FXUtils.bindString(txtJVMArgs, versionSetting.javaArgsProperty());
|
||||||
|
FXUtils.bindString(txtGameArgs, versionSetting.minecraftArgsProperty());
|
||||||
|
FXUtils.bindString(txtMetaspace, versionSetting.permSizeProperty());
|
||||||
|
FXUtils.bindString(txtWrapper, versionSetting.wrapperProperty());
|
||||||
|
FXUtils.bindString(txtPreLaunchCommand, versionSetting.preLaunchCommandProperty());
|
||||||
|
noGameCheckPane.selectedProperty().bindBidirectional(versionSetting.notCheckGameProperty());
|
||||||
|
noJVMCheckPane.selectedProperty().bindBidirectional(versionSetting.notCheckJVMProperty());
|
||||||
|
noJVMArgsPane.selectedProperty().bindBidirectional(versionSetting.noJVMArgsProperty());
|
||||||
|
noNativesPatchPane.selectedProperty().bindBidirectional(versionSetting.notPatchNativesProperty());
|
||||||
|
useSoftwareRenderer.selectedProperty().bindBidirectional(versionSetting.useSoftwareRendererProperty());
|
||||||
|
useNativeGLFWPane.selectedProperty().bindBidirectional(versionSetting.useNativeGLFWProperty());
|
||||||
|
useNativeOpenALPane.selectedProperty().bindBidirectional(versionSetting.useNativeOpenALProperty());
|
||||||
|
|
||||||
|
nativesDirItem.selectedDataProperty().bindBidirectional(versionSetting.nativesDirTypeProperty());
|
||||||
|
nativesDirSublist.subtitleProperty().bind(Bindings.createStringBinding(() -> Paths.get(profile.getRepository().getRunDirectory(versionId).getAbsolutePath() + "/natives").normalize().toString(),
|
||||||
|
versionSetting.nativesDirProperty(), versionSetting.nativesDirTypeProperty()));
|
||||||
|
}
|
||||||
|
|
||||||
|
void unbindProperties() {
|
||||||
|
nativesDirCustomOption.valueProperty().unbindBidirectional(versionSetting.nativesDirProperty());
|
||||||
|
FXUtils.unbind(txtJVMArgs, versionSetting.javaArgsProperty());
|
||||||
|
FXUtils.unbind(txtGameArgs, versionSetting.minecraftArgsProperty());
|
||||||
|
FXUtils.unbind(txtMetaspace, versionSetting.permSizeProperty());
|
||||||
|
FXUtils.unbind(txtWrapper, versionSetting.wrapperProperty());
|
||||||
|
FXUtils.unbind(txtPreLaunchCommand, versionSetting.preLaunchCommandProperty());
|
||||||
|
FXUtils.unbind(txtPostExitCommand, versionSetting.postExitCommandProperty());
|
||||||
|
noGameCheckPane.selectedProperty().unbindBidirectional(versionSetting.notCheckGameProperty());
|
||||||
|
noJVMCheckPane.selectedProperty().unbindBidirectional(versionSetting.notCheckJVMProperty());
|
||||||
|
noJVMArgsPane.selectedProperty().unbindBidirectional(versionSetting.noJVMArgsProperty());
|
||||||
|
noNativesPatchPane.selectedProperty().unbindBidirectional(versionSetting.notPatchNativesProperty());
|
||||||
|
useSoftwareRenderer.selectedProperty().unbindBidirectional(versionSetting.useSoftwareRendererProperty());
|
||||||
|
useNativeGLFWPane.selectedProperty().unbindBidirectional(versionSetting.useNativeGLFWProperty());
|
||||||
|
useNativeOpenALPane.selectedProperty().unbindBidirectional(versionSetting.useNativeOpenALProperty());
|
||||||
|
|
||||||
|
nativesDirItem.selectedDataProperty().unbindBidirectional(versionSetting.nativesDirTypeProperty());
|
||||||
|
nativesDirSublist.subtitleProperty().unbind();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ReadOnlyObjectProperty<State> stateProperty() {
|
||||||
|
return stateProperty;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -66,7 +66,7 @@ import static org.jackhuang.hmcl.util.i18n.I18n.i18n;
|
|||||||
public final class VersionSettingsPage extends StackPane implements DecoratorPage, VersionPage.VersionLoadable, PageAware {
|
public final class VersionSettingsPage extends StackPane implements DecoratorPage, VersionPage.VersionLoadable, PageAware {
|
||||||
private final ReadOnlyObjectWrapper<State> state = new ReadOnlyObjectWrapper<>(new State("", null, false, false, false));
|
private final ReadOnlyObjectWrapper<State> state = new ReadOnlyObjectWrapper<>(new State("", null, false, false, false));
|
||||||
|
|
||||||
private final boolean globalSetting;
|
private AdvancedVersionSettingPage advancedVersionSettingPage;
|
||||||
|
|
||||||
private VersionSetting lastVersionSetting = null;
|
private VersionSetting lastVersionSetting = null;
|
||||||
private Profile profile;
|
private Profile profile;
|
||||||
@@ -77,24 +77,11 @@ public final class VersionSettingsPage extends StackPane implements DecoratorPag
|
|||||||
private final VBox rootPane;
|
private final VBox rootPane;
|
||||||
private final JFXTextField txtWidth;
|
private final JFXTextField txtWidth;
|
||||||
private final JFXTextField txtHeight;
|
private final JFXTextField txtHeight;
|
||||||
private final JFXTextField txtJVMArgs;
|
|
||||||
private final JFXTextField txtGameArgs;
|
|
||||||
private final JFXTextField txtMetaspace;
|
|
||||||
private final JFXTextField txtWrapper;
|
|
||||||
private final JFXTextField txtPreLaunchCommand;
|
|
||||||
private final JFXTextField txtPostExitCommand;
|
|
||||||
private final JFXTextField txtServerIP;
|
private final JFXTextField txtServerIP;
|
||||||
private final ComponentList componentList;
|
private final ComponentList componentList;
|
||||||
private final JFXComboBox<LauncherVisibility> cboLauncherVisibility;
|
private final JFXComboBox<LauncherVisibility> cboLauncherVisibility;
|
||||||
private final JFXCheckBox chkAutoAllocate;
|
private final JFXCheckBox chkAutoAllocate;
|
||||||
private final JFXCheckBox chkFullscreen;
|
private final JFXCheckBox chkFullscreen;
|
||||||
private final OptionToggleButton noJVMArgsPane;
|
|
||||||
private final OptionToggleButton noGameCheckPane;
|
|
||||||
private final OptionToggleButton noJVMCheckPane;
|
|
||||||
private final OptionToggleButton noNativesPatchPane;
|
|
||||||
private final OptionToggleButton useSoftwareRenderer;
|
|
||||||
private final OptionToggleButton useNativeGLFWPane;
|
|
||||||
private final OptionToggleButton useNativeOpenALPane;
|
|
||||||
private final ComponentSublist javaSublist;
|
private final ComponentSublist javaSublist;
|
||||||
private final MultiFileItem<Pair<JavaVersionType, JavaVersion>> javaItem;
|
private final MultiFileItem<Pair<JavaVersionType, JavaVersion>> javaItem;
|
||||||
private final MultiFileItem.Option<Pair<JavaVersionType, JavaVersion>> javaAutoDeterminedOption;
|
private final MultiFileItem.Option<Pair<JavaVersionType, JavaVersion>> javaAutoDeterminedOption;
|
||||||
@@ -102,12 +89,9 @@ public final class VersionSettingsPage extends StackPane implements DecoratorPag
|
|||||||
private final ComponentSublist gameDirSublist;
|
private final ComponentSublist gameDirSublist;
|
||||||
private final MultiFileItem<GameDirectoryType> gameDirItem;
|
private final MultiFileItem<GameDirectoryType> gameDirItem;
|
||||||
private final MultiFileItem.FileOption<GameDirectoryType> gameDirCustomOption;
|
private final MultiFileItem.FileOption<GameDirectoryType> gameDirCustomOption;
|
||||||
private final ComponentSublist nativesDirSublist;
|
|
||||||
private final MultiFileItem<NativesDirectoryType> nativesDirItem;
|
|
||||||
private final MultiFileItem.FileOption<NativesDirectoryType> nativesDirCustomOption;
|
|
||||||
private final JFXComboBox<ProcessPriority> cboProcessPriority;
|
private final JFXComboBox<ProcessPriority> cboProcessPriority;
|
||||||
private final OptionToggleButton showLogsPane;
|
private final OptionToggleButton showLogsPane;
|
||||||
private ImagePickerItem iconPickerItem;
|
private final ImagePickerItem iconPickerItem;
|
||||||
|
|
||||||
private final InvalidationListener specificSettingsListener;
|
private final InvalidationListener specificSettingsListener;
|
||||||
|
|
||||||
@@ -121,8 +105,6 @@ public final class VersionSettingsPage extends StackPane implements DecoratorPag
|
|||||||
private final BooleanProperty modpack = new SimpleBooleanProperty();
|
private final BooleanProperty modpack = new SimpleBooleanProperty();
|
||||||
|
|
||||||
public VersionSettingsPage(boolean globalSetting) {
|
public VersionSettingsPage(boolean globalSetting) {
|
||||||
this.globalSetting = globalSetting;
|
|
||||||
|
|
||||||
ScrollPane scrollPane = new ScrollPane();
|
ScrollPane scrollPane = new ScrollPane();
|
||||||
scrollPane.setFitToHeight(true);
|
scrollPane.setFitToHeight(true);
|
||||||
scrollPane.setFitToWidth(true);
|
scrollPane.setFitToWidth(true);
|
||||||
@@ -145,18 +127,17 @@ public final class VersionSettingsPage extends StackPane implements DecoratorPag
|
|||||||
text.textProperty().bind(BindingMapping.of(selectedVersion)
|
text.textProperty().bind(BindingMapping.of(selectedVersion)
|
||||||
.map(selectedVersion -> i18n("settings.type.special.edit.hint", selectedVersion)));
|
.map(selectedVersion -> i18n("settings.type.special.edit.hint", selectedVersion)));
|
||||||
|
|
||||||
JFXHyperlink specificSettingsLink = new JFXHyperlink();
|
JFXHyperlink specificSettingsLink = new JFXHyperlink(i18n("settings.type.special.edit"));
|
||||||
specificSettingsLink.setText(i18n("settings.type.special.edit"));
|
specificSettingsLink.setOnAction(e -> editSpecificSettings());
|
||||||
specificSettingsLink.setOnMouseClicked(e -> editSpecificSettings());
|
|
||||||
|
|
||||||
specificSettingsHint.setChildren(text, specificSettingsLink);
|
specificSettingsHint.setChildren(text, specificSettingsLink);
|
||||||
specificSettingsHint.managedProperty().bind(navigateToSpecificSettings);
|
specificSettingsHint.managedProperty().bind(navigateToSpecificSettings);
|
||||||
specificSettingsHint.visibleProperty().bind(navigateToSpecificSettings);
|
specificSettingsHint.visibleProperty().bind(navigateToSpecificSettings);
|
||||||
|
|
||||||
rootPane.getChildren().addAll(specificSettingsHint);
|
iconPickerItem = null;
|
||||||
}
|
|
||||||
|
|
||||||
if (!globalSetting) {
|
rootPane.getChildren().addAll(specificSettingsHint);
|
||||||
|
} else {
|
||||||
HintPane gameDirHint = new HintPane(MessageDialogPane.MessageType.INFO);
|
HintPane gameDirHint = new HintPane(MessageDialogPane.MessageType.INFO);
|
||||||
gameDirHint.setText(i18n("settings.game.working_directory.hint"));
|
gameDirHint.setText(i18n("settings.game.working_directory.hint"));
|
||||||
rootPane.getChildren().add(gameDirHint);
|
rootPane.getChildren().add(gameDirHint);
|
||||||
@@ -171,7 +152,6 @@ public final class VersionSettingsPage extends StackPane implements DecoratorPag
|
|||||||
iconPickerItem.setOnDeleteButtonClicked(e -> onDeleteIcon());
|
iconPickerItem.setOnDeleteButtonClicked(e -> onDeleteIcon());
|
||||||
iconPickerItemWrapper.getContent().setAll(iconPickerItem);
|
iconPickerItemWrapper.getContent().setAll(iconPickerItem);
|
||||||
|
|
||||||
|
|
||||||
BorderPane settingsTypePane = new BorderPane();
|
BorderPane settingsTypePane = new BorderPane();
|
||||||
settingsTypePane.disableProperty().bind(modpack);
|
settingsTypePane.disableProperty().bind(modpack);
|
||||||
rootPane.getChildren().add(settingsTypePane);
|
rootPane.getChildren().add(settingsTypePane);
|
||||||
@@ -186,7 +166,7 @@ public final class VersionSettingsPage extends StackPane implements DecoratorPag
|
|||||||
settingsTypePane.setRight(editGlobalSettingsButton);
|
settingsTypePane.setRight(editGlobalSettingsButton);
|
||||||
editGlobalSettingsButton.disableProperty().bind(enableSpecificCheckBox.selectedProperty());
|
editGlobalSettingsButton.disableProperty().bind(enableSpecificCheckBox.selectedProperty());
|
||||||
BorderPane.setAlignment(editGlobalSettingsButton, Pos.CENTER_RIGHT);
|
BorderPane.setAlignment(editGlobalSettingsButton, Pos.CENTER_RIGHT);
|
||||||
editGlobalSettingsButton.setOnMouseClicked(e -> editGlobalSettings());
|
editGlobalSettingsButton.setOnAction(e -> editGlobalSettings());
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
@@ -401,146 +381,43 @@ public final class VersionSettingsPage extends StackPane implements DecoratorPag
|
|||||||
serverPane.addRow(0, new Label(i18n("settings.advanced.server_ip")), txtServerIP);
|
serverPane.addRow(0, new Label(i18n("settings.advanced.server_ip")), txtServerIP);
|
||||||
}
|
}
|
||||||
|
|
||||||
componentList.getContent().setAll(javaSublist, gameDirSublist, maxMemoryPane, launcherVisibilityPane, dimensionPane, showLogsPane, processPriorityPane, serverPane);
|
BorderPane showAdvancedSettingPane = new BorderPane();
|
||||||
}
|
|
||||||
|
|
||||||
HBox advancedHintPane = new HBox();
|
|
||||||
advancedHintPane.setAlignment(Pos.CENTER);
|
|
||||||
advancedHintPane.setPadding(new Insets(16, 0, 8, 0));
|
|
||||||
{
|
{
|
||||||
Label advanced = new Label(i18n("settings.advanced"));
|
Label label = new Label(i18n("settings.advanced"));
|
||||||
advanced.setStyle("-fx-font-size: 12px;");
|
showAdvancedSettingPane.setLeft(label);
|
||||||
advancedHintPane.getChildren().setAll(advanced);
|
BorderPane.setAlignment(label, Pos.CENTER_LEFT);
|
||||||
|
|
||||||
|
JFXButton button = new JFXButton(i18n("settings.advanced.modify"));
|
||||||
|
button.setOnAction(e -> {
|
||||||
|
if (lastVersionSetting != null) {
|
||||||
|
if (advancedVersionSettingPage == null)
|
||||||
|
advancedVersionSettingPage = new AdvancedVersionSettingPage(profile, versionId, lastVersionSetting);
|
||||||
|
|
||||||
|
Controllers.navigate(advancedVersionSettingPage);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
button.getStyleClass().add("jfx-button-border");
|
||||||
|
showAdvancedSettingPane.setRight(button);
|
||||||
}
|
}
|
||||||
|
|
||||||
ComponentList customCommandsPane = new ComponentList();
|
componentList.getContent().setAll(
|
||||||
customCommandsPane.disableProperty().bind(enableSpecificSettings.not());
|
javaSublist,
|
||||||
{
|
gameDirSublist,
|
||||||
GridPane pane = new GridPane();
|
maxMemoryPane,
|
||||||
pane.setHgap(16);
|
launcherVisibilityPane,
|
||||||
pane.setVgap(8);
|
dimensionPane,
|
||||||
pane.getColumnConstraints().setAll(new ColumnConstraints(), FXUtils.getColumnHgrowing());
|
showLogsPane,
|
||||||
|
processPriorityPane,
|
||||||
txtGameArgs = new JFXTextField();
|
serverPane,
|
||||||
txtGameArgs.setPromptText(i18n("settings.advanced.minecraft_arguments.prompt"));
|
showAdvancedSettingPane
|
||||||
txtGameArgs.getStyleClass().add("fit-width");
|
);
|
||||||
pane.addRow(0, new Label(i18n("settings.advanced.minecraft_arguments")), txtGameArgs);
|
|
||||||
|
|
||||||
txtPreLaunchCommand = new JFXTextField();
|
|
||||||
txtPreLaunchCommand.setPromptText(i18n("settings.advanced.precall_command.prompt"));
|
|
||||||
txtPreLaunchCommand.getStyleClass().add("fit-width");
|
|
||||||
pane.addRow(1, new Label(i18n("settings.advanced.precall_command")), txtPreLaunchCommand);
|
|
||||||
|
|
||||||
txtWrapper = new JFXTextField();
|
|
||||||
txtWrapper.setPromptText(i18n("settings.advanced.wrapper_launcher.prompt"));
|
|
||||||
txtWrapper.getStyleClass().add("fit-width");
|
|
||||||
pane.addRow(2, new Label(i18n("settings.advanced.wrapper_launcher")), txtWrapper);
|
|
||||||
|
|
||||||
txtPostExitCommand = new JFXTextField();
|
|
||||||
txtPostExitCommand.setPromptText(i18n("settings.advanced.post_exit_command.prompt"));
|
|
||||||
txtPostExitCommand.getStyleClass().add("fit-width");
|
|
||||||
pane.addRow(3, new Label(i18n("settings.advanced.post_exit_command")), txtPostExitCommand);
|
|
||||||
|
|
||||||
HintPane hintPane = new HintPane();
|
|
||||||
hintPane.setText(i18n("settings.advanced.custom_commands.hint"));
|
|
||||||
GridPane.setColumnSpan(hintPane, 2);
|
|
||||||
pane.addRow(4, hintPane);
|
|
||||||
|
|
||||||
customCommandsPane.getContent().setAll(pane);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ComponentList jvmPane = new ComponentList();
|
rootPane.getChildren().add(componentList);
|
||||||
jvmPane.disableProperty().bind(enableSpecificSettings.not());
|
|
||||||
{
|
|
||||||
GridPane pane = new GridPane();
|
|
||||||
ColumnConstraints title = new ColumnConstraints();
|
|
||||||
ColumnConstraints value = new ColumnConstraints();
|
|
||||||
value.setFillWidth(true);
|
|
||||||
value.setHgrow(Priority.ALWAYS);
|
|
||||||
pane.setHgap(16);
|
|
||||||
pane.setVgap(8);
|
|
||||||
pane.getColumnConstraints().setAll(title, value);
|
|
||||||
|
|
||||||
txtJVMArgs = new JFXTextField();
|
|
||||||
txtJVMArgs.getStyleClass().add("fit-width");
|
|
||||||
pane.addRow(0, new Label(i18n("settings.advanced.jvm_args")), txtJVMArgs);
|
|
||||||
|
|
||||||
HintPane hintPane = new HintPane();
|
|
||||||
hintPane.setText(i18n("settings.advanced.jvm_args.prompt"));
|
|
||||||
GridPane.setColumnSpan(hintPane, 2);
|
|
||||||
pane.addRow(4, hintPane);
|
|
||||||
|
|
||||||
txtMetaspace = new JFXTextField();
|
|
||||||
txtMetaspace.setPromptText(i18n("settings.advanced.java_permanent_generation_space.prompt"));
|
|
||||||
txtMetaspace.getStyleClass().add("fit-width");
|
|
||||||
FXUtils.setValidateWhileTextChanged(txtMetaspace, true);
|
|
||||||
txtMetaspace.setValidators(new NumberValidator(i18n("input.number"), true));
|
|
||||||
pane.addRow(1, new Label(i18n("settings.advanced.java_permanent_generation_space")), txtMetaspace);
|
|
||||||
|
|
||||||
jvmPane.getContent().setAll(pane);
|
|
||||||
}
|
|
||||||
|
|
||||||
ComponentList workaroundPane = new ComponentList();
|
|
||||||
workaroundPane.disableProperty().bind(enableSpecificSettings.not());
|
|
||||||
|
|
||||||
HintPane workaroundWarning = new HintPane(MessageDialogPane.MessageType.WARNING);
|
|
||||||
workaroundWarning.setText(i18n("settings.advanced.workaround.warning"));
|
|
||||||
|
|
||||||
{
|
|
||||||
nativesDirItem = new MultiFileItem<>();
|
|
||||||
nativesDirSublist = new ComponentSublist();
|
|
||||||
nativesDirSublist.getContent().add(nativesDirItem);
|
|
||||||
nativesDirSublist.setTitle(i18n("settings.advanced.natives_directory"));
|
|
||||||
nativesDirSublist.setHasSubtitle(true);
|
|
||||||
nativesDirCustomOption = new MultiFileItem.FileOption<>(i18n("settings.advanced.natives_directory.custom"), NativesDirectoryType.CUSTOM)
|
|
||||||
.setChooserTitle(i18n("settings.advanced.natives_directory.choose"))
|
|
||||||
.setDirectory(true);
|
|
||||||
nativesDirItem.loadChildren(Arrays.asList(
|
|
||||||
new MultiFileItem.Option<>(i18n("settings.advanced.natives_directory.default"), NativesDirectoryType.VERSION_FOLDER),
|
|
||||||
nativesDirCustomOption
|
|
||||||
));
|
|
||||||
HintPane nativesDirHint = new HintPane(MessageDialogPane.MessageType.WARNING);
|
|
||||||
nativesDirHint.setText(i18n("settings.advanced.natives_directory.hint"));
|
|
||||||
nativesDirItem.getChildren().add(nativesDirHint);
|
|
||||||
|
|
||||||
noJVMArgsPane = new OptionToggleButton();
|
|
||||||
noJVMArgsPane.setTitle(i18n("settings.advanced.no_jvm_args"));
|
|
||||||
|
|
||||||
noGameCheckPane = new OptionToggleButton();
|
|
||||||
noGameCheckPane.setTitle(i18n("settings.advanced.dont_check_game_completeness"));
|
|
||||||
|
|
||||||
noJVMCheckPane = new OptionToggleButton();
|
|
||||||
noJVMCheckPane.setTitle(i18n("settings.advanced.dont_check_jvm_validity"));
|
|
||||||
|
|
||||||
noNativesPatchPane = new OptionToggleButton();
|
|
||||||
noNativesPatchPane.setTitle(i18n("settings.advanced.dont_patch_natives"));
|
|
||||||
|
|
||||||
useSoftwareRenderer = new OptionToggleButton();
|
|
||||||
useSoftwareRenderer.setTitle(i18n("settings.advanced.use_software_renderer"));
|
|
||||||
|
|
||||||
useNativeGLFWPane = new OptionToggleButton();
|
|
||||||
useNativeGLFWPane.setTitle(i18n("settings.advanced.use_native_glfw"));
|
|
||||||
|
|
||||||
useNativeOpenALPane = new OptionToggleButton();
|
|
||||||
useNativeOpenALPane.setTitle(i18n("settings.advanced.use_native_openal"));
|
|
||||||
|
|
||||||
workaroundPane.getContent().setAll(
|
|
||||||
nativesDirSublist,
|
|
||||||
noJVMArgsPane, noGameCheckPane, noJVMCheckPane, noNativesPatchPane,
|
|
||||||
useSoftwareRenderer, useNativeGLFWPane, useNativeOpenALPane);
|
|
||||||
}
|
|
||||||
|
|
||||||
rootPane.getChildren().addAll(componentList,
|
|
||||||
advancedHintPane,
|
|
||||||
ComponentList.createComponentListTitle(i18n("settings.advanced.custom_commands")), customCommandsPane,
|
|
||||||
ComponentList.createComponentListTitle(i18n("settings.advanced.jvm")), jvmPane,
|
|
||||||
ComponentList.createComponentListTitle(i18n("settings.advanced.workaround")), workaroundWarning, workaroundPane);
|
|
||||||
|
|
||||||
initialize();
|
initialize();
|
||||||
|
|
||||||
specificSettingsListener = any -> {
|
specificSettingsListener = any -> enableSpecificSettings.set(!lastVersionSetting.isUsesGlobal());
|
||||||
enableSpecificSettings.set(!lastVersionSetting.isUsesGlobal());
|
|
||||||
};
|
|
||||||
|
|
||||||
addEventHandler(Navigator.NavigationEvent.NAVIGATED, this::onDecoratorPageNavigating);
|
addEventHandler(Navigator.NavigationEvent.NAVIGATED, this::onDecoratorPageNavigating);
|
||||||
|
|
||||||
@@ -631,24 +508,10 @@ public final class VersionSettingsPage extends StackPane implements DecoratorPag
|
|||||||
maxMemory.unbindBidirectional(lastVersionSetting.maxMemoryProperty());
|
maxMemory.unbindBidirectional(lastVersionSetting.maxMemoryProperty());
|
||||||
javaCustomOption.valueProperty().unbindBidirectional(lastVersionSetting.javaDirProperty());
|
javaCustomOption.valueProperty().unbindBidirectional(lastVersionSetting.javaDirProperty());
|
||||||
gameDirCustomOption.valueProperty().unbindBidirectional(lastVersionSetting.gameDirProperty());
|
gameDirCustomOption.valueProperty().unbindBidirectional(lastVersionSetting.gameDirProperty());
|
||||||
nativesDirCustomOption.valueProperty().unbindBidirectional(lastVersionSetting.nativesDirProperty());
|
|
||||||
FXUtils.unbind(txtJVMArgs, lastVersionSetting.javaArgsProperty());
|
|
||||||
FXUtils.unbind(txtGameArgs, lastVersionSetting.minecraftArgsProperty());
|
|
||||||
FXUtils.unbind(txtMetaspace, lastVersionSetting.permSizeProperty());
|
|
||||||
FXUtils.unbind(txtWrapper, lastVersionSetting.wrapperProperty());
|
|
||||||
FXUtils.unbind(txtPreLaunchCommand, lastVersionSetting.preLaunchCommandProperty());
|
|
||||||
FXUtils.unbind(txtPostExitCommand, lastVersionSetting.postExitCommandProperty());
|
|
||||||
FXUtils.unbind(txtServerIP, lastVersionSetting.serverIpProperty());
|
FXUtils.unbind(txtServerIP, lastVersionSetting.serverIpProperty());
|
||||||
FXUtils.unbindBoolean(chkAutoAllocate, lastVersionSetting.autoMemoryProperty());
|
FXUtils.unbindBoolean(chkAutoAllocate, lastVersionSetting.autoMemoryProperty());
|
||||||
FXUtils.unbindBoolean(chkFullscreen, lastVersionSetting.fullscreenProperty());
|
FXUtils.unbindBoolean(chkFullscreen, lastVersionSetting.fullscreenProperty());
|
||||||
noGameCheckPane.selectedProperty().unbindBidirectional(lastVersionSetting.notCheckGameProperty());
|
|
||||||
noJVMCheckPane.selectedProperty().unbindBidirectional(lastVersionSetting.notCheckJVMProperty());
|
|
||||||
noJVMArgsPane.selectedProperty().unbindBidirectional(lastVersionSetting.noJVMArgsProperty());
|
|
||||||
noNativesPatchPane.selectedProperty().unbindBidirectional(lastVersionSetting.notPatchNativesProperty());
|
|
||||||
showLogsPane.selectedProperty().unbindBidirectional(lastVersionSetting.showLogsProperty());
|
showLogsPane.selectedProperty().unbindBidirectional(lastVersionSetting.showLogsProperty());
|
||||||
useSoftwareRenderer.selectedProperty().unbindBidirectional(lastVersionSetting.useSoftwareRendererProperty());
|
|
||||||
useNativeGLFWPane.selectedProperty().unbindBidirectional(lastVersionSetting.useNativeGLFWProperty());
|
|
||||||
useNativeOpenALPane.selectedProperty().unbindBidirectional(lastVersionSetting.useNativeOpenALProperty());
|
|
||||||
FXUtils.unbindEnum(cboLauncherVisibility);
|
FXUtils.unbindEnum(cboLauncherVisibility);
|
||||||
FXUtils.unbindEnum(cboProcessPriority);
|
FXUtils.unbindEnum(cboProcessPriority);
|
||||||
|
|
||||||
@@ -659,8 +522,10 @@ public final class VersionSettingsPage extends StackPane implements DecoratorPag
|
|||||||
gameDirItem.selectedDataProperty().unbindBidirectional(lastVersionSetting.gameDirTypeProperty());
|
gameDirItem.selectedDataProperty().unbindBidirectional(lastVersionSetting.gameDirTypeProperty());
|
||||||
gameDirSublist.subtitleProperty().unbind();
|
gameDirSublist.subtitleProperty().unbind();
|
||||||
|
|
||||||
nativesDirItem.selectedDataProperty().unbindBidirectional(lastVersionSetting.nativesDirTypeProperty());
|
if (advancedVersionSettingPage != null) {
|
||||||
nativesDirSublist.subtitleProperty().unbind();
|
advancedVersionSettingPage.unbindProperties();
|
||||||
|
advancedVersionSettingPage = null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// unbind data fields
|
// unbind data fields
|
||||||
@@ -673,23 +538,10 @@ public final class VersionSettingsPage extends StackPane implements DecoratorPag
|
|||||||
|
|
||||||
javaCustomOption.bindBidirectional(versionSetting.javaDirProperty());
|
javaCustomOption.bindBidirectional(versionSetting.javaDirProperty());
|
||||||
gameDirCustomOption.bindBidirectional(versionSetting.gameDirProperty());
|
gameDirCustomOption.bindBidirectional(versionSetting.gameDirProperty());
|
||||||
nativesDirCustomOption.bindBidirectional(versionSetting.nativesDirProperty());
|
|
||||||
FXUtils.bindString(txtJVMArgs, versionSetting.javaArgsProperty());
|
|
||||||
FXUtils.bindString(txtGameArgs, versionSetting.minecraftArgsProperty());
|
|
||||||
FXUtils.bindString(txtMetaspace, versionSetting.permSizeProperty());
|
|
||||||
FXUtils.bindString(txtWrapper, versionSetting.wrapperProperty());
|
|
||||||
FXUtils.bindString(txtPreLaunchCommand, versionSetting.preLaunchCommandProperty());
|
|
||||||
FXUtils.bindString(txtServerIP, versionSetting.serverIpProperty());
|
FXUtils.bindString(txtServerIP, versionSetting.serverIpProperty());
|
||||||
FXUtils.bindBoolean(chkAutoAllocate, versionSetting.autoMemoryProperty());
|
FXUtils.bindBoolean(chkAutoAllocate, versionSetting.autoMemoryProperty());
|
||||||
FXUtils.bindBoolean(chkFullscreen, versionSetting.fullscreenProperty());
|
FXUtils.bindBoolean(chkFullscreen, versionSetting.fullscreenProperty());
|
||||||
noGameCheckPane.selectedProperty().bindBidirectional(versionSetting.notCheckGameProperty());
|
|
||||||
noJVMCheckPane.selectedProperty().bindBidirectional(versionSetting.notCheckJVMProperty());
|
|
||||||
noJVMArgsPane.selectedProperty().bindBidirectional(versionSetting.noJVMArgsProperty());
|
|
||||||
noNativesPatchPane.selectedProperty().bindBidirectional(versionSetting.notPatchNativesProperty());
|
|
||||||
showLogsPane.selectedProperty().bindBidirectional(versionSetting.showLogsProperty());
|
showLogsPane.selectedProperty().bindBidirectional(versionSetting.showLogsProperty());
|
||||||
useSoftwareRenderer.selectedProperty().bindBidirectional(versionSetting.useSoftwareRendererProperty());
|
|
||||||
useNativeGLFWPane.selectedProperty().bindBidirectional(versionSetting.useNativeGLFWProperty());
|
|
||||||
useNativeOpenALPane.selectedProperty().bindBidirectional(versionSetting.useNativeOpenALProperty());
|
|
||||||
FXUtils.bindEnum(cboLauncherVisibility, versionSetting.launcherVisibilityProperty());
|
FXUtils.bindEnum(cboLauncherVisibility, versionSetting.launcherVisibilityProperty());
|
||||||
FXUtils.bindEnum(cboProcessPriority, versionSetting.processPriorityProperty());
|
FXUtils.bindEnum(cboProcessPriority, versionSetting.processPriorityProperty());
|
||||||
|
|
||||||
@@ -716,10 +568,6 @@ public final class VersionSettingsPage extends StackPane implements DecoratorPag
|
|||||||
gameDirSublist.subtitleProperty().bind(Bindings.createStringBinding(() -> Paths.get(profile.getRepository().getRunDirectory(versionId).getAbsolutePath()).normalize().toString(),
|
gameDirSublist.subtitleProperty().bind(Bindings.createStringBinding(() -> Paths.get(profile.getRepository().getRunDirectory(versionId).getAbsolutePath()).normalize().toString(),
|
||||||
versionSetting.gameDirProperty(), versionSetting.gameDirTypeProperty()));
|
versionSetting.gameDirProperty(), versionSetting.gameDirTypeProperty()));
|
||||||
|
|
||||||
nativesDirItem.selectedDataProperty().bindBidirectional(versionSetting.nativesDirTypeProperty());
|
|
||||||
nativesDirSublist.subtitleProperty().bind(Bindings.createStringBinding(() -> Paths.get(profile.getRepository().getRunDirectory(versionId).getAbsolutePath() + "/natives").normalize().toString(),
|
|
||||||
versionSetting.nativesDirProperty(), versionSetting.nativesDirTypeProperty()));
|
|
||||||
|
|
||||||
lastVersionSetting = versionSetting;
|
lastVersionSetting = versionSetting;
|
||||||
|
|
||||||
initJavaSubtitle();
|
initJavaSubtitle();
|
||||||
|
|||||||
@@ -952,6 +952,8 @@ selector.custom=Custom
|
|||||||
settings=Settings
|
settings=Settings
|
||||||
|
|
||||||
settings.advanced=Advanced Settings
|
settings.advanced=Advanced Settings
|
||||||
|
settings.advanced.modify=Modify Advanced Settings
|
||||||
|
settings.advanced.title=Advanced Settings - %s
|
||||||
settings.advanced.custom_commands=Custom Commands
|
settings.advanced.custom_commands=Custom Commands
|
||||||
settings.advanced.custom_commands.hint=The following environment variables are provided\:\n\
|
settings.advanced.custom_commands.hint=The following environment variables are provided\:\n\
|
||||||
- $INST_NAME: version name\n\
|
- $INST_NAME: version name\n\
|
||||||
|
|||||||
@@ -869,6 +869,7 @@ selector.custom=Personalizar
|
|||||||
settings=Configuración
|
settings=Configuración
|
||||||
|
|
||||||
settings.advanced=Configuración avanzada
|
settings.advanced=Configuración avanzada
|
||||||
|
settings.advanced.title=Configuración avanzada - %s
|
||||||
settings.advanced.custom_commands=Comandos personalizados
|
settings.advanced.custom_commands=Comandos personalizados
|
||||||
settings.advanced.custom_commands.hint=Se proporcionan las siguientes variables de entorno\:\n\
|
settings.advanced.custom_commands.hint=Se proporcionan las siguientes variables de entorno\:\n\
|
||||||
- $INST_NAME: nombre de la versión\n\
|
- $INST_NAME: nombre de la versión\n\
|
||||||
|
|||||||
@@ -703,6 +703,7 @@ selector.custom=カスタム
|
|||||||
settings=設定
|
settings=設定
|
||||||
|
|
||||||
settings.advanced=詳細設定
|
settings.advanced=詳細設定
|
||||||
|
settings.advanced.title=詳細設定 - %s
|
||||||
settings.advanced.custom_commands=カスタムコマンド
|
settings.advanced.custom_commands=カスタムコマンド
|
||||||
settings.advanced.custom_commands.hint=カスタムコマンドは、次の環境変数を使用して実行されます。\n \
|
settings.advanced.custom_commands.hint=カスタムコマンドは、次の環境変数を使用して実行されます。\n \
|
||||||
\-$ INST_NAME:バージョンの名前\n \
|
\-$ INST_NAME:バージョンの名前\n \
|
||||||
|
|||||||
@@ -708,6 +708,7 @@ selector.custom=Пользовательский
|
|||||||
settings=Настройки
|
settings=Настройки
|
||||||
|
|
||||||
settings.advanced=Расширенные настройки
|
settings.advanced=Расширенные настройки
|
||||||
|
settings.advanced.title=Расширенные настройки - %s
|
||||||
settings.advanced.custom_commands=Пользовательские команды
|
settings.advanced.custom_commands=Пользовательские команды
|
||||||
settings.advanced.custom_commands.hint=Пользовательские команды выполняются со следующими переменными окружения:\n\
|
settings.advanced.custom_commands.hint=Пользовательские команды выполняются со следующими переменными окружения:\n\
|
||||||
\ - $INST_NAME: название версии\n\
|
\ - $INST_NAME: название версии\n\
|
||||||
|
|||||||
@@ -827,6 +827,8 @@ selector.custom=自訂
|
|||||||
settings=遊戲設定
|
settings=遊戲設定
|
||||||
|
|
||||||
settings.advanced=進階設定
|
settings.advanced=進階設定
|
||||||
|
settings.advanced.modify=修改進階設定
|
||||||
|
settings.advanced.title=進階設定 - %s
|
||||||
settings.advanced.custom_commands=自訂命令
|
settings.advanced.custom_commands=自訂命令
|
||||||
settings.advanced.custom_commands.hint=自訂命令被調用時將包含如下的環境變數:\n\
|
settings.advanced.custom_commands.hint=自訂命令被調用時將包含如下的環境變數:\n\
|
||||||
\ - $INST_NAME: 版本名稱\n\
|
\ - $INST_NAME: 版本名稱\n\
|
||||||
@@ -880,7 +882,7 @@ settings.advanced.use_native_glfw=[Linux] 使用系統 GLFW
|
|||||||
settings.advanced.use_native_openal=[Linux] 使用系統 OpenAL
|
settings.advanced.use_native_openal=[Linux] 使用系統 OpenAL
|
||||||
settings.advanced.use_software_renderer=使用 OpenGL 軟渲染器(相容性更好,但效能較差)
|
settings.advanced.use_software_renderer=使用 OpenGL 軟渲染器(相容性更好,但效能較差)
|
||||||
settings.advanced.workaround=除錯選項
|
settings.advanced.workaround=除錯選項
|
||||||
settings.advanced.workaround.warning=除錯選項僅提供給專業玩家使用。修改除錯選項可能會導致遊戲無法啟動。除非你知道你在做什麼,否則請你不要修改這些選項。
|
settings.advanced.workaround.warning=除錯選項僅提供給專業玩家使用。修改除錯選項可能會導致遊戲無法啟動。除非你知道你在做什麼,否則請不要修改這些選項。
|
||||||
settings.advanced.wrapper_launcher=前置指令
|
settings.advanced.wrapper_launcher=前置指令
|
||||||
settings.advanced.wrapper_launcher.prompt=如填寫 optirun 後,啟動命令將從 "java ..." 變為 "optirun java ..."
|
settings.advanced.wrapper_launcher.prompt=如填寫 optirun 後,啟動命令將從 "java ..." 變為 "optirun java ..."
|
||||||
|
|
||||||
|
|||||||
@@ -825,6 +825,8 @@ selector.custom=自定义
|
|||||||
settings=设置
|
settings=设置
|
||||||
|
|
||||||
settings.advanced=高级设置
|
settings.advanced=高级设置
|
||||||
|
settings.advanced.modify=修改高级设置
|
||||||
|
settings.advanced.title=高级设置 - %s
|
||||||
settings.advanced.custom_commands=自定义命令
|
settings.advanced.custom_commands=自定义命令
|
||||||
settings.advanced.custom_commands.hint=自定义命令被调用时将包含如下的环境变量:\n\
|
settings.advanced.custom_commands.hint=自定义命令被调用时将包含如下的环境变量:\n\
|
||||||
\ - $INST_NAME: 版本名称\n\
|
\ - $INST_NAME: 版本名称\n\
|
||||||
@@ -878,7 +880,7 @@ settings.advanced.use_native_glfw=[Linux] 使用系统 GLFW
|
|||||||
settings.advanced.use_native_openal=[Linux] 使用系统 OpenAL
|
settings.advanced.use_native_openal=[Linux] 使用系统 OpenAL
|
||||||
settings.advanced.use_software_renderer=使用 OpenGL 软渲染器(兼容性更好,但性能较差)
|
settings.advanced.use_software_renderer=使用 OpenGL 软渲染器(兼容性更好,但性能较差)
|
||||||
settings.advanced.workaround=调试选项
|
settings.advanced.workaround=调试选项
|
||||||
settings.advanced.workaround.warning=调试选项仅提供给专业玩家使用。调试选项可能会导致游戏无法启动。除非你知道你在做什么,否则请你不要修改这些选项!
|
settings.advanced.workaround.warning=调试选项仅提供给专业玩家使用。调试选项可能会导致游戏无法启动。除非你知道你在做什么,否则请不要修改这些选项!
|
||||||
settings.advanced.wrapper_launcher=包装命令
|
settings.advanced.wrapper_launcher=包装命令
|
||||||
settings.advanced.wrapper_launcher.prompt=如填写 optirun 后,启动命令将从 "java ..." 变为 "optirun java ..."
|
settings.advanced.wrapper_launcher.prompt=如填写 optirun 后,启动命令将从 "java ..." 变为 "optirun java ..."
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user