How to Create a Mod for Hytale: A Complete Practical Guide
Hytale is revolutionizing modding thanks to its partnership with CurseForge. After two weeks of experimenting with the modification system, I’m sharing working solutions and pitfalls.
Modding Architecture: Three Levels of Depth
Packs (Assets) — start in 15 minutes
Perfect for artists and designers. Work with JSON and visual editors without writing a single line of code.
Plugins — for developers
Java development of full-fledged game systems. Requires OOP knowledge and understanding of server architecture.
Bootstrap — hardcore modding
JVM-level modification for system changes. Similar to ASM / Mixin from Minecraft Forge.
Practice: Creating a Glowing Crystal
Step 1. Item Manifest
Path:
./AppData/Roaming/Hytale/UserData/Packs/CrystalMod/Server/Item/Items/glowing_crystal.json
{
"TranslationProperties": {
"Name": "server.Glowing_Crystal.name"
},
"MaxStack": 64,
"Icon": "Icons/ItemsGenerated/Glowing_Crystal.png",
"Categories": ["Blocks.Minerals"],
"PlayerAnimationsId": "Block",
"Set": "Crystal_Luminous",
"BlockType": {
"Material": "Solid",
"DrawType": "Cube",
"Group": "Crystal",
"Flags": {
"EmitsLight": true
},
"Gathering": {
"Breaking": {
"GatherType": "Minerals",
"ItemId": "Crystal_Luminous_Shard",
"ToolRequired": "Pickaxe"
}
},
"BlockParticleSetId": "Crystal",
"Textures": [
{
"All": "BlockTextures/Glowing_Crystal_Texture.png"
}
],
"ParticleColor": "#4d9fff",
"LightEmission": 12,
"BlockSoundSetId": "Glass",
"BlockBreakingDecalId": "Breaking_Decals_Crystal"
},
"ResourceTypes": [
{
"Id": "Crystal"
}
]
}
New features:
EmitsLight— block emits lightLightEmission— light level (0–15)ToolRequired— required toolItemId— drop item
Step 2. Graphics and Localization
Texture (32x32):
Common/BlockTextures/Glowing_Crystal_Texture.png
Use the alpha channel for soft glow.
Localization RU:
Glowing_Crystal.name = Светящийся кристалл
Localization EN:
Glowing_Crystal.name = Luminous Crystal
Step 3. Asset Editor
- Worlds
- Right click → Manage Packs
- Enable the mod
- In game:
~ /asseteditor
- Hardness
- Blast Resistance
- Collision Box
Advanced Categorization
{
"Icon": "Icons/ItemCategories/Magic_Tab.png",
"Order": 7,
"Children": [
{
"Id": "Crystals_Magical",
"Name": "ui.itemcategory.magic_crystals",
"Icon": "Icons/ItemCategories/Crystals_Icon.png"
},
{
"Id": "Artifacts_Ancient",
"Name": "ui.itemcategory.ancient_artifacts",
"Icon": "Icons/ItemCategories/Artifacts_Icon.png"
},
{
"Id": "Potions_Enhanced",
"Name": "ui.itemcategory.enhanced_potions",
"Icon": "Icons/ItemCategories/Potions_Icon.png"
}
]
}
Java Plugin: Teleport System
- JDK 25
- IntelliJ IDEA
- Gradle 8+
Common Mistakes
- Wrong texture path
- Invalid JSON
- LightEmission is not a number
Optimization
- Textures up to 512x512
- Use atlases
- Cache objects
- Async for heavy tasks
Checklist
- PNG textures
- Valid JSON
- en-US translations
- Singleplayer test
- Server test
- README
Conclusion
Hytale combines the simplicity of JSON with the power of Java. Start with Packs, then move to plugins and create unique mechanics.