From e92a02c659cf2ad334e7fc4d47b0390a64fcf17c Mon Sep 17 00:00:00 2001 From: Glavo Date: Sun, 15 Mar 2026 20:47:25 +0800 Subject: [PATCH 1/4] Add April Fools feature logging --- .../java/org/jackhuang/hmcl/Launcher.java | 6 +-- .../org/jackhuang/hmcl/util/AprilFools.java | 41 +++++++++++++++++++ 2 files changed, 43 insertions(+), 4 deletions(-) create mode 100644 HMCL/src/main/java/org/jackhuang/hmcl/util/AprilFools.java diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/Launcher.java b/HMCL/src/main/java/org/jackhuang/hmcl/Launcher.java index a2c583e6f6..7836749107 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/Launcher.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/Launcher.java @@ -31,15 +31,12 @@ import org.jackhuang.hmcl.setting.ConfigHolder; import org.jackhuang.hmcl.setting.SambaException; import org.jackhuang.hmcl.ui.FXUtils; -import org.jackhuang.hmcl.util.FileSaver; +import org.jackhuang.hmcl.util.*; import org.jackhuang.hmcl.task.AsyncTaskExecutor; import org.jackhuang.hmcl.task.Schedulers; import org.jackhuang.hmcl.ui.Controllers; import org.jackhuang.hmcl.upgrade.UpdateChecker; import org.jackhuang.hmcl.upgrade.UpdateHandler; -import org.jackhuang.hmcl.util.CrashReporter; -import org.jackhuang.hmcl.util.Lang; -import org.jackhuang.hmcl.util.StringUtils; import org.jackhuang.hmcl.util.io.JarUtils; import org.jackhuang.hmcl.util.platform.Architecture; import org.jackhuang.hmcl.util.platform.CommandBuilder; @@ -304,6 +301,7 @@ public static void main(String[] args) { LOG.info("HMCL Current Directory: " + Metadata.HMCL_CURRENT_DIRECTORY); LOG.info("HMCL Jar Path: " + Lang.requireNonNullElse(JarUtils.thisJarPath(), "Not Found")); LOG.info("HMCL Log File: " + Lang.requireNonNullElse(LOG.getLogFile(), "In Memory")); + LOG.info("April Fools: " + AprilFools.ENABLED); LOG.info("JVM Max Memory: " + MEGABYTES.formatBytes(Runtime.getRuntime().maxMemory())); try { for (MemoryPoolMXBean bean : ManagementFactory.getMemoryPoolMXBeans()) { diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/util/AprilFools.java b/HMCL/src/main/java/org/jackhuang/hmcl/util/AprilFools.java new file mode 100644 index 0000000000..097dc7ce03 --- /dev/null +++ b/HMCL/src/main/java/org/jackhuang/hmcl/util/AprilFools.java @@ -0,0 +1,41 @@ +/* + * Hello Minecraft! Launcher + * Copyright (C) 2026 huangyuhui and contributors + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.jackhuang.hmcl.util; + +import java.time.LocalDate; +import java.time.Month; + +public final class AprilFools { + + public static final boolean ENABLED; + + static { + String value = System.getProperty("hmcl.april_fools"); + if ("true".equalsIgnoreCase(value)) { + ENABLED = true; + } else if ("false".equalsIgnoreCase(value)) { + ENABLED = false; + } else { + var date = LocalDate.now(); + ENABLED = date.getMonth() == Month.APRIL && date.getDayOfMonth() == 1; + } + } + + private AprilFools() { + } +} From 19a9071c91557644396d5794a73cf5b0451615a9 Mon Sep 17 00:00:00 2001 From: Glavo Date: Sun, 15 Mar 2026 21:02:48 +0800 Subject: [PATCH 2/4] Add April Fools disable setting --- .../main/java/org/jackhuang/hmcl/Launcher.java | 1 - .../java/org/jackhuang/hmcl/setting/Config.java | 15 +++++++++++++++ .../java/org/jackhuang/hmcl/ui/Controllers.java | 2 ++ .../java/org/jackhuang/hmcl/ui/main/MainPage.java | 1 + .../org/jackhuang/hmcl/ui/main/SettingsPage.java | 9 +++++++++ .../java/org/jackhuang/hmcl/util/AprilFools.java | 6 ++++-- 6 files changed, 31 insertions(+), 3 deletions(-) diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/Launcher.java b/HMCL/src/main/java/org/jackhuang/hmcl/Launcher.java index 7836749107..de9fb52e1a 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/Launcher.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/Launcher.java @@ -301,7 +301,6 @@ public static void main(String[] args) { LOG.info("HMCL Current Directory: " + Metadata.HMCL_CURRENT_DIRECTORY); LOG.info("HMCL Jar Path: " + Lang.requireNonNullElse(JarUtils.thisJarPath(), "Not Found")); LOG.info("HMCL Log File: " + Lang.requireNonNullElse(LOG.getLogFile(), "In Memory")); - LOG.info("April Fools: " + AprilFools.ENABLED); LOG.info("JVM Max Memory: " + MEGABYTES.formatBytes(Runtime.getRuntime().maxMemory())); try { for (MemoryPoolMXBean bean : ManagementFactory.getMemoryPoolMXBeans()) { diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/setting/Config.java b/HMCL/src/main/java/org/jackhuang/hmcl/setting/Config.java index 058b5ea95f..0320e13b18 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/setting/Config.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/setting/Config.java @@ -237,6 +237,21 @@ public void setDisableAutoShowUpdateDialog(boolean disableAutoShowUpdateDialog) this.disableAutoShowUpdateDialog.set(disableAutoShowUpdateDialog); } + @SerializedName("disableAprilFools") + private final BooleanProperty disableAprilFools = new SimpleBooleanProperty(false); + + public BooleanProperty disableAprilFoolsProperty() { + return disableAprilFools; + } + + public boolean isDisableAprilFools() { + return disableAprilFools.get(); + } + + public void setDisableAprilFools(boolean disableAprilFools) { + this.disableAprilFools.set(disableAprilFools); + } + @SerializedName("shownTips") private final ObservableMap shownTips = FXCollections.observableHashMap(); diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/Controllers.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/Controllers.java index 4993bb7019..8032715a02 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/Controllers.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/Controllers.java @@ -225,6 +225,8 @@ public static void onApplicationStop() { public static void initialize(Stage stage) { LOG.info("Start initializing application"); + LOG.info("April Fools: " + AprilFools.ENABLED); + if (System.getProperty("prism.lcdtext") == null) { String fontAntiAliasing = globalConfig().getFontAntiAliasing(); if ("lcd".equalsIgnoreCase(fontAntiAliasing)) { diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/main/MainPage.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/main/MainPage.java index 3393035fc6..b539309282 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/main/MainPage.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/main/MainPage.java @@ -19,6 +19,7 @@ import com.jfoenix.controls.JFXButton; import com.jfoenix.controls.JFXPopup; +import javafx.animation.Interpolator; import javafx.animation.KeyFrame; import javafx.animation.KeyValue; import javafx.animation.Timeline; diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/main/SettingsPage.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/main/SettingsPage.java index db12d37bb0..c15c70aad8 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/main/SettingsPage.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/main/SettingsPage.java @@ -224,6 +224,15 @@ public SettingsPage() { settingsPane.getContent().add(disableAutoShowUpdateDialogPane); } + { + LineToggleButton disableAprilFools = new LineToggleButton(); + disableAprilFools.setTitle("不启用愚人节功能"); + // disableAprilFools.setSubtitle("在愚人节当天,HMCL会自动启动一个特殊的版本,以庆祝愚人节。"); + disableAprilFools.selectedProperty().bindBidirectional(config().disableAprilFoolsProperty()); + settingsPane.getContent().add(disableAprilFools); + + } + { MultiFileItem fileCommonLocation = new MultiFileItem<>(); fileCommonLocation.loadChildren(Arrays.asList( diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/util/AprilFools.java b/HMCL/src/main/java/org/jackhuang/hmcl/util/AprilFools.java index 097dc7ce03..75db40bff0 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/util/AprilFools.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/util/AprilFools.java @@ -17,6 +17,8 @@ */ package org.jackhuang.hmcl.util; +import org.jackhuang.hmcl.setting.ConfigHolder; + import java.time.LocalDate; import java.time.Month; @@ -25,10 +27,10 @@ public final class AprilFools { public static final boolean ENABLED; static { - String value = System.getProperty("hmcl.april_fools"); + String value = System.getProperty("hmcl.april_fools", System.getenv("HMCL_APRIL_FOOLS")); if ("true".equalsIgnoreCase(value)) { ENABLED = true; - } else if ("false".equalsIgnoreCase(value)) { + } else if ("false".equalsIgnoreCase(value) || ConfigHolder.config().isDisableAprilFools()) { ENABLED = false; } else { var date = LocalDate.now(); From 02d6692f51e337d3e02254161019d2e435cb3721 Mon Sep 17 00:00:00 2001 From: Glavo Date: Sun, 15 Mar 2026 21:09:13 +0800 Subject: [PATCH 3/4] Refactor AprilFools to add getter methods --- .../org/jackhuang/hmcl/ui/Controllers.java | 2 +- .../jackhuang/hmcl/ui/main/SettingsPage.java | 4 ++-- .../org/jackhuang/hmcl/util/AprilFools.java | 19 ++++++++++++++++--- 3 files changed, 19 insertions(+), 6 deletions(-) diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/Controllers.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/Controllers.java index 8032715a02..edc5e2e181 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/Controllers.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/Controllers.java @@ -225,7 +225,7 @@ public static void onApplicationStop() { public static void initialize(Stage stage) { LOG.info("Start initializing application"); - LOG.info("April Fools: " + AprilFools.ENABLED); + LOG.info("April Fools: " + AprilFools.isEnabled()); if (System.getProperty("prism.lcdtext") == null) { String fontAntiAliasing = globalConfig().getFontAntiAliasing(); diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/main/SettingsPage.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/main/SettingsPage.java index c15c70aad8..16320dff6b 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/main/SettingsPage.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/main/SettingsPage.java @@ -45,6 +45,7 @@ import org.jackhuang.hmcl.upgrade.UpdateChannel; import org.jackhuang.hmcl.upgrade.UpdateChecker; import org.jackhuang.hmcl.upgrade.UpdateHandler; +import org.jackhuang.hmcl.util.AprilFools; import org.jackhuang.hmcl.util.StringUtils; import org.jackhuang.hmcl.util.i18n.I18n; import org.jackhuang.hmcl.util.i18n.SupportedLocale; @@ -224,13 +225,12 @@ public SettingsPage() { settingsPane.getContent().add(disableAutoShowUpdateDialogPane); } - { + if (AprilFools.isStartInAprilFoolsDay()) { LineToggleButton disableAprilFools = new LineToggleButton(); disableAprilFools.setTitle("不启用愚人节功能"); // disableAprilFools.setSubtitle("在愚人节当天,HMCL会自动启动一个特殊的版本,以庆祝愚人节。"); disableAprilFools.selectedProperty().bindBidirectional(config().disableAprilFoolsProperty()); settingsPane.getContent().add(disableAprilFools); - } { diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/util/AprilFools.java b/HMCL/src/main/java/org/jackhuang/hmcl/util/AprilFools.java index 75db40bff0..90e059b04d 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/util/AprilFools.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/util/AprilFools.java @@ -24,20 +24,33 @@ public final class AprilFools { - public static final boolean ENABLED; + private static final boolean START_IN_APRIL_FOOLS_DAY; + private static final boolean ENABLED; static { + var date = LocalDate.now(); + START_IN_APRIL_FOOLS_DAY = date.getMonth() == Month.APRIL && date.getDayOfMonth() == 1; + String value = System.getProperty("hmcl.april_fools", System.getenv("HMCL_APRIL_FOOLS")); if ("true".equalsIgnoreCase(value)) { ENABLED = true; } else if ("false".equalsIgnoreCase(value) || ConfigHolder.config().isDisableAprilFools()) { ENABLED = false; } else { - var date = LocalDate.now(); - ENABLED = date.getMonth() == Month.APRIL && date.getDayOfMonth() == 1; + ENABLED = START_IN_APRIL_FOOLS_DAY; } } + + public static boolean isStartInAprilFoolsDay() { + return START_IN_APRIL_FOOLS_DAY; + } + + public static boolean isEnabled() { + return ENABLED; + } + + private AprilFools() { } } From 2a2d00303e2f9428667a38593218166e482dd9ee Mon Sep 17 00:00:00 2001 From: Glavo Date: Sun, 15 Mar 2026 21:13:27 +0800 Subject: [PATCH 4/4] update --- HMCL/src/main/java/org/jackhuang/hmcl/ui/main/MainPage.java | 1 - HMCL/src/main/java/org/jackhuang/hmcl/util/AprilFools.java | 2 -- 2 files changed, 3 deletions(-) diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/main/MainPage.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/main/MainPage.java index b539309282..3393035fc6 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/main/MainPage.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/main/MainPage.java @@ -19,7 +19,6 @@ import com.jfoenix.controls.JFXButton; import com.jfoenix.controls.JFXPopup; -import javafx.animation.Interpolator; import javafx.animation.KeyFrame; import javafx.animation.KeyValue; import javafx.animation.Timeline; diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/util/AprilFools.java b/HMCL/src/main/java/org/jackhuang/hmcl/util/AprilFools.java index 90e059b04d..bd49089f0e 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/util/AprilFools.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/util/AprilFools.java @@ -41,7 +41,6 @@ public final class AprilFools { } } - public static boolean isStartInAprilFoolsDay() { return START_IN_APRIL_FOOLS_DAY; } @@ -50,7 +49,6 @@ public static boolean isEnabled() { return ENABLED; } - private AprilFools() { } }