minecraft
Erstellen eines Basisblocks mit Forge
Suche…
Einführung
Das Erstellen eines einfachen dekorativen Blocks mit Forge ist eine der ersten Aufgaben, die ein aufstrebender Modder erlernen muss. Wie man das macht, hat sich in den verschiedenen Versionen von Minecraft geändert und befindet sich wahrscheinlich nach 1.7.10 in einem "mittelschweren" Schwierigkeitsgrad.
Bemerkungen
Wenn etwas schief geht und Ihr benutzerdefinierter Block (entweder beim Platzieren oder Halten) eine fehlende Textur (schwarz / violett) oder ein Modell (Standardwürfel, der beim Halten zu groß ist) enthält, überprüfen Sie das Protokoll. Probleme dieser Art werden fast immer im Protokoll angezeigt, vorausgesetzt, Sie haben die Dinge richtig registriert.
Das erste, was angezeigt wird, ist die Zeile "Exception loading model for variant..."
oder ähnliches, die Ihnen mitteilt, welcher Block oder Artikel nicht ordnungsgemäß geladen wurde. Nach einem Dutzend oder so Zeilen beginnend mit at...
wird beginnt eine andere Linie Caused by...
Diese "Caused By" -Zeile ist die wichtige, sie sagt Ihnen, welche Datei nicht richtig geladen wurde und kann einer von mehreren Fehlern sein, wie zum Beispiel:
- Fehlerhaftes JSON (Ihre JSON-Datei ist ungültig und hat einen Tippfehler)
- Datei nicht gefunden (die Datei, die Minecraft sucht, ist nicht richtig benannt oder an der richtigen Stelle)
- Fehlende Variantenausnahme (Ihr Blockstate-JSON ist unvollständig)
Sie können sogar mehr als einen Fehler für einen einzelnen Fehler erhalten! Wenn Sie nicht wissen, welcher Block das Problem ist, kommentieren Sie jeden Block und jedes Element, von dem Sie wissen, dass es funktioniert, und reduzieren Sie die Fehlerliste auf den betreffenden Block (oder die Blöcke). Möglicherweise müssen Sie dies mehrmals tun.
Darüber hinaus zeigt eine Mischtextur als eine einfache Liste alle fehlenden Ressourcen für eine bestimmte Domäne (Mod-ID).
Die Blockklasse
Zuerst brauchen wir eine Klasse, die den Block darstellt
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);
}
}
Auch hier gibt es mehrere Modifikationen: Material (das bestimmte Eigenschaften bestimmt, z. B. das Drücken durch Kolben und ob es von Hand zerbrochen werden kann), die Härte (wie lange es dauert zu brechen), das Erntenniveau (geeignetes Werkzeug und Werkzeug) Material: in diesem Fall hölzerne Spitzhacke), Widerstand (vs. Explosionen), Registerkarte, die im Kreativmenü angezeigt wird, und welchen Schritt es hat.
Hier müssen alle Funktionsblöcke installiert werden, aber jetzt erstellen wir einen Block, der einfach gut aussieht, also sind wir fertig.
Das Blockmodell JSON
Als Nächstes müssen wir Minecraft mitteilen, wie unser Block aussehen soll.
{
"parent": "block/cube_all",
"textures": {
"all": "example:blocks/decorative"
}
}
Das ist so ziemlich alles, was benötigt wird, um zu funktionieren, sobald der Block registriert ist. Das einzig Wichtige ist , dass der Dateiname der Registrierung Namen übereinstimmen verwendet , um den Block zu registrieren und in Kleinbuchstaben sein sollte (1.11+ Dateinamen klein geschrieben sein müssen, um vor , dass es nur zwischen Groß- und Klein).
Nennen Sie das Modell JSON - Datei my_block.json
(Anpassung der Registry Namen wir es gehst später geben) und speichern Sie es in src\main\resources\assets\example\models\block\
(wobei example
ist die Mod - ID in der angegebenen @Mod Annotation Ihrer Hauptmod-Klasse).
Das Blockmodell verwendet hier ein übergeordnetes Element von block / cube_all. Dies bedeutet, dass die einzeln gelieferte Textur auf allen Flächen verwendet wird. Es gibt auch andere Standardmodelle wie:
- Block / Würfel (alle sechs Gesichter unabhängig voneinander zugewiesen)
- block / cube_bottom_top (Ober- und Unterseite unabhängig von den Seiten)
- Block / orientierbar (Richtblende, zB Ofen)
- Block / Kreuz (Blumen, hohes Gras)
- Block / Ernte (Weizen, Karotten)
Beachten Sie, dass jedes Modell die verwendeten Texturen anhand einer Namens-ID angibt (z. B. "all"
oder "top"
). Sehen Sie sich das übergeordnete Modell an, um zu ermitteln, wie diese Namen aussehen, wenn Sie unsicher sind. Falsch angegebene Texturen können dazu führen, dass Texturprobleme nicht fehlerfrei gemeldet werden .
Es ist auch möglich, ein vollständig benutzerdefiniertes Modell oder ein benutzerdefiniertes übergeordnetes Modell zu erstellen. Aber jetzt reicht das aus.
Vergessen Sie nicht, eine Textur zu erstellen, nennen Sie sie decorative.png
(wie in der JSON-Datei angegeben) und speichern Sie sie unter src\main\resources\assets\example\textures\blocks\
Registrierung sperren
Das Registrieren von Blöcken erfolgt über Ihre Hauptmod-Klasse oder eine ModBlocks-Klassenmethode, die von der Hauptmod-Klasse während preInit aufgerufen wird.
Block myBlock = new CustomBlock();
string registryname = "my_block";
block.setRegistryName(registryname);
block.setUnlocalizedName(block.getRegistryName().toString());
GameRegistry.register(block);
Es gibt einen wichtigen Grund, block.setUnlocalizedName(block.getRegistryName().toString());
auch! Es stellt sicher, dass Ihre nicht lokalisierten Namen (und Elemente) die Mod-ID enthalten, um Sprachdateikonflikte zwischen Mods zu vermeiden.
Sie möchten auch eine Artikelversion, damit diese auch in Ihrem Inventar vorhanden sein kann? Das wird separat nach 1.7.10 erstellt und so gemacht:
ItemBlock ib = new ItemBlock(block);
ib.setRegistryName(registryname);
GameRegistry.register(ib);
Beachten Sie, dass wir den Registrierungsnamen von ItemBlock auf dieselbe Zeichenfolge wie unseren Block setzen. So können Sie Forge- und Matchblöcke mit ihrem Gegenstück ItemBlock und umgekehrt abgleichen.
Aber warte, es gibt noch mehr!
Ihr Block hat möglicherweise ein Elementformular , aber dieses Element hat noch kein Modell oder keine Textur! Modelle werden automatisch für Blöcke registriert, nicht jedoch für Elemente. Dieser kann nur vom Client Proxy aus aufgerufen werden und deckt keine Blöcke mit Varianten ab (z. B. Wolle oder Blätter).
ModelLoader.setCustomModelResourceLocation(
ib , 0, new ModelResourceLocation(ib.getRegistryName(),"normal"));
Im Allgemeinen benötigen Sie kein Item Model JSON, da Forge und Vanilla stattdessen auf das Modell des Blocks zurückgreifen. Dies ist jedoch nicht immer der Fall. Wenn Sie feststellen, dass Sie einen Artikelmodell-JSON benötigen, überordnen Sie ihn einfach Ihrem Block-JSON und speichern Sie ihn unter src\main\resources\assets\example\models\item\
mit demselben Dateinamen wie der Registrierungsname des Blocks.
{
"parent": "example:block/my_block"
}