N1xx1 610 Inviato Giugno 27, 2012 NOTA: SE NON HAI UN MINIMO DI CONOSCIENZA JAVA VAI DA UN'ALTRA PARTE. Non voglio perdere troppo tempo a spiegare con codici già fatti che i nabbi possano copiaincollare. In questa piccola guida spiegherò come settare l'ambiente di sviluppo per minecraft Forge e la struttura base della mod. Diamo per scontato che già sapete come settare MCP e la IDE che sceglierete per programmare. Scaricate i sorgenti da qua (src): http://files.minecraftforge.net/ Scompattando l'archivio troverete una cartella Forge. Mettete la cartella dentro la cartella dove avete precedente messo MCP. Avviate un cleanup (fate un backup delle vostre modifiche se non l'avete già fatto) e mettete dentro jars/bin un minecraft.jar NON modificato e anche minecraft_server.jar non modificato dentro jars. E' importante mettere entrambi, altrimenti Forge non si installerà. Andate dentro la cartella Forge e avviate l'install.cmd. Il programma installerà direttamente i componenti, decompilerà minecraft e sarete pronti per scrivere le mod con forge. Per quanto riguarda i sorgenti, ci sono delle cartelle dentro forge (commons e client) che contengono i file di forge, e la solita cartella src di minecraft con common, minecraft e minecraft_server. Se usate eclipse avete già tutto pronto dentro la cartella eclipse/ ma se usate un'altra ide bisogna sistemare un po' di cose. La cartella che userete per tutti i file sarà common. Per invece mettere le cose solo nel client le dovete mettere dentro minecraft. Le cose che invece sono per solo il server vanno dentro minecraft_server. Con l'unificazione di server e client ora le cose sono un po' diverse. Non si deve sviluppare una mod per client e una mod per server, ma si deve scrivere una mod per server estesa a client. Il concetto è che dentro il client ci sarà sempre un server che è uguale a quello separato. La differenza tra server e client sono quindi tutte le cose che riguardano il rendering. Queste su Forge vengono implementate con i Proxy, ma lo vedremo dopo. Forge è basato su FML (Forge Mod Loader) sviluppato da cpw. Non usate il ModLoader. ------------------------------ Portare una mod a Forge Ok, il metodo che usa FML per le mod è davvero diverso rispetto a ModLoader. Primo cambiamento facilmente notabile è che le classi principali delle mod non iniziano con il solito "mod_" ma possono avere un nome qualunque. In oltre non devono estendere BaseMod o NetworkMod. Per creare la classe principale della mod si devono quindi usare delle annotazioni: @Mod(modid="LMM", name="La Mia Mod", version="0.1") @NetworkMod(clientSideRequired = true, serverSideRequired = false) public class LaMiaMod { La prima annotazione Mod indica a FML l'id della mod (non so di preciso a che cosa serva), il nome e la versione. La seconda annotazione NetworkMod serve a indicare come funziona la mod nei server. clientSideRequired indica che deve essere presente sempre e comunque nel client, serverSideRequired indica che deve essere presente sempre e comunque nel server, quindi non si può giocare a nessun server con la mod non installata. Ok, ora servono i metodi principali. Anche questi si fanno con le annotazioni: @PreInit public void omgPreparati(FMLPreInitializationEvent evento) { // Prima dell'inizializzazione } @Init public void inizializzazioneDellaMiaMod(FMLInitializationEvent evento) { // Inizializzazione } @PostInit public void hoFinito(FMLPostInitializationEvent evento) { // Dopo l'inizializzazione } Si usano le annotazioni come indicato e il nome della funzione può essere uno qualunque. Il singolo paramentro è l'evento. Molto in stile Bukkit. Altra cosa abbastanza importante con l'aggiornamento di FML è l'utilizzo dei Proxy. Sostanzialmente, i Proxy sono delle classi che ti permettono l'utilizzo di una classe uguale per i diversi applicativi. In FML è utilizzata per client e server. La cosa fondamentale per cui sono usati i proxy è la registrazione di texture nel client. I proxy usati sono due, CommonProxy come base per server e client, e ClientProxy per il client. Il Client estende sempre il Common. il CommonProxy e il ClientProxy dovrebbero avere una struttura del genere: public class CommonProxy { public void registerTextures() { // codice non implementato nel server } } public class ClientProxy extends CommonProxy{ public void registerTextures() { MinecraftForgeClient.preloadTexture("/path/to/texture.png"); } } Poi vengono registrati nella classe della mod. @SidedProxy(clientSide = "package.to.ClientProxy", serverSide = "package.to.CommonProxy") public static CommonProxy proxy; // Viene inizializzato da solo. E richiamati ovunque. Per le texture nell'init. proxy.registerTextures(); In pratica con questo la classe della mod è unica per server e client e il proxy viene riempito con CommonProxy se è il server o con ClientProxy se è il client. Se è il server non succede nulla perché il metodo registerTextures è vuoto. Se è il client, invece, esegue quello che è sovrascritto nel ClientProxy. Condividi questo messaggio Link di questo messaggio Condividi su altri siti
Ian Maayrkas 2581 Inviato Giugno 27, 2012 Se non ricordo male bisogna anche precaricare la texture, anche se onestamente non ho idea di cosa voglia dire in pratica. Ciao Ian Condividi questo messaggio Link di questo messaggio Condividi su altri siti
N1xx1 610 Inviato Giugno 27, 2012 Se non ricordo male bisogna anche precaricare la texture, anche se onestamente non ho idea di cosa voglia dire in pratica. Ciao Ian Già... Mi sono scordato. A quanto pare sei più esperto di me.... Condividi questo messaggio Link di questo messaggio Condividi su altri siti
Ian Maayrkas 2581 Inviato Giugno 27, 2012 Già... Mi sono scordato. A quanto pare sei più esperto di me.... Ma anche no Ciao Ian Condividi questo messaggio Link di questo messaggio Condividi su altri siti
VladPutin 461 Inviato Giugno 28, 2012 Piccolo problemino, clickare su "immagini" mi porta ad una qualche vaccata statistica nazionale con tanto di mp3 di congratulazioni in sottofondo Comunque ti lovvo, anche se con la mia voglia di fare difficilmente dovrò usarla :3 Condividi questo messaggio Link di questo messaggio Condividi su altri siti
N1xx1 610 Inviato Settembre 8, 2012 Aggiornamento in corso a Minecraft 1.3.2 Condividi questo messaggio Link di questo messaggio Condividi su altri siti
Odiniox 32 Inviato Settembre 12, 2012 Aggiornamento in corso a Minecraft 1.3.2 Continua con la guida, è molto utile, spieghi bene facendo capire come funzionano le cose. Non con il solito copia e incolla. Dovresti avere più visualizzazioni. Condividi questo messaggio Link di questo messaggio Condividi su altri siti
N1xx1 610 Inviato Settembre 17, 2012 Proxies ! Condividi questo messaggio Link di questo messaggio Condividi su altri siti
eBlooxUniversal 236 Inviato Settembre 18, 2012 E bravo nuno Condividi questo messaggio Link di questo messaggio Condividi su altri siti
GieccoPunto 1106 Inviato Ottobre 8, 2012 NOTA: SE NON HAI UN MINIMO DI CONOSCIENZA JAVA VAI DA UN'ALTRA PARTE. Non voglio perdere troppo tempo a spiegare con codici già fatti che i nabbi possano copiaincollare. In questa piccola guida spiegherò come settare l'ambiente di sviluppo per minecraft Forge e la struttura base della mod. Diamo per scontato che già sapete come settare MCP e la IDE che sceglierete per programmare. Scaricate i sorgenti da qua (Souce): http://www.minecraft...pic,1200.0.html Scompattando l'archivio troverete una cartella Forge. Mettete la cartella dentro la cartella dove avete precedente messo MCP. Avviate un cleanup (fate un backup delle vostre modifiche se non l'avete già fatto) e mettete dentro jars/bin un minecraft.jar NON modificato e anche minecraft_server.jar non modificato dentro jars. E' importante mettere entrambi, altrimenti Forge non si installerà. Andate dentro la cartella Forge e avviate l'install.cmd. Il programma installerà direttamente i componenti, decompilerà minecraft e sarete pronti per scrivere le mod con forge. Per quanto riguarda i sorgenti, ci sono delle cartelle dentro forge (commons e client) che contengono i file di forge, e la solita cartella src di minecraft con common, minecraft e minecraft_server. Se usate eclipse avete già tutto pronto dentro la cartella eclipse/ ma se usate un'altra ide bisogna sistemare un po' di cose. La cartella che userete per tutti i file sarà common. Per invece mettere le cose solo nel client le dovete mettere dentro minecraft. Le cose che invece sono per solo il server vanno dentro minecraft_server. Con l'unificazione di server e client ora le cose sono un po' diverse. Non si deve sviluppare una mod per client e una mod per server, ma si deve scrivere una mod per server estesa a client. Il concetto è che dentro il client ci sarà sempre un server che è uguale a quello separato. La differenza tra server e client sono quindi tutte le cose che riguardano il rendering. Queste su Forge vengono implementate con i Proxy, ma lo vedremo dopo. Forge è basato su FML (Forge Mod Loader) sviluppato da cpw. Non usate il ModLoader. ------------------------------ Portare una mod a Forge Ok, il metodo che usa FML per le mod è davvero diverso rispetto a ModLoader. Primo cambiamento facilmente notabile è che le classi principali delle mod non iniziano con il solito "mod_" ma possono avere un nome qualunque. In oltre non devono estendere BaseMod o NetworkMod. Per creare una classe si deve principale della mod si devono quindi usare delle annotazioni: @Mod(modid="LMM", name="La Mia Mod", version="0.1") @NetworkMod(clientSideRequired = true, serverSideRequired = false) public class LaMiaMod { La prima annotazione Mod indica a FML l'id della mod (non so di preciso a che cosa serva), il nome e la versione. La seconda annotazione NetworkMod serve a indicare come funziona la mod nei server. clientSideRequired indica che deve essere presente sempre e comunque nel client, serverSideRequired indica che deve essere presente sempre e comunque nel server, quindi non si può giocare a nessun server con la mod non installata. Ok, ora servono i metodi principali. Anche questi si fanno con le annotazioni: @PreInit public void omgPreparati(FMLPreInitializationEvent evento) { // Prima dell'inizializzazione } @Init public void inizializzazioneDellaMiaMod(FMLInitializationEvent evento) { // Inizializzazione } @PostInit public void hoFinito(FMLPostInitializationEvent evento) { // Dopo l'inizializzazione } Si usano le annotazioni come indicato e il nome della funzione può essere uno qualunque. Il singolo paramentro è l'evento. Molto in stile Bukkit. Altra cosa abbastanza importante con l'aggiornamento di FML è l'utilizzo dei Proxy. Sostanzialmente, i Proxy sono delle classi che ti permettono l'utilizzo di una classe uguale per i diversi applicativi. In FML è utilizzata per client e server. La cosa fondamentale per cui sono usati i proxy è la registrazione di texture nel client. I proxy usati sono due, CommonProxy come base per server e client, e ClientProxy per il client. Il Client estende sempre il Common. il CommonProxy e il ClientProxy dovrebbero avere una struttura del genere: public class CommonProxy { public void registerTextures() { // codice non implementato nel server } } public class ClientProxy extends CommonProxy{ public void registerTextures() { MinecraftForgeClient.preloadTexture("/path/to/texture.png"); } } Poi vengono registrati nella classe della mod. @SidedProxy(clientSide = "package.to.ClientProxy", serverSide = "package.to.CommonProxy") public static CommonProxy proxy; // Viene inizializzato da solo. E richiamati ovunque. Per le texture nell'init. proxy.registerTextures(); In pratica con questo la classe della mod è unica per server e client e il proxy viene riempito con CommonProxy se è il server o con ClientProxy se è il client. Se è il server non succede nulla perché il metodo registerTextures è vuoto. Se è il client, invece, esegue quello che è sovrascritto nel ClientProxy. Per le basi rimangono la registrazione dei blocchi e dei nomi. Domaniiiiiiiiiiii.... N1xx1 visto che sei esperto in java creeresti una guida sulle basi del modding partendo da zero? Condividi questo messaggio Link di questo messaggio Condividi su altri siti
N1xx1 610 Inviato Ottobre 8, 2012 N1xx1 visto che sei esperto in java creeresti una guida sulle basi del modding partendo da zero? Definisci "zero". Condividi questo messaggio Link di questo messaggio Condividi su altri siti
GieccoPunto 1106 Inviato Ottobre 8, 2012 Definisci "zero". In poche parole fai conto che stai parlando con una persona che n.on sa niente Condividi questo messaggio Link di questo messaggio Condividi su altri siti
N1xx1 610 Inviato Ottobre 8, 2012 In poche parole fai conto che stai parlando con una persona che n.on sa niente Allora no, mi spiace. Condividi questo messaggio Link di questo messaggio Condividi su altri siti
GieccoPunto 1106 Inviato Ottobre 8, 2012 Allora no, mi spiace. Ok grazie comunque. oppure potresti fare una guida su come creare un nuovo blocco spawnabile... Condividi questo messaggio Link di questo messaggio Condividi su altri siti
alexlion564 1 Inviato Ottobre 27, 2012 aggiornerai alla 1.4.2? Condividi questo messaggio Link di questo messaggio Condividi su altri siti
N1xx1 610 Inviato Ottobre 28, 2012 aggiornerai alla 1.4.2? Non c'è bisogno. Condividi questo messaggio Link di questo messaggio Condividi su altri siti
alexlion564 1 Inviato Ottobre 28, 2012 perchè il pacchetto funziona anche alla 1.4.2? Condividi questo messaggio Link di questo messaggio Condividi su altri siti
alexlion564 1 Inviato Ottobre 28, 2012 a me da errore quando apro install Condividi questo messaggio Link di questo messaggio Condividi su altri siti
N1xx1 610 Inviato Ottobre 28, 2012 a me da errore quando apro install Niente doppi post... Comunque sì, scusa, devo cambiare il link. Condividi questo messaggio Link di questo messaggio Condividi su altri siti
alexlion564 1 Inviato Ottobre 28, 2012 forge ha fatto uscire quella della 1.4.2 aggiorna i link Condividi questo messaggio Link di questo messaggio Condividi su altri siti
Mrshawfrost2000 705 Inviato Novembre 20, 2012 Niente doppi post... Comunque sì, scusa, devo cambiare il link. ei N1xx1 saro io il moncappato ma: quando avvio l'install.bat dentro la cartella fml ma mi dice che il pyton_mcp non è ricosciuto come path,variabile ecc. ecc.,come devo fare... niente scusa,avevo sbagliato a scaricare D: Condividi questo messaggio Link di questo messaggio Condividi su altri siti
Jason 677 Inviato Novembre 20, 2012 In poche parole fai conto che stai parlando con una persona che n.on sa niente Da zero è veramente tosta, rischiando di non capire una beata ******* Poi per Java io penso bisogna partire dal C, e C++ che mi pare sia simile Condividi questo messaggio Link di questo messaggio Condividi su altri siti
Kolima 841 Inviato Novembre 21, 2012 Si, ok, lo so che ora mi frusterai, ma mi potresti dire DOVE posso imparare le basi di Java? Magari un libro su eBay, un sito internet etc. P.S. Non so veramente nulla di tutto ció e vorrei imparare. Se ti disturbo, scusami. Condividi questo messaggio Link di questo messaggio Condividi su altri siti
N1xx1 610 Inviato Novembre 21, 2012 Si, ok, lo so che ora mi frusterai, ma mi potresti dire DOVE posso imparare le basi di Java? Magari un libro su eBay, un sito internet etc. P.S. Non so veramente nulla di tutto ció e vorrei imparare. Se ti disturbo, scusami. http://javamattone.4it.it/javamattone.pdf Condividi questo messaggio Link di questo messaggio Condividi su altri siti
Kolima 841 Inviato Novembre 21, 2012 http://javamattone.4it.it/javamattone.pdf Ti ringrazio infinitamente :D Condividi questo messaggio Link di questo messaggio Condividi su altri siti