minecraft
Modding con Forge
Ricerca…
Sintassi
- MODID = rappresenta l'identificatore del MOD
- MODPath = indica il percorso completo della directory qualificata nella cartella mod
Osservazioni
Questo argomento dovrebbe contenere schemi / esempi più usati e codice ben collaudato per modificare l'applicazione di Minecraft con forge. Forse questo può sostituire un giorno la documentazione ufficiale.
Modello di implementazione per proxy di inizializzazione
Questo esempio mostra come implementare le classi proxy per la tua applicazione Modec Minecraft, che vengono utilizzate per inizializzare la tua mod.
Prima di tutto dovrai implementare la classe CommonProxy.java di base che contiene il 3 metodo utilizzato principalmente:
public class CommonProxy {
public void preInit(FMLPreInitializationEvent e) {}
public void init(FMLInitializationEvent e) {}
public void postInit(FMLPostInitializationEvent e) {}
}
Normalmente la tua mod ha 2 pacchetti diversi per Client e Server Code, quindi avrai bisogno in ogni pacchetto di una classe figlia di CommonProxy.java come:
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);
}
}
e per il server:
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);
}
}
Dopo aver creato queste classi, puoi estenderle con metodi che devono essere eseguiti solo sul lato client o server, ma puoi anche collegarli ad entrambi se chiami i metodi nella classe 'base'.
Infine, devi definire quale proxy è preso in fase di runtime. Devi estendere la tua classe mod principale con l'annotazione @Mod
, da:
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;
Questo consentirà a Forge di rilevare quale classe dovrebbe essere presa in fase di runtime. Nei metodi di inizializzazione del tuo Mod ora puoi usare questa proprietà PROXY statica.
@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);
}
Aggiunta di suoni personalizzati al tuo MOD
Questo esempio ti mostra come aggiungi nuovi suoni alla tua MOD e li suoni. Prima di tutto hai bisogno di un file audio che abbia il formato *.ogg
. Qualsiasi altro formato non è consentito dall'applicazione Minecraft e sarà respinto.
Il file audio ha il nome: sound1.ogg
Metti il file audio nel seguente percorso:
/YourPath/src/main/resources/assets/MODID/sounds/sound1.ogg
Sostituisci 'MODID' con l'identificatore che hai definito per il tuo MOD
Quindi devi creare una sounds.json
nella sounds.json
UTF-8 (Standard) che definisce nome, risorsa, ... e altre cose per il tuo suono personalizzato. Questo file sarà simile a:
{
"sound1": {
"category" : "player",
"sounds": [{
"name": "MODID:sound1",
"stream": false
}
]
},
"sound2": {
"category" : "ambient",
"sounds": [{
"name": "MODID:subfolder/sound2",
"stream": true
}
]
}
}
Come spiegazione per questo suono.
Sono definiti 2 suoni definiti, in quanto ho aggiunto un esempio per cui è possibile studiare come aggiungere suoni multipli. sound1
ha il player
categoria player
il secondo è di categoria ambient
che significa che il volume del suono è influenzato dalle impostazioni del volume che l'utente ha impostato per i suoni player / ambient. name
è la proprietà più importante in quanto punta alla risorsa del suono. Il MODID
è l'identificativo del tuo MOD ed è obbligatorio in quanto l'applicazione cercherà nelle risorse del tuo mod per il file, altrimenti cercherà nelle risorse di Minecraft e non troverà nulla. La proprietà stream
significa che il suono verrà trasmesso in streaming dal file system, che è necessario solo per suoni più lunghi di 4 secondi.
Il tuo file sounds.json
personalizzato deve andare sotto il seguente percorso:
/YourPath/src/main/resources/assets/MODID/sounds.json
Ora sarai in grado di caricare i suoni nel registro del gioco. Quindi devi creare una classe che sta inizializzando SoundEvent
e gestendo la registrazione.
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;
}
}
In seguito devi creare 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);
}
}
e registrarlo su MinecraftForge.EVENT_BUS
come:
MinecraftForge.EVENT_BUS.register(new SoundRegisterListener());
Finalmente sarai in grado di suonare i tuoi suoni:
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
}
}
Invio di un comando
Questo esempio mostra diversi modi per eseguire "comandi" per Minecraft dal codice:
EntityPlayerSP player = Minecraft.getMinecraft().player;
player.sendChatMessage("/Command here");
per inviare un comando in SinglePlayer