在不支持的平台上打开陶瓦联机页面时弹出提示 (#4735)
This commit is contained in:
@@ -61,22 +61,20 @@ public final class TerracottaManager {
|
|||||||
private static final InvocationDispatcher<TerracottaState> STATE_D = InvocationDispatcher.runOn(Platform::runLater, STATE::set);
|
private static final InvocationDispatcher<TerracottaState> STATE_D = InvocationDispatcher.runOn(Platform::runLater, STATE::set);
|
||||||
|
|
||||||
static {
|
static {
|
||||||
Task.runAsync(() -> {
|
Schedulers.io().execute(() -> {
|
||||||
if (TerracottaMetadata.PROVIDER == null) {
|
try {
|
||||||
setState(new TerracottaState.Fatal(TerracottaState.Fatal.Type.OS));
|
if (TerracottaMetadata.PROVIDER == null)
|
||||||
LOG.warning("Terracotta hasn't support your OS: " + org.jackhuang.hmcl.util.platform.Platform.SYSTEM_PLATFORM);
|
throw new IOException("Unsupported platform: " + org.jackhuang.hmcl.util.platform.Platform.CURRENT_PLATFORM);
|
||||||
} else {
|
|
||||||
switch (TerracottaMetadata.PROVIDER.status()) {
|
switch (TerracottaMetadata.PROVIDER.status()) {
|
||||||
case NOT_EXIST -> setState(new TerracottaState.Uninitialized(false));
|
case NOT_EXIST -> setState(new TerracottaState.Uninitialized(false));
|
||||||
case LEGACY_VERSION -> setState(new TerracottaState.Uninitialized(true));
|
case LEGACY_VERSION -> setState(new TerracottaState.Uninitialized(true));
|
||||||
case READY -> launch(setState(new TerracottaState.Launching()));
|
case READY -> launch(setState(new TerracottaState.Launching()));
|
||||||
}
|
}
|
||||||
}
|
} catch (Exception e) {
|
||||||
}).whenComplete(exception -> {
|
|
||||||
if (exception != null) {
|
|
||||||
compareAndSet(TerracottaState.Bootstrap.INSTANCE, new TerracottaState.Fatal(TerracottaState.Fatal.Type.UNKNOWN));
|
compareAndSet(TerracottaState.Bootstrap.INSTANCE, new TerracottaState.Fatal(TerracottaState.Fatal.Type.UNKNOWN));
|
||||||
}
|
}
|
||||||
}).start();
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public static ReadOnlyObjectProperty<TerracottaState> stateProperty() {
|
public static ReadOnlyObjectProperty<TerracottaState> stateProperty() {
|
||||||
|
|||||||
@@ -147,7 +147,7 @@ public final class TerracottaMetadata {
|
|||||||
String arch = Architecture.SYSTEM_ARCH.getCheckedName();
|
String arch = Architecture.SYSTEM_ARCH.getCheckedName();
|
||||||
return switch (OperatingSystem.CURRENT_OS) {
|
return switch (OperatingSystem.CURRENT_OS) {
|
||||||
case WINDOWS -> {
|
case WINDOWS -> {
|
||||||
if (!OperatingSystem.SYSTEM_VERSION.isAtLeast(OSVersion.WINDOWS_8_1))
|
if (!OperatingSystem.SYSTEM_VERSION.isAtLeast(OSVersion.WINDOWS_10))
|
||||||
yield null;
|
yield null;
|
||||||
|
|
||||||
TerracottaNative target = config.of("windows-%s.exe".formatted(arch));
|
TerracottaNative target = config.of("windows-%s.exe".formatted(arch));
|
||||||
|
|||||||
@@ -298,7 +298,7 @@ public abstract sealed class TerracottaState {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public boolean isRecoverable() {
|
public boolean isRecoverable() {
|
||||||
return this.type != Type.OS && this.type != Type.UNKNOWN;
|
return this.type != Type.UNKNOWN;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -30,6 +30,7 @@ import org.jackhuang.hmcl.setting.Profile;
|
|||||||
import org.jackhuang.hmcl.setting.Profiles;
|
import org.jackhuang.hmcl.setting.Profiles;
|
||||||
import org.jackhuang.hmcl.task.Schedulers;
|
import org.jackhuang.hmcl.task.Schedulers;
|
||||||
import org.jackhuang.hmcl.task.Task;
|
import org.jackhuang.hmcl.task.Task;
|
||||||
|
import org.jackhuang.hmcl.terracotta.TerracottaMetadata;
|
||||||
import org.jackhuang.hmcl.ui.Controllers;
|
import org.jackhuang.hmcl.ui.Controllers;
|
||||||
import org.jackhuang.hmcl.ui.FXUtils;
|
import org.jackhuang.hmcl.ui.FXUtils;
|
||||||
import org.jackhuang.hmcl.ui.SVG;
|
import org.jackhuang.hmcl.ui.SVG;
|
||||||
@@ -49,6 +50,7 @@ import org.jackhuang.hmcl.util.Lang;
|
|||||||
import org.jackhuang.hmcl.util.StringUtils;
|
import org.jackhuang.hmcl.util.StringUtils;
|
||||||
import org.jackhuang.hmcl.util.TaskCancellationAction;
|
import org.jackhuang.hmcl.util.TaskCancellationAction;
|
||||||
import org.jackhuang.hmcl.util.io.CompressingUtils;
|
import org.jackhuang.hmcl.util.io.CompressingUtils;
|
||||||
|
import org.jackhuang.hmcl.util.platform.*;
|
||||||
import org.jackhuang.hmcl.util.versioning.VersionNumber;
|
import org.jackhuang.hmcl.util.versioning.VersionNumber;
|
||||||
|
|
||||||
import java.nio.file.Files;
|
import java.nio.file.Files;
|
||||||
@@ -186,7 +188,25 @@ public class RootPage extends DecoratorAnimatedPage implements DecoratorPage {
|
|||||||
terracottaItem.setLeftGraphic(wrap(SVG.GRAPH2));
|
terracottaItem.setLeftGraphic(wrap(SVG.GRAPH2));
|
||||||
terracottaItem.setActionButtonVisible(false);
|
terracottaItem.setActionButtonVisible(false);
|
||||||
terracottaItem.setTitle(i18n("terracotta"));
|
terracottaItem.setTitle(i18n("terracotta"));
|
||||||
terracottaItem.setOnAction(e -> Controllers.navigate(Controllers.getTerracottaPage()));
|
|
||||||
|
terracottaItem.setOnAction(e -> {
|
||||||
|
if (TerracottaMetadata.PROVIDER != null) {
|
||||||
|
Controllers.navigate(Controllers.getTerracottaPage());
|
||||||
|
} else {
|
||||||
|
String message;
|
||||||
|
if (Architecture.SYSTEM_ARCH.getBits() == Bits.BIT_32)
|
||||||
|
message = i18n("terracotta.unsupported.arch.32bit");
|
||||||
|
else if (OperatingSystem.CURRENT_OS == OperatingSystem.WINDOWS
|
||||||
|
&& !OperatingSystem.SYSTEM_VERSION.isAtLeast(OSVersion.WINDOWS_10))
|
||||||
|
message = i18n("terracotta.unsupported.os.windows.old");
|
||||||
|
else if (Platform.SYSTEM_PLATFORM.equals(OperatingSystem.LINUX, Architecture.LOONGARCH64_OW))
|
||||||
|
message = i18n("terracotta.unsupported.arch.loongarch64_ow");
|
||||||
|
else
|
||||||
|
message = i18n("terracotta.unsupported");
|
||||||
|
|
||||||
|
Controllers.dialog(message, null, MessageDialogPane.MessageType.WARNING);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
// the left sidebar
|
// the left sidebar
|
||||||
AdvancedListBox sideBar = new AdvancedListBox()
|
AdvancedListBox sideBar = new AdvancedListBox()
|
||||||
|
|||||||
@@ -1480,7 +1480,6 @@ terracotta.status.exception.desc.host_et_crash=Failed to create room: EasyTier c
|
|||||||
terracotta.status.exception.desc.ping_server_rst=Room closed: You exited the game world, room closed automatically
|
terracotta.status.exception.desc.ping_server_rst=Room closed: You exited the game world, room closed automatically
|
||||||
terracotta.status.exception.desc.scaffolding_invalid_response=Invalid Protocol:Host has sent invalid response, please report this issue to developers
|
terracotta.status.exception.desc.scaffolding_invalid_response=Invalid Protocol:Host has sent invalid response, please report this issue to developers
|
||||||
terracotta.status.fatal.retry=Retry
|
terracotta.status.fatal.retry=Retry
|
||||||
terracotta.status.fatal.os=Sorry, HMCL cannot enable Terracotta | Multiplayer on your operating system or architecture. Please use a more modern operating system.
|
|
||||||
terracotta.status.fatal.network=Failed to download Multiplayer Core. Please check your network connection and try again.
|
terracotta.status.fatal.network=Failed to download Multiplayer Core. Please check your network connection and try again.
|
||||||
terracotta.status.fatal.install=Fatal Error: Unable to install Multiplayer Core.
|
terracotta.status.fatal.install=Fatal Error: Unable to install Multiplayer Core.
|
||||||
terracotta.status.fatal.terracotta=Fatal Error: Unable to connect to Multiplayer Core.
|
terracotta.status.fatal.terracotta=Fatal Error: Unable to connect to Multiplayer Core.
|
||||||
@@ -1490,6 +1489,10 @@ terracotta.player_anonymous=Anonymous Player
|
|||||||
terracotta.player_kind.host=Host
|
terracotta.player_kind.host=Host
|
||||||
terracotta.player_kind.local=Yourself
|
terracotta.player_kind.local=Yourself
|
||||||
terracotta.player_kind.guest=Guest
|
terracotta.player_kind.guest=Guest
|
||||||
|
terracotta.unsupported=Multiplayer is not yet supported on the current platform.
|
||||||
|
terracotta.unsupported.os.windows.old=Multiplayer requires Windows 10 or later. Please update your system.
|
||||||
|
terracotta.unsupported.arch.32bit=Multiplayer is not supported on 32-bit systems. Please upgrade to a 64-bit system.
|
||||||
|
terracotta.unsupported.arch.loongarch64_ow=Multiplayer is not supported on Linux LoongArch64 Old World distributions. Please update to a New World distribution (such as AOSC OS).
|
||||||
|
|
||||||
unofficial.hint=You are using an unofficial build of HMCL. We cannot guarantee its security.
|
unofficial.hint=You are using an unofficial build of HMCL. We cannot guarantee its security.
|
||||||
|
|
||||||
|
|||||||
@@ -1268,7 +1268,6 @@ terracotta.status.exception.desc.host_et_crash=建立房間失敗:EasyTier 已
|
|||||||
terracotta.status.exception.desc.ping_server_rst=房間已關閉:您已退出遊戲存檔,房間已自動關閉
|
terracotta.status.exception.desc.ping_server_rst=房間已關閉:您已退出遊戲存檔,房間已自動關閉
|
||||||
terracotta.status.exception.desc.scaffolding_invalid_response=協議錯誤:房主發送了錯誤的回應資料,請向開發者回報該問題
|
terracotta.status.exception.desc.scaffolding_invalid_response=協議錯誤:房主發送了錯誤的回應資料,請向開發者回報該問題
|
||||||
terracotta.status.fatal.retry=重試
|
terracotta.status.fatal.retry=重試
|
||||||
terracotta.status.fatal.os=抱歉,HMCL 不能在您的作業系統或架構上啟用多人連線。請使用更主流的作業系統
|
|
||||||
terracotta.status.fatal.network=未能下載線上核心。請檢查網路連接,然後再試一次
|
terracotta.status.fatal.network=未能下載線上核心。請檢查網路連接,然後再試一次
|
||||||
terracotta.status.fatal.install=嚴重錯誤:無法安裝線上核心
|
terracotta.status.fatal.install=嚴重錯誤:無法安裝線上核心
|
||||||
terracotta.status.fatal.terracotta=嚴重錯誤:無法與線上核心通訊
|
terracotta.status.fatal.terracotta=嚴重錯誤:無法與線上核心通訊
|
||||||
@@ -1278,6 +1277,10 @@ terracotta.player_anonymous=匿名玩家
|
|||||||
terracotta.player_kind.host=房主
|
terracotta.player_kind.host=房主
|
||||||
terracotta.player_kind.local=你
|
terracotta.player_kind.local=你
|
||||||
terracotta.player_kind.guest=房客
|
terracotta.player_kind.guest=房客
|
||||||
|
terracotta.unsupported=多人聯機功能尚未支援目前平台。
|
||||||
|
terracotta.unsupported.os.windows.old=多人聯機功能需要 Windows 10 或更高版本。請更新系統。
|
||||||
|
terracotta.unsupported.arch.32bit=多人聯機功能不支援 32 位元系統。請更新至 64 位元系統。
|
||||||
|
terracotta.unsupported.arch.loongarch64_ow=多人聯機功能不支援 Linux LoongArch64 舊世界發行版,請更新至新世界發行版 (如 AOSC OC)。
|
||||||
|
|
||||||
unofficial.hint=你正在使用第三方提供的 HMCL。我們無法保證其安全性,請注意甄別。
|
unofficial.hint=你正在使用第三方提供的 HMCL。我們無法保證其安全性,請注意甄別。
|
||||||
|
|
||||||
|
|||||||
@@ -1278,7 +1278,6 @@ terracotta.status.exception.desc.host_et_crash=创建房间失败:EasyTier 已
|
|||||||
terracotta.status.exception.desc.ping_server_rst=房间已关闭:您已退出游戏存档,房间已自动关闭
|
terracotta.status.exception.desc.ping_server_rst=房间已关闭:您已退出游戏存档,房间已自动关闭
|
||||||
terracotta.status.exception.desc.scaffolding_invalid_response=协议错误:房主发送了错误的响应数据,请向开发者反馈该问题
|
terracotta.status.exception.desc.scaffolding_invalid_response=协议错误:房主发送了错误的响应数据,请向开发者反馈该问题
|
||||||
terracotta.status.fatal.retry=重试
|
terracotta.status.fatal.retry=重试
|
||||||
terracotta.status.fatal.os=抱歉,HMCL 不能在您的操作系统或架构上启用多人联机。请使用更主流的操作系统
|
|
||||||
terracotta.status.fatal.network=未能下载联机核心。请检查网络连接,然后再试一次
|
terracotta.status.fatal.network=未能下载联机核心。请检查网络连接,然后再试一次
|
||||||
terracotta.status.fatal.install=严重错误:无法安装联机核心
|
terracotta.status.fatal.install=严重错误:无法安装联机核心
|
||||||
terracotta.status.fatal.terracotta=严重错误:无法与联机核心通讯
|
terracotta.status.fatal.terracotta=严重错误:无法与联机核心通讯
|
||||||
@@ -1288,6 +1287,10 @@ terracotta.player_anonymous=匿名玩家
|
|||||||
terracotta.player_kind.host=房主
|
terracotta.player_kind.host=房主
|
||||||
terracotta.player_kind.local=你
|
terracotta.player_kind.local=你
|
||||||
terracotta.player_kind.guest=房客
|
terracotta.player_kind.guest=房客
|
||||||
|
terracotta.unsupported=多人联机功能尚不支持当前平台。
|
||||||
|
terracotta.unsupported.os.windows.old=多人联机功能需要 Windows 10 或更高版本。请更新系统。
|
||||||
|
terracotta.unsupported.arch.32bit=多人联机功能不支持 32 位系统。请更新至 64 位系统。
|
||||||
|
terracotta.unsupported.arch.loongarch64_ow=多人联机功能不支持 Linux LoongArch64 旧世界发行版,请更新至新世界发行版 (如 AOSC OC)。
|
||||||
|
|
||||||
unofficial.hint=你正在使用非官方构建的 HMCL。我们无法保证其安全性,请注意甄别。
|
unofficial.hint=你正在使用非官方构建的 HMCL。我们无法保证其安全性,请注意甄别。
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user