Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
83a38fadf0 | ||
|
|
9980dc8aea | ||
|
|
7dfbf76b69 | ||
|
|
7f2f77f54f |
No files matched your search
@@ -29,7 +29,10 @@ import javafx.scene.Node;
|
||||
import javafx.scene.control.Control;
|
||||
import javafx.scene.control.Label;
|
||||
import javafx.scene.layout.*;
|
||||
import org.jackhuang.hmcl.ui.FXUtils;
|
||||
import org.jackhuang.hmcl.ui.SVG;
|
||||
import org.jackhuang.hmcl.util.javafx.MappedObservableList;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
public class ComponentList extends Control implements NoPaddingComponent {
|
||||
|
||||
@@ -136,13 +139,25 @@ public class ComponentList extends Control implements NoPaddingComponent {
|
||||
}
|
||||
|
||||
public static Node createComponentListTitle(String title) {
|
||||
HBox node = new HBox();
|
||||
return createComponentListTitle(title, null);
|
||||
}
|
||||
|
||||
public static Node createComponentListTitle(String title, @Nullable String helpMessage) {
|
||||
HBox node = new HBox(4);
|
||||
node.setAlignment(Pos.CENTER_LEFT);
|
||||
node.setPadding(new Insets(8, 0, 0, 0));
|
||||
|
||||
{
|
||||
Label advanced = new Label(title);
|
||||
node.getChildren().setAll(advanced);
|
||||
}
|
||||
|
||||
if (helpMessage != null) {
|
||||
var helpIcon = new StackPane(SVG.HELP.createIcon(16));
|
||||
FXUtils.installFastTooltip(helpIcon, helpMessage);
|
||||
node.getChildren().add(helpIcon);
|
||||
}
|
||||
|
||||
return node;
|
||||
}
|
||||
|
||||
|
||||
@@ -162,11 +162,13 @@ public final class GameSettingsPage<S extends GameSettings> extends StackPane
|
||||
{
|
||||
if (isPresetSetting) {
|
||||
var presetSettings = new ComponentList();
|
||||
rootPane.getChildren().addAll(
|
||||
ComponentList.createComponentListTitle(i18n("settings.type.global.preset")),
|
||||
presetSettings,
|
||||
ComponentList.createComponentListTitle(i18n("settings.game.section.basic")),
|
||||
rootPane.getChildren().addAll(ComponentList.createComponentListTitle(i18n("settings.game.section.basic")),
|
||||
basicSettings,
|
||||
ComponentList.createComponentListTitle(
|
||||
i18n("settings.type.global.preset"),
|
||||
i18n("settings.type.global.preset.help")
|
||||
),
|
||||
presetSettings,
|
||||
ComponentList.createComponentListTitle(i18n("settings.game.section.game")),
|
||||
gameSettings,
|
||||
ComponentList.createComponentListTitle(i18n("settings.launcher")),
|
||||
@@ -195,6 +197,7 @@ public final class GameSettingsPage<S extends GameSettings> extends StackPane
|
||||
var parentGameSettingsPane = new LineSelectButton<GameSettings.@Nullable Preset>();
|
||||
basicSettings.getContent().add(parentGameSettingsPane);
|
||||
parentGameSettingsPane.setTitle(i18n("settings.type.global.preset"));
|
||||
parentGameSettingsPane.setSubtitle(i18n("settings.type.global.preset.subtitle"));
|
||||
parentGameSettingsPane.setConverter(setting -> setting != null
|
||||
? PresetManagementPane.getPresetDisplayName(setting)
|
||||
: i18n("settings.type.global.preset.default"));
|
||||
|
||||
@@ -273,18 +273,30 @@ public class DownloadListPage extends Control implements DecoratorPage, VersionP
|
||||
{
|
||||
int rowIndex = 0;
|
||||
|
||||
if (control.versionSelection) {
|
||||
if (control.versionSelection || !control.downloadSources.isEmpty()) {
|
||||
searchPane.addRow(rowIndex);
|
||||
int columns = 0;
|
||||
Node lastNode = null;
|
||||
if (control.versionSelection) {
|
||||
JFXComboBox<String> versionsComboBox = new JFXComboBox<>();
|
||||
versionsComboBox.setMaxWidth(Double.MAX_VALUE);
|
||||
Bindings.bindContent(versionsComboBox.getItems(), control.versions);
|
||||
selectedItemPropertyFor(versionsComboBox).bindBidirectional(control.selectedVersion);
|
||||
|
||||
JFXComboBox<String> versionsComboBox = new JFXComboBox<>();
|
||||
versionsComboBox.setMaxWidth(Double.MAX_VALUE);
|
||||
Bindings.bindContent(versionsComboBox.getItems(), control.versions);
|
||||
selectedItemPropertyFor(versionsComboBox).bindBidirectional(control.selectedVersion);
|
||||
searchPane.add(new Label(i18n("version")), columns++, rowIndex);
|
||||
searchPane.add(lastNode = versionsComboBox, columns++, rowIndex);
|
||||
}
|
||||
|
||||
searchPane.add(new Label(i18n("version")), columns++, rowIndex);
|
||||
searchPane.add(lastNode = versionsComboBox, columns++, rowIndex);
|
||||
if (control.downloadSources.getSize() > 1) {
|
||||
JFXComboBox<String> downloadSourceComboBox = new JFXComboBox<>();
|
||||
downloadSourceComboBox.setMaxWidth(Double.MAX_VALUE);
|
||||
downloadSourceComboBox.getItems().setAll(control.downloadSources.get());
|
||||
downloadSourceComboBox.setConverter(stringConverter(I18n::i18n));
|
||||
selectedItemPropertyFor(downloadSourceComboBox).bindBidirectional(control.downloadSource);
|
||||
|
||||
searchPane.add(new Label(i18n("settings.launcher.download_source")), columns++, rowIndex);
|
||||
searchPane.add(lastNode = downloadSourceComboBox, columns++, rowIndex);
|
||||
}
|
||||
|
||||
if (columns == 2) {
|
||||
GridPane.setColumnSpan(lastNode, 3);
|
||||
|
||||
@@ -163,7 +163,7 @@ public final class ModListPage extends ListPageBase<ModListPageSkin.ModInfoObjec
|
||||
}
|
||||
|
||||
// Sinytra Connector
|
||||
if (analyzer.has(LibraryAnalyzer.LibraryType.NEO_FORGE) && modManager.hasMod("connectormod", ModLoaderType.NEO_FORGE)
|
||||
if (analyzer.has(LibraryAnalyzer.LibraryType.NEO_FORGE) && (modManager.hasMod("connector", ModLoaderType.NEO_FORGE) || modManager.hasMod("connectormod", ModLoaderType.NEO_FORGE))
|
||||
|| "1.20.1".equals(gameVersion) && analyzer.has(LibraryAnalyzer.LibraryType.FORGE) && modManager.hasMod("connectormod", ModLoaderType.FORGE)) {
|
||||
supportedLoaders.add(ModLoaderType.FABRIC);
|
||||
}
|
||||
|
||||
@@ -1634,11 +1634,14 @@ settings.type.global.preset=Preset
|
||||
settings.type.global.preset.create=Create Preset
|
||||
settings.type.global.preset.default=Use Default Preset
|
||||
settings.type.global.preset.duplicate_name=Preset name already exists
|
||||
settings.type.global.preset.help=A game settings preset manages a set of game settings that you can adjust on this page.\n\
|
||||
All instances inherit game settings from the current preset by default. You can override specific settings on the instance game settings page.
|
||||
settings.type.global.preset.manage_all=Current Preset
|
||||
settings.type.global.preset.name=Preset Name
|
||||
settings.type.global.preset.rename=Rename Preset
|
||||
settings.type.global.preset.remove=Delete Preset
|
||||
settings.type.global.preset.remove.confirm=Are you sure you want to delete preset "%s"? Instances using this preset will fall back to the default preset.
|
||||
settings.type.global.preset.subtitle=The current instance will inherit game settings from the specified preset
|
||||
settings.type.global.preset.auto_name=Preset %d
|
||||
|
||||
shaderpack.download.title=Download Shader - %1s
|
||||
|
||||
@@ -1294,7 +1294,7 @@ settings.game.inherit_global=目前繼承遊戲設定預設。點擊後使用實
|
||||
settings.game.instance_settings.unsupported=目前遊戲設定檔案是由更高版本的 HMCL 儲存的,目前版本的 HMCL 無法正常載入。
|
||||
settings.game.presets.unsupported=遊戲設定預設檔案是由更高版本的 HMCL 儲存的,目前版本的 HMCL 無法修改全域遊戲設定。
|
||||
settings.game.isolation=版本隔離
|
||||
settings.game.isolation.subtitle=啟用後,目前實例將使用獨立的遊戲執行路徑設定,而不是繼承全域設定。
|
||||
settings.game.isolation.subtitle=啟用後,目前實例將使用獨立的遊戲執行路徑設定,而不是繼承全域設定
|
||||
settings.game.java_directory=遊戲 Java
|
||||
settings.game.java_directory.auto=自動選取合適的 Java
|
||||
settings.game.java_directory.auto.not_found=沒有合適的 Java
|
||||
@@ -1425,11 +1425,14 @@ settings.type.global.preset=預設
|
||||
settings.type.global.preset.create=新增預設
|
||||
settings.type.global.preset.default=使用預設項目
|
||||
settings.type.global.preset.duplicate_name=預設名稱已存在
|
||||
settings.type.global.preset.help=遊戲設定預設管理著一組遊戲設定,你可以在下方調整這些設定。\n\
|
||||
所有實例預設繼承當前預設中的遊戲設定,你可以在實例遊戲設定頁面中覆蓋特定的設定。
|
||||
settings.type.global.preset.manage_all=當前預設
|
||||
settings.type.global.preset.name=預設名稱
|
||||
settings.type.global.preset.rename=重新命名預設
|
||||
settings.type.global.preset.remove=刪除預設
|
||||
settings.type.global.preset.remove.confirm=確定要刪除預設「%s」嗎?使用該預設的實例將改用預設項目。
|
||||
settings.type.global.preset.subtitle=當前實例將繼承指定預設中的遊戲設定
|
||||
settings.type.global.preset.auto_name=預設 %d
|
||||
|
||||
shaderpack.download.title=光影下載 - %1s
|
||||
|
||||
@@ -1299,7 +1299,7 @@ settings.game.inherit_global=当前继承游戏设置预设。点击后使用实
|
||||
settings.game.instance_settings.unsupported=当前游戏设置文件是由更高版本的 HMCL 保存的,当前版本的 HMCL 无法正常加载。
|
||||
settings.game.presets.unsupported=游戏设置预设文件是由更高版本的 HMCL 保存的,当前版本的 HMCL 无法修改全局游戏设置。
|
||||
settings.game.isolation=版本隔离
|
||||
settings.game.isolation.subtitle=启用后,当前实例将使用独立的游戏运行路径设置,而不是继承全局设置。
|
||||
settings.game.isolation.subtitle=启用后,当前实例将使用独立的游戏运行路径设置,而不是继承全局设置
|
||||
settings.game.java_directory=游戏 Java
|
||||
settings.game.java_directory.auto=自动选择合适的 Java
|
||||
settings.game.java_directory.auto.not_found=没有合适的 Java
|
||||
@@ -1430,11 +1430,14 @@ settings.type.global.preset=预设
|
||||
settings.type.global.preset.create=新建预设
|
||||
settings.type.global.preset.default=使用默认预设
|
||||
settings.type.global.preset.duplicate_name=预设名称已存在
|
||||
settings.type.global.preset.help=游戏设置预设管理着一组游戏设置,你可以在下方调整这些设置。\n\
|
||||
所有实例默认继承当前预设中的游戏设置,你可以在实例游戏设置页面中覆盖特定的设置。
|
||||
settings.type.global.preset.manage_all=当前预设
|
||||
settings.type.global.preset.name=预设名称
|
||||
settings.type.global.preset.rename=重命名预设
|
||||
settings.type.global.preset.remove=删除预设
|
||||
settings.type.global.preset.remove.confirm=确定要删除预设“%s”吗?使用该预设的实例将回退到默认预设。
|
||||
settings.type.global.preset.subtitle=当前实例将继承指定预设中的游戏设置
|
||||
settings.type.global.preset.auto_name=预设 %d
|
||||
|
||||
shaderpack.download.title=光影下载 - %1s
|
||||
|
||||
+1
-1
@@ -4,7 +4,7 @@ import org.jackhuang.hmcl.gradle.l10n.ParseLanguageSubtagRegistry
|
||||
|
||||
plugins {
|
||||
id("checkstyle")
|
||||
id("org.glavo.gradle-wrapper-neo") version "0.1.0"
|
||||
id("org.glavo.gradle-wrapper-neo") version "0.2.0"
|
||||
}
|
||||
|
||||
group = "org.jackhuang"
|
||||
|
||||
Vendored
+1
-1
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* Gradle Wrapper Neo single-file source distribution.
|
||||
*
|
||||
* This source file is part of Gradle Wrapper Neo 0.1.0.
|
||||
* This source file is part of Gradle Wrapper Neo 0.2.0.
|
||||
* Documentation and updates: https://github.com/Glavo/gradle-wrapper-neo
|
||||
*
|
||||
* Place this file at gradle/wrapper/GradleWrapperNeo.java in a Gradle project.
|
||||
|
||||
+19
-10
@@ -157,19 +157,17 @@ function Resolve-JavacExecutable {
|
||||
}
|
||||
|
||||
function Find-AppHome {
|
||||
param([string] $LauncherHome)
|
||||
param(
|
||||
[string] $LauncherHome,
|
||||
[string] $WorkingDirectory
|
||||
)
|
||||
|
||||
$launcherProperties = Join-Path $LauncherHome 'gradle\wrapper\gradle-wrapper.properties'
|
||||
if (Test-Path -LiteralPath $launcherProperties -PathType Leaf) {
|
||||
return $LauncherHome
|
||||
}
|
||||
|
||||
$currentLocation = Get-Location
|
||||
if ($currentLocation.Provider.Name -ne 'FileSystem') {
|
||||
throw "The current location is not a file system directory: $currentLocation"
|
||||
}
|
||||
|
||||
$searchDirectory = Get-Item -LiteralPath $currentLocation.Path
|
||||
$searchDirectory = Get-Item -LiteralPath $WorkingDirectory
|
||||
$searchStart = $searchDirectory.FullName
|
||||
while ($null -ne $searchDirectory) {
|
||||
$propertiesFile = Join-Path $searchDirectory.FullName 'gradle\wrapper\gradle-wrapper.properties'
|
||||
@@ -224,7 +222,8 @@ function ConvertTo-WindowsCommandLineArgument {
|
||||
function Invoke-NativeApplication {
|
||||
param(
|
||||
[string] $Executable,
|
||||
[string[]] $Arguments
|
||||
[string[]] $Arguments,
|
||||
[string] $WorkingDirectory
|
||||
)
|
||||
|
||||
$quotedArguments = New-Object 'System.Collections.Generic.List[string]'
|
||||
@@ -235,6 +234,7 @@ function Invoke-NativeApplication {
|
||||
$startInfo = New-Object Diagnostics.ProcessStartInfo
|
||||
$startInfo.FileName = $Executable
|
||||
$startInfo.Arguments = [string]::Join(' ', $quotedArguments.ToArray())
|
||||
$startInfo.WorkingDirectory = $WorkingDirectory
|
||||
$startInfo.UseShellExecute = $false
|
||||
|
||||
$process = New-Object Diagnostics.Process
|
||||
@@ -295,7 +295,13 @@ function Compile-WrapperSource {
|
||||
function Invoke-GradleWrapper {
|
||||
param([string[]] $GradleArguments)
|
||||
|
||||
$appHome = Find-AppHome -LauncherHome $script:LauncherHome
|
||||
$currentLocation = Get-Location
|
||||
if ($currentLocation.Provider.Name -ne 'FileSystem') {
|
||||
throw "The current location is not a file system directory: $currentLocation"
|
||||
}
|
||||
$workingDirectory = $currentLocation.ProviderPath
|
||||
|
||||
$appHome = Find-AppHome -LauncherHome $script:LauncherHome -WorkingDirectory $workingDirectory
|
||||
$launcherWrapperDirectory = Join-Path $script:LauncherHome 'gradle\wrapper'
|
||||
$projectSource = Join-Path $appHome 'gradle\wrapper\GradleWrapperNeo.java'
|
||||
if (Test-Path -LiteralPath $projectSource -PathType Leaf) {
|
||||
@@ -351,7 +357,10 @@ function Invoke-GradleWrapper {
|
||||
}
|
||||
|
||||
$javaArguments += $GradleArguments
|
||||
$script:WrapperExitCode = Invoke-NativeApplication -Executable $javaExecutable -Arguments $javaArguments
|
||||
$script:WrapperExitCode = Invoke-NativeApplication `
|
||||
-Executable $javaExecutable `
|
||||
-Arguments $javaArguments `
|
||||
-WorkingDirectory $workingDirectory
|
||||
}
|
||||
|
||||
try {
|
||||
|
||||
Reference in new issue
Block a user