Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 3 additions & 13 deletions HMCL/src/main/java/org/jackhuang/hmcl/game/HMCLGameRepository.java
Original file line number Diff line number Diff line change
Expand Up @@ -35,23 +35,12 @@
import org.jackhuang.hmcl.modpack.Modpack;
import org.jackhuang.hmcl.modpack.ModpackConfiguration;
import org.jackhuang.hmcl.modpack.ModpackProvider;
import org.jackhuang.hmcl.setting.LauncherSettings;
import org.jackhuang.hmcl.setting.SettingsManager;
import org.jackhuang.hmcl.setting.DefaultIsolationType;
import org.jackhuang.hmcl.setting.DownloadProviders;
import org.jackhuang.hmcl.setting.GameSettings;
import org.jackhuang.hmcl.setting.GameWindowType;
import org.jackhuang.hmcl.setting.LegacyGameSettingsMigrator;
import org.jackhuang.hmcl.setting.GameDirectory;
import org.jackhuang.hmcl.setting.ProxyType;
import org.jackhuang.hmcl.setting.SettingFileUtils;
import org.jackhuang.hmcl.setting.GameSettingsPresetID;
import org.jackhuang.hmcl.setting.GameInstanceIconType;
import org.jackhuang.hmcl.setting.*;
import org.jackhuang.hmcl.ui.FXUtils;
import org.jackhuang.hmcl.util.FileSaver;
import org.jackhuang.hmcl.util.Lang;
import org.jackhuang.hmcl.util.gson.JsonSchema;
import org.jackhuang.hmcl.util.StringUtils;
import org.jackhuang.hmcl.util.gson.JsonSchema;
import org.jackhuang.hmcl.util.gson.JsonUtils;
import org.jackhuang.hmcl.util.io.FileUtils;
import org.jackhuang.hmcl.util.platform.Bits;
Expand Down Expand Up @@ -794,6 +783,7 @@ public LaunchOptions.Builder getLaunchOptions(GameInstanceID instanceId, JavaRun
.setDisableAutoGameOptions(vs.getInheritable(GameSettings::disableAutoGameOptionsProperty))
.setUseNativeGLFW(vs.getInheritable(GameSettings::useNativeGLFWProperty))
.setUseNativeOpenAL(vs.getInheritable(GameSettings::useNativeOpenALProperty))
.setUseNativeSDL(vs.getInheritable(GameSettings::useNativeSDLProperty))
.setUseHighPerformanceGPU(vs.getInheritable(GameSettings::highPerformanceProperty))
.setDaemon(!makeLaunchScript && vs.getInheritable(GameSettings::launcherVisibilityProperty).isDaemon())
.setJavaAgents(javaAgents)
Expand Down
12 changes: 12 additions & 0 deletions HMCL/src/main/java/org/jackhuang/hmcl/setting/GameSettings.java
Original file line number Diff line number Diff line change
Expand Up @@ -836,6 +836,18 @@ public InheritableProperty<Boolean> useNativeOpenALProperty() {
return useNativeOpenAL;
}

/// Property name for using native SDL.
public static final String PROPERTY_USE_NATIVE_SDL = "useNativeSDL";

/// If `true`, HMCL will use native SDL.
@SerializedName(PROPERTY_USE_NATIVE_SDL)
private final InheritableProperty<Boolean> useNativeSDL = newInheritableProperty(PROPERTY_USE_NATIVE_SDL, false);

/// Returns the native SDL property.
public InheritableProperty<Boolean> useNativeSDLProperty() {
return useNativeSDL;
}

private static Renderer selectRenderer(GraphicsAPI api, @Nullable Renderer renderer) {
if (renderer instanceof Renderer.Driver driver && driver.api() != api) {
return Renderer.DEFAULT;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -835,10 +835,23 @@ public GameSettingsPage(Class<S> settingType) {
useNativeGLFWPane.setTitle(i18n("settings.advanced.use_native_glfw"));
useNativeGLFWPane.setSubtitle(i18n("settings.advanced.linux_freebsd_only"));

var useNativeSDLPane = createIndependentBooleanButton(GameSettings::useNativeSDLProperty);
nativeLibrarySettings.getContent().add(useNativeSDLPane);
useNativeSDLPane.setTitle(i18n("settings.advanced.use_native_sdl"));
useNativeSDLPane.setSubtitle(i18n("settings.advanced.linux_freebsd_only"));

var useNativeOpenALPane = createIndependentBooleanButton(GameSettings::useNativeOpenALProperty);
nativeLibrarySettings.getContent().add(useNativeOpenALPane);
useNativeOpenALPane.setTitle(i18n("settings.advanced.use_native_openal"));
useNativeOpenALPane.setSubtitle(i18n("settings.advanced.linux_freebsd_only"));

this.currentGameVersionNumber.addListener((o, oldValue, newValue) -> {
boolean isUsingSDL = isPresetSetting || newValue.compareTo("26.3-snapshot-4") >= 0;
useNativeGLFWPane.setVisible(!isUsingSDL);
useNativeGLFWPane.setManaged(!isUsingSDL);
useNativeSDLPane.setManaged(isUsingSDL);
useNativeSDLPane.setVisible(isUsingSDL);
});
}

}
Expand Down
1 change: 1 addition & 0 deletions HMCL/src/main/resources/assets/lang/I18N.properties
Original file line number Diff line number Diff line change
Expand Up @@ -1538,6 +1538,7 @@ settings.advanced.server_ip.prompt=Automatically join after launching the game
settings.advanced.unsupported_system_options=Settings not applicable to the current system
settings.advanced.use_native_glfw=Use System GLFW
settings.advanced.use_native_openal=Use System OpenAL
settings.advanced.use_native_sdl=Use System SDL
settings.advanced.linux_freebsd_only=Linux/FreeBSD Only
settings.advanced.windows_only=Windows Only
settings.advanced.workaround=Workaround
Expand Down
1 change: 1 addition & 0 deletions HMCL/src/main/resources/assets/lang/I18N_zh.properties
Original file line number Diff line number Diff line change
Expand Up @@ -1341,6 +1341,7 @@ settings.advanced.server_ip.prompt=預設,啟動遊戲後直接進入對應伺
settings.advanced.unsupported_system_options=不適用於目前系統的選項
settings.advanced.use_native_glfw=使用系統 GLFW
settings.advanced.use_native_openal=使用系統 OpenAL
settings.advanced.use_native_sdl=使用系統 SDL
settings.advanced.linux_freebsd_only=僅限 Linux/FreeBSD
settings.advanced.windows_only=僅限 Windows
settings.advanced.workaround=除錯選項
Expand Down
1 change: 1 addition & 0 deletions HMCL/src/main/resources/assets/lang/I18N_zh_CN.properties
Original file line number Diff line number Diff line change
Expand Up @@ -1341,6 +1341,7 @@ settings.advanced.server_ip.prompt=默认,启动游戏后可以直接进入对
settings.advanced.unsupported_system_options=不适用于当前系统的选项
settings.advanced.use_native_glfw=使用系统 GLFW
settings.advanced.use_native_openal=使用系统 OpenAL
settings.advanced.use_native_sdl=使用系统 SDL
settings.advanced.linux_freebsd_only=仅 Linux/FreeBSD
settings.advanced.windows_only=仅 Windows
settings.advanced.workaround=调试选项
Expand Down
10 changes: 10 additions & 0 deletions HMCLCore/src/main/java/org/jackhuang/hmcl/game/LaunchOptions.java
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@ public class LaunchOptions implements Serializable {
private Renderer renderer = Renderer.DEFAULT;
private boolean useNativeGLFW;
private boolean useNativeOpenAL;
private boolean useNativeSDL;
private boolean useHighPerformanceGPU;
private boolean enableDebugLogOutput;
private boolean allowAutoAgent;
Expand Down Expand Up @@ -264,6 +265,10 @@ public boolean isUseNativeOpenAL() {
return useNativeOpenAL;
}

public boolean isUseNativeSDL() {
return useNativeSDL;
}

public boolean isUseHighPerformanceGPU() {
return useHighPerformanceGPU;
}
Expand Down Expand Up @@ -481,6 +486,11 @@ public Builder setUseNativeOpenAL(boolean useNativeOpenAL) {
return this;
}

public Builder setUseNativeSDL(boolean useNativeSDL) {
options.useNativeSDL = useNativeSDL;
return this;
}

public Builder setUseHighPerformanceGPU(boolean useHighPerformanceGPU) {
options.useHighPerformanceGPU = useHighPerformanceGPU;
return this;
Expand Down
14 changes: 10 additions & 4 deletions HMCLCore/src/main/java/org/jackhuang/hmcl/game/Library.java
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,10 @@
import org.jetbrains.annotations.NotNullByDefault;
import org.jetbrains.annotations.Nullable;

import java.util.*;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Objects;

/// A class that describes a Minecraft dependency.
///
Expand Down Expand Up @@ -191,9 +194,12 @@ public boolean isNative() {
return true;
}

return downloads != null
&& downloads.classifiers() != null
&& downloads.classifiers().keySet().stream().anyMatch(s -> s.startsWith("native"));
if (downloads != null && downloads.classifiers() != null
&& downloads.classifiers().keySet().stream().anyMatch(s -> s.startsWith("native"))) {
return true;
}

return this.artifact().getClassifier() != null && this.artifact().getClassifier().startsWith("natives-");
}

public @Nullable LibraryDownloadInfo getRawDownloadInfo() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -482,6 +482,9 @@ public void decompressNatives(Path destination) throws NotDecompressingNativesEx
if (options.isUseNativeOpenAL() && FileUtils.getName(destFile).toLowerCase(Locale.ROOT).contains("openal")) {
return false;
}
if (options.isUseNativeSDL() && FileUtils.getName(destFile).toLowerCase(Locale.ROOT).contains("sdl")) {
return false;
}

return library.getExtract().shouldExtract(relativePath);
})
Expand Down