diff --git a/translated/de_de/develop/data-generation/block-models.md b/translated/de_de/develop/data-generation/block-models.md
new file mode 100644
index 000000000..439f87c4e
--- /dev/null
+++ b/translated/de_de/develop/data-generation/block-models.md
@@ -0,0 +1,216 @@
+---
+title: Generation von Blockmodellen
+description: Ein Leitfaden zur Generierung von Blockmodellen und Blockzuständen mit dem Datengenerator.
+authors:
+ - Fellteros
+ - natri0
+ - IMB11
+ - its-miroma
+---
+
+# Generation von Blockmodellen {#block-model-generation}
+
+:::info VORAUSSETZUNGEN
+Stelle sicher, dass du den Prozess der [Einrichtung der Datengenerierung](./setup) zuerst abgeschlossen hast.
+:::
+
+## Einrichten {#setup}
+
+Zuerst müssen wir unseren ModelProvider erstellen. Erstelle eine Klasse, welche `extends FabricModelProvider`. Implementiere beide abstrakten Methoden: `generateBlockStateModels` und `generateItemModels`.
+Zum Schluss, erstelle einen Konstruktor, der zu super passt.
+
+@[code lang=java transcludeWith=:::datagen-model:provider](@/reference/latest/src/client/java/com/example/docs/datagen/FabricDocsReferenceModelProvider.java)
+
+Registriere diese Klasse in deinem `DataGeneratorEntrypoint` innerhalb der `onInitializeDataGenerator`-Methode.
+
+## Blockzustände und Blockmodelle {#blockstates-and-block-models}
+
+```java
+@Override
+public void generateBlockStateModels(BlockStateModelGenerator blockStateModelGenerator) {
+}
+```
+
+Für Blockmodelle werden wir uns hauptsächlich auf die `generateBlockStateModels`-Methode fokusieren. Beachte den Parameter `BlockStateModelGenerator blockStateModelGenerator` - dieses Objekt wird für die Generierung aller JSON-Dateien verantwortlich sein.
+Hier sind einige praktische Beispiele, die du zur Generierung deiner gewünschten Modelle verwenden kannst:
+
+### Einfacher Cube All {#simple-cube-all}
+
+@[code lang=java transcludeWith=:::datagen-model:cube-all](@/reference/latest/src/client/java/com/example/docs/datagen/FabricDocsReferenceModelProvider.java)
+
+Dies ist die am häufigsten verwendete Funktion. Sie generiert eine JSON-Modell-Datei für ein normales `cube_all` Blockmodell. Eine Textur wird für alle sechs Seiten genutzt, in diesem Fall nutzen wir `steel_block`.
+
+@[code](@/reference/latest/src/main/generated/assets/fabric-docs-reference/models/block/steel_block.json)
+
+Sie generiert auch eine Blockzustand-JSON-Datei. Da wir keine Blockzustand-Eigenschaften (z. B. Achsen, Ausrichtung, ...) haben, ist eine Variante ausreichend und wird jedes Mal verwendet, wenn der Block platziert wird.
+
+@[code](@/reference/latest/src/main/generated/assets/fabric-docs-reference/blockstates/steel_block.json)
+
+Stahlblock
+
+### Singletons {#singletons}
+
+Die `registerSingleton`-Methode liefert JSON-Modelldateien basierend auf dem übergebenen `TexturedModel` und einer einzelnen Blockzustand-Variante.
+
+@[code lang=java transcludeWith=:::datagen-model:cube-top-for-ends](@/reference/latest/src/client/java/com/example/docs/datagen/FabricDocsReferenceModelProvider.java)
+
+Diese Methode wird Modelle für einen normalen Würfel generieren, der die Texturdatei `pipe_block` für die Seiten und die Texturdatei `pipe_block_top` für die obere und untere Seite nutzt.
+
+@[code](@/reference/latest/src/main/generated/assets/fabric-docs-reference/models/block/pipe_block.json)
+
+:::tip
+Wenn du dich nicht entscheiden kannst, welches `TextureModel` du verwenden sollst, öffne die Klasse `TexturedModel` und sieh dir die [`TextureMaps`](#using-texture-map) an!
+:::
+
+Rohrblock
+
+### Block-Textur-Pool {#block-texture-pool}
+
+@[code lang=java transcludeWith=:::datagen-model:block-texture-pool-normal](@/reference/latest/src/client/java/com/example/docs/datagen/FabricDocsReferenceModelProvider.java)
+
+Eine andere nützliche Methode ist `registerCubeAllModelTexturePool`: Definiere die Texturen, indem du den "Basisblock" übergibst, und füge dann die "Kinder" hinzu, die die gleichen Texturen haben.
+In diesem Fall haben wir den `RUBY_BLOCK` übergeben, so dass die Treppe, die Stufe und der Zaun die Textur `RUBY_BLOCK` verwenden werden.
+
+:::warning
+Sie wird auch ein [einfaches Cube All JSON-Modell](#simple-cube-all) für den "Basisblock" generieren, um sicherzustellen, dass er ein Blockmodell hat.
+
+Sei dir dessen bewusst, wenn du das Blockmodell dieses bestimmten Blocks änderst, da dies zu einem Fehler führen wird.
+:::
+
+Du kannst auch eine `BlockFamily` anhängen, die Modelle für alle ihre "Kinder" generieren wird.
+
+@[code lang=java transcludeWith=:::datagen-model:family-declaration](@/reference/latest/src/main/java/com/example/docs/block/ModBlocks.java)
+
+@[code lang=java transcludeWith=:::datagen-model:block-texture-pool-family](@/reference/latest/src/client/java/com/example/docs/datagen/FabricDocsReferenceModelProvider.java)
+
+Rubinblock
+
+### Türen und Falltüren {#doors-and-trapdoors}
+
+@[code lang=java transcludeWith=:::datagen-model:door-and-trapdoor](@/reference/latest/src/client/java/com/example/docs/datagen/FabricDocsReferenceModelProvider.java)
+
+Türen und Falltüren sein ein wenig anders. Hier musst du drei neue Texturen erstellen - zwei für die Türe, und eine für die Falltüre.
+
+1. Die Tür:
+ - Sie hat zwei Teile - die obere und die untere Hälfte. **Jede benötigt ihre eigene Textur:** In diesem Fall `ruby_door_top` für die obere und `ruby_door_bottom` für die untere Hälfte.
+ - Die Methode `registerDoor()` wird Modelle für alle Ausrichtungen der Tür, sowohl offen als auch geschlossen erstellen.
+ - **Du benötigst auch eine Itemtextur!** Lege sie in dem Ordner `assets//textures/item/` ab.
+2. Die Falltür:
+ - Hier benötigst du nur eine Textur, die in diesem Fall `ruby_trapdoor` heißt. Diese wird für alle Seiten genutzt.
+ - Da `TrapdoorBlock` eine Eigenschaft `FACING` hat, kannst du die auskommentierte Methode verwenden, um Modell-Dateien mit rotierten Texturen zu generieren = Die Falltüre wird "orientierbar" sein. Andernfalls sieht sie immer gleich aus, egal in welche Richtung sie gerichtet ist.
+
+Rubintür und Falltür
+
+## Benutzerdefinierte Blockmodelle {#custom-block-models}
+
+In diesem Abschnitt werden wir die Modelle für eine vertikale Eichenstammstufe, mit einer Eichenstamm-Textur, erstellen.
+
+_Punkte 2. - 6. werden in einer inneren, statischen Hilfsklasse namens `CustomBlockStateModelGenerator` deklariert._
+
+### Benutzerdefinierte Blockklasse {#custom-block-class}
+
+Erstelle einen Block `VerticalSlab` mit einer Eigenschaft `FACING` und einer boolean-Eigenschaft `SINGLE`, wie in dem Tutorial [Block States](../blocks/blockstates) beschrieben. `SINGLE` zeigt an, ob beide Stufen sind.
+Dann solltest du `getOutlineShape` und `getCollisionShape` überschreiben, so dass die Umrandung korrekt gerendert wird und der Block die richtige Kollisionsform hat.
+
+@[code lang=java transcludeWith=:::datagen-model-custom:voxels](@/reference/latest/src/main/java/com/example/docs/block/custom/VerticalSlabBlock.java)
+
+@[code lang=java transcludeWith=:::datagen-model-custom:collision](@/reference/latest/src/main/java/com/example/docs/block/custom/VerticalSlabBlock.java)
+
+Überschreibe auch die Methode `canReplace()`, sonst kannst du die Stufe nicht zu einem vollen Block machen.
+
+@[code lang=java transcludeWith=:::datagen-model-custom:replace](@/reference/latest/src/main/java/com/example/docs/block/custom/VerticalSlabBlock.java)
+
+Und du bist fertig! Du kannst jetzt den Block austesten und im Spiel platzieren.
+
+### Übergeordnetes Blockmodell {#parent-block-model}
+
+Lasst und jetzt ein übergeordnetes Blockmodell erstellen. Es bestimmt die Größe, Position in der Hand oder in anderen Slots und die `x` und `y` Koordinaten der Textur.
+Es wird empfohlen für dies einen Editor, wie [Blockbench](https://www.blockbench.net/) zu verwenden, da die manuelle Erstellung ein wirklich mühsamer Prozess ist. Es sollte wie folgt aussehen:
+
+@[code lang=json](@/reference/latest/src/main/resources/assets/fabric-docs-reference/models/block/vertical_slab.json)
+
+Für weitere Informationen, siehe dir an [wie Blockzustände formatiert sind](https://minecraft.wiki/w/Blockstates_definition_format).
+Beachte die Schlüsselwörter `#bottom`, `#top`, `#side`. Sie dienen als Variablen, die von Modellen gesetzt werden können, die dieses Modell als übergeordnetes Modell haben:
+
+```json
+{
+ "parent": "minecraft:block/cube_bottom_top",
+ "textures": {
+ "bottom": "minecraft:block/sandstone_bottom",
+ "side": "minecraft:block/sandstone",
+ "top": "minecraft:block/sandstone_top"
+ }
+}
+```
+
+Der Wert `bottom` wird den Platzhalter `#bottom` ersetzen und so weiter. **Füge es in den Ordner `resources/assets/mod_id/models/block/` ein.**
+
+### Benutzerdefiniertes Modell {#custom-model}
+
+Eine weitere Sache, die wir benötigen, ist eine Instanz der Klasse `Model`. Sie wird das tatsächliche [übergeordnete Blockmodell](#parent-block-model) in unserem Mod repräsentieren.
+
+@[code lang=java transcludeWith=:::datagen-model-custom:model](@/reference/latest/src/client/java/com/example/docs/datagen/FabricDocsReferenceModelProvider.java)
+
+Die Methode `block()` erstellt ein neues `Model`, das auf die Datei `vertical_slab.json` in unserem Ordner `resources/assets/mod_id/models/block/` zeigt.
+Die `TextureKey`s repräsentieren die "Platzhalter" (`#bottom`, `#top`, ...) als ein Objekt.
+
+### Die Texture Map verwenden {#using-texture-map}
+
+Was macht die `TextureMap`? Sie liefert die Identifikatoren, die auf die Textur verweisen. Technisch gesehen verhält sie sich wie eine normale Map - man verbindet einen `TextureKey` (Schlüssel) mit einem `Identifier` (Wert).
+
+Du kannst entweder die von Vanilla verwenden, wie `TextureMap.all()` (die alle TextureKeys mit dem selben Identifikator verknüpft), oder eine neue erstellen, indem du eine neue Instanz erstellst und dann `.put()` aufrufst, um die Schlüssel mit Werten zu verknüpfen.
+
+:::tip
+`TextureMap.all()` verknüpft alle TextureKeys mit dem selben Identifikator, egal wie viele es davon gibt!
+:::
+
+Da wir die Eichenstammtexturen nutzen wollen, aber die `BOTTOM`, `TOP` und `SIDE` `TextureKey`s haben, müssen wir eine neue erstellen.
+
+@[code lang=java transcludeWith=:::datagen-model-custom:texture-map](@/reference/latest/src/client/java/com/example/docs/datagen/FabricDocsReferenceModelProvider.java)
+
+Die `bottom` und `top` Flächen werden `oak_log_top.png` verwenden, die Seiten werden `oak_log.png` verwenden.
+
+:::warning
+Alle `TextureKey`s in deiner TextureMap **müssen** mit den `TextureKey`s in deinem übergeordneten Blockmodell übereinstimmen!
+:::
+
+### Benutzerdefinierte `BlockStateSupplier`-Methode {#custom-supplier-method}
+
+Der `BlockStateSupplier` beinhaltet alle Varianten an Blockzuständen, deren Rotation und anderen Optionen, wie uvlock.
+
+@[code lang=java transcludeWith=:::datagen-model-custom:supplier](@/reference/latest/src/client/java/com/example/docs/datagen/FabricDocsReferenceModelProvider.java)
+
+Zuerst erstellen wir einen neuen `VariantsBlockStateSupplier` mit Hilfe von `VariantsBlockStateSupplier.create()`.
+Dann erstellen wir eine neue `BlockStateVariantMap`, die Parameter für alle Varianten des Blocks beinhaltet, in diesem Fall `FACING` und `SINGLE` und übergeben diese in den `VariantsBlockStateSupplier`.
+Gebe an, welches Modell und welche Transformation (uvlock, rotation) bei der Verwendung von `.register()` genutzt wird.
+Zum Beispiel:
+
+- In der ersten Zeile, zeigt der Block nach Norden und ist einzeln => Wir verwenden das Modell ohne Rotation.
+- In der vierten Zeile, zeigt der Block nach Westen und ist einzeln => Wir rotieren das Modell auf der Y-Achse für 270°.
+- In der sechsten Zeile, zeigt der Block nach Osten, ist jedoch nicht einzeln => Er sieht aus wie ein normaler Eichenstamm => Wie müssen ihn nicht rotieren.
+
+### Benutzerdefinierte Methode für den Datengenerator {#custom-datagen-method}
+
+Der letzte Schritt - die Erstellung der tatsächlichen Methode, die du aufrufen kannst und die die JSONs generiert.
+Aber für was sind die Parameter?
+
+1. `BlockStateModelGenerator generator`, das gleiche, dass wir an `generateBlockStateModels` übergeben haben.
+2. `Block vertSlabBlock` ist der Block, zu dem wir die JSONs generieren werden.
+3. `Block fullBlock` - ist das Modell, dass genutzt wird, wenn die Eigenschaft `SINGLE` false ist = der Stufenblock sieht wie ein voller Block aus.
+4. `TextureMap textures` definiert die tatsächlichen Texturen, die das Modell nutzt. Siehe das Kapitel [Die Texture Map nutzen verwenden](#using-texture-map).
+
+@[code lang=java transcludeWith=:::datagen-model-custom:gen](@/reference/latest/src/client/java/com/example/docs/datagen/FabricDocsReferenceModelProvider.java)
+
+Zunächst erhalten wir den `Identifier` des einzelnen Stufenmodell mit `VERTICAL_SLAB.upload()`. Dann erhalten wir den `Identifier` des vollen Blockmodells mit `ModelIds.getBlockModelId()`, und übergeben diese beiden Modelle an `createVerticalSlabBlockStates`.
+Der `BlockStateSupplier` wird an den `blockStateCollector` übergeben, so dass die JSON-Dateien tatsächlich generiert werden.
+Außerdem, erstellen wir ein Modell für das Item der vertikalen Stufe mit BlockStateModelGenerator.registerParentedItemModel()\`.
+
+Und dies ist alles! Jetzt müssen wir nur noch unsere Methode in unserem `ModelProvider` aufrufen:
+
+@[code lang=java transcludeWith=:::datagen-model-custom:method-call](@/reference/latest/src/client/java/com/example/docs/datagen/FabricDocsReferenceModelProvider.java)
+
+## Quellen und Links {#sources-and-links}
+
+Du kannst für weitere Informationen die Beispieltests in der [Fabric API](https://github.com/FabricMC/fabric/blob/1.21.4/fabric-data-generation-api-v1/src/) und im [Referenz-Mod](https://github.com/FabricMC/fabric-docs/tree/main/reference) dieser Dokumentation ansehen.
+
+Du kannst auch weitere Beispiele für die Verwendung von benutzerdefinierten Methoden für den Datengenerator finden, indem du den Open-Source-Code von Mods durchsuchst, zum Beispiel [Vanilla+ Blocks](https://github.com/Fellteros/vanillablocksplus) und [Vanilla+ Verticals](https://github.com/Fellteros/vanillavsplus) von Fellteros.
diff --git a/translated/de_de/sidebar_translations.json b/translated/de_de/sidebar_translations.json
index 4a9073202..dbda42dc4 100644
--- a/translated/de_de/sidebar_translations.json
+++ b/translated/de_de/sidebar_translations.json
@@ -49,6 +49,7 @@
"develop.dataGeneration.advancements": "Generierung von Fortschritten",
"develop.dataGeneration.recipes": "Generierung von Rezepten",
"develop.dataGeneration.lootTables": "Generierung von Beutetabellen",
+ "develop.dataGeneration.blockModels": "Generation von Blockmodellen",
"develop.rendering": "Rendering",
"develop.rendering.basicConcepts": "Grundlegende Rendering-Konzepte",
"develop.rendering.drawContext": "Den Zeichenkontext verwenden",
diff --git a/translated/el_gr/index.md b/translated/el_gr/index.md
new file mode 100644
index 000000000..e92e195b4
--- /dev/null
+++ b/translated/el_gr/index.md
@@ -0,0 +1,21 @@
+---
+title: Τεκμηρίωση Fabric
+description: Η επίσημη τεκμηρίωση για το Fabric, μια σειρά εργαλείων τροποποίησης (modding) για το Minecraft.
+layout: αρχική
+hero:
+ name: Τεκμηρίωση Fabric
+ tagline: Η επίσημη τεκμηρίωση για το Fabric, μια σειρά εργαλείων τροποποίησης (modding) για το Minecraft.
+features:
+ - title: Οδηγοί Παικτών
+ icon: 📚
+ details: Είστε παίκτης που επιθυμεί να χρησιμοποιήσει mods βασισμένα στο Fabric; Οι οδηγοί μας για τους παίκτες σας καλύπτουν. Αυτοί οι οδηγοί θα σας βοηθήσουν στη λήψη, εγκατάσταση και αντιμετώπιση προβλημάτων των mods Fabric.
+ link: /παίκτες/
+ linkText: Διαβάστε Περισσότερα
+ - title: Οδηγοί Προγραμματιστών
+ icon: 🛠️
+ details: Οι οδηγοί μας για προγραμματιστές, γραμμένοι από την κοινότητά μας, καλύπτουν τα πάντα, από τη δημιουργία του περιβάλλοντος ανάπτυξής σας μέχρι προχωρημένα θέματα όπως η απόδοση και η δικτύωση.
+ link: /develop/
+ linkText: Ξεκινήστε
+---
+
+Αν θέλετε να συνεισφέρετε στην Τεκμηρίωση Fabric, μπορείτε να βρείτε τον πηγαίο κώδικα στο [GitHub](https://github.com/FabricMC/fabric-docs), καθώς και τις σχετικές [οδηγίες συνεισφοράς](./contributing).
diff --git a/translated/el_gr/sidebar_translations.json b/translated/el_gr/sidebar_translations.json
new file mode 100644
index 000000000..e249cbca8
--- /dev/null
+++ b/translated/el_gr/sidebar_translations.json
@@ -0,0 +1,72 @@
+{
+ "players.title": "Οδηγοί Παικτών",
+ "players.faq": "Συχνές Ερωτήσεις",
+ "players.installingJava": "Εγκατάσταση της Java",
+ "players.installingJava.windows": "Windows",
+ "players.installingJava.macOS": "macOS",
+ "players.installingJava.linux": "Linux",
+ "players.installingFabric": "Γίνεται Εγκατάσταση Fabric",
+ "players.findingMods": "Εύρεση Αξιόπιστων Mods",
+ "players.installingMods": "Γίνεται Εγκατάσταση Mods",
+ "players.troubleshooting": "Αντιμετώπιση Προβλημάτων",
+ "players.troubleshooting.uploadingLogs": "Ανέβασμα Αρχείων Καταγραφής",
+ "players.troubleshooting.crashReports": "Αναφορές Σφαλμάτων",
+ "players.updatingFabric": "Ενημέρωση Fabric",
+ "develop.title": "Οδηγοί Προγραμματιστών",
+ "develop.gettingStarted": "Ξεκινώντας",
+ "develop.gettingStarted.introduction": "Εισαγωγή στο Fabric και το Modding",
+ "develop.gettingStarted.devEnvSetup": "Ρύθμιση Περιβάλλοντος Ανάπτυξης",
+ "develop.gettingStarted.creatingProject": "Δημιουργία Έργου",
+ "develop.gettingStarted.projectStructure": "Δομή του Έργου",
+ "develop.gettingStarted.launchGame": "Εκκίνηση του Παιχνιδιού",
+ "develop.gettingStarted.solvingProblems": "Βασική Επίλυση Προβλημάτων",
+ "develop.items": "Αντικείμενα",
+ "develop.items.first-item": "Δημιουργώντας το Πρώτο σας Αντικείμενο",
+ "develop.items.food": "Αντικείμενα Τροφής",
+ "develop.items.custom-armor": "Προσαρμοσμένη Πανοπλία",
+ "develop.items.custom-tools": "Προσαρμοσμένα Εργαλεία",
+ "develop.items.custom-item-groups": "Προσαρμοσμένες Ομάδες Αντικειμένων",
+ "develop.items.custom-item-interactions": "Αλληλεπιδράσεις Προσαρμοσμένων Αντικειμένων",
+ "develop.items.custom-enchantment-effects": "Προσαρμοσμένα Εφέ Μαγείας",
+ "develop.items.potions": "Φίλτρα",
+ "develop.items.custom-data-components": "Προσαρμοσμένα Στοιχεία Δεδομένων",
+ "develop.blocks": "Μπλοκς",
+ "develop.blocks.first-block": "Δημιουργώντας το Πρώτο σας Μπλοκ",
+ "develop.blocks.blockstates": "Κατάσταση Μπλοκ",
+ "develop.blocks.block-entities": "Οντότητες Μπλοκ",
+ "develop.blocks.block-entity-renderer": "Αποδοχείς Οντοτήτων Μπλοκ",
+ "develop.entities": "Οντότητες",
+ "develop.entities.effects": "Κατάσταση Εφέ",
+ "develop.entities.damage-types": "Τύποι Ζημιάς",
+ "develop.commands": "Εντολές",
+ "develop.commands.basics": "Δημιουργώντας Εντολές",
+ "develop.commands.arguments": "Ορίσματα Εντολής",
+ "develop.commands.suggestions": "Προτάσεις Εντολών",
+ "develop.dataGeneration": "Παραγωγή Δεδομένων",
+ "develop.dataGeneration.setup": "Ρύθμιση Δημιουργίας Δεδομένων",
+ "develop.dataGeneration.tags": "Δημιουργία Ετικετών",
+ "develop.dataGeneration.translations": "Δημιουργία Μετάφρασης",
+ "develop.dataGeneration.advancements": "Δημιουργία Προόδου",
+ "develop.dataGeneration.recipes": "Δημιουργία Συνταγών",
+ "develop.dataGeneration.lootTables": "Δημιουργία Πίνακα Λαφύρων",
+ "develop.dataGeneration.blockModels": "Δημιουργία Μοντέλου Μπλοκ",
+ "develop.rendering": "Απεικόνιση",
+ "develop.rendering.basicConcepts": "Βασικές Έννοιες Απεικόνισης",
+ "develop.rendering.drawContext": "Χρήση του Πλαισίου Σχεδίασης",
+ "develop.rendering.hud": "Απεικόνιση στο Hud",
+ "develop.rendering.gui": "GUIs και Οθόνες",
+ "develop.rendering.gui.customScreens": "Προσαρμοσμένες Οθόνες",
+ "develop.rendering.gui.customWidgets": "Προσαρμοσμένα Γραφικά",
+ "develop.rendering.particles": "Σωματίδια",
+ "develop.rendering.particles.creatingParticles": "Δημιουργία Προσαρμοσμένων Σωματιδίων",
+ "develop.misc": "Διάφορες Σελίδες",
+ "develop.misc.codecs": "Κωδικοποιητές",
+ "develop.misc.events": "Εκδηλώσεις",
+ "develop.misc.text-and-translations": "Κείμενο και Μεταφράσεις",
+ "develop.misc.ideTipsAndTricks": "Συμβουλές και Κόλπα IDE",
+ "develop.misc.automatic-testing": "Αυτοματοποιημένες Δοκιμές",
+ "develop.sounds": "Ήχοι",
+ "develop.sounds.using-sounds": "Αναπαραγωγή Ήχων",
+ "develop.sounds.custom": "Δημιουργία Προσαρμοσμένων Ήχων",
+ "develop.sounds.dynamic-sounds": "Δυναμικοί Ήχοι"
+}
diff --git a/translated/it_it/develop/data-generation/advancements.md b/translated/it_it/develop/data-generation/advancements.md
index 615dd73c2..a61753538 100644
--- a/translated/it_it/develop/data-generation/advancements.md
+++ b/translated/it_it/develop/data-generation/advancements.md
@@ -52,7 +52,7 @@ Nel costruire le voci del tuo progresso, ricorda che la funzione accetta l'`Iden
## Un Altro Esempio Ancora {#one-more-example}
-Solo per capirne il funzionamento, aggiungiamo un altro progresso. Faremo pratica con l'aggiunta di ricompense, l'utilizzo di criterio multiplo, e l'assegnazione di genitori:
+Solo per capirne il funzionamento, aggiungiamo un altro progresso. Faremo pratica con l'aggiunta di ricompense, l'uso di criterio multiplo, e l'assegnazione di genitori:
@[code lang=java transcludeWith=:::datagen-advancements:second-advancement](@/reference/latest/src/client/java/com/example/docs/datagen/FabricDocsReferenceAdvancementProvider.java)
@@ -72,7 +72,7 @@ Un **predicato** è qualcosa che prende un valore e restituisce un `boolean`. Pe
### Creare Criteri Personalizzati {#creating-custom-criteria}
-Anzitutto ci serve una meccanica da implementare. Informiamo il giocatore riguardo a quale utensile ha utilizzato ogni volta che rompe un blocco.
+Anzitutto ci serve una meccanica da implementare. Informiamo il giocatore riguardo a quale utensile ha usato ogni volta che rompe un blocco.
@[code lang=java transcludeWith=:::datagen-advancements:entrypoint](@/reference/latest/src/main/java/com/example/docs/advancement/FabricDocsReferenceDatagenAdvancement.java)
diff --git a/translated/it_it/develop/data-generation/block-models.md b/translated/it_it/develop/data-generation/block-models.md
new file mode 100644
index 000000000..b3b6a3627
--- /dev/null
+++ b/translated/it_it/develop/data-generation/block-models.md
@@ -0,0 +1,216 @@
+---
+title: Generazione di Modelli di Blocchi
+description: Una guida alla generazione di modelli e stati di blocchi tramite datagen.
+authors:
+ - Fellteros
+ - natri0
+ - IMB11
+ - its-miroma
+---
+
+# Generazione di Modelli di Blocchi {#block-model-generation}
+
+:::info PREREQUISITI
+Assicurati di aver prima completato il processo di [configurazione della datagen](./setup).
+:::
+
+## Configurazione {#setup}
+
+Anzitutto, avremo bisogno di creare il nostro ModelProvider. Crea una classe che `extends FabricModelProvider`. Implementa entrambi i metodi astratti: `generateBlockStateModels` e `generateItemModels`.
+Infine, crea un costruttore che corrisponda a super.
+
+@[code lang=java transcludeWith=:::datagen-model:provider](@/reference/latest/src/client/java/com/example/docs/datagen/FabricDocsReferenceModelProvider.java)
+
+Registra questa classe nella tua `DataGeneratorEntrypoint` all'interno del metodo `onInitializeDataGenerator`.
+
+## Stati e Modelli dei Blocchi {#blockstates-and-block-models}
+
+```java
+@Override
+public void generateBlockStateModels(BlockStateModelGenerator blockStateModelGenerator) {
+}
+```
+
+Per i modelli dei blocchi ci concentreremo soprattutto sul metodo `generateBlockStateModels`. Nota il parametro `BlockStateModelGenerator blockStateModelGenerator` - questo oggetto sarà responsabile della generazione di tutti i file JSON.
+Ecco alcuni esempi utili che puoi usare per generare i tuoi modelli desiderati:
+
+### Cubo Intero Semplice {#simple-cube-all}
+
+@[code lang=java transcludeWith=:::datagen-model:cube-all](@/reference/latest/src/client/java/com/example/docs/datagen/FabricDocsReferenceModelProvider.java)
+
+Questa è la funzione usata più spesso. Essa genera un file JSON per un semplice modello `cube_all` di un blocco. Una texture viene usata per tutti e sei le facce, in questo caso useremo `steel_block`.
+
+@[code](@/reference/latest/src/main/generated/assets/fabric-docs-reference/models/block/steel_block.json)
+
+Essa genera anche un file JSON dei stati del blocco. Poiché non abbiamo alcuna proprietà per gli stati del blocco (per esempio Asse, Orientazione, ...), ci basta una variante che verrà usata ogni volta che il blocco è piazzato.
+
+@[code](@/reference/latest/src/main/generated/assets/fabric-docs-reference/blockstates/steel_block.json)
+
+Blocco d'Acciaio
+
+### Singleton {#singletons}
+
+Il metodo `registerSingleton` fornisce file JSON di modelli in base al `TexturedModel` che passi, e una singola variante di stato di blocco.
+
+@[code lang=java transcludeWith=:::datagen-model:cube-top-for-ends](@/reference/latest/src/client/java/com/example/docs/datagen/FabricDocsReferenceModelProvider.java)
+
+Questo metodo genererà modelli per un cubo normale, che usa il file di texture `pipe_block` per i lati e `pipe_block_top` per le facce superiore e inferiore.
+
+@[code](@/reference/latest/src/main/generated/assets/fabric-docs-reference/models/block/pipe_block.json)
+
+:::tip
+Se non sai quale `TextureModel` dovresti scegliere, apri la classe `TexturedModel` e dai un'occhiata alle [`TextureMaps`](#using-texture-map)!
+:::
+
+Blocco di Tubatura
+
+### Pool di Texture dei Blocchi {#block-texture-pool}
+
+@[code lang=java transcludeWith=:::datagen-model:block-texture-pool-normal](@/reference/latest/src/client/java/com/example/docs/datagen/FabricDocsReferenceModelProvider.java)
+
+Un altro metodo utile è `registerCubeAllModelTexturePool`: definisce le texture passandoci il "blocco di base", per poi aggiungerci i "figli", che avranno le stesse texture.
+In questo caso, abbiamo passato il `RUBY_BLOCK`, quindi scalini, lastra e staccionata useranno la texture `RUBY_BLOCK`.
+
+:::warning
+Genererà anche un [modello JSON per un cubo intero semplice](#simple-cube-all) per il "blocco di base" per assicurarsi che il blocco abbia un modello.
+
+Tieni conto di questo se vuoi cambiare il modello di quel blocco in particolare, poiché causerà un errore.
+:::
+
+Puoi anche aggiungere una `BlockFamily`, che genererà modelli per tutti i suoi "figli".
+
+@[code lang=java transcludeWith=:::datagen-model:family-declaration](@/reference/latest/src/main/java/com/example/docs/block/ModBlocks.java)
+
+@[code lang=java transcludeWith=:::datagen-model:block-texture-pool-family](@/reference/latest/src/client/java/com/example/docs/datagen/FabricDocsReferenceModelProvider.java)
+
+Blocco di Rubino
+
+### Porte e Botole {#doors-and-trapdoors}
+
+@[code lang=java transcludeWith=:::datagen-model:door-and-trapdoor](@/reference/latest/src/client/java/com/example/docs/datagen/FabricDocsReferenceModelProvider.java)
+
+Le porte e botole funzionano un po' diversamente. Qui, dovrai creare tre nuove texture - due per la porta, e una per la botola.
+
+1. La porta:
+ - Ha due parti - la metà superiore e quella inferiore. **Ciascuna necessita di una texture propria**: in questo caso `ruby_door_top` per la metà superiore e `ruby_door_bottom` per l'inferiore.
+ - Il metodo `registerDoor()` creerà modelli per tutte le orientazioni della porta, sia aperta che chiusa.
+ - **Servirà anche una texture per l'oggetto!** Mettila nella cartella `assets/mod-id/textures/item/`.
+2. La botola:
+ - Qui ti basta una texture sola, in questo caso chiamata `ruby_trapdoor`. Verrà usata per tutti i lati.
+ - Poiché il `TrapdoorBlock` ha una proprietà `FACING`, puoi usare il metodo commentato per generare file di modello con texture ruotate = la botola sarà "orientabile". Altrimenti avrà lo stesso aspetto in tutte le direzioni.
+
+Porta e Botola di Rubino
+
+## Modelli del Blocco Personalizzati {#custom-block-models}
+
+In questa sezione creeremo i modelli per una Lastra Verticale di Quercia, con texture di un Tronco di Quercia.
+
+_I punti 2. - 6. sono dichiarati in una classe ausiliaria interna chiamata `CustomBlockStateModelGenerator`._
+
+### Classe dei Blocchi Personalizzati {#custom-block-class}
+
+Crea un blocco `VerticalSlab` con una proprietà `FACING` e una proprietà booleana `SINGLE`, come nel tutorial degli [Stati dei Blocchi](../blocks/blockstates). `SINGLE` indicherà se ci sono entrambe le lastre.
+Poi dovresti fare override di `getOutlineShape` e `getCollisionShape`, cosicché il contorno sia renderizzato correttamente, e il blocco abbia la forma di collisione corretta.
+
+@[code lang=java transcludeWith=:::datagen-model-custom:voxels](@/reference/latest/src/main/java/com/example/docs/block/custom/VerticalSlabBlock.java)
+
+@[code lang=java transcludeWith=:::datagen-model-custom:collision](@/reference/latest/src/main/java/com/example/docs/block/custom/VerticalSlabBlock.java)
+
+Fai anche override del metodo `canReplace()`, altrimenti non potresti rendere la lastra un blocco intero.
+
+@[code lang=java transcludeWith=:::datagen-model-custom:replace](@/reference/latest/src/main/java/com/example/docs/block/custom/VerticalSlabBlock.java)
+
+Tutto fatto! Ora puoi testare il blocco e piazzarlo nel gioco.
+
+### Modello di Blocco Genitore {#parent-block-model}
+
+Ora creiamo un modello di blocco genitore. Esso determinerà la dimensione, posizione nella mano o in altri slot e le coordinate `x` e `y` della texture.
+Si consiglia, per questo, di usare un editor come [Blockbench](https://www.blockbench.net/) poiché crearlo manualmente è davvero faticoso. Dovrebbe avere un aspetto del genere:
+
+@[code lang=json](@/reference/latest/src/main/resources/assets/fabric-docs-reference/models/block/vertical_slab.json)
+
+Controlla il [formato degli stati del blocco](https://minecraft.wiki/w/Blockstates_definition_format) per maggiori informazioni.
+Nota le parole chiave `#bottom`, `#top`, `#side`. Queste saranno variabili impostabili in modelli che ereditino da questo genitore:
+
+```json
+{
+ "parent": "minecraft:block/cube_bottom_top",
+ "textures": {
+ "bottom": "minecraft:block/sandstone_bottom",
+ "side": "minecraft:block/sandstone",
+ "top": "minecraft:block/sandstone_top"
+ }
+}
+```
+
+Il valore `bottom` sostituirà il segnaposto `#bottom` eccetera. **Mettilo nella cartella `resources/assets/mod-id/models/block/`.**
+
+### Modello Personalizzato {#custom-model}
+
+Un'altra cosa che ci serve è un'istanza della classe `Model`. Essa rappresenterà proprio il [modello di blocco genitore](#parent-block-model) nella nostra mod.
+
+@[code lang=java transcludeWith=:::datagen-model-custom:model](@/reference/latest/src/client/java/com/example/docs/datagen/FabricDocsReferenceModelProvider.java)
+
+Il metodo `block()` crea un nuovo `Model`, puntando al file `vertical_slab.json` nella cartella `resources/assets/mod-id/models/block/`.
+Le `TextureKey` rappresentano i "segnaposto" (`#bottom`, `#top`, ...) come oggetti.
+
+### Usare le Mappe di Texture {#using-texture-map}
+
+Cosa fa `TextureMap`? In effetti fornisce gli identificativi che puntano alle texture. Tecnicamente funziona proprio come una mappa normale - si associa una `TextureKey` (chiave) con un `Identifier` (valore).
+
+Puoi usare quelle vanilla, come `TextureMap.all()`(che associa tute le `TextureKey` allo stesso `Identifier`), o crearne una nuova creandone una nuova istanza e usando `.put()` per associare valori alle chiavi.
+
+:::tip
+`TextureMap.all()` associa tutte le `TextureKey` allo stesso `Identifier`, indipendentemente dalla loro quantità!
+:::
+
+Poiché vogliamo usare le texture del Tronco di Quercia, ma abbiamo le `TextureKey` `BOTTOM`, `TOP` e `SIDE`, ne dovremo creare un'altra.
+
+@[code lang=java transcludeWith=:::datagen-model-custom:texture-map](@/reference/latest/src/client/java/com/example/docs/datagen/FabricDocsReferenceModelProvider.java)
+
+Le facce `bottom` e `top` useranno `oak_log_top.png`, i lati useranno `oak_log.png`.
+
+:::warning
+Tutte le `TextureKey` nella `TextureMap` **devono** corrispondere a tutte le `TextureKey` nel tuo modello di blocco genitore!
+:::
+
+### Metodo `BlockStateSupplier` Personalizzato {#custom-supplier-method}
+
+Il `BlockStateSupplier` contiene tutte le varianti degli stati del blocco, le rotazioni, e altre opzioni come uvlock.
+
+@[code lang=java transcludeWith=:::datagen-model-custom:supplier](@/reference/latest/src/client/java/com/example/docs/datagen/FabricDocsReferenceModelProvider.java)
+
+Anzitutto creeremo un nuovo `VariantsBlockStateSupplier` tramite `VariantsBlockStateSupplier.create()`.
+Poi creeremo una nuova `BlockStateVariantMap` che contiene parametri per tutte le varianti del blocco, in questo caso `FACING` e `SINGLE`, e la passeremo nel nostro `VariantsBlockStateSupplier`.
+Puoi indicare il modello e le trasformazioni (uvlock, rotazione) da usare in `.register()`.
+Per esempio:
+
+- Sulla prima linea, il blocco è in direzione nord, ed è singolo => useremo il modello senza ruotarlo.
+- Sulla quarta linea, il blocco è in direzione ovest, ed è singolo => ruoteremo il modello di 270° sull'asse Y.
+- Sulla sesta linea, il blocco è in direzione est, ma non è singolo => sembra un normale tronco di quercia => non dobbiamo ruotarlo.
+
+### Metodo di Generazione Dati Personalizzato {#custom-datagen-method}
+
+L'ultimo passaggio - creare effettivamente un metodo che si possa chiamare e che generi i JSON.
+Ma che parametri sono necessari?
+
+1. `BlockStateModelGenerator generator`, quello che abbiamo passato in `generateBlockStateModels`.
+2. `Block vertSlabBlock` è il blocco di cui genereremo i JSON.
+3. `Block fullBlock` - il modello usato quando la proprietà `SINGLE` è falsa = il blocco di lastre sembra un blocco intero.
+4. `TextureMap textures` definisce le texture che il modello usa effettivamente. Controlla il capitolo [Usare le Mappe di Texture](#using-texture-map).
+
+@[code lang=java transcludeWith=:::datagen-model-custom:gen](@/reference/latest/src/client/java/com/example/docs/datagen/FabricDocsReferenceModelProvider.java)
+
+Anzitutto, otteniamo l'`Identifier` del modello di lastra singola con `VERTICAL_SLAB.upload()`. Poi otteniamo l'`Identifier` del modello di blocco intero con `ModelIds.getBlockModelId()`, e passiamo entrambi i modelli in `createVerticalSlabBlockStates`.
+Il `BlockStateSupplier` viene passato nel `blockStateCollector`, di modo che i file JSON vengano effettivamente generati.
+Inoltre, creiamo un modello per l'oggetto di lastra verticale con `BlockStateModelGenerator.registerParentedItemModel()`.
+
+È tutto! Tutto ciò che rimane da fare è chiamare il metodo nel nostro `ModelProvider`:
+
+@[code lang=java transcludeWith=:::datagen-model-custom:method-call](@/reference/latest/src/client/java/com/example/docs/datagen/FabricDocsReferenceModelProvider.java)
+
+## Fonti e Link {#sources-and-links}
+
+Per maggiori informazioni, puoi trovare il test di esempio nell'[API di Fabric](https://github.com/FabricMC/fabric/blob/1.21.4/fabric-data-generation-api-v1/src/) e nella [Mod di Riferimento](https://github.com/FabricMC/fabric-docs/tree/main/reference) di questa documentazione.
+
+Puoi anche trovare altri esempi dell'uso di metodi di datagen personalizzati navigando il codice sorgente aperto delle mod, per esempio di [Vanilla+ Blocks](https://github.com/Fellteros/vanillablocksplus) e [Vanilla+ Verticals](https://github.com/Fellteros/vanillavsplus) di Fellteros.
diff --git a/translated/it_it/develop/ide-tips-and-tricks.md b/translated/it_it/develop/ide-tips-and-tricks.md
index 379bd0eef..d9f3403a1 100644
--- a/translated/it_it/develop/ide-tips-and-tricks.md
+++ b/translated/it_it/develop/ide-tips-and-tricks.md
@@ -158,7 +158,7 @@ A volte sono necessari strumenti più semplici per modificare le occorrenze del
| ⌘/CTRL+Maiusc+F | Trova in uno scope più grande (e imposta un filtro di tipo di file) |
| ⌘/CTRL+Maiusc+R | Sostituisci in uno scope più grande (e imposta un filtro di tipo di file) |
-Se si utilizzano, tutti questi strumenti permettono una ricerca più specifica grazie alle [Regex](https://en.wikipedia.org/wiki/Regular_expression).
+Quando ben sfruttati, tutti questi strumenti permettono una ricerca più specifica grazie alle [Regex](https://en.wikipedia.org/wiki/Regular_expression).
![Sostituzione regex](/assets/develop/misc/using-the-ide/search_and_replace_01.png)
diff --git a/translated/it_it/develop/items/custom-data-components.md b/translated/it_it/develop/items/custom-data-components.md
index c9c381e9b..6c4fa295b 100644
--- a/translated/it_it/develop/items/custom-data-components.md
+++ b/translated/it_it/develop/items/custom-data-components.md
@@ -11,7 +11,7 @@ Più i tuoi oggetti crescono in complessità, più troverai la necessità di mem
Le Componenti di Dati sostituiscono i dati NBT di versioni precedenti, con tipi di dati strutturati che possono essere applicati a un `ItemStack` per memorizzare dati su quello stack. Le componenti di dati sfruttano namespace, il che significa che possiamo implementare le nostre componenti di dati per memorizzare dati personalizzati su un `ItemStack` e accederci successivamente. Una lista completa delle componenti di dati vanilla si trova su questa [pagina della Minecraft Wiki](https://minecraft.wiki/w/Data_component_format#List_of_components).
-Assieme alla registrazione delle componenti personalizzate, questa pagina copre l'utilizzo generale dell'API delle componenti, il che si applica anche alle componenti vanilla. Puoi vedere e accedere alle definizioni di tutte le componenti vanilla nella classe `DataComponentTypes`.
+Assieme alla registrazione delle componenti personalizzate, questa pagina tratta l'uso generale dell'API delle componenti, il che si applica anche alle componenti vanilla. Puoi vedere e accedere alle definizioni di tutte le componenti vanilla nella classe `DataComponentTypes`.
## Registrare una Componente {#registering-a-component}
@@ -55,7 +55,7 @@ Quando esegui il comando, dovresti ricevere l'oggetto contenente la componente.
## Leggere il Valore della Componente {#reading-component-value}
-Aggiungiamo un nuovo oggetto che aumenterà il contatore ogni volta che viene cliccato con il tasto destro. Dovresti leggere la pagina [Interazioni tra Oggetti Personalizzate](./custom-item-interactions) che tratterà delle tecniche utilizzate in questa guida.
+Aggiungiamo un nuovo oggetto che aumenterà il contatore ogni volta che viene cliccato con il tasto destro. Dovresti leggere la pagina [Interazioni tra Oggetti Personalizzate](./custom-item-interactions) che tratterà delle tecniche usate in questa guida.
@[code transcludeWith=::1](@/reference/latest/src/main/java/com/example/docs/item/custom/CounterItem.java)
@@ -214,7 +214,7 @@ Nota che c'è un paio di parentesi dopo il nome della classe. Questo è dove def
@[code transcludeWith=::1](@/reference/latest/src/main/java/com/example/docs/component/MyCustomComponent.java)
-Poiché stiamo definendo una struttura dai personalizzata, non ci sarà un `Codec` preesistente per il nostro caso come c'era per le [componenti basilari](#basic-data-components). Questo significa che dovremo costruire il nostro codec. Definiamone uno nella nostra classe record con un `RecordCodecBuilder` a cui potremo far riferimento quando registriamo la componente. Per maggiori dettagli sull'utilizzo di un `RecordCodecBuilder` fai riferimento a [questa sezione della pagina sui Codec](../codecs#merging-codecs-for-record-like-classes).
+Poiché stiamo definendo una struttura dai personalizzata, non ci sarà un `Codec` preesistente per il nostro caso come c'era per le [componenti basilari](#basic-data-components). Questo significa che dovremo costruire il nostro codec. Definiamone uno nella nostra classe record con un `RecordCodecBuilder` a cui potremo far riferimento quando registriamo la componente. Per maggiori dettagli sull'uso di un `RecordCodecBuilder` fai riferimento a [questa sezione della pagina sui Codec](../codecs#merging-codecs-for-record-like-classes).
@[code transcludeWith=::2](@/reference/latest/src/main/java/com/example/docs/component/MyCustomComponent.java)
diff --git a/translated/it_it/develop/items/food.md b/translated/it_it/develop/items/food.md
index 714cb2706..5521c24b9 100644
--- a/translated/it_it/develop/items/food.md
+++ b/translated/it_it/develop/items/food.md
@@ -7,7 +7,7 @@ authors:
# Alimenti {#food-items}
-Gli alimenti sono un aspetto cruciale di sopravvivenza in Minecraft, per cui quando si creano oggetti edibili devi considerare l'utilizzo del cibo con altri oggetti edibili.
+Gli alimenti sono un aspetto cruciale di sopravvivenza in Minecraft, per cui quando si creano oggetti edibili devi considerare l'uso del cibo con altri oggetti edibili.
A meno che tu non voglia creare una mod con oggetti troppo potenti, dovresti tenere in considerazione:
diff --git a/translated/it_it/develop/sounds/dynamic-sounds.md b/translated/it_it/develop/sounds/dynamic-sounds.md
index 48734a6a7..7044c9c47 100644
--- a/translated/it_it/develop/sounds/dynamic-sounds.md
+++ b/translated/it_it/develop/sounds/dynamic-sounds.md
@@ -126,7 +126,7 @@ Ciò che abbiamo chiamato `ENGINE_LOOP` è il suono in loop del motore completat
## Usare una `SoundInstance` {#using-a-soundinstance}
-Per riprodurre suoni sul lato client, è necessaria una `SoundInstance`. Tuttavia utilizzano comunque un `SoundEvent`.
+Per riprodurre suoni sul lato client, è necessaria una `SoundInstance`. Tuttavia usano comunque un `SoundEvent`.
Se vuoi solo riprodurre qualcosa come un clic su un elemento dell'interfaccia grafica, esiste già la classe `PositionedSoundInstance`.
diff --git a/translated/it_it/sidebar_translations.json b/translated/it_it/sidebar_translations.json
index f444c1b9c..5332f629c 100644
--- a/translated/it_it/sidebar_translations.json
+++ b/translated/it_it/sidebar_translations.json
@@ -49,6 +49,7 @@
"develop.dataGeneration.advancements": "Generazione di Progressi",
"develop.dataGeneration.recipes": "Generazione di Ricette",
"develop.dataGeneration.lootTables": "Generazione di Loot Table",
+ "develop.dataGeneration.blockModels": "Generazione di Modelli di Blocchi",
"develop.rendering": "Rendering",
"develop.rendering.basicConcepts": "Concetti Base del Rendering",
"develop.rendering.drawContext": "Usare il Contesto di Disegno",
diff --git a/translated/uk_ua/develop/data-generation/block-models.md b/translated/uk_ua/develop/data-generation/block-models.md
new file mode 100644
index 000000000..33ae5db02
--- /dev/null
+++ b/translated/uk_ua/develop/data-generation/block-models.md
@@ -0,0 +1,216 @@
+---
+title: Генерація моделей блоків
+description: Тут ви можете навчитися генерувати стани та моделі блоків за допомогою datagen.
+authors:
+ - Fellteros
+ - natri0
+ - IMB11
+ - its-miroma
+---
+
+# Генерація моделей блоків {#block-model-generation}
+
+:::info ПЕРЕДУМОВИ
+Спершу переконайтеся, що ви виконали [налаштування datagen](./setup).
+:::
+
+## Налаштування {#setup}
+
+По-перше, ми повинні створити наш ModelProvider. Створімо клас `extends FabricModelProvider`. Реалізуйте обидва абстрактні методи: `generateBlockStateModels` і `generateItemModels`.
+Нарешті, створімо конструктор, що відповідає super.
+
+@[code lang=java transcludeWith=:::datagen-model:provider](@/reference/latest/src/client/java/com/example/docs/datagen/FabricDocsReferenceModelProvider.java)
+
+Зареєструйте цей клас у своїй `DataGeneratorEntrypoint` в рамках методу `onInitializeDataGenerator`.
+
+## Стани та моделі блоку {#blockstates-and-block-models}
+
+```java
+@Override
+public void generateBlockStateModels(BlockStateModelGenerator blockStateModelGenerator) {
+}
+```
+
+Для моделей блоків ми зосереджуватимемося насамперед на методі `generateBlockStateModels`. Зверніть увагу на параметр `BlockStateModelGenerator blockStateModelGenerator` - цей об'єкт відповідатиме за генерацію всіх файлів JSON.
+Ось декілька зручних прикладів, які можна використовувати для створення бажаних моделей:
+
+### Усі прості куби
+
+@[code lang=java transcludeWith=:::datagen-model:cube-all](@/reference/latest/src/client/java/com/example/docs/datagen/FabricDocsReferenceModelProvider.java)
+
+Це найпоширеніша функція. Він генерує файл моделі JSON для звичайної моделі ,kjrf `cube_all`. Одна текстура використовується для всіх шести сторін, у цьому випадку ми використовуємо `steel_block`.
+
+@[code](@/reference/latest/src/main/generated/assets/fabric-docs-reference/models/block/steel_block.json)
+
+Він також генерує файл JSON зі станом блоку. Оскільки у нас немає властивостей стану блоку (наприклад, Axis, Facing...), достатньо одного варіанту, який використовується кожного разу, коли блок розміщується.
+
+@[code](@/reference/latest/src/main/generated/assets/fabric-docs-reference/blockstates/steel_block.json)
+
+<0>Блок сталі0>
+
+### Сінглтони {#singletons}
+
+Метод `registerSingleton` надає файли моделі JSON на основі `TexturedModel`, який ви передаєте, і єдиного варіанту стану блоку.
+
+@[code lang=java transcludeWith=:::datagen-model:cube-top-for-ends](@/reference/latest/src/client/java/com/example/docs/datagen/FabricDocsReferenceModelProvider.java)
+
+Цей метод створить моделі для звичайного куба, який використовує файл текстури `pipe_block` для сторін і файл текстури `pipe_block_top` для верхньої та нижньої сторін.
+
+@[code](@/reference/latest/src/main/generated/assets/fabric-docs-reference/models/block/pipe_block.json)
+
+:::tip
+Якщо ви не можете вибрати, яку `TextureModel` використовувати, відкрийте клас `TexturedModel` і подивіться на [`TextureMaps`](#using-texture-map)!
+:::
+
+Блок труби
+
+### Пул текстур блока {#block-texture-pool}
+
+@[code lang=java transcludeWith=:::datagen-model:block-texture-pool-normal](@/reference/latest/src/client/java/com/example/docs/datagen/FabricDocsReferenceModelProvider.java)
+
+Іншим корисним методом є `registerCubeAllModelTexturePool`: визначте текстури, передавши «base block», а потім додайте «children», які матимуть ті самі текстури.
+У цьому випадку ми передали `RUBY_BLOCK`, тому сходи, плита та паркан використовуватимуть текстуру `RUBY_BLOCK`.
+
+:::warning
+Він також створить [просту модель куба з усіма JSON](#simple-cube-all) для «base block», щоб переконатися, що він має модель блоку.
+
+Зверніть увагу на це, якщо ви змінюєте модель блоку цього конкретного блоку, оскільки це призведе до помилки.
+:::
+
+Ви також можете додати `BlockFamily`, який генеруватиме моделі для всіх своїх «children».
+
+@[code lang=java transcludeWith=:::datagen-model:family-declaration](@/reference/latest/src/main/java/com/example/docs/block/ModBlocks.java)
+
+@[code lang=java transcludeWith=:::datagen-model:block-texture-pool-family](@/reference/latest/src/client/java/com/example/docs/datagen/FabricDocsReferenceModelProvider.java)
+
+Блок рубіну
+
+### Двері та люки {#doors-and-trapdoors}
+
+@[code lang=java transcludeWith=:::datagen-model:door-and-trapdoor](@/reference/latest/src/client/java/com/example/docs/datagen/FabricDocsReferenceModelProvider.java)
+
+Двері та люки трохи відрізняються. Тут ви повинні створити три нові текстури - дві для дверей і одну для люка.
+
+1. Двері:
+ - Він має дві частини - верхню половину і нижню половину. **Кожному потрібна власна текстура:** у цьому випадку `ruby_door_top` для верхньої половини та `ruby_door_bottom` для нижньої.
+ - Метод registerDoor() створить моделі для всіх орієнтацій дверей, як відкритих, так і закритих.
+ - **Вам також потрібна текстура предмета!** Покладіть її в теку `assets//textures/item/`.
+2. Люк:
+ - Тут вам потрібна лише одна текстура, у цьому випадку під назвою `ruby_trapdoor`. Він буде використовуватися для всіх сторін.
+ - Оскільки `TrapdoorBlock` має властивість `FACING`, ви можете використовувати закоментований метод для генерації файлів моделі з повернутими текстурами = люк буде "орієнтованим". В іншому випадку він виглядатиме однаково незалежно від того, у якому напрямку він дивиться.
+
+Рубінові двері та люки
+
+## Власні моделі блоку
+
+У цьому розділі ми створимо моделі для вертикальної дубової колоди з текстурами дубової колоди.
+
+Точка 2. - 6. оголошуються у внутрішньому статичному допоміжному класі під назвою `CustomBlockStateModelGenerator`._
+
+### Власний клас блоку {#custom-block-class}
+
+Створіть блок `VerticalSlab` з властивостями `FACING` і булевою властивістю `SINGLE`, як у підручнику [Block States](../blocks/blockstates). `SINGLE` вкаже, чи є обидві плити.
+Тоді вам слід перевизначити `getOutlineShape` і `getCollisionShape`, щоб контур промальовувався правильно, а блок мав правильну форму колізії.
+
+@[code lang=java transcludeWith=:::datagen-model-custom:voxels](@/reference/latest/src/main/java/com/example/docs/block/custom/VerticalSlabBlock.java)
+
+@[code lang=java transcludeWith=:::datagen-model-custom:collision](@/reference/latest/src/main/java/com/example/docs/block/custom/VerticalSlabBlock.java)
+
+Також замініть метод `canReplace()`, інакше ви не зможете зробити плиту повним блоком.
+
+@[code lang=java transcludeWith=:::datagen-model-custom:replace](@/reference/latest/src/main/java/com/example/docs/block/custom/VerticalSlabBlock.java)
+
+І готово! Тепер ви можете протестувати блок і помістити його в гру.
+
+### Батьківська модель блоку {#parent-block-model}
+
+Давайте но створимо батьківську модель блоку. Він визначатиме розмір, положення в руці чи інших слотах, а також координати `x` і `y` текстури.
+Для цього рекомендується використовувати такий редактор, як [Blockbench](https://www.blockbench.net/), оскільки створення вручну є справді виснажливим процесом. Це має виглядати приблизно так:
+
+@[code lang=json](@/reference/latest/src/main/resources/assets/fabric-docs-reference/models/block/vertical_slab.json)
+
+Перегляньте [як форматуються стани блоків](https://minecraft.wiki/w/Blockstates_definition_format), щоб дізнатися більше.
+Зверніть увагу на ключові слова `#bottom`, `#top`, `#side`. Вони діють як змінні, які можуть бути встановлені моделями, які мають цю як батьківську:
+
+```json
+{
+ "parent": "minecraft:block/cube_bottom_top",
+ "textures": {
+ "bottom": "minecraft:block/sandstone_bottom",
+ "side": "minecraft:block/sandstone",
+ "top": "minecraft:block/sandstone_top"
+ }
+}
+```
+
+Значення `bottom` замінить заповнювач `#bottom` і так далі. **Помістіть його в теку `resources/assets/mod_id/models/block/`.**
+
+### Власна модель {#custom-model}
+
+Ще нам знадобиться екземпляр класу `Model`. Він представлятиме фактичну [батьківську модель блоку](#parent-block-model) у нашому моді.
+
+@[code lang=java transcludeWith=:::datagen-model-custom:model](@/reference/latest/src/client/java/com/example/docs/datagen/FabricDocsReferenceModelProvider.java)
+
+Метод `block()` створює нову `модель`, вказуючи на файл `vertical_slab.json` у теці `resources/assets/mod_id/models/block/`.
+`TextureKey` представляють "заповнювачі" (`#bottom`, `#top`, ...) як об'єкт.
+
+### Використання мапи текстури {#using-texture-map}
+
+Що робить `TextureMap`? Він фактично надає ідентифікатори, які вказують на текстури. Технічно вона поводиться як звичайна мапа – ви пов’язуєте `TextureKey` (ключ) з `ідентифікатором` (значення).
+
+Ви можете використати стандартні, як-от `TextureMap.all()` (який пов’язує всі TextureKeys з тим самим ідентифікатором), або створити новий, створивши новий екземпляр, а потім використавши `.put()` для зв’язування ключів зі значеннями.
+
+:::tip
+`TextureMap.all()` пов'язує всі TextureKeys з одним ідентифікатором, незалежно від того, скільки їх є!
+:::
+
+Оскільки ми хочемо використовувати текстури дубової колоди, але маємо `BOTTOM`, `TOP` і `SIDE` `TextureKey`, нам потрібно створити нову.
+
+@[code lang=java transcludeWith=:::datagen-model-custom:texture-map](@/reference/latest/src/client/java/com/example/docs/datagen/FabricDocsReferenceModelProvider.java)
+
+Для `нижньої` та `верхньої` граней використовуватиметься `oak_log_top.png`, а з боків — `oak_log.png`.
+
+:::warning
+Усі `TextureKey`s у TextureMap **мають** збігатися з усіма `TextureKey`s у вашій моделі батьківського блоку!
+:::
+
+### Власний метод `BlockStateSupplier` {#custom-supplier-method}
+
+`BlockStateSupplier` містить усі варіанти стану блоку, їх rotation та інші параметри, як-от uvlock.
+
+@[code lang=java transcludeWith=:::datagen-model-custom:supplier](@/reference/latest/src/client/java/com/example/docs/datagen/FabricDocsReferenceModelProvider.java)
+
+Спочатку ми створюємо новий `VariantsBlockStateSupplier` за допомогою `VariantsBlockStateSupplier.create()`.
+Потім ми створюємо новий `BlockStateVariantMap`, який містить параметри для всіх варіантів блоку, в цьому випадку `FACING` і `SINGLE`, і передаємо його в `VariantsBlockStateSupplier`.
+Укажіть, яка модель і які перетворення (uvlock, rotation) використовуються під час використання `.register()`.
+Наприклад:
+
+- На першому рядку блок дивиться на північ і є єдиним => ми використовуємо модель без повороту.
+- На четвертому рядку блок дивиться на захід і є одинарним => ми повертаємо модель по осі Y на 270°.
+- На шостому рядку блок дивиться на схід, але не одинарний => він виглядає як звичайна дубова колода => нам не потрібно його обертати.
+
+### Власний метод datagen {#custom-datagen-method}
+
+Останній крок – створення фактичного методу, який можна викликати, і який генеруватиме JSON.
+Але для чого ці параметри?
+
+1. `Generator BlockStateModelGenerator`, той самий, який передано в `generateBlockStateModels`.
+2. `Block vertSlabBlock` — це блок, для якого ми будемо генерувати файли JSON.
+3. `Block fullBlock` - це модель, яка використовується, коли властивість `SINGLE` має значення false = блок плити виглядає як повний блок.
+4. `TextureMap textures` визначає фактичні текстури, які використовує модель. Див. розділ [використання мапи текстур](#using-texture-map).
+
+@[code lang=java transcludeWith=:::datagen-model-custom:gen](@/reference/latest/src/client/java/com/example/docs/datagen/FabricDocsReferenceModelProvider.java)
+
+Спочатку ми отримуємо `ідентифікатор` моделі однієї плити за допомогою `VERTICAL_SLAB.upload()`. Потім ми отримуємо `ідентифікатор` моделі повного блоку за допомогою `ModelIds.getBlockModelId()` і передаємо ці дві моделі в `createVerticalSlabBlockStates`.
+`BlockStateSupplier` передається в `blockStateCollector`, так що файли JSON фактично генеруються.
+Крім того, ми створюємо модель для предмета вертикальної плити за допомогою `BlockStateModelGenerator.registerParentedItemModel()`.
+
+І це все! Тепер все, що залишилося зробити, це викликати наш метод у нашому `ModelProvider`:
+
+@[code lang=java transcludeWith=:::datagen-model-custom:method-call](@/reference/latest/src/client/java/com/example/docs/datagen/FabricDocsReferenceModelProvider.java)
+
+## Джерела та посилання {#sources-and-links}
+
+Ви можете переглянути приклади тестів у [Fabric API](https://github.com/FabricMC/fabric/blob/1.21.4/fabric-data-generation-api-v1/src/) та в цій документації [Reference Mod] (https://github.com/FabricMC/fabric-docs/tree/main/reference) для отримання додаткової інформації.
+
+Ви також можете знайти більше прикладів використання власних методів даних, переглянувши відкритий вихідний код модів, наприклад [Vanilla+ Blocks](https://github.com/Fellteros/vanillablocksplus) і [Vanilla+ Verticals](https://github .com/Fellteros/vanillavsplus) від Fellteros.
diff --git a/translated/uk_ua/develop/items/food.md b/translated/uk_ua/develop/items/food.md
index 6528a6346..465fe7cee 100644
--- a/translated/uk_ua/develop/items/food.md
+++ b/translated/uk_ua/develop/items/food.md
@@ -1,11 +1,11 @@
---
-title: Предмет-їжа
+title: Їжа
description: Дізнайтеся як додати власну їжу в гру.
authors:
- IMB11
---
-# Предмет-їжа {#food-items}
+# Їжа {#food-items}
Їжа є основним аспектом виживання Minecraft, тому, створюючи їстівні предмети, ви повинні враховувати використання їжі з іншими їстівними предметами.
diff --git a/translated/uk_ua/sidebar_translations.json b/translated/uk_ua/sidebar_translations.json
index a3def895f..6d1c129a6 100644
--- a/translated/uk_ua/sidebar_translations.json
+++ b/translated/uk_ua/sidebar_translations.json
@@ -49,6 +49,7 @@
"develop.dataGeneration.advancements": "Генерація досягнень",
"develop.dataGeneration.recipes": "Генерація рецептів",
"develop.dataGeneration.lootTables": "Генерація таблиць здобичі",
+ "develop.dataGeneration.blockModels": "Генерація моделі блоку",
"develop.rendering": "Промальовування",
"develop.rendering.basicConcepts": "Базові концепції промальовування",
"develop.rendering.drawContext": "Використання DrawContext",
diff --git a/translated/zh_tw/develop/rendering/gui/custom-screens.md b/translated/zh_tw/develop/rendering/gui/custom-screens.md
new file mode 100644
index 000000000..42f4de80a
--- /dev/null
+++ b/translated/zh_tw/develop/rendering/gui/custom-screens.md
@@ -0,0 +1,64 @@
+---
+title: 自訂畫面
+description: 了解如何為你的模組製作自訂畫面
+authors:
+ - IMB11
+---
+
+# 自訂畫面 {#custom-screens}
+
+:::info
+這篇教學只包含一般介面,不包含同步介面 `HandledScreen`,一般畫面只會在客戶端顯示,不會與伺服器同步。
+:::
+
+畫面就是玩家可以互動的圖形介面,例如:主畫面,暫停選單。
+
+你可以建立自己的畫面來顯示自訂內容、設定等。
+
+## 創建一個畫面 {#creating-a-screen}
+
+創建一個畫面會需要繼承(extend)`Screen` 類別和重寫 (override)`init` 函式,你也可以重寫(override)`render` 函式,但請確保呼叫父類函式(super),不然背景以及畫面元件不會被顯示。
+
+請注意:
+
+- 畫面元件不應該在建構子裡被創造,因為畫面還沒建構完成,部分變數(例如:寬度 `width`、高度 `height`)還無法被存取或是不準確。
+- `init` 函式是在畫面被創建時呼叫的,所以創建畫面元件最適合在裡面執行。
+ - `addDrawableChild`函式負責顯示畫面元件,他可以顯示任何可以被繪製(drawable)的畫面元件。
+- `render` 函式每幀都會被執行,在函式中可以獲取圖形繪器 `DrawContext` 和滑鼠位置 `mouseX` `mouseY`。
+
+我們將創建一個簡單的畫面,畫面包含一個按鈕和一串標示。
+
+@[code lang=java transcludeWith=:::1](@/reference/latest/src/client/java/com/example/docs/rendering/screens/CustomScreen.java)
+
+![自訂畫面 1](/assets/develop/rendering/gui/custom-1-example.png)
+
+## 打開畫面 {#opening-the-screen}
+
+你可以透過 `MinecraftClient` 的 `setScreen` 函式來打開自訂畫面,開啟的方法可以有很多(例如:按鍵,指令,封包)。
+
+```java
+MinecraftClient.getInstance().setScreen(
+ new CustomScreen(Text.empty())
+);
+```
+
+## 關閉畫面 {#closing-the-screen}
+
+如果你想要關閉畫面回到遊戲,可以使用 `setScreen(null)` 函式。
+
+```java
+MinecraftClient.getInstance().setScreen(null);
+```
+
+如果你想要回到上一個畫面,在現在的畫面的建構子裡傳入上一個畫面,並將它保存到參數裡,然後在 `close` 函式裡呼叫 `setScreen(/* 剛剛保存的畫面 */)` 。
+
+@[code lang=java transcludeWith=:::2](@/reference/latest/src/client/java/com/example/docs/rendering/screens/CustomScreen.java)
+
+這樣當你在開啟新的畫面時,你可以把現在的畫面傳入建構子中,然後在 `CustomScreen#Close` 執行時,就可以回到上個畫面了。
+
+```java
+Screen currentScreen = MinecraftClient.getInstance().currentScreen;
+MinecraftClient.getInstance().setScreen(
+ new CustomScreen(Text.empty(), currentScreen)
+);
+```
diff --git a/translated/zh_tw/develop/rendering/gui/custom-widgets.md b/translated/zh_tw/develop/rendering/gui/custom-widgets.md
new file mode 100644
index 000000000..64084f600
--- /dev/null
+++ b/translated/zh_tw/develop/rendering/gui/custom-widgets.md
@@ -0,0 +1,39 @@
+---
+title: 自訂畫面元件
+description: 了解如何為你的畫面建立自訂畫面元件。
+authors:
+ - IMB11
+---
+
+# 自訂畫面元件 {#custom-widgets}
+
+畫面元件就是包裝過的圖形,他們可以被加到畫面上,也可以讀取來自玩家的互動(例如:點選,按鍵等)。
+
+## 新增一個畫面元件 {#creating-a-widget}
+
+創建一個新的畫面元件類別有許多方法,例如繼承 (extend) `ClickableWidget`。 這個類別提供了很多實用的功能(例如:改變長關、位置、處理事件),他包含了 `Drawable`、`Element`、和 `Selectable`介面(interface)。
+
+- `Drawable` (繪製): 需要使用 `addDrawableChild` 來繪製出這個畫面元件。
+- `Element` (事件): 如果有需要讀取玩家互動(點選、按鍵等)。
+- `Narratable` (無障礙功能): 如果有需要使用文字朗讀和其他無障礙功能。
+- `Selectable` (選擇): 如果想要讓畫面元件變得可以透過Tab選擇,這也有助於無障礙功能。
+
+@[code lang=java transcludeWith=:::1](@/reference/latest/src/client/java/com/example/docs/rendering/screens/CustomWidget.java)
+
+## 讓元件顯示在畫面上 {#adding-the-widget-to-the-screen}
+
+就像其他畫面元件一樣,你會需要用 `Screen` 類別提供ㄉ的 `addDrawableChild` 函式來將元件顯示在畫面上。 請確保這是在 `init` 函式裡執行的。
+
+@[code lang=java transcludeWith=:::3](@/reference/latest/src/client/java/com/example/docs/rendering/screens/CustomScreen.java)
+
+![顯示自訂元件在畫面上](/assets/develop/rendering/gui/custom-widget-example.png)
+
+## 畫面元件事件 {#widget-events}
+
+你可以透過重寫 `onMouseClicked`、`onMouseReleased`、`onKeyPressed`等函式來讀取事件。
+
+舉例來說,你可以透過 `ClickableWidget` 類別的 `isHovered` 函式來讓元件在滑鼠停留時改變顏色。
+
+@[code lang=java transcludeWith=:::2](@/reference/latest/src/client/java/com/example/docs/rendering/screens/CustomWidget.java)
+
+![滑鼠停留事件範例](/assets/develop/rendering/gui/custom-widget-events.webp)