# 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|` (e.g., `kit|vip`, `kit|premium`) - Commands: `rtp`, `back`, `tp|`, `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.` - 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 ` - Open player inventory (local, online only) - `/enderchest ` - Open player enderchest (local, online only) - `/kit ` - 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|`) - `/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 `, `/goto `, `/goto ` - Permissions: `hubmc.cmd.tp`, `hubmc.cmd.tp.others`, `hubmc.cmd.tp.coords` - Cooldowns: `tp|` 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 ` - View player inventory (no cooldown) - `/enderchest ` - View player ender chest (no cooldown) - `/sethome [name]` - Save home location (no cooldown) - `/home [name]` - Teleport to home (no cooldown) - `/kit ` - 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 [description]` - Create warp (no cooldown) - `/warp list` - List warps (no cooldown) - `/warp ` - Teleport to warp (no cooldown) - `/warp delete ` - 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 [duration] [amplifier]` - Apply potion effect (cooldown: 120s default) - `/morning`, `/day`, `/evening`, `/night` - Set time (cooldown: 60s default each) - `/weather ` - Set weather (no cooldown) **Custom Commands (1):** - `/goto ` - Teleport to player (cooldown: 60s default) - `/goto ` - Teleport player to player (no cooldown, admin only) - `/goto ` - 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`