minecraft
Erstellen eines Basiselements mit Schmiede
Suche…
Einführung
Das Erstellen eines einfachen Gegenstands 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 benutzerdefiniertes Element eine fehlende Textur (schwarz / violett) oder ein Modell (Standardwürfel ist zu groß beim Halten) aufweist, ü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, welches Element 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).
Artikelklasse
Dieser Teil hat die Versionen von Minecraft nicht viel verändert, obwohl die Methodensignaturen und die Klassenhierarchie einige Mutationen aufwiesen. Ein grundlegendes Element (eines, das keine Funktionalität hat, wie z. B. ein Stock oder ein Barren: das ist richtig, beide sind Nichtselbstartikel!)
public class CustomItem extends Item {
public CustomItem () {
super();
this.setMaxDamage(0);
this.setCreativeTab(CreativeTabs.MISC);
}
}
Im Gegensatz zu Blöcken ist an dieser Stelle nicht viel Raum für Anpassungen. Alles, was wir tun können, ist zu ändern, ob der Gegenstand Schaden nehmen kann oder nicht (die Werkzeuge verwenden dies) und in welchem Creative-Tab er vorhanden sein wird.
Dies ist jedoch alles, was benötigt wird, um den Gegenstand zu halten, zu transportieren, fallen zu lassen, zu basteln, zu schmelzen und anderweitig zu verwenden. Einige Gegenstände in Minecraft (z. B. Stöcke) haben nicht einmal eine eindeutige Klasse und verwenden einfach den new Item()
. Wir könnten das hier tun, aber jeder Artikel mit zusätzlicher Funktionalität wird eine Klasse benötigen.
Artikelmodell
Wie bei Blöcken benötigen Artikel auch Modelle.
{
"parent": "item/generated",
"textures": {
"layer0": "example:items/basic"
}
}
Das ist so ziemlich alles, was benötigt wird, um zu funktionieren, sobald der Artikel registriert ist. Wichtig ist nur, dass der Dateiname mit dem Registrierungsnamen übereinstimmt, der für die Registrierung des Blocks verwendet wird, und er muss in Kleinbuchstaben angegeben werden (1.11-Dateinamen müssen Kleinbuchstaben sein, davor ist nur die Groß- und Kleinschreibung zu beachten).
Beachten Sie, dass "layer0" die einzige Textur ist, die benötigt wird, und es ist sehr unwahrscheinlich, dass überhaupt eine andere Textur angegeben wird (obwohl einige Elemente wie Tränke und Lederrüstung eine "layer1" haben). Alle Namen werden im Gegensatz zu Blöcken durch item/builtin
(das interne oberste übergeordnete Modell für Elemente) definiert.
my_item.json
die Modell-JSON-Datei my_item.json
(entsprechend dem Registrierungsnamen, den wir später my_item.json
), und speichern Sie sie unter src\main\resources\assets\example\models\item\
(wobei in diesem example
die Mod-ID steht @Mod Annotation Ihrer Hauptmod-Klasse).
Erstellen Sie zusätzlich eine Textur für Ihren Artikel, benennen Sie ihn basic.png
und speichern Sie ihn unter src\main\resources\assets\example\textures\items\
Das Elementmodell verwendet hier ein übergeordnetes Element / Element, das heißt, die einzeln bereitgestellte Textur wird verwendet (wie bei den meisten Nicht-Block-Elementen) und wird in der Standardausrichtung in der Hand des Spielers gehalten. Es gibt auch einen Artikel / Handheld, der verschiedene Anzeigeausrichtungen (für Werkzeuge) festlegt. Elemente können auch ein eigenes "display" -Attribut bereitstellen, das die Werte des übergeordneten Elements überschreibt, aber in 99,9% der Verwendungszwecke nicht erforderlich ist.
Artikelregistrierung
Das Registrieren von Elementen erfolgt über Ihre Hauptmod-Klasse oder eine ModItems-Klassenmethode, die von der Hauptmod-Klasse während preInit aufgerufen wird.
Item item = new CustomItem();
string registryname = "my_item";
item.setRegistryName(registryname);
item.setUnlocalizedName(item.getRegistryName().toString());
GameRegistry.register(item);
Es gibt einen wichtigen Grund, item.setUnlocalizedName(item.getRegistryName().toString());
auch! Dadurch wird sichergestellt, dass der nicht lokalisierte Name des Elements die Mod-ID enthält, um Sprachdateikonflikte zwischen Mods zu vermeiden.
Jetzt benötigt das Element auch ein Modell, und an diesem Punkt wurde es nach 1.7.10 schwierig, da Minecraft nur der Name der zu ladenden Textur mitteilte und im Konstruktor des Elements angegeben werden konnte.
final ModelResourceLocation fullModelLocation = new ModelResourceLocation(item.getRegistryName().toString(), "inventory");
ModelBakery.registerItemVariants(item, fullModelLocation);
ModelLoader.setCustomMeshDefinition(item, new ItemMeshDefinition()
{
public ModelResourceLocation getModelLocation(ItemStack stack)
{
return fullModelLocation;
}
});
Beachten Sie, dass dieser Abschnitt muss nur clientseitige befinden (dh der Client - Proxy) , da viele der referenzierten Klassen existieren nicht auf dem dedizierten Server.
Registrieren Artikel mit Varianten zB Schösslinge, hat eine andere Art und Weise durchgeführt werden, unter Verwendung von ModelLoader.setCustomModelResourceLocation(item, metadata, resourceLocation)
, obwohl es uns eine Blockstate Datei verwenden kann , um unsere Varianten angeben (die die Alternative bevorzugten viel ist). Unser Artikel verwendet keine Varianten, also sind wir fertig.