|
| 1 | +--- |
| 2 | +title: Generierung von Verzauberungen |
| 3 | +description: Ein Leitfaden zur Generierung von Verzauberungen mit dem Datengenerator. |
| 4 | +authors: |
| 5 | + - CelDaemon |
| 6 | +--- |
| 7 | + |
| 8 | +<!----> |
| 9 | + |
| 10 | +:::info VORAUSSETZUNGEN |
| 11 | + |
| 12 | +Stelle sicher, dass du den Prozess der [Einrichtung des Datengenerators](./setup) zuerst abgeschlossen hast. |
| 13 | + |
| 14 | +::: |
| 15 | + |
| 16 | +## Einrichtung {#setup} |
| 17 | + |
| 18 | +Bevor du den Generator implementierst, erstelle das Paket `enchantment` im Hauptquellensatz und füge die Klasse `ModEnchantments` zu diesem hinzu. Dann füge die Methode `key` zu dieser neuen Klasse hinzu. |
| 19 | + |
| 20 | +@[code transcludeWith=:::key-helper](@/reference/latest/src/main/java/com/example/docs/enchantment/ModEnchantments.java) |
| 21 | + |
| 22 | +Nutze diese Methode, um einen `ResourceKey` für deine Verzauberung zu erstellen. |
| 23 | + |
| 24 | +@[code transcludeWith=:::register-enchantment](@/reference/latest/src/main/java/com/example/docs/enchantment/ModEnchantments.java) |
| 25 | + |
| 26 | +Jetzt sind wir bereit, den Generator hinzuzufügen. Erstelle im Paket datagen eine Klasse, die von `FabricDynamicRegistryProvider` erbt. Füge in diese neu erstellte Klasse einen Konstruktor hinzu, der mit `super` übereinstimmt, und implementiere die Methoden `configure` und `getName`. |
| 27 | + |
| 28 | +@[code transcludeWith=:::provider](@/reference/latest/src/client/java/com/example/docs/datagen/ExampleModEnchantmentGenerator.java) |
| 29 | + |
| 30 | +Füge dann eine Hilfsmethode `register` zu der neu erstellen Klasse hinzu. |
| 31 | + |
| 32 | +@[code transcludeWith=:::register-helper](@/reference/latest/src/client/java/com/example/docs/datagen/ExampleModEnchantmentGenerator.java) |
| 33 | + |
| 34 | +Füge jetzt die Methode `bootstrap` hinzu. Hier werden wir die Verzauberungen registrieren, die wir zum Spiel hinzufügen wollen. |
| 35 | + |
| 36 | +@[code transcludeWith=:::bootstrap](@/reference/latest/src/client/java/com/example/docs/datagen/ExampleModEnchantmentGenerator.java) |
| 37 | + |
| 38 | +Überschreibe in deinem `DataGeneratorEntrypoint` die Methode `buildRegistry` und registriere unsere Methode bootstrap. |
| 39 | + |
| 40 | +@[code transcludeWith=:::datagen-enchantments:bootstrap](@/reference/latest/src/client/java/com/example/docs/datagen/ExampleModDataGenerator.java) |
| 41 | + |
| 42 | +Stelle schließlich sicher, dass dein neuer Generator innerhalb der Methode `onInitializeDataGenerator` registriert ist. |
| 43 | + |
| 44 | +@[code transcludeWith=:::datagen-enchantments:register](@/reference/latest/src/client/java/com/example/docs/datagen/ExampleModDataGenerator.java) |
| 45 | + |
| 46 | +## Die Verzauberung erstellen {#creating-the-enchantment} |
| 47 | + |
| 48 | +Um die Definition für unsere benutzerdefinierte Verzauberung zu erstellen, verwenden wir die Methode `register` in unserer Generator-Klasse. |
| 49 | + |
| 50 | +Registriere deine Verzauberung in der Methode `bootstrap` des Generators unter Verwendung der in `ModEnchantments` registrierten Verzauberung. |
| 51 | + |
| 52 | +In diesem Beispiel verwenden wir den in [Benutzerdefinierte Verzauberungseffekte](../items/custom-enchantment-effects) erstellten Verzauberungseffekt, aber du kannst auch die [Vanilla Verzauberungseffekte](https://minecraft.wiki/w/Enchantment_definition#Effect_components) verwenden. |
| 53 | + |
| 54 | +@[code transcludeWith=:::register-enchantment](@/reference/latest/src/client/java/com/example/docs/datagen/ExampleModEnchantmentGenerator.java) |
| 55 | + |
| 56 | +Führen nun einfach die Datengenerierung aus, und deine neue Verzauberung wird im Spiel verfügbar sein! |
| 57 | + |
| 58 | +## Effektbedingungen {#effect-conditions} |
| 59 | + |
| 60 | +Die meisten Verzauberungseffekte sind bedingte Effekte. Beim Hinzufügen dieser Effekte ist es möglich, Bedingungen an den Aufruf von `withEffect` zu übergeben. |
| 61 | + |
| 62 | +::: info |
| 63 | + |
| 64 | +Eine Übersicht über die verfügbaren Zustandstypen und deren Verwendung findest du in der Klasse `Enchantments` (https://mcsrc.dev/#1/1.21.11_unobfuscated/net/minecraft/world/item/enchantment/Enchantments#L126). |
| 65 | + |
| 66 | +::: |
| 67 | + |
| 68 | +@[code transcludeWith=:::effect-conditions](@/reference/latest/src/client/java/com/example/docs/datagen/ExampleModEnchantmentGenerator.java) |
| 69 | + |
| 70 | +## Mehrere Effekte {#multiple-effects} |
| 71 | + |
| 72 | +`withEffect` kann verkettet werden, um einer einzelnen Verzauberung mehrere Verzauberungseffekte hinzuzufügen. Bei dieser Methode musst du jedoch die Effektbedingungen für jeden Effekt angeben. |
| 73 | + |
| 74 | +Um stattdessen die definierten Bedingungen und Ziele über mehrere Effekte hinweg zu teilen, kann `AllOf` verwendet werden, um sie zu einem einzigen Effekt zusammenzufassen. |
| 75 | + |
| 76 | +@[code transcludeWith=:::multiple-effects](@/reference/latest/src/client/java/com/example/docs/datagen/ExampleModEnchantmentGenerator.java) |
| 77 | + |
| 78 | +Beachte, dass die zu verwendende Methode vom Typ des hinzugefügten Effekts abhängt. Zum Beispiel benötigt `EnchantmentValueEffect` stattdessen `AnyOf.valueEffects`. Unterschiedliche Effekt-Typen erfordern weiterhin zusätzliche Aufrufe von `withEffect`. |
| 79 | + |
| 80 | +## Verzauberungstisch {#enchanting-table} |
| 81 | + |
| 82 | +Obwohl wir das Gewicht der Verzauberung (oder die Wahrscheinlichkeit) in unserer Verzauberungsdefinition angegeben haben, wird es standardmäßig nicht im Zaubertisch angezeigt. Damit unsere Verzauberung von Dorfbewohnern gehandelt werden kann und im Zaubertisch erscheint, müssen wir sie zum Tag `non_treasure` hinzufügen. |
| 83 | + |
| 84 | +Dazu können wir einen Tag Provider erstellen. Erstelle in dem Paket `datagen` eine Klasse, die von `FabricTagProvider<Enchantment>` erbt. Implementiere dann den Konstruktor mit `Registries.ENCHANTMENT` als Parameter `registryKey` für `super` und erstelle die Methode `addTags`. |
| 85 | + |
| 86 | +@[code transcludeWith=:::provider](@/reference/latest/src/client/java/com/example/docs/datagen/ExampleModEnchantmentTagProvider.java) |
| 87 | + |
| 88 | +Wir können jetzt unsere Verzauberung zu `EnchantmentTags.NON_TREASURE` hinzufügen, indem wir den Builder aus der Methode `addTags` heraus aufrufen. |
| 89 | + |
| 90 | +@[code transcludeWith=:::non-treasure-tag](@/reference/latest/src/client/java/com/example/docs/datagen/ExampleModEnchantmentTagProvider.java) |
| 91 | + |
| 92 | +## Flüche {#curses} |
| 93 | + |
| 94 | +Flüche werden auch mit Tags implementiert. Wir können den Tag Provider aus dem [Abschnitt der Zaubertisch](#enchanting-table) verwenden. |
| 95 | + |
| 96 | +Füge in der Methode `addTags` einfach deine Verzauberung zum Tag `CURSE` hinzu, um sie als Fluch zu kennzeichnen. |
| 97 | + |
| 98 | +@[code transcludeWith=:::curse-tag](@/reference/latest/src/client/java/com/example/docs/datagen/ExampleModEnchantmentTagProvider.java) |
0 commit comments