From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Martijn Muijsers Date: Wed, 23 Nov 2022 16:29:01 +0100 Subject: [PATCH] Predict Halloween License: GPL-3.0 (https://www.gnu.org/licenses/gpl-3.0.html) Gale - https://galemc.org diff --git a/src/main/java/net/minecraft/world/entity/ambient/Bat.java b/src/main/java/net/minecraft/world/entity/ambient/Bat.java index dc27ddf5131e7398a5390a5187261d4c7fb6ccaa..c888ca771efa7a570b8302d48e69fbb69bf98bd9 100644 --- a/src/main/java/net/minecraft/world/entity/ambient/Bat.java +++ b/src/main/java/net/minecraft/world/entity/ambient/Bat.java @@ -239,12 +239,60 @@ public class Bat extends AmbientCreature { } } + // Gale start - predict Halloween + /** + * The 1-indexed month of the year that Halloween starts (inclusive). + */ + private static final int halloweenStartMonthOfYear = 10; + + /** + * The 1-indexed day of the month that Halloween starts (inclusive). + */ + private static final int halloweenStartDayOfMonth = 20; + + /** + * The 1-indexed month of the year that Halloween ends (exclusive). + */ + private static final int halloweenEndMonthOfYear = 11; + + /** + * The 1-indexed day of the month that Halloween ends (exclusive). + */ + private static final int halloweenEndDayOfMonth = 4; + + /** + * The next start of Halloween, given as milliseconds since the Unix epoch. + * Will be 0 while not computed yet. + */ + private static long nextHalloweenStart = 0; + + /** + * The next end of Halloween, given as milliseconds since the Unix epoch. + * Will be 0 while not computed yet. + */ + private static long nextHalloweenEnd = 0; + // Gale end - predict Halloween + private static boolean isHalloween() { - LocalDate localdate = LocalDate.now(); - int i = localdate.get(ChronoField.DAY_OF_MONTH); - int j = localdate.get(ChronoField.MONTH_OF_YEAR); + // Gale start - predict Halloween + long currentEpochMillis = System.currentTimeMillis(); + if (currentEpochMillis >= nextHalloweenEnd) { + // Update prediction + + java.time.OffsetDateTime currentDate = java.time.OffsetDateTime.now(); + int currentMonthOfYear = currentDate.getMonth().ordinal() + 1; // Same as getValue() + int currentDayOfMonth = currentDate.getDayOfYear(); + + java.time.OffsetDateTime nextHalloweenStartDate = currentDate.withMonth(halloweenStartMonthOfYear).withDayOfMonth(halloweenStartDayOfMonth); + if (currentMonthOfYear > halloweenStartMonthOfYear || (currentMonthOfYear == halloweenStartMonthOfYear && currentDayOfMonth >= halloweenStartDayOfMonth)) { + nextHalloweenStartDate = nextHalloweenStartDate.withYear(nextHalloweenStartDate.getYear() + 1); + } - return j == 10 && i >= 20 || j == 11 && i <= 3; + nextHalloweenStart = nextHalloweenStartDate.toEpochSecond(); + nextHalloweenEnd = nextHalloweenStartDate.withMonth(halloweenEndMonthOfYear).withDayOfMonth(halloweenEndDayOfMonth).toEpochSecond(); + } + return currentEpochMillis >= nextHalloweenStart; + // Gale end - predict Halloween } private void setupAnimationStates() {