Vai al contenuto
Il server del mese è
Visita la nostra nuova lista server!

Archiviato

Questa discussione è archiviata e chiusa a future risposte.

N1xx1

[Modding] Forge Basic

Recommended Posts

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

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

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

Già... Mi sono scordato. A quanto pare sei più esperto di me....

Ma anche no :rotfl:

Ciao

Ian

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

Piccolo problemino, clickare su "immagini" mi porta ad una qualche vaccata statistica nazionale con tanto di mp3 di congratulazioni in sottofondo :asd:

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

Aggiornamento in corso a Minecraft 1.3.2

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

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. :sisi:

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

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 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

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

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

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

aggiornerai alla 1.4.2?

Non c'è bisogno.

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

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

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

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 ******* :rotfl:

Poi per Java io penso bisogna partire dal C, e C++ che mi pare sia simile :beer:

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

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

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

×
×
  • Crea Nuovo...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.