hubmc_essentionals/CLAUDE.md

321 lines
13 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
## Developer Role
You are a Senior Java Minecraft NeoForge mod developer with deep expertise in:
- NeoForge mod development patterns and best practices
- Minecraft 1.21.1 game mechanics and APIs
- Java 21 features and modern Java development
- Event-driven architecture and registry systems
- Resource generation and data pack systems
- REST API integration and HTTP client implementations
- LuckPerms permission system integration
## Project Overview
HubmcEssentials is a Minecraft mod built with NeoForge for Minecraft 1.21.1. This is a server-side essentials mod that provides administrative and quality-of-life commands with tiered permissions (VIP, Premium, Deluxe) managed through LuckPerms.
**Key identifiers:**
- Mod ID: `hubmc_essentials` (note: lowercase with underscore)
- Package: `org.itqop.HubmcEssentials` (note: PascalCase in package name)
- Main class: `HubmcEssentials.java` with `@Mod(HubmcEssentials.MODID)`
- Java version: 21
## Architecture Overview
### HubGW API Integration
**Critical: All cooldowns are managed ONLY through HubGW API - no local caching.**
- **Base URL:** `/api/v1`
- **Authentication:** Header `X-API-Key` (configured via environment variable)
- **Timeouts:** 2s connection / 5s read
- **Retry Policy:** 2 retries on 429/5xx errors
- **Error Handling:** If HubGW is unavailable, **DENY the action** and show user a brief error message
### Cooldown System
All cooldowns are handled via HubGW:
- **Check cooldown:** `POST /cooldowns/check` with `player_uuid` and `cooldown_type`
- **Set/extend cooldown:** `POST /cooldowns/` with `player_uuid`, `cooldown_type`, and either `cooldown_seconds` or `expires_at`
- **No local cache** - every cooldown check must call the API
**Cooldown type naming conventions:**
- Kits: `kit|<name>` (e.g., `kit|vip`, `kit|premium`)
- Commands: `rtp`, `back`, `tp|<target>`, `tp|coords`, `heal`, `feed`, `repair`, `repair_all`, `near`, `clear`, `ec`, `hat`, `top`, `pot`, `time|day`, `time|night`, `time|morning`, `time|evening`
### Permission System
Uses LuckPerms with namespace `hubmc`:
- Base permissions: `hubmc.cmd.<command>`
- Tier permissions: `hubmc.tier.(vip|premium|deluxe)`
- Special permissions: `hubmc.cmd.tp.others`, `hubmc.cmd.tp.coords`, `hubmc.cmd.warp.create`, `hubmc.cmd.repair.all`
### Command Categories
**General (no tier required):**
- `/spec`, `/spectator` - Toggle spectator mode (local)
- `/sethome` - Save home via `PUT /homes/`
- `/home` - Teleport to home via `POST /homes/get`
- `/fly` - Toggle flight (local)
- `/vanish` - Hide player (local)
- `/invsee <nick>` - Open player inventory (local, online only)
- `/enderchest <nick>` - Open player enderchest (local, online only)
- `/kit <name>` - Claim kit with cooldown check
- `/clear` - Clear inventory (with cooldown)
- `/ec` - Open enderchest (with cooldown)
- `/hat` - Wear item as hat (with cooldown)
**VIP Tier:**
- `/heal`, `/feed`, `/repair`, `/near`, `/back`, `/rtp` - All with cooldowns
- `/kit vip` - VIP kit with cooldown
**Premium Tier:**
- `/warp create` - Create warp via `POST /warps/` (no cooldown)
- `/repair all` - Repair all items (with cooldown)
- `/workbench` - Open crafting table (no cooldown)
- `/kit premium`, `/kit storage` - Premium kits with cooldowns
**Deluxe Tier:**
- `/top` - Teleport to highest block (with cooldown)
- `/pot` - Apply potion effect (with cooldown)
- `/day`, `/night`, `/morning`, `/evening` - Set time (with cooldowns via `time|<preset>`)
- `/weather clear|storm|thunder` - Set weather (no cooldown)
- `/kit deluxe`, `/kit create`, `/kit storageplus` - Deluxe kits with cooldowns
**Custom `/goto` Command:**
- Replaces vanilla `/tp` with cooldowns and logging (vanilla `/tp` remains available for OP users)
- Supports: `/goto <player>`, `/goto <player1> <player2>`, `/goto <x> <y> <z>`
- Permissions: `hubmc.cmd.tp`, `hubmc.cmd.tp.others`, `hubmc.cmd.tp.coords`
- Cooldowns: `tp|<targetNick>` or `tp|coords` (configurable in config)
- **Automatically logs teleport history:** After successful TP, calls `POST /teleport-history/` with fields: `player_uuid`, `from_world`, `from_x/y/z`, `to_world`, `to_x/y/z`, `tp_type` (one of: `to_player`, `to_player2`, `to_coords`), `target_name`
## Build Commands
### Basic Build Tasks
```bash
./gradlew build # Build the mod
./gradlew clean # Clean build artifacts
./gradlew jar # Create mod jar file
```
### Running the Mod
```bash
./gradlew runClient # Launch Minecraft client with mod loaded
./gradlew runServer # Launch dedicated server (nogui mode)
./gradlew runData # Run data generators
./gradlew runGameTestServer # Run automated game tests
```
### Testing
```bash
./gradlew test # Run test suite
```
## Code Architecture
### Main Entry Point
The mod initializes through `HubmcEssentials.java` which:
- Registers configuration to mod container
- Subscribes to config load events
- Registers to the mod event bus for lifecycle events
### Implemented Components
**1. HTTP Client Service (`HubGWClient.java`)**
- Singleton HTTP client with circuit breaker pattern
- Authentication via `X-API-Key` header from config
- Retry logic (2 retries on 429/5xx) with exponential backoff
- Configurable timeouts (2s connect / 5s read)
- Error throttling to prevent log spam
**2. Command System (25 commands)**
- All commands registered via `CommandRegistry` using Brigadier
- LuckPerms integration for permission checks via NeoForge PermissionAPI
- 30 permission nodes defined in `PermissionNodes.java`
- Each command follows pattern: permission check → cooldown check → execute → set cooldown
- Russian language error messages via `MessageUtil`
**3. API Services (5 services)**
- `CooldownService` - Check and create cooldowns
- `HomeService` - Create, get, and list homes
- `WarpService` - Create, get, and list warps
- `TeleportService` - Log teleport history
- `KitService` - Claim kits
- All services use async CompletableFuture with retry logic
**4. Configuration System (`Config.java`)**
- ModConfigSpec-based type-safe configuration
- API settings: base URL, API key, timeouts, retries, debug logging
- 14 configurable cooldowns for all commands
- All values cached on load for fast access
**5. Teleport History Tracking**
- Automatic logging after `/goto` commands
- Tracks: player UUID, from/to coordinates, from/to world, tp_type, target_name
- Uses `TeleportService.logTeleport()` with async fire-and-forget
**6. Utilities**
- `MessageUtil` - Russian messages with formatting and cooldown display
- `LocationUtil` - Teleportation, safe location checking, world ID handling
- `PlayerUtil` - Player lookup and UUID management
- `RetryUtil` - Async retry with exponential backoff
**7. Storage**
- `LocationStorage` - In-memory storage for `/back` functionality using ConcurrentHashMap
### Error Handling Strategy
**When HubGW API fails:**
- Show message: "Сервис недоступен, попробуйте позже" (Service unavailable, try later)
- **DENY the action** - do not allow command execution
- Log error for debugging
**When cooldown is active:**
- Show message: "Команда доступна через N сек." (Command available in N seconds)
**When home/warp not found:**
- Show message: "Дом не найден" (Home not found) or similar
### Resource Generation
- Metadata generation via `generateModMetadata` task processes templates from `src/main/templates/`
- Template variables are defined in `gradle.properties` and expanded into `neoforge.mods.toml`
- Generated resources output to `build/generated/sources/modMetadata/`
- Data generation outputs to `src/generated/resources/` (included in source sets)
## Important File Locations
- Main mod class: `src/main/java/org/itqop/HubmcEssentials/HubmcEssentials.java`
- Config class: `src/main/java/org/itqop/HubmcEssentials/Config.java`
- Mod metadata template: `src/main/templates/META-INF/neoforge.mods.toml`
- Mod properties: `gradle.properties`
- Assets: `src/main/resources/assets/hubmc_essentionals/` (note: old package name still used here)
- **Technical Specification:** `ТЗ.md` - Complete Russian specification with all commands and requirements
- **API Documentation:** `API_ENDPOINTS.md` - Complete HubGW API endpoint documentation
## API Endpoints Reference
See `API_ENDPOINTS.md` for complete details. Key endpoints:
**Cooldowns:**
- `POST /cooldowns/check` - Check if cooldown is active
- `POST /cooldowns/` - Create/extend cooldown
**Homes:**
- `PUT /homes/` - Create/update home
- `POST /homes/get` - Get specific home
- `GET /homes/{player_uuid}` - List all homes
**Warps:**
- `POST /warps/` - Create warp
- `POST /warps/get` - Get specific warp
- `POST /warps/list` - List warps with filters
**Teleport History:**
- `POST /teleport-history/` - Log teleport event
- `GET /teleport-history/players/{player_uuid}` - Get player's TP history
## Package Name Migration Note
The project is in the process of migrating from `hubmc_essentionals` (with 'o') to `hubmc_essentials` (with 'e'). Some resource paths still use the old naming. Be aware of this inconsistency when adding new features or assets.
## Development Notes
- The mod uses Parchment mappings for better parameter names
- ModDev plugin version: 2.0.113
- NeoForge version: 21.1.209
- Gradle is configured for parallel builds, caching, and configuration cache for better performance
- Run configurations include proper logging markers and debug level set to DEBUG
- **This is a server-side mod** - focus on server commands and backend integration
- All user-facing messages should be in Russian (as per ТЗ.md requirements)
## Implementation Summary
### Commands Implemented (25 total)
**General Commands (11):**
- `/spec`, `/spectator` - Toggle spectator mode (no cooldown)
- `/fly` - Toggle flight (no cooldown)
- `/vanish` - Toggle vanish mode (no cooldown)
- `/invsee <player>` - View player inventory (no cooldown)
- `/enderchest <player>` - View player ender chest (no cooldown)
- `/sethome [name]` - Save home location (no cooldown)
- `/home [name]` - Teleport to home (no cooldown)
- `/kit <name>` - Claim kit (cooldown via API)
- `/clear` - Clear inventory (cooldown: 300s default)
- `/ec` - Open ender chest (cooldown: 180s default)
- `/hat` - Wear item as hat (cooldown: 120s default)
**VIP Commands (6):**
- `/heal` - Heal player (cooldown: 300s default)
- `/feed` - Feed player (cooldown: 180s default)
- `/repair` - Repair held item (cooldown: 600s default)
- `/near [radius]` - List nearby players (cooldown: 60s default)
- `/back` - Return to previous location (cooldown: 120s default)
- `/rtp` - Random teleport (cooldown: 600s default)
**Premium Commands (3):**
- `/warp create <name> [description]` - Create warp (no cooldown)
- `/warp list` - List warps (no cooldown)
- `/warp <name>` - Teleport to warp (no cooldown)
- `/warp delete <name>` - Delete warp (no cooldown) ✅
- `/repair all` - Repair all items (cooldown: 1800s default)
- `/workbench`, `/wb` - Open crafting table (no cooldown)
**Deluxe Commands (4):**
- `/top` - Teleport to highest block (cooldown: 300s default)
- `/pot <effect> [duration] [amplifier]` - Apply potion effect (cooldown: 120s default)
- `/morning`, `/day`, `/evening`, `/night` - Set time (cooldown: 60s default each)
- `/weather <clear|storm|thunder>` - Set weather (no cooldown)
**Custom Commands (1):**
- `/goto <player>` - Teleport to player (cooldown: 60s default)
- `/goto <player1> <player2>` - Teleport player to player (no cooldown, admin only)
- `/goto <x> <y> <z>` - Teleport to coordinates (cooldown: 60s default)
### Configuration File
The mod creates `config/hubmc_essentials-common.toml` with the following settings:
**API Configuration:**
- `apiBaseUrl` - HubGW API base URL (default: `http://localhost:8000/api/v1`)
- `apiKey` - API authentication key (default: `your-api-key-here`)
- `connectionTimeout` - Connection timeout in seconds (default: 2, range: 1-30)
- `readTimeout` - Read timeout in seconds (default: 5, range: 1-60)
- `maxRetries` - Max retries on 429/5xx errors (default: 2, range: 0-10)
- `enableDebugLogging` - Enable debug logging (default: false)
**Cooldown Configuration (in seconds, range: 0-3600 or 0-7200):**
- `clear` - 300 (5 minutes)
- `ec` - 180 (3 minutes)
- `hat` - 120 (2 minutes)
- `heal` - 300 (5 minutes)
- `feed` - 180 (3 minutes)
- `repair` - 600 (10 minutes)
- `near` - 60 (1 minute)
- `back` - 120 (2 minutes)
- `rtp` - 600 (10 minutes)
- `repairAll` - 1800 (30 minutes)
- `top` - 300 (5 minutes)
- `pot` - 120 (2 minutes)
- `time` - 60 (1 minute)
- `goto` - 60 (1 minute)
### LuckPerms Permission Setup
All permissions use `hubmc` namespace:
**Tier Permissions:**
- `hubmc.tier.vip` - Grants access to all VIP commands
- `hubmc.tier.premium` - Grants access to all Premium commands (includes VIP)
- `hubmc.tier.deluxe` - Grants access to all Deluxe commands (includes Premium + VIP)
**Individual Command Permissions:**
- General: `hubmc.cmd.spec`, `hubmc.cmd.fly`, `hubmc.cmd.vanish`, `hubmc.cmd.invsee`, `hubmc.cmd.enderchest`, `hubmc.cmd.sethome`, `hubmc.cmd.home`, `hubmc.cmd.kit`, `hubmc.cmd.clear`, `hubmc.cmd.ec`, `hubmc.cmd.hat`
- VIP: `hubmc.cmd.heal`, `hubmc.cmd.feed`, `hubmc.cmd.repair`, `hubmc.cmd.near`, `hubmc.cmd.back`, `hubmc.cmd.rtp`
- Premium: `hubmc.cmd.warp.create`, `hubmc.cmd.repair.all`, `hubmc.cmd.workbench`
- Deluxe: `hubmc.cmd.top`, `hubmc.cmd.pot`, `hubmc.cmd.time`, `hubmc.cmd.weather`
- Teleport: `hubmc.cmd.tp`, `hubmc.cmd.tp.others`, `hubmc.cmd.tp.coords`