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



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow