A minimal, ready-to-use template for creating Hytale plugins with modern build tools and automated testing.
✨ Builds immediately without any changes! Clone and run
./gradlew shadowJarto get a working plugin JAR.
✅ Modern Build System - Gradle with Kotlin DSL
✅ Automated Testing - Custom Gradle plugin for one-command server testing
✅ Java 25 - Latest Java features
✅ ShadowJar - Automatic dependency bundling
✅ CI/CD Ready - GitHub Actions workflow included
✅ Minimal Structure - Only essential files, write your own code
- Java 25 JDK - Download here
- IntelliJ IDEA - Download here (Community Edition is fine)
- Git - Download here
git clone https://github.com/yourusername/hytale-plugin-template.git
cd hytale-plugin-templateThe template builds immediately without any changes!
You can customize it later when you're ready to develop your plugin.
The template works out-of-the-box:
# Windows
gradlew.bat shadowJar
# Linux/Mac
./gradlew shadowJarYour plugin JAR will be in: build/libs/TemplatePlugin-1.0.0.jar
When ready to customize, edit these files:
settings.gradle.kts:
rootProject.name = "your-plugin-name"gradle.properties:
pluginGroup=com.yourname
pluginVersion=1.0.0
pluginDescription=Your plugin descriptionsrc/main/resources/manifest.json:
{
"Group": "YourName",
"Name": "YourPluginName",
"Main": "com.yourname.yourplugin.YourPlugin"
}Rename the main plugin class:
- Rename
src/main/java/com/example/templateplugin/TemplatePlugin.java - Update package name to match your
pluginGroup
# Windows
gradlew.bat shadowJar
# Linux/Mac
./gradlew shadowJarYour plugin JAR will be in: build/libs/YourPluginName-1.0.0.jar
Write your plugin code in src/main/java/:
- Commands
- Event listeners
- Services
- Storage
- Utilities
See our documentation for examples and patterns.
# Windows
gradlew.bat runServer
# Linux/Mac
./gradlew runServerThis will:
- Download the Hytale server (cached for future runs)
- Build your plugin
- Copy it to the server's mods folder
- Start the server with interactive console
TemplatePlugin/
├── .github/workflows/
│ └── build.yml # CI/CD workflow
├── buildSrc/
│ ├── build.gradle.kts # Custom plugin configuration
│ └── src/main/kotlin/
│ └── RunHytalePlugin.kt # Automated server testing
├── src/main/
│ ├── java/com/example/templateplugin/
│ │ └── TemplatePlugin.java # Minimal main class (example)
│ └── resources/
│ └── manifest.json # Plugin metadata
├── .gitignore # Git ignore rules
├── build.gradle.kts # Build configuration
├── gradle.properties # Project properties
├── settings.gradle.kts # Project settings
├── LICENSE # MIT License
└── README.md # This file
Note: This is a minimal template. Create your own folder structure:
commands/- For command implementationslisteners/- For event listenersservices/- For business logicstorage/- For data persistenceutils/- For utility classesconfig/- For configuration management
# Compile only
./gradlew compileJava
# Build plugin JAR
./gradlew shadowJar
# Clean and rebuild
./gradlew clean shadowJar# Run server with your plugin
./gradlew runServer
# Run unit tests
./gradlew test
# Clean test server
rm -rf run/# Run server in debug mode
./gradlew runServer -Pdebug
# Then connect your IDE debugger to localhost:5005Edit build.gradle.kts:
dependencies {
// Hytale API (provided by server)
compileOnly(files("./HytaleServer.jar"))
// Your dependencies (will be bundled)
implementation("com.google.code.gson:gson:2.10.1")
// Test dependencies
testImplementation("org.junit.jupiter:junit-jupiter:5.10.0")
}Run Hytale Server - A Gradle plugin to download and run a Hytale server for development and testing purposes. The server files will be located in the run/ directory of the project. Before starting the server it will compile (shadowJar task) and copy the plugin jar to the server's mods/ folder.
Usage:
Edit build.gradle.kts:
runHytale {
jarUrl = "url to hytale server jar"
}Run the server with:
# Windows
gradlew.bat runServer
# Linux/Mac
./gradlew runServerFeatures:
- ✅ Automatic server JAR download and caching
- ✅ Compiles and deploys your plugin automatically
- ✅ Starts server with interactive console
- ✅ One-command workflow:
./gradlew runServer - ✅ Server files in
run/directory (gitignored)
Recommended folder structure:
src/main/java/com/yourname/yourplugin/
├── YourPlugin.java # Main class
├── commands/ # Commands
├── listeners/ # Event listeners
├── services/ # Business logic
├── storage/ # Data persistence
├── config/ # Configuration
└── utils/ # Utilities
See our documentation for examples:
This template includes a GitHub Actions workflow that:
- ✅ Builds your plugin on every push
- ✅ Runs tests
- ✅ Uploads artifacts
- ✅ Creates releases (when you tag)
git tag v1.0.0
git push origin v1.0.0GitHub Actions will automatically build and create a release with your plugin JAR.
- Use the Service-Storage pattern for data management
- Write unit tests for your business logic
- Use structured logging (not
System.out.println) - Handle errors gracefully
- Document your public API
- Version your releases semantically (1.0.0, 1.1.0, etc.)
- Hardcode configuration values
- Block the main thread with heavy operations
- Ignore exceptions
- Use deprecated APIs
- Commit sensitive data (API keys, passwords)
# Clean and rebuild
./gradlew clean build --refresh-dependencies- Check that
jarUrlinbuild.gradle.ktsis correct - Verify Java 25 is installed:
java -version - Check logs in
run/logs/
- Verify
manifest.jsonhas correctMainclass - Check server logs for errors
- Ensure all dependencies are bundled in JAR
For detailed guides on plugin development, see:
- Hytale Modding Documentation
- Getting Started with Plugins
- Advanced Plugin Patterns
- Common Plugin Features
Contributions are welcome! Please:
- Fork the repository
- Create a feature branch
- Make your changes
- Submit a pull request
This template is released under the MIT License. You are free to use it for any purpose.
- Issues: GitHub Issues
- Documentation: Hytale Modding Docs
- Community: Join the Hytale modding community
Created by the Hytale modding community.
Based on best practices from production Hytale plugins.
Happy Modding! 🎮