diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/SettingsPage.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/SettingsPage.java index 75bf402b5..7adb5bbc6 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/SettingsPage.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/SettingsPage.java @@ -247,4 +247,9 @@ public final class SettingsPage extends SettingsView implements DecoratorPage { protected void onHelp() { FXUtils.openLink(Metadata.HELP_URL); } + + @Override + protected void onSponsor() { + FXUtils.openLink("https://hmcl.huangyuhui.net/api/redirect/sponsor"); + } } diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/SettingsView.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/SettingsView.java index fc9fc7513..e56f6d46d 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/SettingsView.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/SettingsView.java @@ -21,6 +21,7 @@ import com.jfoenix.controls.*; import javafx.geometry.HPos; import javafx.geometry.Pos; import javafx.geometry.VPos; +import javafx.scene.Cursor; import javafx.scene.control.Label; import javafx.scene.control.ScrollPane; import javafx.scene.layout.*; @@ -75,6 +76,19 @@ public abstract class SettingsView extends StackPane { { ComponentList settingsPane = new ComponentList(); { + { + StackPane sponsorPane = new StackPane(); + sponsorPane.setCursor(Cursor.HAND); + sponsorPane.setOnMouseClicked(e -> onSponsor()); + { + Label label = new Label(i18n("sponsor.hmcl")); + label.setWrapText(true); + label.prefWidthProperty().bind(sponsorPane.widthProperty()); + sponsorPane.getChildren().add(label); + } + settingsPane.getContent().add(sponsorPane); + } + ComponentSublist updatePane = new ComponentSublist(); updatePane.setTitle(i18n("update")); updatePane.setHasSubtitle(true); @@ -491,4 +505,5 @@ public abstract class SettingsView extends StackPane { protected abstract void onUpdate(); protected abstract void onHelp(); protected abstract void onExportLogs(); + protected abstract void onSponsor(); } diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/VersionsPage.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/VersionsPage.java index bab0e59a5..13b4d9c56 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/VersionsPage.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/VersionsPage.java @@ -25,6 +25,7 @@ import com.jfoenix.controls.JFXSpinner; import javafx.application.Platform; import javafx.beans.InvalidationListener; import javafx.fxml.FXML; +import javafx.scene.layout.BorderPane; import javafx.scene.layout.HBox; import javafx.scene.layout.StackPane; import javafx.scene.layout.VBox; @@ -43,7 +44,7 @@ import java.util.Map; import java.util.logging.Level; import java.util.stream.Collectors; -public final class VersionsPage extends StackPane implements WizardPage, Refreshable { +public final class VersionsPage extends BorderPane implements WizardPage, Refreshable { private final String gameVersion; private final DownloadProvider downloadProvider; private final String libraryId; @@ -59,6 +60,8 @@ public final class VersionsPage extends StackPane implements WizardPage, Refresh @FXML private StackPane emptyPane; @FXML + private StackPane root; + @FXML private JFXCheckBox chkRelease; @FXML private JFXCheckBox chkSnapshot; @@ -69,7 +72,7 @@ public final class VersionsPage extends StackPane implements WizardPage, Refresh @FXML private VBox centrePane; - private final TransitionHandler transitionHandler = new TransitionHandler(this); + private final TransitionHandler transitionHandler; private final VersionList versionList; private TaskExecutor executor; @@ -83,6 +86,8 @@ public final class VersionsPage extends StackPane implements WizardPage, Refresh FXUtils.loadFXML(this, "/assets/fxml/download/versions.fxml"); + transitionHandler = new TransitionHandler(root); + if (versionList.hasType()) { centrePane.getChildren().setAll(checkPane, list); } else @@ -122,7 +127,7 @@ public final class VersionsPage extends StackPane implements WizardPage, Refresh @Override public void refresh() { - getChildren().setAll(spinner); + transitionHandler.setContent(spinner, ContainerAnimations.FADE.getAnimationProducer()); executor = versionList.refreshAsync(gameVersion, downloadProvider).finalized((variables, isDependentsSucceeded) -> { if (isDependentsSucceeded) { List items = loadVersions(); @@ -169,4 +174,9 @@ public final class VersionsPage extends StackPane implements WizardPage, Refresh @FXML private void onBack() { controller.onPrev(true); } + + @FXML + private void onSponsor() { + FXUtils.openLink("https://hmcl.huangyuhui.net/api/redirect/bmclapi_sponsor"); + } } diff --git a/HMCL/src/main/resources/assets/css/root.css b/HMCL/src/main/resources/assets/css/root.css index 9208725e9..a6ef08dba 100644 --- a/HMCL/src/main/resources/assets/css/root.css +++ b/HMCL/src/main/resources/assets/css/root.css @@ -132,6 +132,16 @@ -fx-fill: -fx-base-darker-color; } +.sponsor-pane { + -fx-padding: 16; + -fx-background-color: white; + -fx-cursor: hand; +} + +.sponsor-pane .label { + -fx-wrap-text: true; +} + /******************************************************************************* * * * JFX Tab Pane * diff --git a/HMCL/src/main/resources/assets/fxml/download/versions.fxml b/HMCL/src/main/resources/assets/fxml/download/versions.fxml index 53f38ea40..c49f0444b 100644 --- a/HMCL/src/main/resources/assets/fxml/download/versions.fxml +++ b/HMCL/src/main/resources/assets/fxml/download/versions.fxml @@ -5,22 +5,31 @@ - - - - - - - - - - - - - - + + + + +
+ + + + + + + + + + + + + + + + +
diff --git a/HMCL/src/main/resources/assets/lang/I18N.properties b/HMCL/src/main/resources/assets/lang/I18N.properties index 3cf4d2195..69c7b3d76 100644 --- a/HMCL/src/main/resources/assets/lang/I18N.properties +++ b/HMCL/src/main/resources/assets/lang/I18N.properties @@ -369,6 +369,9 @@ settings.type.global.manage=Global Game Settings settings.type.global.edit=Configure global game settings settings.type.special.enable=Enable specialized settings for this game +sponsor.bmclapi=To obtain a stable download service, please consider support BMCLAPI. Click here for more information +sponsor.hmcl=HMCL is a free, open source Minecraft launcher the enables users to easily manage multiple, separate installations of Minecraft. We're using Afdian so that we can continue to pay for our hosting and project development. Click here for more information. + update=Update update.channel.dev=Update to development version update.channel.stable=Update to stable version diff --git a/HMCL/src/main/resources/assets/lang/I18N_zh.properties b/HMCL/src/main/resources/assets/lang/I18N_zh.properties index e6ccafb5e..a60b08d16 100644 --- a/HMCL/src/main/resources/assets/lang/I18N_zh.properties +++ b/HMCL/src/main/resources/assets/lang/I18N_zh.properties @@ -367,6 +367,9 @@ settings.type.global.manage=全域遊戲設定 settings.type.global.edit=編輯全域遊戲設定 settings.type.special.enable=啟用遊戲特別設定(不影響其他遊戲版本) +sponsor.bmclapi=請贊助 BMCLAPI 從而獲得穩定高速的下載服務,點擊此處查閱詳細訊息。 +sponsor.hmcl=HMCL 是一個免費、開源的 Minecraft 啟動器,允許玩家方便快捷地安裝、管理、運行遊戲。您的贊助將幫助 HMCL 獲得更好的發展、支持穩定高速的遊戲安裝與文件下載服務。點擊此處查閱更多詳細訊息。 + update=啟動器更新 update.channel.dev=更新到開發版 update.channel.stable=更新到推薦版本 diff --git a/HMCL/src/main/resources/assets/lang/I18N_zh_CN.properties b/HMCL/src/main/resources/assets/lang/I18N_zh_CN.properties index 1bf87a513..d743405e7 100644 --- a/HMCL/src/main/resources/assets/lang/I18N_zh_CN.properties +++ b/HMCL/src/main/resources/assets/lang/I18N_zh_CN.properties @@ -367,6 +367,9 @@ settings.type.global.manage=全局游戏设置 settings.type.global.edit=编辑全局版本设置 settings.type.special.enable=启用游戏特定设置(不影响其他游戏版本) +sponsor.bmclapi=请赞助 BMCLAPI 从而获得稳定高速的下载服务,点击此处查阅详细信息。 +sponsor.hmcl=HMCL 是一个免费、开源的 Minecraft 启动器,允许玩家方便快捷地安装、管理、运行游戏。您的赞助将帮助 HMCL 获得更好的发展、支持稳定高速的游戏安装与文件下载服务。点击此处查阅更多详细信息。 + update=启动器更新 update.channel.dev=更新到开发版 update.channel.stable=更新到推荐版本