minecraft
Modding con forja
Buscar..
Sintaxis
- MODID = representa el identificador de la MOD
- MODPath = representa la ruta completa del directorio a su carpeta mod
Observaciones
Este tema debe contener los patrones / ejemplos más utilizados y el código bien probado para modificar la aplicación de Minecraft con forge. Tal vez esto pueda reemplazar la documentación oficial algún día.
Patrón de implementación para proxies de inicialización
Este ejemplo le muestra cómo implementar clases de proxy para su aplicación de Mod de Minecraft, que se utilizan para inicializar su mod.
En primer lugar, deberá implementar la clase CommonProxy.java base que contiene el método 3 principalmente utilizado:
public class CommonProxy {
public void preInit(FMLPreInitializationEvent e) {}
public void init(FMLInitializationEvent e) {}
public void postInit(FMLPostInitializationEvent e) {}
}
Normalmente su mod tiene 2 paquetes diferentes para Cliente y Código de Servidor, por lo que necesitará en cada paquete una clase secundaria de CommonProxy.java como:
public class ClientProxy extends CommonProxy {
@Override
public void preInit(FMLPreInitializationEvent e) {
super.preInit(e);
}
@Override
public void init(FMLInitializationEvent e) {
super.init(e);
}
@Override
public void postInit(FMLPostInitializationEvent e) {
super.postInit(e);
}
}
y para el servidor:
public class ServerProxy extends CommonProxy {
@Override
public void preInit(FMLPreInitializationEvent e) {
super.preInit(e);
}
@Override
public void init(FMLInitializationEvent e) {
super.init(e);
}
@Override
public void postInit(FMLPostInitializationEvent e) {
super.postInit(e);
}
}
Una vez que haya creado estas clases, podrá ampliarlas mediante métodos que solo deben ejecutarse en el lado del cliente o del servidor, pero también puede adjuntarlas a ambas si llama a los métodos en la clase "base".
Por último, debe definir qué proxy se toma en tiempo de ejecución. Tienes que extender tu clase de mod principal con la anotación @Mod
, mediante:
private static final String CLIENTPROXY = "com.yourpackage.client.ClientProxy";
private static final String SERVERPROXY = "com.yourpackage.client.ServerProxy";
@SidedProxy(clientSide = CLIENTPROXY, serverSide = SERVERPROXY)
public static CommonProxy PROXY;
Esto permitirá a Forge detectar qué clase debe tomarse en tiempo de ejecución. En los métodos de inicialización de su Mod, ahora puede usar esta propiedad PROXY estática.
@EventHandler
public void init(FMLInitializationEvent event) {
PROXY.init(event);
}
@Mod.EventHandler
public void preInit(FMLPreInitializationEvent event) {
PROXY.preInit(event);
}
@EventHandler
public void postInit(FMLPostInitializationEvent event) {
PROXY.postInit(event);
}
Añadiendo sonidos personalizados a tu MOD
Este ejemplo te muestra cómo agregar nuevos sonidos a tu MOD y reproducirlos. En primer lugar, necesita un archivo de sonido que tenga el formato *.ogg
. Cualquier otro formato no está permitido por la aplicación de Minecraft y será rechazado.
El archivo de sonido tiene el nombre: sonido1.ogg
Ponga el archivo de sonido en la siguiente ruta:
/YourPath/src/main/resources/assets/MODID/sounds/sound1.ogg
Reemplace 'MODID' por el identificador que definió para su MOD
A continuación, debe crear un sounds.json
en codificación UTF-8 (Estándar) que define el nombre, el recurso, ... y otras cosas para su sonido personalizado. Este archivo se verá como:
{
"sound1": {
"category" : "player",
"sounds": [{
"name": "MODID:sound1",
"stream": false
}
]
},
"sound2": {
"category" : "ambient",
"sounds": [{
"name": "MODID:subfolder/sound2",
"stream": true
}
]
}
}
Como explicación de esto suena.json.
Hay definidos 2 sonidos definidos, ya que agregué un ejemplo en el que puedes investigar cómo agregar múltiples sonidos. sound1
tiene la categoría de player
la segunda es de categoría ambient
que significa que el volumen del sonido se ve afectado por la configuración de volumen que el usuario ha establecido para los sonidos del reproductor / ambiente. name
es la propiedad más importante ya que apunta al recurso del sonido. El MODID
es el identificador de su MOD y es obligatorio ya que la Aplicación buscará en los recursos de su mod para el archivo, de lo contrario buscará en los recursos de Minecraft y no encontrará nada. La propiedad de stream
significa que el sonido se transmitirá desde el sistema de archivos, que solo es necesario para sonidos de más de 4 segundos.
El archivo de sounds.json
personalizado.json sounds.json
ir por debajo de la siguiente ruta:
/YourPath/src/main/resources/assets/MODID/sounds.json
Ahora podrás cargar los sonidos en el registro del juego. Así que tienes que crear una clase que está inicializando SoundEvent
s y manejando el registro.
public class SoundRegistrator {
public static final SoundEvent SOUND_1;
public static final SoundEvent SOUND_2;
static {
SOUND_1 = addSoundsToRegistry("sound1");
SOUND_2 = addSoundsToRegistry("sound2");
}
private static SoundEvent addSoundsToRegistry(String soundId) {
ResourceLocation shotSoundLocation = new ResourceLocation("MODID", soundId);
SoundEvent soundEvent = new SoundEvent(shotSoundLocation);
soundEvent.setRegistryName(shotSoundLocation);
return soundEvent;
}
}
Después tienes que crear un SoundRegisterListener
:
public class SoundRegisterListener {
@SubscribeEvent(priority = EventPriority.NORMAL, receiveCanceled = true)
public void registerSoundEvents(RegistryEvent.Register<SoundEvent> event) {
event.getRegistry().registerAll(SoundRegistrator.SOUND_1,SoundRegistrator.SOUND_2);
}
}
y regístrelo en MinecraftForge.EVENT_BUS
como:
MinecraftForge.EVENT_BUS.register(new SoundRegisterListener());
Finalmente podrás reproducir tus sonidos:
void playSound(SoundEvent sound) {
try {
if (Minecraft.getMinecraft().world.isRemote) {
EntityPlayerSP player = Minecraft.getMinecraft().player;
Minecraft.getMinecraft().world.playSound(player, player.getPosition(), sound, SoundCategory.PLAYERS, RandomGenerator.getNextRandomVolumeLoud(), 1.0F);
}
} catch (Exception ex) {
//Error happened
}
}
Enviando un comando
Este ejemplo muestra diferentes formas de ejecutar 'comandos' para Minecraft desde el código:
EntityPlayerSP player = Minecraft.getMinecraft().player;
player.sendChatMessage("/Command here");
enviar un comando en SinglePlayer