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