diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/Launcher.java b/HMCL/src/main/java/org/jackhuang/hmcl/Launcher.java index a2c583e6f6..de9fb52e1a 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; 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..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,6 +225,8 @@ public static void onApplicationStop() { public static void initialize(Stage stage) { LOG.info("Start initializing application"); + LOG.info("April Fools: " + AprilFools.isEnabled()); + 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/SettingsPage.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/main/SettingsPage.java index db12d37bb0..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,6 +225,14 @@ 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); + } + { 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 new file mode 100644 index 0000000000..bd49089f0e --- /dev/null +++ b/HMCL/src/main/java/org/jackhuang/hmcl/util/AprilFools.java @@ -0,0 +1,54 @@ +/* + * 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 org.jackhuang.hmcl.setting.ConfigHolder; + +import java.time.LocalDate; +import java.time.Month; + +public final class AprilFools { + + 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 { + ENABLED = START_IN_APRIL_FOOLS_DAY; + } + } + + public static boolean isStartInAprilFoolsDay() { + return START_IN_APRIL_FOOLS_DAY; + } + + public static boolean isEnabled() { + return ENABLED; + } + + private AprilFools() { + } +}