🇩🇪 Deutsch (German)
🇩🇪 Deutsch (German)
Erscheinungsbild
🇩🇪 Deutsch (German)
🇩🇪 Deutsch (German)
Erscheinungsbild
This page is written for:
1.21
This page is written for:
1.21
Die Rüstung bietet dem Spieler eine bessere Verteidigung gegen Angriffe von Mobs und anderen Spielern.
Genau wie Items und Blöcke müssen auch Rüstungsmaterialien registriert werden. Wir werden eine Klasse ModArmorMaterials
erstellen, um unsere benutzerdefinierten Rüstungsmaterialien zum Zweck der Organisation zu speichern.
Du musst eine statische Methode initialize()
zu dieser Klasse hinzufügen und sie vom Einstiegspunkt deines Mods aus aufrufen, damit die Materialien registriert werden.
// Within the ModArmorMaterials class
public static void initialize() {};
WARNING
Achte darauf, die Methode vor du das Item registrierst aufzurufen, da die Materialien registriert werden müssen, bevor das Item erstellt werden kann.
@Override
public void onInitialize() {
ModArmorMaterials.initialize();
}
Innerhalb dieser ModArmorMaterials
Klasse, musst du eine statische Methode erstellen, welche das Rüstungsmaterial registrieren wird. Diese Methode sollte einen Registrierungseintrag für das Material zurückgeben, da dieser Eintrag vom Rüstungsitem-Konstruktor zur Erstellung des Rüstungsitem verwendet wird.
public static RegistryEntry<ArmorMaterial> registerMaterial(String id, Map<ArmorItem.Type, Integer> defensePoints, int enchantability, RegistryEntry<SoundEvent> equipSound, Supplier<Ingredient> repairIngredientSupplier, float toughness, float knockbackResistance, boolean dyeable) {
// Get the supported layers for the armor material
List<ArmorMaterial.Layer> layers = List.of(
// The ID of the texture layer, the suffix, and whether the layer is dyeable.
// We can just pass the armor material ID as the texture layer ID.
// We have no need for a suffix, so we'll pass an empty string.
// We'll pass the dyeable boolean we received as the dyeable parameter.
new ArmorMaterial.Layer(Identifier.of(FabricDocsReference.MOD_ID, id), "", dyeable)
);
ArmorMaterial material = new ArmorMaterial(defensePoints, enchantability, equipSound, repairIngredientSupplier, layers, toughness, knockbackResistance);
// Register the material within the ArmorMaterials registry.
material = Registry.register(Registries.ARMOR_MATERIAL, Identifier.of(FabricDocsReference.MOD_ID, id), material);
// The majority of the time, you'll want the RegistryEntry of the material - especially for the ArmorItem constructor.
return RegistryEntry.of(material);
}
TIP
Wenn du Schwierigkeiten hast, einen guten Wert für eine dieser Eigenschaften zu finden, solltest du dir die Vanilla-Rüstungsmaterialien in der Klasse ArmorMaterials
ansehen.
Bei der Erstellung eines Rüstungsmaterials musst du die folgenden Eigenschaften festlegen:
WARNING
Vergewissere dich, dass du jeder Art von Rüstungsteil, die du erstellst und als Item registrieren willst, einen Wert zuweisen. Wenn du ein Item für ein Rüstungsteil ohne einen festgelegten Verteidigungspunktwert machst, wird das Spiel abstürzen.
Die Map defensePoints
wird verwendet, um die Anzahl der Verteidigungspunkte zu definieren, die jedes Rüstungsteil zur Verfügung stellen wird. Je höher die Zahl, desto mehr Schutz bietet das Rüstungsteil. Die Map sollte einen Eintrag für jeden Rüstungsteil-Typ enthalten.
Die Eigenschaft enchantability
bestimmt, wie leicht die Rüstung verzaubert werden kann. Je höher die Zahl, desto mehr Verzauberungen kann die Rüstung erhalten.
Die Eigenschaft equipSound
ist der Sound, der gespielt wird, wenn die Rüstung ausgerüstet wird. Dieser Sound sollte ein Registry-Eintrag eines SoundEvent
sein. Wirf einen Blick auf die Seite Benutzerdefinierte Soundevents, wenn du in Erwägung ziehst, benutzerdefinierte Sounds zu erstellen, anstatt dich auf Vanilla-Sounds innerhalb der Klasse SoundEvents
zu beruhen.
Die Eigenschaft repairIngredientSupplier
ist ein Lieferant einer Ingredient
, die zur Reparatur der Rüstung verwendet wird. Diese Zutat kann so ziemlich alles sein, es wird empfohlen, sie so einzustellen, dass sie mit der Herstellungszutat des Materials übereinstimmt, mit der die Rüstungsgegenstände tatsächlich hergestellt werden.
Die Eigenschaft toughness
bestimmt, wie viel Schaden die Rüstung absorbiert. Je höher die Zahl, desto mehr Schaden kann die Rüstung absorbieren.
Die Eigenschaft knockbackResistance
legt fest, wie viel Rückstoß der Spieler reflektiert, wenn er getroffen wird. Je höher die Zahl, desto weniger Rückschlag erhält der Spieler.
Die Eigenschaft dyeable
ist ein boolescher Wert, der angibt, ob die Rüstung gefärbt werden kann. Wenn diese Option auf true
gesetzt ist, kann die Rüstung mit Hilfe von Farbstoffen in einer Werkbank gefärbt werden.
Wenn du dich dafür entscheidest, deine Rüstung färbbar zu machen, muss die Texturen deiner Rüstungsebene und deines Items für das Färben ausgelegt sein, da die Farbe die Textur überlagert und nicht ersetzt. Schau dir zum Beispiel die Vanille-Lederrüstung an. Die Texturen sind in Graustufen gehalten und die Farbe wird als Overlay aufgetragen, wodurch die Rüstung ihre Farbe ändert.
Nachdem du nun eine Utility-Methode erstellt hast, die zur Registrierung von Rüstungsmaterialien verwendet werden kann, kannst du deine benutzerdefinierten Rüstungsmaterialien als statisches Feld in der Klasse ModArmorMaterials
registrieren.
In diesem Beispiel werden wir eine kreative Guidite-Rüstung mit den folgenden Eigenschaften verwenden:
public static final RegistryEntry<ArmorMaterial> GUIDITE = registerMaterial("guidite",
// Defense (protection) point values for each armor piece.
Map.of(
ArmorItem.Type.HELMET, 3,
ArmorItem.Type.CHESTPLATE, 8,
ArmorItem.Type.LEGGINGS, 6,
ArmorItem.Type.BOOTS, 3
),
// Enchantability. For reference, leather has 15, iron has 9, and diamond has 10.
5,
// The sound played when the armor is equipped.
SoundEvents.ITEM_ARMOR_EQUIP_IRON,
// The ingredient(s) used to repair the armor.
() -> Ingredient.ofItems(ModItems.SUSPICIOUS_SUBSTANCE),
0.0F,
0.0F,
// Guidite is NOT dyeable, so we will pass false.
false);
Nachdem du das Material registriert hast, kannst du die Rüstungsitems in deiner Klasse ModItems
erstellen:
Natürlich muss ein Rüstungsset nicht jeden Typ abdecken, man kann auch ein Set mit nur Stiefeln oder Hosen etc. haben. - Der Vanille-Schildkrötenpanzerhelm ist ein gutes Beispiel für ein Rüstungsset mit fehlenden Slots.
Im Gegensatz zu ToolMaterial
speichert ArmorMaterial
keine Informationen über die Haltbarkeit von Items. Aus diesem Grund muss die Haltbarkeit manuell zu den Item.Settings
der Rüstungsitems hinzugefügt werden, wenn diese registriert werden.
Dies kann durch die Methode maxDamage
in der Klasse Item.Settings
bewirkt werden. Die verschiedenen Rüstungsslots haben unterschiedliche Grundhaltbarkeiten, die üblicherweise mit einem gemeinsamen Multiplikator des Rüstungsmaterials multipliziert werden, es können aber auch fest kodierte Werte verwendet werden.
Für die Guidite-Rüstung werden wir einen gemeinsamen Multiplikator für die Rüstung verwenden, der zusammen mit dem Rüstungsmaterial gespeichert wird:
public static final int GUIDITE_DURABILITY_MULTIPLIER = 15;
Anschließend können wir die Rüstungsitems unter Verwendung der Haltbarkeitskonstante erstellen:
public static final Item GUIDITE_HELMET = register(new ArmorItem(ModArmorMaterials.GUIDITE, ArmorItem.Type.HELMET, new Item.Settings().maxDamage(ArmorItem.Type.HELMET.getMaxDamage(ModArmorMaterials.GUIDITE_DURABILITY_MULTIPLIER))), "guidite_helmet");
public static final Item GUIDITE_CHESTPLATE = register(new ArmorItem(ModArmorMaterials.GUIDITE, ArmorItem.Type.CHESTPLATE, new Item.Settings().maxDamage(ArmorItem.Type.CHESTPLATE.getMaxDamage(ModArmorMaterials.GUIDITE_DURABILITY_MULTIPLIER))), "guidite_chestplate");
public static final Item GUIDITE_LEGGINGS = register(new ArmorItem(ModArmorMaterials.GUIDITE, ArmorItem.Type.LEGGINGS, new Item.Settings().maxDamage(ArmorItem.Type.LEGGINGS.getMaxDamage(ModArmorMaterials.GUIDITE_DURABILITY_MULTIPLIER))), "guidite_leggings");
public static final Item GUIDITE_BOOTS = register(new ArmorItem(ModArmorMaterials.GUIDITE, ArmorItem.Type.BOOTS, new Item.Settings().maxDamage(ArmorItem.Type.BOOTS.getMaxDamage(ModArmorMaterials.GUIDITE_DURABILITY_MULTIPLIER))), "guidite_boots");
Außerdem musst du die Items einer Itemgruppe hinzufügen, wenn du möchtest, dass sie über das kreative Inventar zugänglich sind.
Wie bei allen Items solltest du auch für diese Übersetzungsschlüssel erstellen.
Du wirst zwei Sets von Texturen erstellen müssen:
Diese Texturen unterscheiden sich nicht von anderen Items - Du musst die Texturen erstellen und ein generisches Itemmodell erstellen, was in der Anleitung Erstellen des ersten Items behandelt wurde.
Als Beispiel dient das folgende Textur- und Modell-JSON als Referenz.
INFO
Du benötigst JSON-Modelldateien für alle Gegenstände, nicht nur für den Helm. Es ist das gleiche Prinzip wie bei anderen Itemmodellen.
{
"parent": "item/generated",
"textures": {
"layer0": "fabric-docs-reference:item/guidite_helmet"
}
}
Wie du sehen kannst, sollten die Rüstungsitems im Spiel geeignete Modelle haben:
Wenn eine Entität deine Rüstung trägt, wird die fehlende Textur angezeigt:
.
Es gibt zwei Schichten für die Rüstungstextur, beide müssen vorhanden sein.
Da der Name des Rüstungsmaterial in unserem Fall guidite
lautet, werden die Texturen wie folgt angeordnet:
assets/<mod-id>/textures/models/armor/guidite_layer_1.png
assets/<mod-id>/textures/models/armor/guidite_layer_2.png
Die erste Schicht enthält Texturen für den Helm und den Brustpanzer, während die zweite Schicht Texturen für Hosen und Stiefel enthält.
Wenn diese Texturen vorhanden sind, solltest du deine Rüstung auf Entitäten sehen können, die sie tragen:
.