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 hier gefunden werden.
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 ArmorMaterial { 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):
BASE_DURABILITY
geschrieben haben, um zu berechnen. Leder hält 5, Diamant 33, Netherit 37 aus.PROTECTION_VALUES
int, das wir oben bereits geschrieben haben.SoundEvents.ITEM_ARMOR_EQUIP_X
, wobei X der Rüstungstyp ist.X.0F
Und der neue Wert eingeführt in der 1.16
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 ArmorMaterial { 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(EquipmentSlot slot) { return BASE_DURABILITY[slot.getEntitySlotId()] * X; } @Override public int method_7697(EquipmentSlot slot) { return PROTECTION_VALUES[slot.getEntitySlotId()]; } @Override public int getEnchantability() { return X; } @Override public SoundEvent getEquipSound() { return SoundEvents.ITEM_ARMOR_EQUIP_X; } @Override public Ingredient getRepairIngredient() { return Ingredient.ofItems(RegisterItems.X); } @Override // alles muss in Kleinbuchstaben sein return "name"; } @Override public float getToughness() { return X.0F; } @Override public float getKnockbackResistance() { 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.
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 .method_7892(DeinModName.DEIN_MOD_NAME_ABER_IN_GROSSBUCHSTABEN)
. Ich werde es als ExampleMod bezeichnen:
public class RegisterItems { public static final ArmorMaterial CUSTOM_ARMOR_MATERIAL = new CustomArmorMaterial(); public static final Item CUSTOM_MATERIAL = new CustomMaterialItem(new Item.Settings().method_7892(ExampleMod.EXAMPLE_MOD_GROUP)); // If you made a new material, this is where you would note it. public static final Item CUSTOM_MATERIAL_HELMET = new ArmorItem(CUSTOM_ARMOR_MATERIAL, EquipmentSlot.HEAD, new Item.Settings().method_7892(ExampleMod.EXAMPLE_MOD_GROUP)); public static final Item CUSTOM_MATERIAL_CHESTPLATE = new ArmorItem(CUSTOM_ARMOR_MATERIAL, EquipmentSlot.CHEST, new Item.Settings().method_7892(ExampleMod.EXAMPLE_MOD_GROUP)); public static final Item CUSTOM_MATERIAL_LEGGINGS = new ArmorItem(CUSTOM_ARMOR_MATERIAL, EquipmentSlot.LEGS, new Item.Settings().method_7892(ExampleMod.EXAMPLE_MOD_GROUP)); public static final Item CUSTOM_MATERIAL_BOOTS = new ArmorItem(CUSTOM_ARMOR_MATERIAL, EquipmentSlot.FEET, new Item.Settings().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 ArmorItem schreiben.
public static void register() { }
Deine Rüstungs-Items sind fertig! Jetzt rufen wir einfach die Registry in unserer Hauptklasse auf (und kommentieren die neue Gruppe).
public static final ItemGroup EXAMPLE_MOD_GROUP = FabricItemGroupBuilder.create( new Identifier("examplemod", "example_mod_group")) .icon(() -> new ItemStack(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.
Du brauchst
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/<modid>
, 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 getName-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!