Tu primer mod, paso a paso
En resumen: creas un proyecto, lo compilas y la DLL queda en la carpeta Aether/Mods del juego. Al abrir el juego, Aether lo encuentra solo. No hace falta ningún otro archivo de configuración.
1 · Crea el proyecto
Aether trae un comando que lo prepara todo:
aether new MiMod
Se crea una carpeta con tres archivos: MiMod.csproj (la receta para compilar), Mod.cs (tu mod) y un README.md corto. Si Aether encuentra tu juego, el proyecto ya sabe dónde están los archivos de Aether.
2 · Lee tu mod
El archivo Mod.cs ya hace tres cosas. Están numeradas en los comentarios (que vienen en inglés, igual que el código):
using System;
using Aether.Core.Config;
using Aether.Loader.Discovery;
using Aether.Loader.Entrypoints;
using Aether.Registry;
// This line is how Aether recognises your mod. It must stay at assembly level.
[assembly: AetherMod("mi_mod", "1.0.0",
Name = "Mi Mod",
Author = "You",
Description = "A starter mod for Aether.")]
namespace MiMod;
public sealed class ModEntry : IModInitializer, IClientModInitializer
{
// 1. An option the player can change (BepInEx/config/aether/mi_mod.json).
public static readonly ConfigEntry<bool> EnableCustomBlock =
AetherConfig.Bind("mi_mod", "Features", "EnableCustomBlock", true, "Register the example block.");
// 2. Runs when mods load: the place to register blocks, items and recipes.
public void OnInitialize()
{
if (!EnableCustomBlock.Value) return;
var definition = new BlockDefinition(new Identifier("mi_mod", "gem_block"), "Gem Block")
{
Hardness = 3.0f,
IsSolid = true
};
DynamicBlockRegistry.Instance.Register(definition);
}
// 3. Runs on the first frame, with the game alive: UI, keys, sound and scene objects go here.
public void OnInitializeClient()
{
Console.WriteLine("[MiMod] ready");
}
}- Una opción que el jugador puede cambiar.
- Registra un bloque nuevo, «Gem Block», cuando cargan los mods.
- Aquí va lo que se ve y se toca (interfaz, teclas, sonido), cuando el juego ya está vivo.
La línea [assembly: AetherMod(…)] es la que le dice a Aether que esto es un mod. Debe quedarse a nivel de ensamblado.
3 · Cambia algo
Prueba con lo más simple: cambia el nombre "Gem Block" por otro, o el número de Hardness (qué tan duro es el bloque). Guarda el archivo.
4 · Revisa dónde está Aether
El proyecto busca los archivos de Aether en <juego>/BepInEx/plugins/Aether/. Si aether new no encontró tu juego, abre MiMod.csproj y cambia AetherDir, o compila con -p:AetherDir=<ruta>. Si Aether no está instalado, la compilación se detiene con un mensaje que te lo dice.
5 · Compila e instala
cd MiMod dotnet build MiMod.csproj -c Release -p:InstallToGame=true
Con -p:InstallToGame=true la DLL se copia sola a <juego>/Aether/Mods/. Sin esa opción, copia tú bin/Release/netstandard2.1/MiMod.dll a esa carpeta.
6 · Compruébalo
Abre el juego. Tu mod debe aparecer en el menú F10 y en el registro BepInEx/LogOutput.log con una línea como esta:
[Aether] Resolved N mods in topological order: -> Mi Mod (mi_mod v1.0.0)
¿No aparece? Mira Compilar e instalar, que tiene la lista de qué revisar.