User Tools

Site Tools


de:tutorial:tools

Hinzufügen von Tools

Erstellen eines Tool Material

Tools benötigen ein ToolMaterial, welches folgendes Verhalten festlegt:

  • Haltbarkeit
  • Abbaugeschwindigkeit
  • Angriffsschaden
  • Abbaulevel
  • Verzauberbarkeit
  • Repairier Zutaten

In anderen Worten, Tool Materials definiert die Hauptfunktonalitä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 ToolMaterials. Wir werden eine separate Klasse für unser Material erstellen:

  1. public class PotatoToolMaterial implements ToolMaterial {
  2.  
  3. [...]
  4. }

ToolMaterial hat ein paar Methoden, die implementiert werden müssen:

Haltbarkeit

getDurability definiert die Grundhaltbarkeit von Werkzeugen, wenn sie dieses Material verwenden. In Vanilla haben alle Werkzeuge des gleichen Typs die gleiche Haltbarkeit.

  1. @Override
  2. public int getDurability() {
  3. return 500;
  4. }

Abbaugeschwindigkeit

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

  1. @Override
  2. public float getMiningSpeedMultiplier() {
  3. return 5.0F;
  4. }

Angriffsschanden

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

  1. @Override
  2. public float getAttackDamage() {
  3. return 3.0F;
  4. }

Abbau-Level

getMiningLevel legt das Mining-Level eines Werkzeugs fest. Diamant hat eine Abbaustufe von 3 und ein Wert von 3+ ist erforderlich, um Obsidian abzubauen.

  1. @Override
  2. public int getMiningLevel() {
  3. return 2;
  4. }

Verzauberbarkeit

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

  1. @Override
  2. public int getEnchantability() {
  3. return 15;
  4. }

Repairier Zutat

getRepairIngredient Gibt die Ingredient zurück, die benötigt wird, um ein Werkzeug in einem Amboss zu reparieren.

  1. @Override
  2. public Ingredient getRepairIngredient() {
  3. return Ingredient.ofItems(Items.POTATO);
  4. }

ToolMaterial 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:

  1. public class PotatoToolMaterial implements ToolMaterial {
  2.  
  3. public static final PotatoToolMaterial INSTANCE = new PotatoToolMaterial();
  4.  
  5. [...]
  6. }

PotatoToolMaterial kann nun mit referenziert werden PotatoToolMaterial.INSTANCE.

Erstellen von Tools

Alle Basistoolklassen (PickaxeItem, ShovelItem, HoeItem, AxeItem, SwordItem) benötigem ein ToolMaterial, eine Attackgeschwindigkeit (float), eine zusätzliche Angriffsschaden-Anzahl(float für AxeItem; int für den Rest), und eineItem.Settings Instanz.

  1. public static ToolItem POTATO_SHOVEL = new ShovelItem(PotatoToolMaterial.INSTANCE, 1.5F, -3.0F, new Item.Settings().method_7892(ItemGroup.field_7930));
  2. public static ToolItem POTATO_SWORD = new SwordItem(PotatoToolMaterial.INSTANCE, 3, -2.4F, new Item.Settings().method_7892(ItemGroup.field_7916));

PickaxeItem , HoeItem und AxeItem haben geschützte Konstruktoren, was heißt, dass du eine eigene Klasse mit öffendlichem Konstruktor generieren musst:

  1. public class CustomPickaxeItem extends PickaxeItem {
  2. public CustomPickaxeItem(ToolMaterial material, int attackDamage, float attackSpeed, Settings settings) {
  3. super(material, attackDamage, attackSpeed, settings);
  4. }
  5. }

Nutzung der öffendlichen Klassen:

public static ToolItem POTATO_PICKAXE = new CustomPickaxeItem(PotatoToolMaterial.INSTANCE, 1, -2.8F, new Item.Settings().method_7892(ItemGroup.field_7930));
public static ToolItem POTATO_AXE = new CustomAxeItem(PotatoToolMaterial.INSTANCE, 7.0F, -3.2F, new Item.Settings().method_7892(ItemGroup.field_7930));
public static ToolItem POTATO_HOE = new CustomHoeItem(PotatoToolMaterial.INSTANCE, 7, -3.2F, new Item.Settings().method_7892(ItemGroup.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 Item-Tutorial.

Mach deine Tools, dass mit Nicht-Vanilla Blöcken arbeitet

de/tutorial/tools.txt · Last modified: 2022/07/25 16:59 by richard5a