- 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.
429 lines
10 KiB
Markdown
429 lines
10 KiB
Markdown
# 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 `/hours` commands
|
|
- Force mode changes
|
|
- Configuration modifications
|
|
- Schedule management
|
|
- Exception handling
|
|
- List management
|
|
- MOTD control
|
|
|
|
#### `playhours.view`
|
|
**Read-only access including:**
|
|
- `/hours status` command
|
|
- 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
|
|
|
|
```bash
|
|
# 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
|
|
|
|
```bash
|
|
# 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
|
|
|
|
```bash
|
|
# 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
|
|
|
|
```bash
|
|
# 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
|
|
|
|
```bash
|
|
# 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
|
|
|
|
```bash
|
|
# 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.view` permission
|
|
- **Level 2+** - `playhours.admin` and `playhours.exempt` permissions
|
|
|
|
### Ops Level Configuration
|
|
|
|
```bash
|
|
# 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
|
|
|
|
```bash
|
|
# 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
|
|
|
|
```java
|
|
// Default timeout: 2 seconds
|
|
public static final int LUCKPERMS_TIMEOUT_SECONDS = 2;
|
|
```
|
|
|
|
### Performance Tips
|
|
|
|
1. **Use groups** - Grant permissions to groups rather than individual users
|
|
2. **Limit exempt players** - Only grant exempt permission to necessary players
|
|
3. **Cache permissions** - LuckPerms handles caching automatically
|
|
4. **Monitor performance** - Check server logs for permission-related delays
|
|
|
|
## 🔧 Permission Scenarios
|
|
|
|
### Basic Server Setup
|
|
|
|
**All players can view status:**
|
|
```bash
|
|
/lp group default permission set playhours.view true
|
|
```
|
|
|
|
**Admins have full access:**
|
|
```bash
|
|
/lp group admin permission set playhours.admin true
|
|
/lp group admin permission set playhours.exempt true
|
|
```
|
|
|
|
### Moderator Setup
|
|
|
|
**Moderators can view but not modify:**
|
|
```bash
|
|
/lp group moderator permission set playhours.view true
|
|
# No admin or exempt permissions
|
|
```
|
|
|
|
**Admins have full control:**
|
|
```bash
|
|
/lp group admin permission set playhours.admin true
|
|
/lp group admin permission set playhours.exempt true
|
|
```
|
|
|
|
### Custom Roles
|
|
|
|
**Create custom permission groups:**
|
|
```bash
|
|
# 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:**
|
|
```bash
|
|
# 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:**
|
|
1. Check if player has required permission
|
|
2. Verify LuckPerms is working correctly
|
|
3. Check if player is in correct group
|
|
4. Verify permission syntax is correct
|
|
|
|
#### LuckPerms Not Working
|
|
|
|
**Symptoms:**
|
|
- Permissions not being recognized
|
|
- Commands not working
|
|
- Fallback to vanilla ops
|
|
|
|
**Solutions:**
|
|
1. Check if LuckPerms is loaded
|
|
2. Verify LuckPerms configuration
|
|
3. Check server logs for errors
|
|
4. Restart server if necessary
|
|
|
|
#### Permission Inheritance Issues
|
|
|
|
**Symptoms:**
|
|
- Players not inheriting group permissions
|
|
- Inconsistent permission behavior
|
|
|
|
**Solutions:**
|
|
1. Check group inheritance setup
|
|
2. Verify parent-child relationships
|
|
3. Check for conflicting permissions
|
|
4. Use `/lp user PlayerName permission check` to debug
|
|
|
|
### Debug Commands
|
|
|
|
#### Check User Permissions
|
|
|
|
```bash
|
|
# 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
|
|
|
|
```bash
|
|
# 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
|
|
|
|
```bash
|
|
# 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
|
|
|
|
```bash
|
|
# 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
|
|
|
|
```bash
|
|
# 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
|
|
|
|
```bash
|
|
# 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
|
|
|
|
```bash
|
|
# 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](COMMANDS.md)** - Permission requirements for commands
|
|
- **[Features Overview](FEATURES.md)** - How permissions affect features
|
|
- **[Configuration Guide](CONFIGURATION.md)** - Permission-related configuration
|
|
- **[Usage Examples](EXAMPLES.md)** - Real-world permission scenarios
|
|
|
|
---
|
|
|
|
*For command-specific permission requirements, see the [Commands Reference](COMMANDS.md).*
|