feat: NickCore v1.0.0 - enterprise nickname plugin for Paper/Folia/Velocity
This commit is contained in:
149
README.MD
149
README.MD
@@ -0,0 +1,149 @@
|
||||
# NickCore
|
||||
|
||||
**Enterprise Minecraft Nickname Plugin** for Paper 1.21.11, Folia 1.21.11, and Velocity 3.5.0.
|
||||
|
||||

|
||||

|
||||

|
||||
|
||||
---
|
||||
|
||||
## Features
|
||||
|
||||
- **Nickname System** — Approved names, random names, custom names (permission-gated)
|
||||
- **Rank System** — Configurable visual ranks with MiniMessage prefixes/suffixes
|
||||
- **Skin System** — Multi-tier cache (memory → DB → Mojang API), rate-limited
|
||||
- **GUI System** — Paginated inventory menus with click cooldowns
|
||||
- **PlaceholderAPI** — 14 placeholders served from in-memory cache
|
||||
- **Velocity Sync** — Cross-server nickname/rank/skin synchronization
|
||||
- **Folia Support** — Region/Entity/Global scheduler compliance
|
||||
- **Security** — Homoglyph detection, impersonation prevention, input sanitization
|
||||
- **Database** — SQLite/MySQL/MariaDB with HikariCP pooling and schema migration
|
||||
- **Audit Logging** — Full history of all nickname changes
|
||||
|
||||
## Architecture
|
||||
|
||||
```
|
||||
nickcore/
|
||||
├── nickcore-common/ # Shared models, DTOs, validation
|
||||
├── nickcore-paper/ # Paper + Folia plugin (single JAR)
|
||||
└── nickcore-velocity/ # Velocity proxy plugin
|
||||
```
|
||||
|
||||
## Building
|
||||
|
||||
```bash
|
||||
./gradlew build
|
||||
```
|
||||
|
||||
Artifacts:
|
||||
- `nickcore-paper/build/libs/NickCore-Paper-1.0.0.jar`
|
||||
- `nickcore-velocity/build/libs/NickCore-Velocity-1.0.0.jar`
|
||||
|
||||
## Requirements
|
||||
|
||||
- Java 25+
|
||||
- Paper 1.21.11 or Folia 1.21.11
|
||||
- Velocity 3.5.0 (optional, for multi-server)
|
||||
|
||||
## Installation
|
||||
|
||||
1. Place `NickCore-Paper-1.0.0.jar` in your server's `plugins/` folder
|
||||
2. (Optional) Place `NickCore-Velocity-1.0.0.jar` in your Velocity proxy's `plugins/` folder
|
||||
3. Start the server to generate configuration files
|
||||
4. Edit configuration files in `plugins/NickCore/`
|
||||
5. Run `/nick reload` to apply changes
|
||||
|
||||
## Commands
|
||||
|
||||
| Command | Permission | Description |
|
||||
|---------|-----------|-------------|
|
||||
| `/nick` | `nickcore.use` | Open the main GUI |
|
||||
| `/nick <name>` | `nickcore.name.custom` | Set custom nickname |
|
||||
| `/nick random` | `nickcore.name.random` | Generate random nickname |
|
||||
| `/nick reset` | `nickcore.reset` | Reset to real identity |
|
||||
| `/nick rank [id]` | `nickcore.rank.select` | Select visual rank |
|
||||
| `/nick skin [name]` | `nickcore.skin.select` | Change skin |
|
||||
| `/nick gui` | `nickcore.use` | Open GUI explicitly |
|
||||
| `/nick reload` | `nickcore.reload` | Reload configuration |
|
||||
| `/nick info <player>` | `nickcore.info` | View player nick info |
|
||||
| `/nick force <player> <nick>` | `nickcore.force` | Force nickname on player |
|
||||
| `/nick clear <player>` | `nickcore.clear` | Clear player's nickname |
|
||||
|
||||
## Permissions
|
||||
|
||||
| Permission | Default | Description |
|
||||
|-----------|---------|-------------|
|
||||
| `nickcore.use` | `true` | Access `/nick` |
|
||||
| `nickcore.name.custom` | `op` | Enter custom nicknames |
|
||||
| `nickcore.name.select` | `true` | Select from approved list |
|
||||
| `nickcore.name.random` | `true` | Generate random nicknames |
|
||||
| `nickcore.rank.select` | `false` | Access rank selection |
|
||||
| `nickcore.rank.<id>` | `false` | Per-rank permissions |
|
||||
| `nickcore.skin.select` | `false` | Access skin selection |
|
||||
| `nickcore.skin.keep` | `true` | Keep current skin option |
|
||||
| `nickcore.reset` | `true` | Reset identity |
|
||||
| `nickcore.admin` | `op` | Admin features |
|
||||
| `nickcore.reload` | `op` | Reload configuration |
|
||||
| `nickcore.bypass` | `op` | Bypass restrictions |
|
||||
| `nickcore.force` | `op` | Force nicknames |
|
||||
| `nickcore.info` | `op` | View player info |
|
||||
| `nickcore.clear` | `op` | Clear nicknames |
|
||||
|
||||
## PlaceholderAPI
|
||||
|
||||
| Placeholder | Description |
|
||||
|------------|-------------|
|
||||
| `%nickcore_nick%` | Current nickname |
|
||||
| `%nickcore_real_name%` | Real player name |
|
||||
| `%nickcore_rank%` | Visual rank name |
|
||||
| `%nickcore_rank_prefix%` | Rank prefix |
|
||||
| `%nickcore_rank_suffix%` | Rank suffix |
|
||||
| `%nickcore_skin%` | Applied skin name |
|
||||
| `%nickcore_is_nicked%` | Whether player is nicked |
|
||||
| `%nickcore_display_name%` | Effective display name |
|
||||
| `%nickcore_original_name%` | Original player name |
|
||||
|
||||
## Configuration Files
|
||||
|
||||
| File | Purpose |
|
||||
|------|---------|
|
||||
| `config.yml` | General settings, chat format, security |
|
||||
| `database.yml` | Database connection and pooling |
|
||||
| `messages.yml` | Player-facing messages (MiniMessage) |
|
||||
| `ranks.yml` | Rank definitions |
|
||||
| `skins.yml` | Pre-configured skins |
|
||||
| `names.yml` | Approved nickname pool |
|
||||
|
||||
## Integrations
|
||||
|
||||
- **PlaceholderAPI** — Soft dependency, 14 placeholders
|
||||
- **LuckPerms** — Permission-based rank filtering
|
||||
- **TAB** — Tablist prefix/suffix updates
|
||||
- **Velocity** — Cross-server synchronization
|
||||
- **EssentialsX** — Compatible display names
|
||||
- **HuskChat** — Compatible via PlaceholderAPI
|
||||
|
||||
## Security
|
||||
|
||||
- Unicode homoglyph detection
|
||||
- Invisible/zero-width character blocking
|
||||
- Levenshtein-based impersonation prevention
|
||||
- MiniMessage injection sanitization
|
||||
- SQL injection prevention (prepared statements)
|
||||
- Velocity packet validation with protocol versioning
|
||||
|
||||
## Performance
|
||||
|
||||
- ConcurrentHashMap-based caches (lock-free reads)
|
||||
- Pre-computed placeholder values (zero DB hits during resolution)
|
||||
- Deduplicating skin fetcher (one request per skin)
|
||||
- Rate-limited Mojang API access
|
||||
- HikariCP connection pooling
|
||||
- Virtual threads for database operations
|
||||
- ViewerUnaware chat renderer (single render per message)
|
||||
- Scoreboard team caching (no redundant updates)
|
||||
|
||||
## License
|
||||
|
||||
All rights reserved.
|
||||
|
||||
Reference in New Issue
Block a user