- 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.
10 KiB
Permissions System
PlayHours includes a comprehensive permission system with LuckPerms integration and vanilla ops fallback support.
🔑 Permission Nodes
Core Permissions
| Permission | Description | Default Level |
|---|---|---|
playhours.admin |
Full administrative access | Ops Level 2+ |
playhours.view |
Read-only status access | Ops Level 1+ |
playhours.exempt |
Bypass all schedule restrictions | Ops Level 2+ |
Permission Details
playhours.admin
Full administrative access including:
- All
/hourscommands - Force mode changes
- Configuration modifications
- Schedule management
- Exception handling
- List management
- MOTD control
playhours.view
Read-only access including:
/hours statuscommand- View current server status
- Check schedule information
- View force mode status
playhours.exempt
Bypass all schedule restrictions:
- Join server when closed
- Join during closing threshold
- Stay connected during kicks
- Override blacklist restrictions
🔌 LuckPerms Integration
Automatic Detection
PlayHours automatically detects and integrates with LuckPerms:
- Soft dependency - Works with or without LuckPerms
- Automatic detection - Detected at server startup
- Graceful fallback - Falls back to vanilla ops if LuckPerms unavailable
- No configuration required - Works out of the box
LuckPerms Setup
Basic Permission Setup
# Grant view permission to all players
/lp group default permission set playhours.view true
# Grant admin permission to admin group
/lp group admin permission set playhours.admin true
/lp group admin permission set playhours.exempt true
# Grant exempt permission to specific players
/lp user PlayerName permission set playhours.exempt true
Advanced Permission Setup
# Create custom groups
/lp creategroup moderator
/lp creategroup admin
# Grant permissions to groups
/lp group moderator permission set playhours.view true
/lp group admin permission set playhours.admin true
/lp group admin permission set playhours.exempt true
# Add players to groups
/lp user PlayerName parent add moderator
/lp user AdminName parent add admin
Permission Inheritance
# Set up permission inheritance
/lp group moderator permission set playhours.view true
/lp group admin permission set playhours.admin true
/lp group admin permission set playhours.exempt true
# Admin inherits from moderator
/lp group admin parent add moderator
LuckPerms Commands
User Management
# Grant permissions to specific users
/lp user PlayerName permission set playhours.view true
/lp user PlayerName permission set playhours.admin true
/lp user PlayerName permission set playhours.exempt true
# Remove permissions
/lp user PlayerName permission unset playhours.view
/lp user PlayerName permission unset playhours.admin
/lp user PlayerName permission unset playhours.exempt
Group Management
# Grant permissions to groups
/lp group default permission set playhours.view true
/lp group moderator permission set playhours.view true
/lp group admin permission set playhours.admin true
/lp group admin permission set playhours.exempt true
# Remove permissions from groups
/lp group default permission unset playhours.view
/lp group admin permission unset playhours.admin
Permission Checking
# Check user permissions
/lp user PlayerName permission check playhours.admin
/lp user PlayerName permission check playhours.view
/lp user PlayerName permission check playhours.exempt
# Check group permissions
/lp group admin permission check playhours.admin
/lp group admin permission check playhours.exempt
🔄 Vanilla Ops Fallback
When LuckPerms is Not Available
PlayHours automatically falls back to vanilla operator levels:
- Level 0 - No access
- Level 1+ -
playhours.viewpermission - Level 2+ -
playhours.adminandplayhours.exemptpermissions
Ops Level Configuration
# Grant ops level 1 (view access)
/op PlayerName 1
# Grant ops level 2 (admin access)
/op PlayerName 2
# Grant ops level 3 (admin access)
/op PlayerName 3
# Remove ops
/deop PlayerName
Ops Level Examples
# Give view access to a player
/op PlayerName 1
# Give admin access to a player
/op PlayerName 2
# Give admin access to multiple players
/op Player1 2
/op Player2 2
/op Player3 2
⚡ Performance Considerations
Permission Checking
PlayHours optimizes permission checking for performance:
- Cached results - Permission results are cached
- Timeout protection - Prevents blocking on permission checks
- Efficient queries - Minimal database queries
- Fallback handling - Graceful degradation on errors
Timeout Configuration
// Default timeout: 2 seconds
public static final int LUCKPERMS_TIMEOUT_SECONDS = 2;
Performance Tips
- Use groups - Grant permissions to groups rather than individual users
- Limit exempt players - Only grant exempt permission to necessary players
- Cache permissions - LuckPerms handles caching automatically
- Monitor performance - Check server logs for permission-related delays
🔧 Permission Scenarios
Basic Server Setup
All players can view status:
/lp group default permission set playhours.view true
Admins have full access:
/lp group admin permission set playhours.admin true
/lp group admin permission set playhours.exempt true
Moderator Setup
Moderators can view but not modify:
/lp group moderator permission set playhours.view true
# No admin or exempt permissions
Admins have full control:
/lp group admin permission set playhours.admin true
/lp group admin permission set playhours.exempt true
Custom Roles
Create custom permission groups:
# Create custom groups
/lp creategroup helper
/lp creategroup moderator
/lp creategroup admin
# Grant appropriate permissions
/lp group helper permission set playhours.view true
/lp group moderator permission set playhours.view true
/lp group admin permission set playhours.admin true
/lp group admin permission set playhours.exempt true
Player-Specific Permissions
Grant permissions to specific players:
# Grant view access to specific player
/lp user PlayerName permission set playhours.view true
# Grant admin access to specific player
/lp user PlayerName permission set playhours.admin true
/lp user PlayerName permission set playhours.exempt true
🚨 Troubleshooting
Common Issues
Permission Denied Errors
Error: You do not have permission to use this command
Solutions:
- Check if player has required permission
- Verify LuckPerms is working correctly
- Check if player is in correct group
- Verify permission syntax is correct
LuckPerms Not Working
Symptoms:
- Permissions not being recognized
- Commands not working
- Fallback to vanilla ops
Solutions:
- Check if LuckPerms is loaded
- Verify LuckPerms configuration
- Check server logs for errors
- Restart server if necessary
Permission Inheritance Issues
Symptoms:
- Players not inheriting group permissions
- Inconsistent permission behavior
Solutions:
- Check group inheritance setup
- Verify parent-child relationships
- Check for conflicting permissions
- Use
/lp user PlayerName permission checkto debug
Debug Commands
Check User Permissions
# Check specific permission
/lp user PlayerName permission check playhours.admin
# Check all permissions
/lp user PlayerName permission check
# Check group permissions
/lp group admin permission check playhours.admin
Debug Permission Issues
# Check user's groups
/lp user PlayerName info
# Check group inheritance
/lp group admin info
# Check permission inheritance
/lp user PlayerName permission check playhours.admin
Log Analysis
Look for these log messages:
[INFO] PlayHours: LuckPerms integration enabled
[WARN] PlayHours: LuckPerms not found, using ops fallback
[ERROR] PlayHours: Permission check timeout for user PlayerName
[DEBUG] PlayHours: Permission check result: true for playhours.admin
🔄 Permission Updates
Hot Reload
Permissions are checked in real-time:
- No restart required - Changes take effect immediately
- Automatic updates - LuckPerms changes are detected
- Cached results - Permission results are cached for performance
- Fallback handling - Graceful degradation on errors
Permission Changes
# Grant permission (takes effect immediately)
/lp user PlayerName permission set playhours.admin true
# Remove permission (takes effect immediately)
/lp user PlayerName permission unset playhours.admin
# Change group membership (takes effect immediately)
/lp user PlayerName parent add admin
📚 Permission Examples
Server Owner Setup
# Grant full access to server owner
/lp user ServerOwner permission set playhours.admin true
/lp user ServerOwner permission set playhours.exempt true
Admin Team Setup
# Create admin group
/lp creategroup admin
# Grant admin permissions
/lp group admin permission set playhours.admin true
/lp group admin permission set playhours.exempt true
# Add admins to group
/lp user Admin1 parent add admin
/lp user Admin2 parent add admin
/lp user Admin3 parent add admin
Moderator Setup
# Create moderator group
/lp creategroup moderator
# Grant view permission
/lp group moderator permission set playhours.view true
# Add moderators to group
/lp user Mod1 parent add moderator
/lp user Mod2 parent add moderator
Helper Setup
# Create helper group
/lp creategroup helper
# Grant view permission
/lp group helper permission set playhours.view true
# Add helpers to group
/lp user Helper1 parent add helper
/lp user Helper2 parent add helper
📚 Related Documentation
- Commands Reference - Permission requirements for commands
- Features Overview - How permissions affect features
- Configuration Guide - Permission-related configuration
- Usage Examples - Real-world permission scenarios
For command-specific permission requirements, see the Commands Reference.