====== Rüstung hinzufügen ======
==== Einführung ====
Rüstung ist zwar etwas komplizierter zu implementieren als ein normaler Block oder Gegenstand, aber sobald du es verstanden hast, wird sie einfach zu implementieren. Um eine Rüstung hinzuzufügen, erstellen wir zuerst eine ''CustomArmorMaterial''-Klasse und registrieren dann die Items. Wir werden uns auch ansehen, wie man sie texturiert. Am Ende dieses Dokuments gibt es ein spezielles Kapitel, das erklärt, wie man der Rüstung einen Rückstoß hinzufügt, da die Methode nur über ein Mixin zugänglich ist (ab 1.16.3).
Ein Beispiel für dieses Tutorial kann [[https://github.com/gdude2002/Gilded-Netherite|hier]] gefunden werden.
==== Erstellen einer Armor Material Klasse====
Da eine neue Rüstung mit einem neuen Namen festgelegt werden muss (sowie zusätzliche Dinge wie Rüstungspunkte und Haltbarkeit), müssen wir eine neue Klasse für unser ''CustomArmorMaterial'' erstellen.
Diese Klasse implementiert ''ArmorMaterial'' und beginnt mit der Zuweisung von Werten zu Rüstungspunkten (genannt ''PROTECTION_VALUES''). Alle folgenden Argumente verwenden ''@Overdrive''.
public class CustomArmorMaterial implements class_1741 {
private static final int[] BASE_DURABILITY = new int[] {13, 15, 16, 11};
private static final int[] PROTECTION_VALUES = new int[] {A, B, C, D};
// Wobei A Stiefel, B Leggings, C Brustpanzer und D Helm sind.
// Als Vergleich verwendet Leder {1, 2, 3, 1} und Diamond/Netherite {3, 6, 8, 3}
}
Die nächsten Argumente sind wie folgt definiert (mach dir keine Sorgen um die Namen, du wirst sehen, wie wir sie darunter implementieren):
- : Wie viele Treffer eine Rüstung aushalten kann, bevor sie bricht. Verwendet die Zahl, den wir auf ''BASE_DURABILITY'' geschrieben haben, um zu berechnen. Leder hält 5, Diamant 33, Netherit 37 aus.
- : Aufrufe für das ''PROTECTION_VALUES'' int, das wir oben bereits geschrieben haben.
- : Dies ist, wie wahrscheinlich es ist, dass die Rüstung in einem Verzauberungsbuch hochgradige oder mehrere Verzauberungen erhalten kann.
- : Der von Vanilla-Armor verwendete Standard ist ''SoundEvents.ITEM_ARMOR_EQUIP_X'', wobei X der Rüstungstyp ist.
- : Welchen Gegenstand werden wir verwenden, um die Rüstung auf einem Amboss zu reparieren? Es kann entweder ein Vanilla-Item oder ein eigenes Item sein.
- String : was das übergeordnete Item der Rüstung ist. In einer Diamantrüstung wäre es "diamond".
- : Dies ist ein zweiter Schutzwert, bei dem die Rüstung widerstandsfähiger gegen Angriffe mit hohem Wert ist. Wert geht als ''X.0F''
Und der neue Wert eingeführt in der 1.16
- : Lass diesen Wert auf 0. Wenn du es implementieren möchtest, schreibe ''0.XF'' (wobei X für den gewünschten Rückstoßschutz steht), wir werden später darauf eingehen, wie es funktioniert.
Lass alle Variablen als ''X'' oder ''A'', ''B'', ''C'', ''D'' geschrieben. Mit diesen Argumenten sollte es jetzt ungefähr so aussehen:
public class CustomArmorMaterial implements class_1741 {
private static final int[] BASE_DURABILITY = new int[] {13, 15, 16, 11};
private static final int[] PROTECTION_VALUES = new int[] {A, B, C, D};
@Override
public int method_7696(class_1304 slot) {
return BASE_DURABILITY[slot.method_5927()] * X;
}
@Override
public int method_7697(class_1304 slot) {
return PROTECTION_VALUES[slot.method_5927()];
}
@Override
public int method_7699() {
return X;
}
@Override
public class_3414 method_7698() {
return class_3417.ITEM_ARMOR_EQUIP_X;
}
@Override
public class_1856 method_7695() {
return class_1856.method_8091(RegisterItems.X);
}
@Override
public String method_7694() {
// alles muss in Kleinbuchstaben sein
return "name";
}
@Override
public float method_7700() {
return X.0F;
}
@Override
public float method_24355() {
return 0.XF;
}
}
Nachdem du nun die Grundlagen der Rüstungsmaterialklasse kennen, registrieren wir die Rüstungs-Items in einer neuen Klasse, die wir einfach RegisterItems nennen.
==== Erstellen von Rüstung-Items ====
Erstelle eine neue Klasse namens RegisterItems, um Ihre neuen Rüstungsteile zu implementieren. Dies wird auch ein Ort sein, zum Beispiel, zum registrieren von Werkzeugen, wenn du ein neues Item, wie ein Barren machen willst (bezeichne dies als "Custom_Material"). Durch diese Klasse werden die Items auch auf einem neuen Kreativ-Tab platziert, aber du kannst diesen Teil löschen.
Die Syntax von Gruppen ist ''.(DeinModName.DEIN_MOD_NAME_ABER_IN_GROSSBUCHSTABEN)''. Ich werde es als ExampleMod bezeichnen:
public class RegisterItems {
public static final class_1741 CUSTOM_ARMOR_MATERIAL = new CustomArmorMaterial();
public static final class_1792 CUSTOM_MATERIAL = new CustomMaterialItem(new class_1792.class_1793().method_7892(ExampleMod.EXAMPLE_MOD_GROUP));
// If you made a new material, this is where you would note it.
public static final class_1792 CUSTOM_MATERIAL_HELMET = new class_1738(CUSTOM_ARMOR_MATERIAL, class_1304.field_6169, new class_1792.class_1793().method_7892(ExampleMod.EXAMPLE_MOD_GROUP));
public static final class_1792 CUSTOM_MATERIAL_CHESTPLATE = new class_1738(CUSTOM_ARMOR_MATERIAL, class_1304.field_6174, new class_1792.class_1793().method_7892(ExampleMod.EXAMPLE_MOD_GROUP));
public static final class_1792 CUSTOM_MATERIAL_LEGGINGS = new class_1738(CUSTOM_ARMOR_MATERIAL, class_1304.field_6172, new class_1792.class_1793().method_7892(ExampleMod.EXAMPLE_MOD_GROUP));
public static final class_1792 CUSTOM_MATERIAL_BOOTS = new class_1738(CUSTOM_ARMOR_MATERIAL, class_1304.field_6166, new class_1792.class_1793().method_7892(ExampleMod.EXAMPLE_MOD_GROUP));
}
Nachdem deine Items nun ordnungsgemäß erstellt wurden, registrieren wir sie und geben ihnen die richtigen Namen. Ihr erster Parameter wird die Mod-ID sein, und dann der Name, den du deinem Gegenstand geben möchten.
Wir werden dies direkt unter deinen letzten schreiben.
public static void register() {
class_2378.method_10230(class_2378.field_11142, new class_2960("examplemod", "custom_material"), CUSTOM_MATERIAL);
class_2378.method_10230(class_2378.field_11142, new class_2960("examplemod", "custom_material_helmet"), CUSTOM_MATERIAL_HELMET);
class_2378.method_10230(class_2378.field_11142, new class_2960("examplemod", "custom_material_chestplate"), CUSTOM_MATERIAL_CHESTPLATE);
class_2378.method_10230(class_2378.field_11142, new class_2960("examplemod", "custom_material_leggings"), CUSTOM_MATERIAL_LEGGINGS);
class_2378.method_10230(class_2378.field_11142, new class_2960("examplemod", "custom_material_boots"), CUSTOM_MATERIAL_BOOTS);
}
Deine Rüstungs-Items sind fertig! Jetzt rufen wir einfach die Registry in unserer Hauptklasse auf (und kommentieren die neue Gruppe).
public static final class_1761 EXAMPLE_MOD_GROUP = FabricItemGroupBuilder.create(
new class_2960("examplemod", "example_mod_group"))
.icon(() -> new class_1799(RegisterItems.CUSTOM_MATERIAL)) // This uses the model of the new material you created as an icon, but you can reference to whatever you like
.build();
@Override
public void onInitialize() {
RegisterItems.register();
}
Fertig! Deine Rüstung sollte jetzt im Spiel existieren, zwar noch untexturiert, aber vorhanden und mit /give kannst du es dir geben.
Weiter geht's mit den Texturen für jedes Teil.
==== Texturing ====
Du brauchst
* eine Textur für jedes Rüstungs-Item (x_helmet.png, x_chestplate.png, x_leggins.png, x_boots.png)
* eine Textur für die Rüstung am Körper (x_layer_1.png and x_layer_2.png)
Weise nun alle Texturen zu ihren Items.
Das Folgende sollte bei allen Rüstungsgegenständen gleich sein und nur ändern, welches Teil wir verwenden. Wir verwenden Helm für unser Beispiel.
{
"parent": "item/generated",
"textures": {
"layer0": "examplemod:item/custom_material_helmet"
}
}
Mach dies für alle Rüstungsteile.
Normalerweise werden Mod-Texturen unter ''resources/assets/'', aber **Rüstungstexturen gehen jedoch in das Minecraft-Verzeichnis**:
Um deiner Am-Körper-Rüstung eine Textur zu verleihen, platziere ''X_layer_1.png'' und ''X_layer_2.png'' (wobei X das -Argument ist, das du in der ArmorMaterial-Klasse festgelegt hast) in ''resources/assets/minecraft/textures/models/armor''.
Wenn du alles befolgt hast, solltest du jetzt in der Lage sein, ein vollständiges Rüstungsset zu haben!