====== Hinzufügen von Tools ====== ==== Erstellen eines Tool Material ==== Tools benötigen ein '''', welches folgendes Verhalten festlegt: * Haltbarkeit * Abbaugeschwindigkeit * Angriffsschaden * Abbaulevel * Verzauberbarkeit * Repairier Zutaten In anderen Worten, Tool Materials definiert die //Haupt//funktonalität für Tools dieses Typs, und Tools können wählen, ob sie die vom Material bereitgestellten Werte verwenden oder mit ihren eigenen arbeiten wollen. Vanilla Tool Materials finden Sie unter ''''. Wir werden eine separate Klasse für unser Material erstellen: public class PotatoToolMaterial implements class_1832 { [...] } '''' hat ein paar Methoden, die implementiert werden müssen: === Haltbarkeit === '''' definiert die Grundhaltbarkeit von Werkzeugen, wenn sie dieses Material verwenden. In Vanilla haben alle Werkzeuge des gleichen Typs die gleiche Haltbarkeit. @Override public int method_8025() { return 500; } === Abbaugeschwindigkeit === '''' definiert, wie schnell Tools beim Mining von Blöcken sind. Für einen allgemeinen Maßstabssinn hat Holz eine Geschwindigkeit von 2,0F ​​und Diamant eine Geschwindigkeit von 8,0F. @Override public float method_8027() { return 5.0F; } === Angriffsschanden === '''' gibt die Menge an Schaden zurück, die das Werkzeug macht. Beachte, dass die //meisten// Tools in ihrem Konstruktor nach einem ''Integer''-Schadensbetrag verlangen, was bedeutet, dass der resultierende Schaden ''materalDamage + (int) toolDamage + 1'' ist. If you want your tool to entirely control its damage amount in its constructor, you can make your material return an attack damage of 0F. @Override public float method_8028() { return 3.0F; } === Abbau-Level === '''' legt das Mining-Level eines Werkzeugs fest. Diamant hat eine Abbaustufe von 3 und ein Wert von 3+ ist erforderlich, um Obsidian abzubauen. @Override public int method_8024() { return 2; } === Verzauberbarkeit === '''' definiert, wie verzauberbar ein Werkzeug ist. Gold liegt bei 22 Verzauberbarkeit, während Diamant bei 10 liegt. Höhere Verzauberbarkeit bedeutet bessere (und höherstufige) Verzauberungen. @Override public int method_8026() { return 15; } === Repairier Zutat === '''' Gibt die '''' zurück, die benötigt wird, um ein Werkzeug in einem Amboss zu reparieren. @Override public class_1856 method_8023() { return class_1856.method_8091(class_1802.field_8567); } '''' müssen nicht registriert werden.Eine gute Möglichkeit, sie an Tools weiterzugeben, die sie benötigen, besteht darin, irgendwo eine Instanz zu speichern (und dann bei Bedarf darauf zu verweisen). In diesem Fall setzen wir unsere Instanz an die Spitze der Tool Material-Klasse: public class PotatoToolMaterial implements class_1832 { public static final PotatoToolMaterial INSTANCE = new PotatoToolMaterial(); [...] } ''PotatoToolMaterial'' kann nun mit referenziert werden ''PotatoToolMaterial.INSTANCE''. ==== Erstellen von Tools ==== Alle Basistoolklassen ('''', '''', '''', '''', '''') benötigem ein '''', eine Attackgeschwindigkeit (float), eine zusätzliche Angriffsschaden-Anzahl(float für ; int für den Rest), und eine'''' Instanz. public static class_1831 POTATO_SHOVEL = new class_1821(PotatoToolMaterial.INSTANCE, 1.5F, -3.0F, new class_1792.class_1793().method_7892(class_1761.field_7930)); public static class_1831 POTATO_SWORD = new class_1829(PotatoToolMaterial.INSTANCE, 3, -2.4F, new class_1792.class_1793().method_7892(class_1761.field_7916)); '''' , '''' und '''' haben geschützte Konstruktoren, was heißt, dass du eine eigene Klasse mit öffendlichem Konstruktor generieren musst: public class CustomPickaxeItem extends class_1810 { public CustomPickaxeItem(class_1832 material, int attackDamage, float attackSpeed, class_1793 settings) { super(material, attackDamage, attackSpeed, settings); } } Nutzung der öffendlichen Klassen: public static class_1831 POTATO_PICKAXE = new CustomPickaxeItem(PotatoToolMaterial.INSTANCE, 1, -2.8F, new class_1792.class_1793().method_7892(class_1761.field_7930)); public static class_1831 POTATO_AXE = new CustomAxeItem(PotatoToolMaterial.INSTANCE, 7.0F, -3.2F, new class_1792.class_1793().method_7892(class_1761.field_7930)); public static class_1831 POTATO_HOE = new CustomHoeItem(PotatoToolMaterial.INSTANCE, 7, -3.2F, new class_1792.class_1793().method_7892(class_1761.field_7930)); Wenn du deinem Tool spezielle Attribute oder Verhaltensweisen hinzufügen möchtest, erstelle eine Unterklasse, die eine der Basistoolklassen erweitert, und überschreibe alle erforderlichen Methoden. ==== Registrierung von Tools ==== Für eine Zusammenfassung der Registrierung von Gegenständen lese das [[de:tutorial:items|Item-Tutorial]]. ==== Mach deine Tools, dass mit Nicht-Vanilla Blöcken arbeitet==== Besuche die Sektion auf [[https://fabricmc.net/wiki/tutorial:mining_levels]]