在游戏下载界面提示版本支持状态 (#4471)

This commit is contained in:
Glavo
2025-10-10 16:45:18 +08:00
committed by GitHub
parent 0b9616f460
commit 1e74567a22
7 changed files with 124 additions and 67 deletions

View File

@@ -1,37 +1,31 @@
package org.jackhuang.hmcl.util.platform;
import java.util.Objects;
public final class Platform {
public record Platform(OperatingSystem os, Architecture arch) {
public static final Platform UNKNOWN = new Platform(OperatingSystem.UNKNOWN, Architecture.UNKNOWN);
public static final Platform WINDOWS_X86 = new Platform(OperatingSystem.WINDOWS, Architecture.X86);
public static final Platform WINDOWS_X86_64 = new Platform(OperatingSystem.WINDOWS, Architecture.X86_64);
public static final Platform WINDOWS_ARM64 = new Platform(OperatingSystem.WINDOWS, Architecture.ARM64);
public static final Platform LINUX_X86 = new Platform(OperatingSystem.LINUX, Architecture.X86);
public static final Platform LINUX_X86_64 = new Platform(OperatingSystem.LINUX, Architecture.X86_64);
public static final Platform LINUX_ARM64 = new Platform(OperatingSystem.LINUX, Architecture.ARM64);
public static final Platform LINUX_ARM32 = new Platform(OperatingSystem.LINUX, Architecture.ARM32);
public static final Platform LINUX_RISCV64 = new Platform(OperatingSystem.LINUX, Architecture.RISCV64);
public static final Platform LINUX_LOONGARCH64 = new Platform(OperatingSystem.LINUX, Architecture.LOONGARCH64);
public static final Platform LINUX_LOONGARCH64_OW = new Platform(OperatingSystem.LINUX, Architecture.LOONGARCH64_OW);
public static final Platform LINUX_MIPS64EL = new Platform(OperatingSystem.LINUX, Architecture.MIPS64EL);
public static final Platform MACOS_X86_64 = new Platform(OperatingSystem.MACOS, Architecture.X86_64);
public static final Platform MACOS_ARM64 = new Platform(OperatingSystem.MACOS, Architecture.ARM64);
public static final Platform FREEBSD_X86_64 = new Platform(OperatingSystem.FREEBSD, Architecture.X86);
public static final Platform CURRENT_PLATFORM = Platform.getPlatform(OperatingSystem.CURRENT_OS, Architecture.CURRENT_ARCH);
public static final Platform SYSTEM_PLATFORM = Platform.getPlatform(OperatingSystem.CURRENT_OS, Architecture.SYSTEM_ARCH);
public static boolean isCompatibleWithX86Java() {
return Architecture.SYSTEM_ARCH.isX86() || SYSTEM_PLATFORM == MACOS_ARM64 || SYSTEM_PLATFORM == WINDOWS_ARM64;
}
private final OperatingSystem os;
private final Architecture arch;
private Platform(OperatingSystem os, Architecture arch) {
this.os = os;
this.arch = arch;
}
public static Platform getPlatform() {
return CURRENT_PLATFORM;
return Architecture.SYSTEM_ARCH.isX86() || SYSTEM_PLATFORM.equals(MACOS_ARM64) || SYSTEM_PLATFORM.equals(WINDOWS_ARM64);
}
public static Platform getPlatform(OperatingSystem os, Architecture arch) {
@@ -74,23 +68,10 @@ public final class Platform {
return arch.getBits();
}
@Override
public int hashCode() {
return Objects.hash(os, arch);
}
public boolean equals(OperatingSystem os, Architecture arch) {
return this.os == os && this.arch == arch;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof Platform)) return false;
Platform platform = (Platform) o;
return os == platform.os && arch == platform.arch;
}
@Override
public String toString() {
return os.getCheckedName() + "-" + arch.getCheckedName();