Table of Contents

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 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.

  1. public class CustomArmorMaterial implements ArmorMaterial {
  2. private static final int[] BASE_DURABILITY = new int[] {13, 15, 16, 11};
  3. private static final int[] PROTECTION_VALUES = new int[] {A, B, C, D};
  4.  
  5. // Wobei A Stiefel, B Leggings, C Brustpanzer und D Helm sind.
  6. // Als Vergleich verwendet Leder {1, 2, 3, 1} und Diamond/Netherite {3, 6, 8, 3}
  7. }

Die nächsten Argumente sind wie folgt definiert (mach dir keine Sorgen um die Namen, du wirst sehen, wie wir sie darunter implementieren):

  1. method_7696: 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.
  2. method_7697: Aufrufe für das PROTECTION_VALUES int, das wir oben bereits geschrieben haben.
  3. getEnchantability: Dies ist, wie wahrscheinlich es ist, dass die Rüstung in einem Verzauberungsbuch hochgradige oder mehrere Verzauberungen erhalten kann.
  4. SoundEvent getEquipSound: Der von Vanilla-Armor verwendete Standard ist SoundEvents.ITEM_ARMOR_EQUIP_X, wobei X der Rüstungstyp ist.
  5. Ingredient getRepairIngredient: 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.
  6. String getName: was das übergeordnete Item der Rüstung ist. In einer Diamantrüstung wäre es “diamond”.
  7. getToughness: 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

  1. getKnockbackResistance: 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:

  1. public class CustomArmorMaterial implements ArmorMaterial {
  2. private static final int[] BASE_DURABILITY = new int[] {13, 15, 16, 11};
  3. private static final int[] PROTECTION_VALUES = new int[] {A, B, C, D};
  4.  
  5. @Override
  6. public int method_7696(EquipmentSlot slot) {
  7. return BASE_DURABILITY[slot.getEntitySlotId()] * X;
  8. }
  9.  
  10. @Override
  11. public int method_7697(EquipmentSlot slot) {
  12. return PROTECTION_VALUES[slot.getEntitySlotId()];
  13. }
  14.  
  15. @Override
  16. public int getEnchantability() {
  17. return X;
  18. }
  19.  
  20. @Override
  21. public SoundEvent getEquipSound() {
  22. return SoundEvents.ITEM_ARMOR_EQUIP_X;
  23. }
  24.  
  25. @Override
  26. public Ingredient getRepairIngredient() {
  27. return Ingredient.ofItems(RegisterItems.X);
  28. }
  29.  
  30. @Override
  31. public String getName() {
  32. // alles muss in Kleinbuchstaben sein
  33. return "name";
  34. }
  35.  
  36. @Override
  37. public float getToughness() {
  38. return X.0F;
  39. }
  40.  
  41. @Override
  42. public float getKnockbackResistance() {
  43. return 0.XF;
  44. }
  45. }

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 .method_7892(DeinModName.DEIN_MOD_NAME_ABER_IN_GROSSBUCHSTABEN). Ich werde es als ExampleMod bezeichnen:

  1. public class RegisterItems {
  2.  
  3. public static final ArmorMaterial CUSTOM_ARMOR_MATERIAL = new CustomArmorMaterial();
  4. public static final Item CUSTOM_MATERIAL = new CustomMaterialItem(new Item.Settings().method_7892(ExampleMod.EXAMPLE_MOD_GROUP));
  5. // If you made a new material, this is where you would note it.
  6. public static final Item CUSTOM_MATERIAL_HELMET = new ArmorItem(CUSTOM_ARMOR_MATERIAL, EquipmentSlot.HEAD, new Item.Settings().method_7892(ExampleMod.EXAMPLE_MOD_GROUP));
  7. public static final Item CUSTOM_MATERIAL_CHESTPLATE = new ArmorItem(CUSTOM_ARMOR_MATERIAL, EquipmentSlot.CHEST, new Item.Settings().method_7892(ExampleMod.EXAMPLE_MOD_GROUP));
  8. public static final Item CUSTOM_MATERIAL_LEGGINGS = new ArmorItem(CUSTOM_ARMOR_MATERIAL, EquipmentSlot.LEGS, new Item.Settings().method_7892(ExampleMod.EXAMPLE_MOD_GROUP));
  9. public static final Item CUSTOM_MATERIAL_BOOTS = new ArmorItem(CUSTOM_ARMOR_MATERIAL, EquipmentSlot.FEET, new Item.Settings().method_7892(ExampleMod.EXAMPLE_MOD_GROUP));
  10.  
  11. }

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.

  1. public static void register() {
  2. Registry.register(Registry.field_11142, new Identifier("examplemod", "custom_material"), CUSTOM_MATERIAL);
  3. Registry.register(Registry.field_11142, new Identifier("examplemod", "custom_material_helmet"), CUSTOM_MATERIAL_HELMET);
  4. Registry.register(Registry.field_11142, new Identifier("examplemod", "custom_material_chestplate"), CUSTOM_MATERIAL_CHESTPLATE);
  5. Registry.register(Registry.field_11142, new Identifier("examplemod", "custom_material_leggings"), CUSTOM_MATERIAL_LEGGINGS);
  6. Registry.register(Registry.field_11142, new Identifier("examplemod", "custom_material_boots"), CUSTOM_MATERIAL_BOOTS);
  7. }

Deine Rüstungs-Items sind fertig! Jetzt rufen wir einfach die Registry in unserer Hauptklasse auf (und kommentieren die neue Gruppe).

  1. public static final ItemGroup EXAMPLE_MOD_GROUP = FabricItemGroupBuilder.create(
  2. new Identifier("examplemod", "example_mod_group"))
  3. .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
  4. .build();
  5.  
  6. @Override
  7. public void onInitialize() {
  8. RegisterItems.register();
  9. }

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

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.

resources/assets/examplemod/models/item/custom_material_helmet.json
{
	"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!