package com.mrkayjaydee.playhours.events; import com.mrkayjaydee.playhours.PlayHoursMod; import com.mrkayjaydee.playhours.config.GeneralConfig; import com.mrkayjaydee.playhours.config.MOTDConfig; import com.mrkayjaydee.playhours.core.ScheduleService; import net.minecraft.network.chat.Component; import net.minecraft.server.MinecraftServer; import net.minecraftforge.event.TickEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.common.Mod; import java.time.ZonedDateTime; /** * Handles server MOTD (Message of the Day) customization. * Orchestrates periodic MOTD updates based on current schedule state. */ @Mod.EventBusSubscriber(modid = PlayHoursMod.MODID) public final class MOTDHandler { private static long lastMOTDUpdate = 0; private MOTDHandler() {} /** * Handles server tick to periodically update MOTD with schedule information. * * @param event the server tick event */ @SubscribeEvent public static void onServerTick(TickEvent.ServerTickEvent event) { if (event.phase != TickEvent.Phase.END) return; if (event.getServer() == null) return; try { // Check if MOTD feature is enabled if (!GeneralConfig.MOTD_ENABLED.get()) { return; } // Only update periodically based on configured delay long currentTime = System.currentTimeMillis(); long updateIntervalMillis = MOTDConfig.UPDATE_DELAY_SECONDS.get() * 1000L; if (currentTime - lastMOTDUpdate < updateIntervalMillis) { return; } lastMOTDUpdate = currentTime; MinecraftServer server = event.getServer(); // Get current schedule information ScheduleService scheduleService = ScheduleService.get(); ZonedDateTime now = ZonedDateTime.now(scheduleService.getZoneId()); // Build MOTD component Component motd = MOTDBuilder.build(scheduleService, now); // Validate and truncate to Minecraft limits (2 lines, 59 chars per line) Component validatedMotd = MOTDValidator.validateAndTruncate(motd); // Apply MOTD to server server.setMotd(validatedMotd.getString()); } catch (Exception e) { PlayHoursMod.LOGGER.error("Error updating MOTD", e); } } }