201 lines
5.3 KiB
Markdown
201 lines
5.3 KiB
Markdown
# Hytale Server Modding Documentation
|
|
|
|
Welcome to the Hytale Server modding documentation. This guide provides comprehensive information for creating mods and
|
|
extensions for the Hytale Server.
|
|
|
|
## LLM Reference
|
|
|
|
**[LLM-Optimized API Reference](00-llm-reference.md)** - Complete API reference with exact class names, method
|
|
signatures, and JSON structures. Use this for quick lookups.
|
|
|
|
## Documentation Index
|
|
|
|
### Getting Started
|
|
|
|
1. **[Getting Started](01-getting-started.md)** - Introduction and first mod tutorial
|
|
|
|
### Core Systems
|
|
|
|
2. **[Plugin Development](02-plugin-development.md)** - Creating and structuring plugins
|
|
3. **[Event System](03-event-system.md)** - Handling game events
|
|
4. **[Command System](04-command-system.md)** - Creating custom commands
|
|
5. **[Entity System (ECS)](05-entity-system.md)** - Working with entities and components
|
|
6. **[World Management](06-world-management.md)** - Managing worlds and chunks
|
|
|
|
### Communication & Data
|
|
|
|
7. **[Networking](07-networking.md)** - Network protocol and packet handling
|
|
8. **[Asset System](08-asset-system.md)** - Managing game assets
|
|
9. **[Configuration](10-configuration.md)** - Plugin and server configuration
|
|
10. **[Codec/Serialization](11-codec-serialization.md)** - Data serialization framework
|
|
|
|
### Game Systems
|
|
|
|
11. **[NPC/AI System](09-npc-ai-system.md)** - Creating and controlling NPCs
|
|
12. **[Built-in Modules](12-builtin-modules.md)** - Using server modules
|
|
|
|
### UI & Presentation
|
|
|
|
15. **[UI System](15-ui-system.md)** - Pages, windows, HUD, and UI commands
|
|
|
|
### Reference
|
|
|
|
13. **[Utilities](13-utilities.md)** - Common utility classes and APIs
|
|
14. **[Early Plugin System](14-early-plugin-system.md)** - Advanced bytecode transformation
|
|
|
|
## Quick Start
|
|
|
|
### Creating Your First Mod
|
|
|
|
1. Create a `manifest.json`:
|
|
|
|
```json
|
|
{
|
|
"Group": "com.example",
|
|
"Name": "MyMod",
|
|
"Version": "1.0.0",
|
|
"Main": "com.example.MyMod"
|
|
}
|
|
```
|
|
|
|
2. Create your main class:
|
|
|
|
```java
|
|
public class MyMod extends JavaPlugin {
|
|
public MyMod(JavaPluginInit init) {
|
|
super(init);
|
|
}
|
|
|
|
@Override
|
|
protected void setup() {
|
|
getLogger().info("MyMod loaded!");
|
|
}
|
|
}
|
|
```
|
|
|
|
3. Build and place in `mods/` directory
|
|
|
|
## Key Concepts
|
|
|
|
### Plugin Lifecycle
|
|
|
|
```
|
|
NONE -> SETUP -> START -> ENABLED -> SHUTDOWN -> DISABLED
|
|
```
|
|
|
|
- **SETUP**: Register commands, events, entities
|
|
- **START**: Initialize plugin logic
|
|
- **SHUTDOWN**: Clean up resources
|
|
|
|
### Available Registries
|
|
|
|
| Registry | Purpose |
|
|
|-------------------|-----------------|
|
|
| `CommandRegistry` | Custom commands |
|
|
| `EventRegistry` | Event listeners |
|
|
| `EntityRegistry` | Custom entities |
|
|
| `AssetRegistry` | Custom assets |
|
|
| `TaskRegistry` | Scheduled tasks |
|
|
|
|
### Event Priority
|
|
|
|
| Priority | Value | Use Case |
|
|
|----------|--------|--------------------|
|
|
| FIRST | -21844 | Monitoring/logging |
|
|
| EARLY | -10922 | Pre-processing |
|
|
| NORMAL | 0 | Standard handling |
|
|
| LATE | 10922 | Post-processing |
|
|
| LAST | 21844 | Final processing |
|
|
|
|
## Package Structure
|
|
|
|
```
|
|
com.hypixel.hytale/
|
|
├── server/core/ # Core server functionality
|
|
├── event/ # Event system
|
|
├── component/ # Entity Component System
|
|
├── codec/ # Serialization
|
|
├── protocol/ # Networking
|
|
├── common/ # Utilities
|
|
├── math/ # Math utilities
|
|
└── builtin/ # Built-in modules
|
|
```
|
|
|
|
## API Highlights
|
|
|
|
### Events
|
|
|
|
```java
|
|
getEventRegistry().register(PlayerConnectEvent.class, event -> {
|
|
Player player = event.getPlayer();
|
|
player.sendMessage("Welcome!");
|
|
});
|
|
```
|
|
|
|
### Commands
|
|
|
|
```java
|
|
public class MyCommand extends AbstractCommand {
|
|
public MyCommand() {
|
|
super("mycommand", "Description");
|
|
withRequiredArg("player", "Target player");
|
|
}
|
|
|
|
@Override
|
|
public void execute(CommandContext ctx, Arguments args) {
|
|
String player = args.getString("player");
|
|
ctx.sendMessage("Hello, " + player);
|
|
}
|
|
}
|
|
```
|
|
|
|
### Entities
|
|
|
|
```java
|
|
public class CustomEntity extends Entity {
|
|
public CustomEntity(World world) {
|
|
super(world);
|
|
}
|
|
}
|
|
|
|
// Register
|
|
getEntityRegistry().register("custom", CustomEntity.class, CustomEntity::new);
|
|
```
|
|
|
|
### Configuration
|
|
|
|
```java
|
|
public static final Codec<MyConfig> CODEC = BuilderCodec.of(MyConfig::new)
|
|
.with("enabled", Codec.BOOLEAN, c -> c.enabled, true)
|
|
.with("maxCount", Codec.INTEGER, c -> c.maxCount, 100)
|
|
.build();
|
|
```
|
|
|
|
## Best Practices
|
|
|
|
1. **Register in setup()** - All registrations should happen during setup
|
|
2. **Use events** - Prefer events over polling
|
|
3. **Respect lifecycle** - Don't access other plugins during setup
|
|
4. **Handle errors** - Log and handle exceptions gracefully
|
|
5. **Clean up** - Release resources in shutdown()
|
|
6. **Use codecs** - Serialize data with the codec system
|
|
7. **Namespace assets** - Use your mod ID as namespace
|
|
8. **Document** - Document your mod's features and configuration
|
|
|
|
## Support
|
|
|
|
For questions and support:
|
|
|
|
- Check the [Hytale modding forums](#)
|
|
- Join the [Discord community](#)
|
|
- Report issues on [GitHub](#)
|
|
|
|
## Contributing
|
|
|
|
Contributions to this documentation are welcome. Please submit pull requests with improvements or corrections.
|
|
|
|
---
|
|
|
|
*This documentation is for Hytale Server modding. For official Hytale information,
|
|
visit [hytale.com](https://hytale.com).*
|