# Getting Started with Hytale Server Modding ## Overview The Hytale Server provides a comprehensive modding API that allows developers to extend and customize the game. This documentation covers the essential systems and APIs available for mod development. ## Architecture Overview The server is built on several core systems: | System | Purpose | |-------------------------------|----------------------------------------------------------------| | Plugin System | Mod loading, lifecycle management, and dependency resolution | | Entity Component System (ECS) | High-performance entity management with components and systems | | Event System | Prioritized event dispatching with sync/async support | | Command System | Player and console command handling | | Asset System | Game asset loading and registration | | Codec System | Data serialization/deserialization framework | | Protocol Layer | Network communication and packet handling | ## Package Structure The codebase is organized under `com.hypixel.hytale`: ``` com.hypixel.hytale/ ├── server/core/ # Core server functionality │ ├── plugin/ # Plugin management │ ├── command/ # Command system │ ├── entity/ # Entity management │ ├── universe/ # World/Universe management │ ├── registry/ # Server registries │ └── ... ├── event/ # Event bus and handlers ├── component/ # ECS framework ├── codec/ # Serialization framework ├── protocol/ # Network protocol ├── common/ # Shared utilities ├── math/ # Math utilities and vectors └── builtin/ # Built-in game modules ``` ## Creating Your First Mod ### 1. Project Setup Create a new Java project with the Hytale Server API as a dependency. ### 2. Create the Plugin Manifest Create a `manifest.json` file in your JAR's root: ```json { "Group": "com.example", "Name": "MyFirstMod", "Version": "1.0.0", "Description": "My first Hytale mod", "Authors": ["YourName"], "Main": "com.example.MyFirstMod", "ServerVersion": ">=1.0.0", "Dependencies": {}, "IncludesAssetPack": false } ``` ### 3. Create the Main Plugin Class ```java package com.example; import com.hypixel.hytale.server.core.plugin.JavaPlugin; import com.hypixel.hytale.server.core.plugin.java.JavaPluginInit; public class MyFirstMod extends JavaPlugin { public MyFirstMod(JavaPluginInit init) { super(init); } @Override protected void setup() { // Called during plugin setup phase // Register commands, events, components here getLogger().info("MyFirstMod is setting up!"); } @Override protected void start() { // Called when the plugin starts getLogger().info("MyFirstMod has started!"); } @Override protected void shutdown() { // Called when the plugin is shutting down // Clean up resources here getLogger().info("MyFirstMod is shutting down!"); } } ``` ### 4. Build and Deploy 1. Build your project as a JAR file 2. Place the JAR in the server's `mods/` directory 3. Start the server ## Plugin Lifecycle Plugins go through the following states: 1. **NONE** - Initial state before loading 2. **SETUP** - `setup()` is called; register components, commands, events 3. **START** - `start()` is called; plugin becomes active 4. **ENABLED** - Plugin is fully operational 5. **SHUTDOWN** - `shutdown()` is called during server stop 6. **DISABLED** - Plugin is disabled and unloaded ## Available Registries Your plugin has access to several registries for registration: | Registry | Access Method | Purpose | |-----------------------|------------------------------|-------------------------------| | CommandRegistry | `getCommandRegistry()` | Register custom commands | | EventRegistry | `getEventRegistry()` | Register event listeners | | EntityRegistry | `getEntityRegistry()` | Register custom entity types | | BlockStateRegistry | `getBlockStateRegistry()` | Register block states | | TaskRegistry | `getTaskRegistry()` | Schedule recurring tasks | | AssetRegistry | `getAssetRegistry()` | Register custom asset types | | ClientFeatureRegistry | `getClientFeatureRegistry()` | Register client-side features | | EntityStoreRegistry | `getEntityStoreRegistry()` | Register ECS entity stores | | ChunkStoreRegistry | `getChunkStoreRegistry()` | Register chunk data stores | ## Next Steps - [Plugin Development](02-plugin-development.md) - In-depth plugin creation guide - [Event System](03-event-system.md) - Handling game events - [Command System](04-command-system.md) - Creating custom commands - [Entity System](05-entity-system.md) - Working with entities and ECS - [World Management](06-world-management.md) - Managing worlds and chunks