Como crear mods en Hytale

Tutorial completo paso a paso (Early Access)
⚠️ Aviso importante (Early Access): Hytale está en acceso anticipado. Esto significa que rutas, nombres, APIs y ejemplos pueden cambiar con el tiempo. Esta guía intenta ser lo más clara y útil posible para empezar ya, pero asume que algunas cosas podrían actualizarse.
1) 🎮 ¿Qué es el modding en Hytale?
Hytale permite crear y modificar contenido del juego mediante mods. Lo bueno: su ecosistema está diseñado para ser muy accesible, especialmente gracias a herramientas integradas como el Asset Editor.
2) 🧩 Tipos de mods en Hytale
- 📦 A) Packs (recomendado para empezar)
- 🔌 B) Plugins (Java)
- ☠️ C) Early / Bootstrap Plugins
- Paso 1 — 📁 Crear la carpeta del Pack
- Paso 2 — 📄 Crear manifest.json
- Paso 3 — 🗂️ Crear Common y Server
- Paso 1 — 📄 Crear el JSON del bloque
- Paso 2 — 🎨 Crear la textura del bloque
- Paso 3 — 🌍 Crear traducción (nombre del bloque)
- Paso 4 — 🛠️ Editar en el Asset Editor
- Paso 1 — Elegir el bloque
- Paso 2 — Crear una interacción ChangeState
- Paso 3 — Definir los estados y sus propiedades
- Paso 1 — Asignar animación en State
- Paso 2 — Preparar el modelo en Blockbench (GRUPOS)
- Paso 3 — Crear .blockyanim
- Ejemplo real (Wardrobes)
- Paso 1 — Descargar la plantilla de IntelliJ IDEA
- Paso 2 — Configuración del template
- Paso 3 — Abrir el proyecto en IntelliJ
- Paso 4 — Tips importantes
- 🙌 Créditos
📦 A) Packs (recomendado para empezar)
Los Packs son paquetes de contenido y assets. Sirven para añadir o modificar:
- 🧱 Bloques
- 🐉 Mobs
- ⚔️ Ítems
- ✨ Partículas, traducciones, etc.
✅ Gran ventaja: muchas cosas se modifican con el Asset Editor, sin programar.
🔌 B) Plugins (Java)
Los Plugins se escriben en Java y usan la API del juego para:
- Añadir sistemas nuevos
- Expandir funcionalidad vanilla
- Crear lógica avanzada para servidores
☠️ C) Early / Bootstrap Plugins
Plugins “a bajo nivel” que transforman clases e inyectan bytecode.
🛑 Recomendación clara: no los uses salvo que sea absolutamente necesario.
3) 🧰 Herramientas de creación (Creation Tools)
Lo que hace a Hytale especial:
- 🎥 Machinima Tools (grabación/cinemática)
- 🌍 World Tools (edición de mundo)
- 🧩 Asset Editor (modificar Packs con facilidad)
El Asset Editor es el corazón del modding accesible.
4) ✅ Packs: Getting Started (estructura base)
Paso 1 — 📁 Crear la carpeta del Pack
Crea una carpeta aquí (cambia YourPackName por tu nombre):
./AppData/Roaming/Hytale/UserData/Packs/YourPackName
Ejemplo:
./AppData/Roaming/Hytale/UserData/Packs/NoangyFirstPack
Paso 2 — 📄 Crear manifest.json
Dentro de tu pack, crea:
manifest.json
Ejemplo base (cambia los datos):
{
"Group": "YourGroupName",
"Name": "PackName",
"Version": "1.0.0",
"Description": "Add the pack description here",
"Authors": [
{
"Name": "AuthorName",
"Email": "example@example.com",
"Url": "https://your-url.com"
}
],
"Website": "https://your-website.com",
"ServerVersion": "*",
"Dependencies": {},
"OptionalDependencies": {},
"DisabledByDefault": false
}
Paso 3 — 🗂️ Crear Common y Server
Dentro del pack, crea estas carpetas:
./AppData/Roaming/Hytale/UserData/Packs/YourPackName/Common
./AppData/Roaming/Hytale/UserData/Packs/YourPackName/Server
¿Qué va en cada una?
- Common → modelos y texturas (lo visual)
- Server → creación de bloques/ítems, traducciones, partículas, etc. (lo funcional)
Estructura final mínima:
YourPackName/
├── manifest.json
├── Common/
└── Server/
5) 🧱 Añadir un bloque (Adding a Block)
Paso 1 — 📄 Crear el JSON del bloque
Crea este archivo:
./AppData/Roaming/Hytale/UserData/Packs/YourPackName/Server/Item/Items/your_block.json
Ejemplo de contenido:
{
"TranslationProperties": {
"Name": "server.Example_Block.name"
},
"MaxStack": 100,
"Icon": "Icons/ItemsGenerated/Example_Block.png",
"Categories": [
"Blocks.Rocks"
],
"PlayerAnimationsId": "Block",
"Set": "Rock_Stone",
"BlockType": {
"Material": "Solid",
"DrawType": "Cube",
"Group": "Stone",
"Flags": {},
"Gathering": {
"Breaking": {
"GatherType": "Rocks",
"ItemId": "Rock_Stone_Cobble"
}
},
"BlockParticleSetId": "Stone",
"Textures": [
{
"All": "BlockTextures/Example_Block.png"
}
],
"ParticleColor": "#aeae8c",
"BlockSoundSetId": "Stone",
"BlockBreakingDecalId": "Breaking_Decals_Rock"
},
"ResourceTypes": [
{
"Id": "Rock"
}
]
}
Paso 2 — 🎨 Crear la textura del bloque
Crea el PNG aquí:
./AppData/Roaming/Hytale/UserData/Packs/YourPackName/Common/BlockTextures/your_block_texture.png
Ejemplo:
.../Common/BlockTextures/Example_Block.png
Paso 3 — 🌍 Crear traducción (nombre del bloque)
Crea el archivo:
./AppData/Roaming/Hytale/UserData/Packs/YourPackName/Server/Languages/es-US/server.lang
Añade una entrada que coincida con tu TranslationProperties.Name:
Example_Block.name = Example Block
Paso 4 — 🛠️ Editar en el Asset Editor
Añadir el pack al mundo
- Abre Hytale
- Ve a Worlds
- Click derecho al mundo
- Activa el mod/pack correspondiente
Abrir Asset Editor
- Entra al mundo
- Abre inventario
- Creation Tools → Asset Editor
- Selecciona tu Pack y ajusta propiedades
6) 🔁 Cambiar estados de un bloque (Block State Changing)
Esto sirve para hacer bloques tipo:
- On/Off
- Abierto/Cerrado
- Modos A/B/C
Paso 1 — Elegir el bloque
Edita tu:
.../Server/Item/Items/your_block.json
Paso 2 — Crear una interacción ChangeState
Añade una interacción que alterne estados:
"Interactions": {
"Use": {
"Interactions": [
{
"Type": "ChangeState",
"Changes": {
"default": "Off",
"On": "Off",
"Off": "On"
}
}
]
}
}
Paso 3 — Definir los estados y sus propiedades
Cada estado puede tener modelo/textura distinta, hints, sonidos, partículas…
Ejemplo completo:
"BlockType": {
"DrawType": "Model",
"CustomModel": "Blocks/model_one.blockymodel",
"CustomModelTexture": [
{ "Texture": "Blocks/your_texture.png" }
],
"Interactions": {
"Use": {
"Interactions": [
{
"Type": "ChangeState",
"Changes": {
"default": "Off",
"On": "Off",
"Off": "On"
}
}
]
}
},
"State": {
"Definitions": {
"On": {
"InteractionHint": "interactionHints.turnoff",
"CustomModel": "Blocks/model_one.blockymodel",
"CustomModelTexture": [
{ "Texture": "Blocks/Texture/textureone.png" }
]
},
"Off": {
"InteractionHint": "interactionHints.turnon",
"CustomModel": "Blocks/model_two.blockymodel",
"CustomModelTexture": [
{ "Texture": "Blocks/Texture/textureone.png" }
]
}
}
}
}
7) 🎬 Animaciones en bloques (Block Animations)
Las animaciones se asignan por estado.
Paso 1 — Asignar animación en State
Ejemplo:
"State": {
"Definitions": {
"On": {
"CustomModelAnimation": "Blocks/Animations/Empty_Water.blockyanim"
},
"Off": {
"CustomModelAnimation": "Blocks/Animations/Rising_Water.blockyanim"
}
}
}
Paso 2 — Preparar el modelo en Blockbench (GRUPOS)
En Blockbench:
- Crea un grupo (folder) en el modelo
- Ponle nombre (ejemplo:
Water) - Mete dentro todos los elementos que quieras animar
⚠️ Ese nombre debe coincidir con el de nodeAnimations.
Paso 3 — Crear .blockyanim
Ejemplo Rising_Water.blockyanim:
{
"formatVersion": 1,
"duration": 50,
"holdLastKeyframe": true,
"nodeAnimations": {
"Water": {
"position": [
{
"time": 0,
"delta": { "x": 0, "y": 0, "z": 0 },
"interpolationType": "smooth"
},
{
"time": 50,
"delta": { "x": 0, "y": 8.5, "z": 0 },
"interpolationType": "smooth"
}
],
"orientation": [],
"shapeStretch": [],
"shapeVisible": [],
"shapeUvOffset": []
}
}
}
Qué puedes animar
- position (mover)
- orientation (rotar)
- shapeStretch (estirar)
- shapeVisible (mostrar/ocultar)
- shapeUvOffset (animar textura)
Ejemplo real (Wardrobes)
Los armarios animan múltiples grupos (puertas, tiradores, cajones, etc.).
Ejemplo simple: el cajón mueve Z para salir y volver un poco:
"Drawer": {
"position": [
{ "time": 0, "delta": { "x": 0, "y": 0, "z": 0 }, "interpolationType": "smooth" },
{ "time": 10, "delta": { "x": 0, "y": 0, "z": 12 }, "interpolationType": "smooth" },
{ "time": 20, "delta": { "x": 0, "y": 0, "z": 10 }, "interpolationType": "smooth" }
],
"orientation": [],
"shapeStretch": [],
"shapeVisible": [],
"shapeUvOffset": []
}
8) 🔌 Plugins: Getting Started (Java + IntelliJ)
Paso 1 — Descargar la plantilla de IntelliJ IDEA
La forma más fácil es usar la plantilla de:
- Darkhax & Jared (y Rick)
Recursos marcados como TBC:
- Zip File (TBC)
- GitHub Repo (TBC)
Qué ofrece la plantilla
- Añade los últimos server files al classpath
- Ejecutar desde el IDE con breakpoints
- Bundlear assets editables con Asset Editor
- Soporta releases y pre-releases
- Incluye ejemplo de código y assets
Paso 2 — Configuración del template
- Extrae el ZIP donde trabajarás
- Lee el
README.md(importante)
✅ Checklist antes de seguir:
- Hytale descargado con launcher oficial
- IntelliJ IDEA instalado (Community vale)
- Java 25 instalado y configurado como SDK en IntelliJ
- Cambiar el nombre en
settings.gradle - Revisar
gradle.properties - Actualizar
src/main/resources/manifest.json
Paso 3 — Abrir el proyecto en IntelliJ
- Open Project → selecciona carpeta del template
- Espera a que Gradle lo inicialice
Paso 4 — Tips importantes
Compilar un plugin compartible
gradle build
Salida:
builds/libs
Ejecutar el juego/servidor desde el IDE
La plantilla crea una run config llamada:
- HytaleServer
Instalar el plugin
Copia el .jar aquí:
%appdata%/Hytale/UserData/Mods
Si no existe, crea la carpeta.
9) 🚀 Ruta recomendada (mi consejo directo)
Si quieres avanzar rápido y bien:
✅ Nivel 1 (empezar YA):
- Crear Pack
- Añadir bloque simple
- Texturas + traducciones
- Editar con Asset Editor
✅ Nivel 2 (pro dentro de Packs):
5) Block states (On/Off)
6) Interactions
7) Animaciones con Blockbench + .blockyanim
✅ Nivel 3 (modo servidor serio):
8) Plugins en Java
9) Combinar Plugins + Packs (lo mejor de ambos mundos)
🙌 Créditos
Parte de estos tutoriales y estructura se basan en aportes de:
- Sketch Macaw (Packs / bloques / states / animaciones)
- Darkhax, Jared y Rick (Plugins template y guía inicial)
Si quieres conocer otros artículos parecidos a Como crear mods en Hytale puedes visitar la categoría Tutoriales.