- Add complete PlayHours mod source code with all features: * Schedule enforcement with per-day schedules and midnight-spanning support * Login control with configurable thresholds and exemptions * Warnings and auto-kick system with countdown functionality * Force modes (NORMAL/FORCE_OPEN/FORCE_CLOSED) for maintenance * Whitelist/blacklist system for player access control * Date exceptions for holidays and special events * Multi-language support (English/French) with smart time formatting * LuckPerms integration with vanilla ops fallback * Dynamic MOTD system with real-time schedule display * Comprehensive command system with permission integration * TOML configuration with hot-reload support - Add comprehensive documentation suite: * Installation guide with step-by-step setup instructions * Complete configuration reference with all options * Commands reference with usage examples * Features overview with detailed explanations * MOTD system configuration and customization guide * Permissions system documentation with LuckPerms integration * Technical details covering architecture and limitations * Usage examples with real-world scenarios * Changelog with version history - Add resource files: * Language files (en_us.json, fr_fr.json) with localized messages * Mod metadata (mods.toml) with proper Forge configuration * Resource pack metadata (pack.mcmeta) - Update build configuration: * Gradle build system with proper dependencies * Project properties and version management * Development environment setup - Restructure documentation: * Replace old README.txt with new comprehensive README.md * Create modular documentation structure in docs/ directory * Add cross-references and navigation between documents * Include quick start guide and common use cases This commit represents the complete v1.0.0 release of PlayHours, a production-ready server operation hours enforcement mod for Minecraft Forge 1.20.1.
36 lines
1.3 KiB
Java
36 lines
1.3 KiB
Java
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<ServerPlayer> 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));
|
|
}
|
|
}
|
|
}
|
|
}
|