package com.mrkayjaydee.playhours.events; import com.mrkayjaydee.playhours.core.ScheduleService; import com.mrkayjaydee.playhours.permissions.PermissionChecker; import com.mrkayjaydee.playhours.text.Messages; import net.minecraft.server.level.ServerPlayer; import java.time.ZonedDateTime; import java.util.List; /** * Handles player kicking logic for schedule enforcement. * Separates kick logic from tick scheduling. */ public final class PlayerKickHandler { private PlayerKickHandler() {} /** * Kicks players at closing time based on schedule and exemptions. * * @param players the list of players to check * @param scheduleService the schedule service * @param nextClose the next closing time */ public static void kickPlayersAtClose(List players, ScheduleService scheduleService, ZonedDateTime nextClose) { ScheduleFormatter.FormattedSchedule nextOpen = ScheduleFormatter.formatNextOpen(scheduleService.nextOpen(nextClose.plusMinutes(1))); for (ServerPlayer player : players) { boolean exempt = PermissionChecker.isExempt(player); if (!exempt || scheduleService.isKickExempt()) { player.connection.disconnect(Messages.kick(nextOpen.day, nextOpen.time)); } } } }