Ricerca…


introduzione

Creare un blocco semplice e decorativo con Forge è uno dei primi compiti che un aspirante modder dovrà imparare. Come farlo è cambiato rispetto alle varie versioni di Minecraft ed è probabilmente in una difficoltà "moderata" dopo 1.7.10 a causa del numero di errori facili da fare.

Osservazioni

Se qualcosa va storto e il tuo blocco personalizzato (sia posizionato o trattenuto) ha una trama mancante (nero / viola) o un modello (cubo predefinito troppo grande quando è trattenuto) controlla il registro. I problemi di questo tipo compariranno quasi sempre nel registro, a condizione che tu abbia registrato le cose correttamente.

La prima cosa che verrà mostrata è la riga "Exception loading model for variant..." o simile, che ti dice quale blocco o oggetto non è stato caricato correttamente. Dopo una dozzina di linee che iniziano con at... sarà un'altra linea di partenza Caused by...

Questa linea "Causato da" è importante, ti dirà quale file non è stato caricato correttamente e può essere uno dei vari errori, come ad esempio:

  • JSON malformato (il tuo file JSON non è valido e ha un errore di battitura)
  • File non trovato (il file che Minecraft sta cercando non è correttamente chiamato o nel posto giusto)
  • Eccezione Variant mancante (il tuo JSON BlockState è incompleto)

Potresti anche ottenere più di un errore di errore per un singolo errore! Se non sai quale blocco è il problema, commenta ogni blocco e elemento che sai funzionare, riduci l'elenco degli errori fino al blocco (o ai blocchi) in questione. Potrebbe essere necessario farlo più volte.

Inoltre, una texture di mixaggio mostra in modo diverso come un semplice elenco tutte le risorse mancanti per un dato dominio (mod ID).

La classe di blocchi

Per prima cosa abbiamo bisogno di una classe che rappresenti il ​​blocco

public class CustomBlock extends Block {

    public CustomBlock () {
        super(Material.ROCK);
        setHardness(1.0f);
        setHarvestLevel("pickaxe", 0);
        setResistance(1.0f);
        setCreativeTab(CreativeTabs.DECORATIONS);
        this.setSoundType(SoundType.STONE);
    }
}

Anche qui ci sono diverse modifiche disponibili: il materiale (che governa alcune proprietà come poter essere spinto dai pistoni e se può essere rotto a mano), la durezza (il tempo necessario per spezzarsi), il livello di raccolta (strumento e strumento appropriati) materiale: in questo caso il piccone in legno), resistenza (contro le esplosioni), la scheda visualizzata nel menu creativo e il suono del passo.

Qui è dove dovranno andare tutti i fantasiosi blocchi di funzionalità, ma per ora stiamo facendo un blocco che sembra bello, quindi abbiamo finito.

Il modello di blocco JSON

Quindi dobbiamo dire a Minecraft cosa vogliamo che il nostro blocco assomigli.

{
    "parent": "block/cube_all",
    "textures": {
        "all": "example:blocks/decorative"
    }
}

Questo è praticamente tutto ciò che è necessario per farlo funzionare una volta che il blocco è stato registrato. L'unica cosa importante è che il nome del file corrisponda al nome del registro usato per registrare il blocco e debba essere in minuscolo (i nomi dei file 1.11+ devono essere in minuscolo, prima di questo è solo la distinzione tra maiuscole e minuscole).

Denominare il file JSON modello my_block.json (corrispondente al nome del registro che verrà assegnato in seguito) e salvarlo su src\main\resources\assets\example\models\block\ (dove l' example è l'ID mod specificato nel @Mod annotazione della tua classe mod principale).

Il modello a blocchi usa un genitore di block / cube_all, il che significa che la singola texture fornita verrà usata su tutte le facce. Esistono anche altri modelli predefiniti, come ad esempio:

  • blocco / cubo (tutte e sei le facce assegnate indipendentemente)
  • block / cube_bottom_top (facce superiore e inferiore indipendenti dai lati)
  • blocco / orientabile (blocco orientabile, ad es. forno)
  • blocco / croce (fiori, erba alta)
  • blocco / raccolto (grano, carote)

Si noti che ciascun modello specifica le trame utilizzate da un ID nome (ad esempio "all" o "top" ). Guarda il modello genitore per determinare quali sono quei nomi se non sei sicuro. Le texture specificate in modo errato possono portare a problemi di texture mancanti che non segnalano errori .

È anche possibile creare un modello interamente personalizzato o creare un modello principale personalizzato. Ma per ora, questo sarà sufficiente.

Non dimenticare di creare una texture, chiamala decorative.png (come è specificato dal file JSON) e salvala su src\main\resources\assets\example\textures\blocks\

Registrazione del blocco

La registrazione dei blocchi viene effettuata dalla classe mod principale o da un metodo di classe ModBlocks richiamato dalla classe mod principale durante preInit.

Block myBlock = new CustomBlock();
string registryname = "my_block";
block.setRegistryName(registryname);
block.setUnlocalizedName(block.getRegistryName().toString());
GameRegistry.register(block);

C'è un motivo importante per usare block.setUnlocalizedName(block.getRegistryName().toString()); anche! Garantisce che i nomi unlocalizzati del blocco (e dell'oggetto) contengono l'ID mod per evitare conflitti tra i file di linguaggio tra le mod.

Oh vuoi anche una versione per oggetti in modo che possa esistere anche nel tuo inventario? Questo è creato separatamente post 1.7.10 e fatto così:

ItemBlock ib = new ItemBlock(block);
ib.setRegistryName(registryname);
GameRegistry.register(ib);

Si noti che abbiamo impostato il nome del registro ItemBlock sulla stessa stringa del nostro blocco. Ecco come Forgiare e abbinare i blocchi alla loro controparte ItemBlock e viceversa.

Ma aspetta, c'è di più!

Il tuo blocco potrebbe avere un modulo oggetto , ma quell'elemento non ha ancora un modello o una trama! I modelli vengono automaticamente registrati per i blocchi, ma non per gli articoli. Questo può essere chiamato solo dal Client Proxy e non copre i blocchi con varianti (come lana o foglie).

ModelLoader.setCustomModelResourceLocation(
    ib , 0, new ModelResourceLocation(ib.getRegistryName(),"normal"));

In linea generale, non sarà necessario un modello JSON come modello, mentre Forge e vanilla ricadranno sul modello del blocco, tuttavia non è sempre il caso. Se si scopre che è necessario un JSON modello Item, basta aggiungerlo al blocco JSON e salvarlo in src\main\resources\assets\example\models\item\ con lo stesso nome file del nome del registro del blocco.

{
    "parent": "example:block/my_block"
}


Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow