From 3b0e271abaad36d98df7edc96b39d5a7e67ffa7d Mon Sep 17 00:00:00 2001 From: Fabric Bot <159731069+FabricMCBot@users.noreply.github.com> Date: Wed, 3 Apr 2024 21:31:15 +0100 Subject: [PATCH] New Crowdin updates (#80) --- .../de_de/develop/commands/arguments.md | 57 ++++++ translated/de_de/develop/commands/basics.md | 163 ++++++++++++++++++ .../de_de/develop/commands/suggestions.md | 45 +++++ .../develop/rendering/gui/custom-widgets.md | 6 +- translated/fr_fr/develop/codecs.md | 45 +++++ translated/it_it/develop/codecs.md | 45 +++++ translated/it_it/develop/commands/basics.md | 4 +- translated/it_it/sidebar_translations.json | 6 +- translated/ko_kr/CONTRIBUTING.md | 4 +- .../ko_kr/develop/entities/damage-types.md | 2 +- translated/ko_kr/players/faq.md | 2 +- .../players/troubleshooting/crash-reports.md | 2 +- .../players/troubleshooting/uploading-logs.md | 6 +- translated/pl_pl/sidebar_translations.json | 6 +- translated/pt_br/CONTRIBUTING.md | 5 + translated/pt_br/index.md | 28 +++ translated/pt_br/sidebar_translations.json | 40 +++++ translated/uk_ua/players/updating-fabric.md | 41 +++++ translated/zh_cn/CONTRIBUTING.md | 16 +- .../zh_cn/develop/commands/arguments.md | 10 +- .../zh_cn/develop/commands/suggestions.md | 8 +- .../zh_cn/develop/entities/damage-types.md | 6 +- translated/zh_cn/develop/entities/effects.md | 7 +- translated/zh_cn/develop/items/potions.md | 13 +- .../zh_cn/develop/rendering/basic-concepts.md | 44 ++--- .../zh_cn/develop/rendering/draw-context.md | 16 +- .../develop/rendering/gui/custom-widgets.md | 2 +- translated/zh_cn/index.md | 2 +- translated/zh_cn/players/installing-fabric.md | 9 +- .../zh_cn/players/installing-java/linux.md | 2 +- translated/zh_cn/players/updating-fabric.md | 2 +- translated/zh_tw/CONTRIBUTING.md | 15 +- translated/zh_tw/index.md | 2 +- translated/zh_tw/players/finding-mods.md | 4 +- .../zh_tw/players/installing-java/linux.md | 2 +- .../zh_tw/players/installing-java/windows.md | 6 +- .../players/troubleshooting/crash-reports.md | 10 +- 37 files changed, 586 insertions(+), 97 deletions(-) create mode 100644 translated/de_de/develop/commands/arguments.md create mode 100644 translated/de_de/develop/commands/basics.md create mode 100644 translated/de_de/develop/commands/suggestions.md create mode 100644 translated/pt_br/index.md create mode 100644 translated/pt_br/sidebar_translations.json create mode 100644 translated/uk_ua/players/updating-fabric.md diff --git a/translated/de_de/develop/commands/arguments.md b/translated/de_de/develop/commands/arguments.md new file mode 100644 index 000000000..fa1c3f061 --- /dev/null +++ b/translated/de_de/develop/commands/arguments.md @@ -0,0 +1,57 @@ +--- +title: Befehlsargumente +description: Lerne, wie man Befehle mit komplexen Parametern erstellt. +--- + +# Befehlsargumente + +Parameter werden in den meisten Befehlen verwendet. Manchmal sind sie optional, das heißt, wenn du diesen Parameter nicht angibst, wird der Befehl dennoch ausgeführt. Ein Knoten kann mehrere Parametertypen haben, aber es ist zu beachten, dass die Möglichkeit einer +Mehrdeutigkeit besteht, die vermieden werden sollte. + +@[code lang=java highlight={3} transcludeWith=:::4](@/reference/latest/src/main/java/com/example/docs/command/FabricDocsReferenceCommands.java) + +In diesem Fall musst du nach dem Befehlstext `/argtater` eine ganze Zahl eingeben. Zum Beispiel, wenn du `/argtater 3` ausführst, erhaltest du die Rückmeldung `Called /argtater with value = 3`. Wenn du `/argtater` ohne Argumente eingibst, kann der Befehl nicht korrekt geparst werden. + +Dann fügen wir ein optionales zweites Argument hinzu: + +@[code lang=java highlight={3,13} transcludeWith=:::5](@/reference/latest/src/main/java/com/example/docs/command/FabricDocsReferenceCommands.java) + +Jetzt kannst du eine oder zwei ganze Zahlen eingeben. Wenn du eine ganze Zahl eingibst, wird ein Feedback-Text mit einem einzigen Wert ausgegeben. Wenn du zwei Ganzzahlen angibst, wird ein Feedback-Text mit zwei Werten ausgegeben. + +Du kannst es unnötig finden, ähnliche Ausführungen zweimal anzugeben. Daher können wir eine Methode erstellen, die in beiden Ausführungen verwendet wird. + +@[code lang=java highlight={3,5,6,7} transcludeWith=:::6](@/reference/latest/src/main/java/com/example/docs/command/FabricDocsReferenceCommands.java) + +## Benutzerdefinierte Argumenttypen + +Wenn Vanilla nicht den von dir benötigten Argumenttyp verfügt, kannst du deinen eigenen erstellen. Dazu musst du eine Klasse erstellen, die das Interface `ArgumentType` erbt, wobei `T` der Typ des Arguments ist. + +Du musst die Methode "parse" implementieren, die die Eingabezeichenfolge zu dem gewünschten Typ parst. + +Du kannst zum Beispiel einen Argumenttyp erstellen, der eine `BlockPos` aus einer Zeichenkette mit dem folgenden Format parst: `{x, y, z}` + +@[code lang=java highlight={3,5,6,7} transcludeWith=:::6](@/reference/latest/src/main/java/com/example/docs/command/FabricDocsReferenceCommands.java) + +### Benutzerdefinierte Argumenttypen registrieren + +:::warning +Du musst den benutzerdefinierten Argumenttyp sowohl im Server als auch im Client registrieren, sonst wird der Befehl nicht funktionieren! +::: + +Du kannst deinen benutzerdefinierten Argumenttyp in der Methode `onInitialize` deines Mod-Initialisierers mit der Klasse `ArgumentTypeRegistry` registrieren: + +@[code lang=java transcludeWith=:::11](@/reference/latest/src/main/java/com/example/docs/command/FabricDocsReferenceCommands.java) + +### Benutzerdefinierte Argumenttypen verwenden + +Wir können unseren benutzerdefinierten Argumenttyp in einem Befehl verwenden, indem wir eine Instanz davon an die Methode `.argument` im Builder des Befehls übergeben. + +@[code lang=java transcludeWith=:::10 highlight={3}](@/reference/latest/src/main/java/com/example/docs/command/FabricDocsReferenceCommands.java) + +Durch das Ausführen des Befehls, können wir testen, ob der Argumenttyp funktioniert oder nicht: + +![Ungültiges Argument.](/assets/develop/commands/custom-arguments_fail.png) + +![Gültiges Argument.](/assets/develop/commands/custom-arguments_valid.png) + +![Ergebnis des Befehls.](/assets/develop/commands/custom-arguments_result.png) diff --git a/translated/de_de/develop/commands/basics.md b/translated/de_de/develop/commands/basics.md new file mode 100644 index 000000000..262fe870a --- /dev/null +++ b/translated/de_de/develop/commands/basics.md @@ -0,0 +1,163 @@ +--- +title: Befehle erstellen +description: Befehle mit komplexen Parametern und Aktionen erstellen. +authors: + - dicedpixels + - i509VCB + - pyrofab + - natanfudge + - Juuxel + - solidblock + - modmuss50 + - technici4n + - atakku + - haykam + - mschae23 + - treeways + - xpple +--- + +# Befehle erstellen + +Durch das Erstellen von Befehlen kann ein Mod-Entwickler Funktionen hinzufügen, die durch einen Befehl verwendet werden können. Dieses Tutorial wird dir erklären, wie man Befehle registriert und die allgemeine Befehlsstruktur von Brigadier. + +:::info +Brigadier ist ein Befehlsparser und Dispatcher, der von Mojang für Minecraft entwickelt wurde. Es ist eine baumbasierte Befehlsbibliothek, in der du einen Baum von Befehlen und Argumenten aufbaust. Brigadier ist Open Source: https\://github.com/Mojang/brigadier +::: + +### Das Interface `Command` + +`com.mojang.brigadier.Command` ist ein funktionales Interface, das einen bestimmten Code ausführt und in bestimmten Fällen eine `CommandSyntaxException` auslöst. Er hat einen generischen Typ `S`, der den Typ der _Befehlsquelle_ definiert. +Die Befehlsquelle liefert einen Kontext, in dem ein Befehl ausgeführt wurde. In Minecraft ist die Befehlsquelle normalerweise ein `ServerCommandSource`, die einen Server, einen Befehlsblock, eine Remote-Verbindung (RCON), einen Spieler oder eine Entität darstellen kann. + +Die einzige Methode in `Command`, `run(CommandContext)` nimmt einen `CommandContext` als einzigen Parameter und gibt eine ganze Zahl zurück. Der Befehlskontext enthält die Befehlsquelle von `S` und ermöglicht es dir, Argumente zu erhalten, die geparsten Befehlsknoten zu betrachten und die in diesem Befehl verwendete Eingabe zu sehen. + +Wie andere funktionale Interfaces wird es in der Regel als Lambda oder als Methodenreferenz verwendet: + +```java +Command command = context -> { + return 0; +}; +``` + +Die Ganzzahl kann als Ergebnis des Befehls betrachtet werden. Normalerweise bedeuten Werte kleiner oder gleich Null, dass ein Befehl fehlgeschlagen ist und nichts machen wird. Positive Werte bedeuten, dass der Befehl erfolgreich war und etwas gemacht hat. Brigadier bietet eine Konstante zur Anzeige von Erfolg; `Befehl#SINGLE_SUCCESS`. + +#### Was kann die `ServerCommandSource` machen? + +Eine "ServerCommandSource" liefert einen zusätzlichen implementierungsspezifischen Kontext, wenn ein Befehl ausgeführt wird. Dazu gehört die Möglichkeit, die Entität, die den Befehl ausgeführt hat, die Welt, in der der Befehl ausgeführt wurde, oder den Server, auf dem der Befehl ausgeführt wurde, zu ermitteln. + +Du kannst auf die Befehlsquelle von einem Befehlskontext aus zugreifen, indem du `getSource()` für die Instanz `CommandContext` aufrufst. + +```java +Command command = context -> { + ServerCommandSource source = context.getSource(); + return 0; +}; +``` + +### Registrieren eines einfachen Befehls + +Befehle werden innerhalb des `CommandRegistrationCallback` registriert, der von der Fabric API bereitgestellt wird. + +:::info +Informationen zur Registrierung von Callbacks findest du in der Anleitung [Events](../events.md). +::: + +Das Event sollte im Initialisierer deines Mods registriert werden. + +Der Callback hat drei Parameter: + +- `CommandDispatcher dispatcher` - Dient zum Registrieren, Parsen und Ausführen von Befehlen. `S` ist der Typ + der Befehlsquelle, die der Command Dispatcher unterstützt. +- `CommandRegistryAccess registryAccess` - Bietet eine Abstraktion zu Registrys, die an bestimmte Befehlsargumente übergeben werden können + Argument-Methoden +- `CommandManager.RegistrationEnvironment environment` - Identifiziert den Typ des Servers, auf dem die Befehle registriert werden. + +Im Mod-Initialisierer registrieren wir nur einen einfachen Befehl: + +@[code lang=java transcludeWith=:::_1](@/reference/latest/src/main/java/com/example/docs/command/FabricDocsReferenceCommands.java) + +In der Methode `sendFeedback()` ist der erste Parameter der zu sendende Text, der ein `Supplier` ist, um zu vermeiden, dass Text-Objekte instanziert werden, wenn sie nicht benötigt werden. + +Der zweite Parameter bestimmt, ob die Rückmeldung an andere Operatoren gesendet werden soll. Im Allgemeinen sollte der Befehl `false` sein, wenn er etwas abfragen soll, ohne die Welt tatsächlich zu beeinflussen, wie zum Beispiel die aktuelle Zeit oder den Punktestand eines Spielers. Wenn der Befehl etwas macht, wie z. B. die Zeit zu ändern oder den Spielstand einer Person zu ändern, sollte er `true` sein. + +Wenn der Befehl fehlschlägt, kannst du, anstatt `sendFeedback()` aufzurufen, direkt eine beliebige Ausnahme auslösen, die vom Server oder Client entsprechend behandelt wird. + +Die `CommandSyntaxException` wird im Allgemeinen ausgelöst, um Syntaxfehler in Befehlen oder Argumenten aufzuzeigen. Du kannst auch deine eigene Exception implementieren. + +Um diesen Befehl auszuführen, musst du `/foo` eingeben, wobei die Groß- und Kleinschreibung zu beachten ist. + +#### Umgebung der Registrierung + +Falls gewünscht, kannst du auch dafür sorgen, dass ein Befehl nur unter bestimmten Umständen registriert wird, zum Beispiel nur in der dedizierten Umgebung: + +@[code lang=java highlight={2} transcludeWith=:::2](@/reference/latest/src/main/java/com/example/docs/command/FabricDocsReferenceCommands.java) + +#### Befehlsanforderungen + +Angenommen, du hast einen Befehl, den nur Operatoren ausführen können sollen. An dieser Stelle kommt die Methode `requires()` ins Spiel. Die Methode `requires()` hat ein Argument eines `Predicate`, das eine `ServerCommandSource` liefert, mit der getestet werden kann, ob die `CommandSource` den Befehl ausführen kann. + +@[code lang=java highlight={3} transcludeWith=:::3](@/reference/latest/src/main/java/com/example/docs/command/FabricDocsReferenceCommands.java) + +Dieser Befehl wird nur ausgeführt, wenn die Quelle des Befehls mindestens ein Operator der Ebene 2 ist, einschließlich Befehlsblöcke. Andernfalls ist der Befehl nicht registriert. + +Dies hat den Nebeneffekt, dass dieser Befehl in der Tab-Vervollständigung für alle, die nicht Level 2 Operator sind, nicht angezeigt wird. Das ist auch der Grund, warum du die meisten Befehle nicht mit der Tabulatortaste vervollständigen kannst, wenn du keine Cheats aktivierst. + +#### Unterbefehle + +Um einen Unterbefehl hinzuzufügen, registriere den ersten buchstäblichen Knoten des Befehls ganz normal. Um einen Unterbefehl zu haben, musst du den nächsten buchstäblichen Knoten an den bestehenden Knoten anhängen. + +@[code lang=java highlight={3} transcludeWith=:::7](@/reference/latest/src/main/java/com/example/docs/command/FabricDocsReferenceCommands.java) + +Ähnlich wie die Argumente können auch die Unterbefehlsknoten auf optional gesetzt werden. Im folgenden Fall sind sowohl `/subtater` als auch `/subtater subcommand` gültig. + +@[code lang=java highlight={2,8} transcludeWith=:::8](@/reference/latest/src/main/java/com/example/docs/command/FabricDocsReferenceCommands.java) + +### Client-Befehle + +Die Fabric API verfügt über einen `ClientCommandManager` im Paket `net.fabricmc.fabric.api.client.command.v2`, der zur Registrierung clientseitiger Befehle verwendet werden kann. Der Code sollte nur im clientseitigen Code vorhanden sein. + +@[code lang=java transcludeWith=:::1](@/reference/latest/src/client/java/com/example/docs/client/command/FabricDocsReferenceClientCommands.java) + +### Befehlsumleitungen + +Befehlsumleitungen - auch bekannt als Aliase - sind eine Möglichkeit, die Funktionalität eines Befehls auf einen anderen umzuleiten. Dies ist nützlich, wenn du den Namen eines Befehls ändern möchtest, aber den alten Namen beibehalten willst. + +@[code lang=java transcludeWith=:::12](@/reference/latest/src/client/java/com/example/docs/client/command/FabricDocsReferenceClientCommands.java) + +### FAQ + +
+ +###### Warum lässt sich mein Code nicht kompilieren? + +- Abfangen oder Auslösen einer `CommandSyntaxException` - `CommandSyntaxException` ist keine `RuntimeException`. Wenn du sie auslöst, sollte sie in Methoden ausgelöst werden, die `CommandSyntaxException` in den Methodensignaturen auslösen, oder sie sollte abgefangen werden. + Brigadier wird die checked Exceptions behandeln und die entsprechende Fehlermeldung im Spiel für dich weiterleiten. + +- Probleme mit generischen Typen - Es kann sein, dass du hin und wieder ein Problem mit generischen Typen hast. Wenn du Serverbefehle registrierst (was in den meisten Fällen der Fall ist), stelle sicher, dass du `CommandManager.literal` oder `CommandManager.argument` anstelle von `LiteralArgumentBuilder.literal` oder `RequiredArgumentBuilder.argument` benutzt. + +- Überprüfe die Methode `sendFeedback()` - Du hast vielleicht vergessen, einen booleschen Wert als zweites Argument anzugeben. Denke auch daran dass seit Minecraft 1.20 der erste Parameter `Supplier` anstelle von `Text` ist. + +- Ein Befehl sollte eine ganze Zahl zurückgeben - Bei der Registrierung von Befehlen akzeptiert die Methode `executes()` ein `Command` Objekt, das normalerweise ein Lambda ist. Das Lambda sollte eine ganze Zahl zurückgeben, anstelle anderen Typen. + +###### Kann ich Befehle zur Laufzeit registrieren? + +::: warning +You can do this, but it is not recommended. You would get the `CommandManager` from the server and add anything commands +you wish to its `CommandDispatcher`. + +Danach musst du den Befehlsbaum mit `CommandManager.sendCommandTree(ServerPlayerEntity)` erneut an jeden Spieler senden. + +Dies ist erforderlich, da der Client den Befehlsbaum, den er bei der Anmeldung (oder beim Senden von Operator-Paketen) erhält, lokal zwischenspeichert, um Fehlermeldungen zu vervollständigen. +::: + +###### Kann ich die Registrierung von Befehlen während der Laufzeit aufheben? + +::: warning +You can also do this, however, it is much less stable than registering commands at runtime and could cause unwanted side +effects. + +Um die Dinge einfach zu halten, musst du Reflection auf Brigadier anwenden und Knoten entfernen. Danach musst du den Befehlsbaum erneut an jeden Spieler mit `sendCommandTree(ServerPlayerEntity)` senden. + +Wenn du den aktualisierten Befehlsbaum nicht sendest, kann es sein, dass der Client denkt, dass der Befehl noch existiert, obwohl die Ausführung am Server fehlschlägt. +::: diff --git a/translated/de_de/develop/commands/suggestions.md b/translated/de_de/develop/commands/suggestions.md new file mode 100644 index 000000000..51d8a4291 --- /dev/null +++ b/translated/de_de/develop/commands/suggestions.md @@ -0,0 +1,45 @@ +--- +title: Befehlsvorschläge +description: Lerne, wie man Spielern Werte für Befehlsargumente vorschlagen kann. +authors: + - IMB11 +--- + +# Befehlsvorschläge + +Minecraft hat ein mächtiges System für Befehlsvorschläge, das an vielen Stellen verwendet wird, wie zum Beispiel beim Befehl `/give`. Mit diesem System kannst du dem Spieler Werte für Befehlsargumente vorschlagen, aus denen er dann auswählen kann - eine großartige Möglichkeit, um deine Befehle benutzerfreundlicher und ergonomischer zu gestalten. + +## Vorschlaganbieter + +Ein `SuggestionProvider` wird verwendet, um eine Liste von Vorschlägen zu erstellen, die an den Spieler gesendet werden. Ein Vorschlaganbieter ist eine funktionales Interface, das einen `CommandContext` und einen `SuggestionBuilder` entgegennimmt und einige `Suggestions` zurückgibt. Der `SuggestionProvider` gibt ein `CompletableFuture` zurück, da die Vorschläge möglicherweise nicht sofort verfügbar sind. + +## Verwenden von Vorschlaganbietern + +Um einen Vorschlaganbieter zu verwenden, musst du die Methode `suggests` auf dem Argument Builder aufrufen. Diese Methode nimmt einen `SuggestionProvider` entgegen und gibt einen neuen Argument Builder mit dem angehängten Vorschlaganbieter zurück. + +@[code java transcludeWith=:::9 highlight={4}](@/reference/latest/src/main/java/com/example/docs/command/FabricDocsReferenceCommands.java) + +## Eingebaute Vorschlaganbieter + +Es gibt einige eingebaute Vorschlaganbieter, du verwenden kannst: + +| Vorschlaganbieter | Beschreibung | +| ----------------------------------------- | --------------------------------------------------------- | +| `SuggestionProviders.SUMMONABLE_ENTITIES` | Schläft alle Entitäten vor, die beschworen werden können. | +| `SuggestionProviders.AVAILABLE_SOUNDS` | Schlägt alle Klänge vor, die abgespielt werden können. | +| `LootCommand.SUGGESTION_PROVIDER` | Zeigt alle verfügbaren Loottabellen an. | +| `SuggestionProviders.ALL_BIOMES` | Schlägt alle Biome vor, die verfügbar sind. | + +## Erstellen eines benutzerdefinierten Vorschlagsanbieters + +Wenn ein eingebauter Anbieter deine Anforderungen nicht erfüllt, kannst du einen eigenen Vorschlaganbieter erstellen. Zu diesem Zweck musst du eine Klasse erstellen, die das Interface `SuggestionProvider` implementiert und die Methode `getSuggestions` überschreibt. + +In diesem Beispiel erstellen wir einen Vorschlaganbieter, der alle Benutzernamen der Spieler auf dem Server vorschlägt. + +@[code java transcludeWith=:::1](@/reference/latest/src/main/java/com/example/docs/command/PlayerSuggestionProvider.java) + +Um diesen Vorschlaganbieter zu verwenden, übergebe einfach eine Instanz davon an die Methode `.suggests` im Argument Builder. + +Natürlich können die Anbieter von Vorschlägen komplexer sein, da sie auch den Befehlskontext lesen können, um Vorschläge zu machen, die auf dem Zustand des Befehls basieren - zum Beispiel auf den Argumenten, die bereits angegeben wurden. + +Dies könnte in Form von Lesen des Inventars des Spielers und Vorschlagen von Gegenständen oder Entitäten, die sich in der Nähe des Spielers befinden, geschehen. diff --git a/translated/de_de/develop/rendering/gui/custom-widgets.md b/translated/de_de/develop/rendering/gui/custom-widgets.md index aaff1bfc9..d270c1c80 100644 --- a/translated/de_de/develop/rendering/gui/custom-widgets.md +++ b/translated/de_de/develop/rendering/gui/custom-widgets.md @@ -7,14 +7,14 @@ authors: # Eigene Widgets -Widgets sind im Wesentlichen in Containern untergebrachte Rendering-Komponenten, die zu einem Bildschirm hinzugefügt werden können und mit denen der Spieler durch verschiedene Ereignisse wie Mausklicks, Tastendruck usw. interagieren kann. +Widgets sind im Wesentlichen in Containern untergebrachte Rendering-Komponenten, die zu einem Bildschirm hinzugefügt werden können und mit denen der Spieler durch verschiedene Ereignisse wie Mausklicks, Tastendruck usw. ## Ein Widget erstellen -Es gibt mehrere Möglichkeiten, eine Widget-Klasse zu erstellen, beispielsweise durch die Erweiterung von `ClickableWidget`. Diese Klasse bietet viele nützliche Funktionen, wie beispielsweise die Verwaltung von Breite, Höhe und Position sowie die Behandlung von Ereignissen. Sie implementiert die Schnittstellen `Drawable`, `Element`, `Narratable` und `Selectable`: +Es gibt mehrere Möglichkeiten, eine Widget-Klasse zu erstellen, beispielsweise durch die Erweiterung von `ClickableWidget`. Diese Klasse bietet viele nützliche Funktionen, wie beispielsweise die Verwaltung von Breite, Höhe und Position sowie die Behandlung von Ereignissen. - `Drawable` - zum Rendern - Erforderlich, um das Widget über die Methode `addDrawableChild` auf dem Bildschirm zu registrieren. -- `Element` - für Ereignisse - Erforderlich, wenn du Ereignisse wie Mausklicks, Tastendrücke usw. behandeln willst. +- `Element` - für Ereignisse - Erforderlich, wenn du Ereignisse wie Mausklicks, Tastendrücke usw. - `Narratable` - für die Barrierefreiheit - Erforderlich, um dein Widget für Bildschirmleser und andere Barrierefreiheitstools zugänglich zu machen. - `Selectable` - für die Auswahl - Erforderlich, wenn du dein Widget mit der Tab-Taste auswählbar machen willst - dies hilft auch bei der Barrierefreiheit. diff --git a/translated/fr_fr/develop/codecs.md b/translated/fr_fr/develop/codecs.md index 89587eff9..73e44c660 100644 --- a/translated/fr_fr/develop/codecs.md +++ b/translated/fr_fr/develop/codecs.md @@ -3,6 +3,7 @@ title: Codecs description: Un guide complet pour comprendre et utiliser le système de codecs de Mojang pour la sérialisation et désérialisation d'objets. authors: - enjarai + - Syst3ms --- # Codecs @@ -346,6 +347,50 @@ Notre nouveau codec sérialisera les beans en JSON ainsi, en n'utilisant que les } ``` +### Codecs récursifs + +Il est parfois utile d'avoir un codec qui s'utilise _soi-même_ pour décoder certains champs, par exemple avec certaines structures de données récursives. Le code vanilla en fait usage pour les objets `Text`, qui peuvent stocker d'autres `Text`s en tant qu'enfants. Un tel codec peut être construit grâce à `Codecs#createRecursive`. + +À titre d'exemple, essayons de sérialiser une liste simplement chaînée. Cette manière de représenter une liste consiste en des nœuds qui contiennent et une valeur, et une référence au prochain nœud de la liste. La liste est alors représentée par son premier nœud, et pour la parcourir, il suffit de continuer à regarder le nœud suivant juste qu'à ce qu'il n'en existe plus. Voici une implémentation simple de nœuds qui stockent des entiers. + +```java +public record ListNode(int value, ListNode next) {} +``` + +Il est impossible de construire un codec comme d'habitude, puisque quel codec utiliserait-on pour le champ `next` ? Il faudrait un `Codec`, ce qui est précisément ce qu'on veut obtenir ! `Codecs#createRecursive` permet de le faire au moyen d'un lambda magique en apparence : + +```java +Codec codec = Codecs.createRecursive( + "ListNode", // un nom pour le codec + selfCodec -> { + // Ici, `selfCodec` représente le `Codec`, comme s'il était déjà construit + // Ce lambda doit renvoyer le codec qu'on aurait voulu utiliser depuis le départ, + // qui se réfère à lui-même via `selfCodec` + return RecordCodecBuilder.create(instance -> + instance.group( + Codec.INT.fieldOf("value").forGetter(ListNode::value), + // le champ `next` sera récursivement traité grâce à l'auto-codec + Codecs.createStrictOptionalFieldCodec(selfCodec, "next", null).forGetter(ListNode::next) + ).apply(instance, ListNode::new) + ); + } +); +``` + +Un `ListNode` sérialisé pourrait alors ressembler à ceci : + +```json +{ + "value": 2, + "next": { + "value": 3, + "next" : { + "value": 5 + } + } +} +``` + ## Références - Il y a une documentation bien plus exhaustive des codecs et des APIs attenantes dans la [JavaDoc DFU non-officielle](https://kvverti.github.io/Documented-DataFixerUpper/snapshot/com/mojang/serialization/Codec.html). diff --git a/translated/it_it/develop/codecs.md b/translated/it_it/develop/codecs.md index 5b61f5923..c75af7f07 100644 --- a/translated/it_it/develop/codecs.md +++ b/translated/it_it/develop/codecs.md @@ -3,6 +3,7 @@ title: Codec description: Una guida esaustiva per la comprensione e l'utilizzo del sistema di codec di Mojang per serializzare e deserializzare gli oggetti. authors: - enjarai + - Syst3ms --- # Codec @@ -347,6 +348,50 @@ Il nostro nuovo codec serializzerà fagioli a json così, prendendo solo attribu } ``` +### Codec Ricorsivi + +A volte è utile avere un codec che utilizza _sé stesso_ per decodificare attributi specifici, per esempio quando si gestiscono certe strutture dati ricorsive. Nel codice vanilla, questo è utilizzato per gli oggetti `Text`, che potrebbero contenere altri `Text` come figli. Un codec del genere può essere costruito utilizzando `Codecs#createRecursive`. + +Per esempio, proviamo a serializzare una lista concatenata singolarmente. Questo metodo di rappresentare le liste consiste di una serie di nodi che contengono sia un valore sia un riferimento al nodo successivo nella lista. La lista è poi rappresentata dal suo primo nodo, e per attraversare la lista si segue il prossimo nodo finché non ce ne sono più. Ecco una semplice implementazione di nodi che contengono interi. + +```java +public record ListNode(int value, ListNode next) {} +``` + +Non possiamo costruire un codec per questo come si fa di solito, quale codec utilizzeremmo per l'attributo `next`? Avremmo bisogno di un `Codec`, che è ciò che stiamo costruendo proprio ora! `Codecs#createRecursive` ci permette di fare ciò utilizzando una lambda che sembra magia: + +```java +Codec codec = Codecs.createRecursive( + "ListNode", // un nome per il codec + selfCodec -> { + // Qui, `selfCodec` rappresenta il `Codec`, come se fosse già costruito + // Questa lambda dovrebbe restituire il coded che volevamo utilizzare dall'inizio, + // che punta a sé stesso attraverso `selfCodec` + return RecordCodecBuilder.create(instance -> + instance.group( + Codec.INT.fieldOf("value").forGetter(ListNode::value), + // l'attributo `next` sarà gestito ricorsivamente con il self-codec + Codecs.createStrictOptionalFieldCodec(selfCodec, "next", null).forGetter(ListNode::next) + ).apply(instance, ListNode::new) + ); + } +); +``` + +Un `ListNode` serializzato potrebbe avere questo aspetto: + +```json +{ + "value": 2, + "next": { + "value": 3, + "next" : { + "value": 5 + } + } +} +``` + ## Riferimenti - Una documentazione molto più dettagliata dei codec e delle relative API può essere trovata presso la [JavaDoc non Ufficiale di DFU (in inglese)](https://kvverti.github.io/Documented-DataFixerUpper/snapshot/com/mojang/serialization/Codec.html). diff --git a/translated/it_it/develop/commands/basics.md b/translated/it_it/develop/commands/basics.md index 12ba856fe..bbce9982e 100644 --- a/translated/it_it/develop/commands/basics.md +++ b/translated/it_it/develop/commands/basics.md @@ -14,6 +14,7 @@ authors: - haykam - mschae23 - treeways + - xpple --- # Creare Comandi @@ -39,7 +40,8 @@ Command command = context -> { }; ``` -L'intero può essere considerato il risultato del comando. Tipicamente valori negativi indicano che un comando è fallito e non farà nulla. Il risultato `0` indica che il comando ha avuto successo. Valori positivi indicano che il comando ha avuto successo e ha fatto qualcosa. Brigadier fornisce una costante per indicare il successo; `Command#SINGLE_SUCCESS`. +L'intero può essere considerato il risultato del comando. Di solito valori minori o uguali a zero indicano che un comando è fallito e non farà nulla. Valori positivi indicano che il comando ha avuto successo e ha fatto qualcosa. Brigadier fornisce una costante per indicare +il successo; `Command#SINGLE_SUCCESS`. #### Cosa Può Fare la `ServerCommandSource`? diff --git a/translated/it_it/sidebar_translations.json b/translated/it_it/sidebar_translations.json index 94d13951c..86a88e7cb 100644 --- a/translated/it_it/sidebar_translations.json +++ b/translated/it_it/sidebar_translations.json @@ -17,6 +17,7 @@ "develop.items.potions": "Pozioni", "develop.entities": "Entità", "develop.entities.effects": "Effetti di Stato", + "develop.entities.damage-types": "Tipi di Danno", "develop.commands": "Comandi", "develop.commands.basics": "Creare Comandi", "develop.commands.arguments": "Argomenti", @@ -32,5 +33,8 @@ "develop.rendering.particles.creatingParticles": "Creare Particelle Custom", "develop.misc": "Pagine di Miscellanea", "develop.misc.codecs": "Codecs", - "develop.misc.events": "Eventi" + "develop.misc.events": "Eventi", + "develop.sounds": "Suoni", + "develop.sounds.using-sounds": "Riprodurre SoundEvents", + "develop.sounds.custom": "Creare Suoni Personalizzati" } \ No newline at end of file diff --git a/translated/ko_kr/CONTRIBUTING.md b/translated/ko_kr/CONTRIBUTING.md index c56bca820..269f17f34 100644 --- a/translated/ko_kr/CONTRIBUTING.md +++ b/translated/ko_kr/CONTRIBUTING.md @@ -79,7 +79,7 @@ Fabric 문서 웹사이트의 모든 페이지는 스타일 가이드를 준수 # ... ``` -2. 페이지에 코드를 추가하는 경우, 코드를 리퍼런스 모드의 소스 코드에 기입해야 합니다. (모드는 `/reference` 폴더에 있습니다) 그리고, [VitePress의 코드 스니펫 기능](https://vitepress.dev/guide/markdown#import-code-snippets)을 이용하여 코드를 임베드합니다. 만약 span을 더 복잡하게 제어해야 하는 경우, [`markdown-it-vuepress-code-snippet-enhanced` 의 트랜스클루전 기능](https://github.com/fabioaanthony/markdown-it-vuepress-code-snippet-enhanced)을 이용할 수 있습니다. +2. 페이지에 코드를 추가하는 경우, 코드를 리퍼런스 모드의 소스 코드에 기입해야 합니다. (모드는 `/reference` 폴더에 있습니다) 만약 span을 더 복잡하게 제어해야 하는 경우, [`markdown-it-vuepress-code-snippet-enhanced` 의 트랜스클루전 기능](https://github.com/fabioaanthony/markdown-it-vuepress-code-snippet-enhanced)을 이용할 수 있습니다. **예시:** @@ -170,7 +170,7 @@ Fabric 문서 웹사이트의 모든 페이지는 스타일 가이드를 준수 ### 내용 검증 -모든 끌어오기 요청은 내용 검증을 거쳐야 합니다. 이는 내용이 정확하고 Fabric 문서 스타일 가이드를 준수하는지 확인하는 단계이므로 가장 중요합니다. +이는 내용이 정확하고 Fabric 문서 스타일 가이드를 준수하는지 확인하는 단계이므로 가장 중요합니다. ### 정리 diff --git a/translated/ko_kr/develop/entities/damage-types.md b/translated/ko_kr/develop/entities/damage-types.md index ab8c63321..9ffc2200d 100644 --- a/translated/ko_kr/develop/entities/damage-types.md +++ b/translated/ko_kr/develop/entities/damage-types.md @@ -19,7 +19,7 @@ _Tater_ 라는 이름의 사용자 정의 피해 유형을 추가해 봅시다. resources/data/fabric-docs-reference/damage_type/tater.json ``` -파일은 다음과 같은 구조를 가지게 됩니다. +파일은 다음과 같은 구조를 가집니다. @[code lang=json](@/reference/latest/src/main/generated/data/fabric-docs-reference/damage_type/tater.json) diff --git a/translated/ko_kr/players/faq.md b/translated/ko_kr/players/faq.md index 5f79e3f16..084543ee6 100644 --- a/translated/ko_kr/players/faq.md +++ b/translated/ko_kr/players/faq.md @@ -19,7 +19,7 @@ description: Fabric 관련 서버 관리자와 플레이어가 자주 묻는 질 항상 모드를 다운로드한 사이트가 안전한지 확인하세요. [안전한 모드 찾기](./finding-mods.md) 에서 더 많은 정보를 확인할 수 있습니다. ::: -대부분의 모드 개발자는 [Modrinth](https://modrinth.com/mods?g=categories:%27fabric%27) 또는 [CurseForge](https://www.curseforge.com/minecraft/search?class=mc-mods\&gameVersionTypeId=4) 에 모드를 업로드 합니다. 하지만, 때때로 공식 웹사이트나 GitHub 릴리스 등 다른 서비스를 이용하는 경우도 있습니다. +대부분의 모드 개발자는 [Modrinth](https://modrinth.com/mods?g=categories:%27fabric%27) 또는 [CurseForge](https://www.curseforge.com/minecraft/search?class=mc-mods\&gameVersionTypeId=4) 에 모드를 업로드 합니다. ### 먼저 생성된 Fabric 모드팩은 어디에서 찾을 수 있나요? diff --git a/translated/ko_kr/players/troubleshooting/crash-reports.md b/translated/ko_kr/players/troubleshooting/crash-reports.md index 081cdc474..cde8d2604 100644 --- a/translated/ko_kr/players/troubleshooting/crash-reports.md +++ b/translated/ko_kr/players/troubleshooting/crash-reports.md @@ -49,7 +49,7 @@ authors: - `---- Minecraft Crash Report ----`, 보고서 요약본. 이는 충돌을 일으킨 주요 오류, 발생한 시간, 그리고 관련 스택트레이스로 이루어집니다. 대부분의 경우에서 스택트레이스에 충돌을 일으킨 모드의 리퍼런스가 포함되므로 보고서의 가장 중요한 부분이라고 할 수 있습니다. - `-- Last Reload --`, 충돌이 리소스 다시 로드 (F3+T) 도중 발생하지 않았다면 대부분 불필요합니다. 다시 로드가 진행된 시간, 다시 로드 중 발생한 오류의 관련 스택 트레이스 등을 포함합니다. 이러한 오류는 대부분 리소스 팩에서 발생하며, 게임에 문제를 일으키지 않는 한 신경 쓸 필요는 없습니다. -- `-- System Details --`, 시스템에 대한 정보. 운영체제, Java 버전, 게임에 할당된 메모리의 양 등이 기록됩니다. 게임에 적당한 양의 메모리가 할당되었는지, 올바른 Java 버전을 사용했는지 등을 확인할 때 유용합니다. +- 운영체제, Java 버전, 게임에 할당된 메모리의 양 등이 기록됩니다. 게임에 적당한 양의 메모리가 할당되었는지, 올바른 Java 버전을 사용했는지 등을 확인할 때 유용합니다. - Fabric의 경우, 여기에 설치된 모드가 기록되는 `Fabric Mods:` 가 추가됩니다. 모드 간 충돌을 파악할 때 유용합니다. ### 충돌 보고서 분해하기 diff --git a/translated/ko_kr/players/troubleshooting/uploading-logs.md b/translated/ko_kr/players/troubleshooting/uploading-logs.md index 416aa7bfc..d2203930b 100644 --- a/translated/ko_kr/players/troubleshooting/uploading-logs.md +++ b/translated/ko_kr/players/troubleshooting/uploading-logs.md @@ -11,13 +11,13 @@ authors: ## 로그를 업로드해야 하는 이유 -로그를 단순히 복사-붙여넣기 하는것 보다 업로드하면 문제를 해결하는게 보다 수월해집니다. 또한 다른 곳으로 로그를 간단하게 전송할 수 있게 됩니다. +로그를 단순히 복사-붙여넣기 하는것 보다 업로드하면 문제를 해결하는게 보다 수월해집니다. 또한 다른 곳으로 로그를 간단하게 전송할 수 있게 됩니다. 또한 다른 곳으로 로그를 간단하게 전송할 수 있게 됩니다. 때때로 일부 서비스에서는 로그에 구문 강조를 지원하여, 더 쉽게 읽을 수 있게 하고, 사용자 아이디나 시스템 정보 등 민감한 정보를 걸러주기도 합니다. ## 충돌 보고서 -충돌 리포트는 게임이 충돌하면 자동으로 생성되며, 게임의 전체 로그 대신 충돌 관련 정보만 포함하고 있습니다. 충돌 리포트는 게임 디렉토리의 `crash-reports` 폴더에 저장됩니다. +충돌 리포트는 게임이 충돌하면 자동으로 생성되며, 게임의 전체 로그 대신 충돌 관련 정보만 포함하고 있습니다. 로그는 게임 디렉토리의 `logs` 폴더에 저장됩니다. 충돌 리포트는 게임 디렉토리의 `crash-reports` 폴더에 저장됩니다. 충돌 리포트에 대한 자세한 정보는 [충돌 리포트](./crash-reports.md) 페이지를 참고하세요. @@ -25,7 +25,7 @@ authors: 본 가이드는 공식 Minecraft 런처 (일반적으로 "바닐라 런처" 라고 불림) 를 위한 것이며, 서드파티 런처는 해당 런처의 문서를 확인해야 합니다. -로그는 게임 디렉토리의 `logs` 폴더에 저장됩니다. 각 운영체제에서 로그 폴더의 위치는 다음과 같습니다. +각 운영체제에서 로그 폴더의 위치는 다음과 같습니다. ::: code-group diff --git a/translated/pl_pl/sidebar_translations.json b/translated/pl_pl/sidebar_translations.json index 8e4d1c06b..cf39c40e1 100644 --- a/translated/pl_pl/sidebar_translations.json +++ b/translated/pl_pl/sidebar_translations.json @@ -17,6 +17,7 @@ "develop.items.potions": "Mikstury", "develop.entities": "Byty", "develop.entities.effects": "Efekty", + "develop.entities.damage-types": "Typy Obrażeń", "develop.commands": "Polecenia", "develop.commands.basics": "Tworzenie poleceń", "develop.commands.arguments": "Argumenty", @@ -32,5 +33,8 @@ "develop.rendering.particles.creatingParticles": "Tworzenie niestandardowych cząsteczek", "develop.misc": "Różne strony", "develop.misc.codecs": "Kodeki", - "develop.misc.events": "Zdarzenia" + "develop.misc.events": "Zdarzenia", + "develop.sounds": "Dźwięki", + "develop.sounds.using-sounds": "Odtwarzanie WydarzeńDźwięku", + "develop.sounds.custom": "Tworzenie Niestandardowych Dźwięków" } \ No newline at end of file diff --git a/translated/pt_br/CONTRIBUTING.md b/translated/pt_br/CONTRIBUTING.md index a82dc896e..e1d7b2917 100644 --- a/translated/pt_br/CONTRIBUTING.md +++ b/translated/pt_br/CONTRIBUTING.md @@ -12,6 +12,7 @@ Esse site usa [VitePress](https://vitepress.vuejs.org/) para gerar HTML estátic - [Instruções para Expandir](#guidance-for-expansion) - [Verificação De Conteúdo](#content-verification) - [Apuração](#cleanup) + - Verificação ## Como Contribuir @@ -174,3 +175,7 @@ Todas as "Pull Requests" que adicionam conteúdo passam por verificação de con ### Verificação Esta etapa é onde a equipe de documentação corrigirá quaisquer problemas gramaticais e fará quaisquer outras alterações que julgar necessárias antes de mesclar o "Pull Request"! + +## Traduzindo a Documentação + +Se você desejar traduzir a documentação para a sua linguagem, você pode fazer isso na [pagina do Crowdin do Fabric](https://crowdin.com/project/fabricmc). diff --git a/translated/pt_br/index.md b/translated/pt_br/index.md new file mode 100644 index 000000000..1b537c2cf --- /dev/null +++ b/translated/pt_br/index.md @@ -0,0 +1,28 @@ +--- +title: Documentação do Fabric +description: A documentação oficial para o Fabric, um conjunto de ferramentas para mods de Minecraft. +layout: home +titleTemplate: Documentação do Fabric +hero: + name: Documentação do Fabric + tagline: A documentação oficial para o Fabric, um conjunto de ferramentas para mods de Minecraft. +features: + - title: Developer Guides + icon: 🛠️ + details: Our curated developer guides, written by the community, span a wide range of topics from setting up a development environment to more advanced topics, such as rendering and networking. + link: /develop/ + linkText: Guia de Introdução + - title: Guias do Jogador + icon: 📚 + details: Você é um jogador que deseja usar mods desenvolvidos para o Fabric? Nossos guias de jogador irão te ajudar. Esses guias te ajudarão a baixar, instalar e solucionar problemas com mods do Fabric. + link: /players/ + linkText: Leia Mais +--- + +
+ +## Gostaria de contribuir? + +If you want to contribute to the Fabric Documentation, you can find the source code on [GitHub](https://github.com/FabricMC/fabric-docs), and the relevant [contribution guidelines.](/contributing) + +
diff --git a/translated/pt_br/sidebar_translations.json b/translated/pt_br/sidebar_translations.json new file mode 100644 index 000000000..6e4788df7 --- /dev/null +++ b/translated/pt_br/sidebar_translations.json @@ -0,0 +1,40 @@ +{ + "players.title": "Guias do Jogador", + "players.faq": "Perguntas Frequentes (FAQ)", + "players.installingJava": "Instalando o Java", + "players.installingJava.windows": "Windows", + "players.installingJava.macOS": "macOS", + "players.installingJava.linux": "Linux", + "players.installingFabric": "Instalando Fabric", + "players.findingMods": "Encontrando Mods Confiáveis", + "players.installingMods": "Instalando mods", + "players.troubleshooting": "Resolução de Problemas", + "players.troubleshooting.uploadingLogs": "Enviando Seus Logs", + "players.troubleshooting.crashReports": "Relatórios de Erros", + "players.updatingFabric": "Atualizando o Fabric", + "develop.title": "Guias do Desenvolvedor", + "develop.items": "Itens", + "develop.items.potions": "Poções", + "develop.entities": "Entidades", + "develop.entities.effects": "Efeitos de Estado", + "develop.entities.damage-types": "Tipos de Dano", + "develop.commands": "Comandos", + "develop.commands.basics": "Criando comandos", + "develop.commands.arguments": "Argumentos", + "develop.commands.suggestions": "Sugestões", + "develop.rendering": "Renderização", + "develop.rendering.basicConcepts": "Conceitos básicos de renderização", + "develop.rendering.drawContext": "Usando o \"Drawing Context\"", + "develop.rendering.hud": "Renderizando a Interface", + "develop.rendering.gui": "GUIs e Telas", + "develop.rendering.gui.customScreens": "Telas Personalizadas", + "develop.rendering.gui.customWidgets": "Widgets Personalizados", + "develop.rendering.particles": "Partículas", + "develop.rendering.particles.creatingParticles": "Criando partículas", + "develop.misc": "Paginas Diversas", + "develop.misc.codecs": "Codecs", + "develop.misc.events": "Eventos", + "develop.sounds": "Sons", + "develop.sounds.using-sounds": "Tocando \"SoundEvents\"", + "develop.sounds.custom": "Criando Sons Personalizados" +} \ No newline at end of file diff --git a/translated/uk_ua/players/updating-fabric.md b/translated/uk_ua/players/updating-fabric.md new file mode 100644 index 000000000..4df1c206b --- /dev/null +++ b/translated/uk_ua/players/updating-fabric.md @@ -0,0 +1,41 @@ +--- +title: Оновлення Fabric +description: Покрокова інструкція з оновлення Fabric. +authors: + - IMB11 + - modmuss50 +--- + +# Оновлення Fabric + +Ця інструкція допоможе вам оновити Fabric для офіційного лаунчера Minecraft. + +Для неофіційних лаунчерів слід ознайомитися з їх документацією. + +Процес оновлення Fabric дуже схожий на процес встановлення Fabric, тому частина цього посібника буде такою самою, як інструція [Встановлення Fabric](./installing-fabric.md). + +## Чому я маю оновлювати Fabric Loader? + +Нові моди можуть потребувати новішу версію Fabric Loader для роботи, тому важливо мати актуальну версію, щоб мати можливість використовувати найновіші моди. + + + + + +Щоб оновити Fabric, переконайтеся що версія гри та версія завантажувача правильні, а потім натисніть `Встановити`. + +**Під час запуску інсталятора обов’язково зніміть прапорець «Створити профіль», інакше буде створено новий профіль, який у цьому випадку нам не потрібен.** + +## 3. Відкрийте профіль в лаунчері Minecraft + +Після завершення встановлення ви можете відкрити лаунчер Minecraft і перейти на вкладку `Встановлення`. Ви повинні перейти до свого профілю Fabric і відкрити екран редагування. + +Замініть версію новою версією Fabric Loader, яку ви щойно встановили, і натисніть `Зберегти`. + +![Оновлення версії Fabric Loader у лаунчері Minecraft.](/assets/players/updating-fabric.png) + +## 4. Готово! + +Виконавши дані кроки, ви можете повернутися на вкладку `Грати`, вибрати профіль Fabric зі спадного меню в нижньому лівому куті та натиснути кнопку `Грати`! + +Якщо під час виконання цієї інструкції у вас виникнуть проблеми, ви можете звернутися за допомогою в [Діскорд сервері Fabric](https://discord.gg/v6v4pMv) в каналі `#player-support`. diff --git a/translated/zh_cn/CONTRIBUTING.md b/translated/zh_cn/CONTRIBUTING.md index 46f84d7ed..9ceecc6e5 100644 --- a/translated/zh_cn/CONTRIBUTING.md +++ b/translated/zh_cn/CONTRIBUTING.md @@ -16,7 +16,7 @@ ## 如何贡献 -建议您在存储库的分支上为您发出的每个拉取请求创建一个新分支。 这样一次性管理多个拉取请求将更简单。 +建议您在存储库的分支上为您发出的每个拉取请求创建一个新分支。 这样一次性管理多个拉取请求将更简单。 这样一次性管理多个拉取请求将更简单。 **如果您需要本地预览您的更改,您需要安装 [Node.js 18+](https://nodejs.org/en/)** @@ -62,7 +62,7 @@ npm run preview ### 风格指南 -在 Fabric 文档网站中的所有页面都应该遵循风格指南。 如果你有任何疑问,请在 [Fabric Discord](https://discord.gg/v6v4pMv) 或 GitHub Discussions 中提出。 +在 Fabric 文档网站中的所有页面都应该遵循风格指南。 如果你有任何疑问,请在 [Fabric Discord](https://discord.gg/v6v4pMv) 或 GitHub Discussions 中提出。 如果你有任何疑问,请在 [Fabric Discord](https://discord.gg/v6v4pMv) 或 GitHub Discussions 中提出。 风格指南如下: @@ -79,7 +79,7 @@ npm run preview # ... ``` -2. 如果您创建或修改了包含代码的页面,请将代码放置在参考模组内的适当位置(位于存储库的 `/reference` 文件夹中)。 然后,使用 [VitePress 的代码导入功能](https://vitepress.dev/zh/guide/markdown#import-code-snippets) 来嵌入代码。如果你需要一个更大的区域,请使用, [`markdown-it-vuepress-code-snippet-enhanced` 的嵌入功能](https://github.com/fabioaanthony/markdown-it-vuepress-code-snippet-enhanced)。 +2. 如果您创建或修改了包含代码的页面,请将代码放置在参考模组内的适当位置(位于存储库的 `/reference` 文件夹中)。 如果您创建或修改了包含代码的页面,请将代码放置在参考模组内的适当位置(位于存储库的 `/reference` 文件夹中)。 然后,使用 [VitePress 的代码导入功能](https://vitepress.dev/zh/guide/markdown#import-code-snippets) 来嵌入代码。如果你需要一个更大的区域,请使用, [`markdown-it-vuepress-code-snippet-enhanced` 的嵌入功能](https://github.com/fabioaanthony/markdown-it-vuepress-code-snippet-enhanced)。 **例如:** @@ -130,17 +130,17 @@ npm run preview } ``` -3. 所有原始文档都使用英文书写,跟随美国的语法规则。 虽然你可以使用 [LanguageTool](https://languagetool.org/) 检查你的语法,但不要过于担心。 我们的文档团队会在清理阶段审查并纠正语法。 不过,一开始就努力做到正确可以为我们节省时间。 +3. 所有原始文档都使用英文书写,跟随美国的语法规则。 虽然你可以使用 [LanguageTool](https://languagetool.org/) 检查你的语法,但不要过于担心。 我们的文档团队会在清理阶段审查并纠正语法。 不过,一开始就努力做到正确可以为我们节省时间。 虽然你可以使用 [LanguageTool](https://languagetool.org/) 检查你的语法,但不要过于担心。 我们的文档团队会在清理阶段审查并纠正语法。 不过,一开始就努力做到正确可以为我们节省时间。 -4. 如果您正在创建新的部分,您应当在 `.vitepress/sidebars` 文件夹中创建新的侧边栏,并将它添加到 `config.mts` 文件中。 如果您需要帮助,请在 [Fabric Discord](https://discord.gg/v6v4pMv) 的` #docs` 频道提问。 +4. 如果您正在创建新的部分,您应当在 `.vitepress/sidebars` 文件夹中创建新的侧边栏,并将它添加到 `config.mts` 文件中。 如果您需要帮助,请在 [Fabric Discord](https://discord.gg/v6v4pMv) 的` #docs` 频道提问。 如果您需要帮助,请在 [Fabric Discord](https://discord.gg/v6v4pMv) 的` #docs` 频道提问。 -5. 创建新页面时,您应当将其添加到 `.vitepress/sidebars` 文件夹中相关的侧边栏中。 重复,如果您需要帮助,请在 Fabric Discord 的` #docs` 频道提问。 +5. 目录 创建新页面时,您应当将其添加到 `.vitepress/sidebars` 文件夹中相关的侧边栏中。 重复,如果您需要帮助,请在 Fabric Discord 的` #docs` 频道提问。 6. 任何图片都应该放在 `/assets` 文件夹中的适当位置。 7. ⚠️ **当链接其他页面时,使用相对链接。** ⚠️ - 这是因为现有的版本控制系统会预处理链接,以便事先添加版本号。 如果您使用绝对链接,版本号将不会被添加到链接中。 + 这是因为现有的版本控制系统会预处理链接,以便事先添加版本号。 如果您使用绝对链接,版本号将不会被添加到链接中。 如果您使用绝对链接,版本号将不会被添加到链接中。 例如,对于 `/players` 文件夹中的页面,要链接到位于 `/players/installing-fabric.md` 的 `installing-fabric` 页面,您需要进行以下操作: @@ -162,7 +162,7 @@ npm run preview ### 扩展指南 -如果文档团队认为您需要拓展您的拉去请求,团队成员将添加 `expansion` 标签到您的拉去请求,并附上一条评论解释为什么他认为可以拓展。 如果你同意这条建议,你可以拓展你的拉取请求。 +如果文档团队认为您需要拓展您的拉去请求,团队成员将添加 `expansion` 标签到您的拉去请求,并附上一条评论解释为什么他认为可以拓展。 如果你同意这条建议,你可以拓展你的拉取请求。 如果你同意这条建议,你可以拓展你的拉取请求。 **不要对拓展拉取请求感到有压力。** 如果您不想拓展您的拉取请求,您可以简单地请求移除 `expansion` 标签。 diff --git a/translated/zh_cn/develop/commands/arguments.md b/translated/zh_cn/develop/commands/arguments.md index b0b0dee77..735fb4c4a 100644 --- a/translated/zh_cn/develop/commands/arguments.md +++ b/translated/zh_cn/develop/commands/arguments.md @@ -5,25 +5,25 @@ description: 学习如何创建带有复杂参数的命令。 # 命令参数 -大多数的命令都有参数。 有些时候他们是可选的,这意味着如果你不提供这些参数命令照样可以工作 一个节点可能有多个参数类型导致用户感到困惑,请注意避免这个问题。 +大多数的命令都有参数。 大多数的命令都有参数。 有些时候他们是可选的,这意味着如果你不提供这些参数命令照样可以工作 一个节点可能有多个参数类型导致用户感到困惑,请注意避免这个问题。 一个节点可能有多个参数类型导致用户感到困惑,请注意避免这个问题。 @[code lang=java highlight={3} transcludeWith=:::4](@/reference/latest/src/main/java/com/example/docs/command/FabricDocsReferenceCommands.java) -比如说,在命令文本`/argtater`之后,您应该输入一个整型数字。 举个例子,如果您输入了`/argtater 3`,您应该会收到一条反馈消息:`Called /argtater with value = 3`。 如果您输入了 `/argtataer` 并且没有任何参数,那么这个命令将不会被正确解析。 +比如说,在命令文本`/argtater`之后,您应该输入一个整型数字。 比如说,在命令文本`/argtater`之后,您应该输入一个整型数字。 举个例子,如果您输入了`/argtater 3`,您应该会收到一条反馈消息:`Called /argtater with value = 3`。 如果您输入了 `/argtataer` 并且没有任何参数,那么这个命令将不会被正确解析。 如果您输入了 `/argtataer` 并且没有任何参数,那么这个命令将不会被正确解析。 接下来我们将添加第二个可选的参数: @[code lang=java highlight={3,13} transcludeWith=:::5](@/reference/latest/src/main/java/com/example/docs/command/FabricDocsReferenceCommands.java) -现在您可以输入一个或者两个整型数字了。 如果您提供了一个整型数字,那么会打印单个值的反馈文本。 如果您提供了两个整型数字,那么会打印有两个值的反馈文本。 +现在您可以输入一个或者两个整型数字了。 如果您提供了一个整型数字,那么会打印单个值的反馈文本。 现在您可以输入一个或者两个整型数字了。 如果您提供了一个整型数字,那么会打印单个值的反馈文本。 如果您提供了两个整型数字,那么会打印有两个值的反馈文本。 -您可能会发现没有必要指定两次相似的执行。 因此,我们可以创建一个方法,用于两次执行。 +您可能会发现没有必要指定两次相似的执行。 因此,我们可以创建一个方法,用于两次执行。 因此,我们可以创建一个方法,用于两次执行。 @[code lang=java highlight={3,5,6,7} transcludeWith=:::6](@/reference/latest/src/main/java/com/example/docs/command/FabricDocsReferenceCommands.java) ## 自定义参数类型 -如果原版并没有提供您想要的命令参数类型,您可以创建您自己的类型。 为此,您需要创建一个继承`ArgumentType < T >` 接口的类,其中 `T` 是参数的类型。 +如果原版并没有提供您想要的命令参数类型,您可以创建您自己的类型。 如果原版并没有提供您想要的命令参数类型,您可以创建您自己的类型。 为此,您需要创建一个继承`ArgumentType < T >` 接口的类,其中 `T` 是参数的类型。 您想要实现 `parse` 这个方法,这个方法会把输入的字符串解析为期望的类型。 diff --git a/translated/zh_cn/develop/commands/suggestions.md b/translated/zh_cn/develop/commands/suggestions.md index e762ce59e..13888d6cf 100644 --- a/translated/zh_cn/develop/commands/suggestions.md +++ b/translated/zh_cn/develop/commands/suggestions.md @@ -7,15 +7,15 @@ authors: # 命令提示 -Minecraft 有一个使用在了很多地方的十分强大的命令建议系统,比如说 `/give` 命令。 该系统允许您向用户提示命令参数的值,然后他们可以从中选择 —— 这是使您的命令更加用户友好且符合人体工学的好办法。 +Minecraft 有一个使用在了很多地方的十分强大的命令建议系统,比如说 `/give` 命令。 该系统允许您向用户提示命令参数的值,然后他们可以从中选择 —— 这是使您的命令更加用户友好且符合人体工学的好办法。 该系统允许您向用户提示命令参数的值,然后他们可以从中选择 —— 这是使您的命令更加用户友好且符合人体工学的好办法。 ## 提示提供器 -`SuggestionProvider` 用于创建发送给客户端的提示列表。 提示提供器是一个函数式接口,它使用 `CommandContext` 和 `SuggestionBuilder` 并返回 `Suggestions`。 `SuggestionProvider` 返回 `CompletableFuture` 因为提示可能不会立即可用。 +提示所有可用的战利品表。 `SuggestionProvider` 用于创建发送给客户端的提示列表。 提示提供器是一个函数式接口,它使用 `CommandContext` 和 `SuggestionBuilder` 并返回 `Suggestions`。 `SuggestionProvider` 返回 `CompletableFuture` 因为提示可能不会立即可用。 `SuggestionProvider` 返回 `CompletableFuture` 因为提示可能不会立即可用。 ## 使用提示提供器 -要使用提示提供器,您可以在参数构造器上调用 `suggests` 方法。 该方法使用 `SuggestionProvider` 并返回一个附加了提示提供器的新的参数构造器。 +要使用提示提供器,您可以在参数构造器上调用 `suggests` 方法。 要使用提示提供器,您可以在参数构造器上调用 `suggests` 方法。 该方法使用 `SuggestionProvider` 并返回一个附加了提示提供器的新的参数构造器。 @[code java transcludeWith=:::9 highlight={4}](@/reference/latest/src/main/java/com/example/docs/command/FabricDocsReferenceCommands.java) @@ -32,7 +32,7 @@ Minecraft 有一个使用在了很多地方的十分强大的命令建议系统 ## 创建一个自定义的提示提供器 -如果内建的提供器无法满足您的需要,您可以创建您自己的提示提供器。 为此,您需要创建一个实现 `SuggestionProvider` 接口的类,并重写 `getSuggestions` 方法。 +如果内建的提供器无法满足您的需要,您可以创建您自己的提示提供器。 为此,您需要创建一个实现 `SuggestionProvider` 接口的类,并重写 `getSuggestions` 方法。 为此,您需要创建一个实现 `SuggestionProvider` 接口的类,并重写 `getSuggestions` 方法。 对此示例,我们需要制作一个提示提供器提示所有在服务器上的玩家的名称。 diff --git a/translated/zh_cn/develop/entities/damage-types.md b/translated/zh_cn/develop/entities/damage-types.md index 994c20861..13274b9d1 100644 --- a/translated/zh_cn/develop/entities/damage-types.md +++ b/translated/zh_cn/develop/entities/damage-types.md @@ -9,11 +9,11 @@ authors: # 伤害类型 -伤害类型定义了实体能受到的伤害的种类。 从 Minecraft 1.19.4 开始,创建新的伤害类型的方式已经变为数据驱动的,也就是说它们由 JSON 文件创建。 +有些伤害类型能够无视护甲,无视状态效果等等。 伤害类型的这些属性是由标签控制的。 伤害类型定义了实体能受到的伤害的种类。 从 Minecraft 1.19.4 开始,创建新的伤害类型的方式已经变为数据驱动的,也就是说它们由 JSON 文件创建。 ## 创建一种伤害类型 -让我们创建一种叫 _土豆_ 的伤害类型。 我们先从为你的自定义伤害创建 JSON 文件开始。 这个文件将被放在你的模组的 `data` 目录下的 `damage_type` 子目录。 +让我们创建一种叫 _土豆_ 的伤害类型。 让我们创建一种叫 _土豆_ 的伤害类型。 我们先从为你的自定义伤害创建 JSON 文件开始。 这个文件将被放在你的模组的 `data` 目录下的 `damage_type` 子目录。 这个文件将被放在你的模组的 `data` 目录下的 `damage_type` 子目录。 ```:no-line-numbers resources/data/fabric-docs-reference/damage_type/tater.json @@ -23,7 +23,7 @@ resources/data/fabric-docs-reference/damage_type/tater.json @[code lang=json](@/reference/latest/src/main/generated/data/fabric-docs-reference/damage_type/tater.json) -这个自定义伤害类型在玩家每次受到来自非玩家的生物(例:方块)造成的伤害时增加 0.1 [消耗度](https://zh.minecraft.wiki/w/饥饿#饥饿因素)。 此外,造成的伤害量将随存档难度而变化。 +这个自定义伤害类型在玩家每次受到来自非玩家的生物(例:方块)造成的伤害时增加 0.1 [消耗度](https://zh.minecraft.wiki/w/饥饿#饥饿因素)。 此外,造成的伤害量将随存档难度而变化。 此外,造成的伤害量将随存档难度而变化。 ::: info diff --git a/translated/zh_cn/develop/entities/effects.md b/translated/zh_cn/develop/entities/effects.md index 444732a71..78d12444b 100644 --- a/translated/zh_cn/develop/entities/effects.md +++ b/translated/zh_cn/develop/entities/effects.md @@ -29,7 +29,7 @@ authors: ### 注册你的自定义状态效果 -与注册方块和物品类似,我们使用 `Registry.register` 将我们的自定义状态效果注册到 `STATUS_EFFECT` 注册表。 这可以在我们的模组入口点内完成。 +与注册方块和物品类似,我们使用 `Registry.register` 将我们的自定义状态效果注册到 `STATUS_EFFECT` 注册表。 这可以在我们的模组入口点内完成。 这可以在我们的模组入口点内完成。 @[code lang=java transcludeWith=:::1](@/reference/latest/src/main/java/com/example/docs/effect/FabricDocsReferenceEffects.java) @@ -39,7 +39,7 @@ authors: **纹理** -状态效果图标是 18x18 的 PNG。 将您的自定义图标放在: +状态效果图标是 18x18 的 PNG。 将您的自定义图标放在: 将您的自定义图标放在: ```:no-line-numbers resources/assets/fabric-docs-reference/textures/mob_effect/tater.png @@ -61,8 +61,9 @@ resources/assets/fabric-docs-reference/textures/mob_effect/tater.png ### 测试 -使用命令 `/effect give @p fabric-docs-reference:tater` 为玩家提供 Tater 效果。 使用 `/effect clear` 移除该效果。 +使用命令 `/effect give @p fabric-docs-reference:tater` 为玩家提供 Tater 效果。 使用 `/effect clear` 移除该效果。 状态效果,又称效果,是一种可以影响实体的条件。 它们的性质可以是正面的,负面的或者中性的。 游戏本体通过许多不同的方式应用这些效果,如食物和药水等等。 ::: info 要创建使用此效果的药水,请参阅[药水](../items/potions.md)指南。 ::: +::: diff --git a/translated/zh_cn/develop/items/potions.md b/translated/zh_cn/develop/items/potions.md index e14e19b67..e802f1ebd 100644 --- a/translated/zh_cn/develop/items/potions.md +++ b/translated/zh_cn/develop/items/potions.md @@ -13,7 +13,7 @@ authors: ## 自定义药水 -新增药水和新增物品的方式类似。 你将创建的你的药水的一个实例,并通过调用 `BrewingRecipeRegistry.registerPotionRecipe` 注册它。 +新增药水和新增物品的方式类似。 新增药水和新增物品的方式类似。 你将创建的你的药水的一个实例,并通过调用 `BrewingRecipeRegistry.registerPotionRecipe` 注册它。 :::info 当 Fabric API 存在时,`BrewingRecipeRegistry.registerPotionRecipe` 的访问权限会被访问加宽器(Access Widener)设置为 `public` 。 @@ -21,15 +21,15 @@ authors: ### 创建药水 -让我们从声明一个用于储存你的 `Potion` 实例的字段开始。 我们将直接使用入口点类来持有这个字段。 +让我们从声明一个用于储存你的 `Potion` 实例的字段开始。 我们将直接使用入口点类来持有这个字段。 我们将直接使用入口点类来持有这个字段。 @[code lang=java transclude={18-27}](@/reference/latest/src/main/java/com/example/docs/potion/FabricDocsReferencePotions.java) 我们传入一个 `StatusEffectInstance` 实例,它的构造方法接收以下 3 个参数: -- `StatusEffect type` - 一个状态效果。 我们在这里使用我们的自定义效果。 此外你也可以通过 `net.minecraft.entity.effect.StatusEffects` 访问原版效果。 +- `StatusEffect type` - 一个状态效果。 我们在这里使用我们的自定义效果。 此外你也可以通过 `net.minecraft.entity.effect.StatusEffects` 访问原版效果。 我们在这里使用我们的自定义效果。 药水是能为实体提供效果的消耗品。 玩家可以使用酿造台酿造药水,或者从其他游戏机制中以物品形式获取它们。 - `int duration` - 状态效果的持续时间(以刻计算)。 -- `int amplifier` - 状态效果的增幅。 比如 急迫 II 的增幅是 1。 +- `int amplifier` - 状态效果的增幅。 比如 急迫 II 的增幅是 1。 比如 急迫 II 的增幅是 1。 :::info 为了创建你自己的效果,请参阅 [状态效果](../entities/effects.md) 的指南。 @@ -43,7 +43,7 @@ authors: `registerPotionRecipe` 接收以下 3 个参数: -- `Potion input` - 初始的药水。 通常可以是水瓶或粗制的药水。 +- `Potion input` - 初始的药水。 通常可以是水瓶或粗制的药水。 通常可以是水瓶或粗制的药水。 - `Item item` - 作为药水主要原料的物品。 - `Potion output` - 产出的药水。 @@ -63,9 +63,10 @@ authors: 在 Fabric API 的帮助下,使用 ` net.fabricmc.fabric.api.registry.FabricBrewingRecipeRegistry` 可以使用 `Ingredient` 而非 `Item` 来注册药水配方。 ::: +::: ### 不使用 Fabric API 注册药水配方 -没有 Fabric API 时,`BrewingRecipeRegistry.registerPotionRecipe` 将会是 `private` 的。 为了访问这个方法,请使用如下的 `@Invoker` Mixin,或使用访问加宽器(Access Widener)。 +没有 Fabric API 时,`BrewingRecipeRegistry.registerPotionRecipe` 将会是 `private` 的。 为了访问这个方法,请使用如下的 `@Invoker` Mixin,或使用访问加宽器(Access Widener)。 为了访问这个方法,请使用如下的 `@Invoker` Mixin,或使用访问加宽器(Access Widener)。 @[code lang=java transcludeWith=:::1](@/reference/latest/src/main/java/com/example/docs/mixin/potion/BrewingRecipeRegistryInvoker.java) diff --git a/translated/zh_cn/develop/rendering/basic-concepts.md b/translated/zh_cn/develop/rendering/basic-concepts.md index f0bfb83f8..82ea204c6 100644 --- a/translated/zh_cn/develop/rendering/basic-concepts.md +++ b/translated/zh_cn/develop/rendering/basic-concepts.md @@ -13,6 +13,7 @@ Although Minecraft is built using OpenGL, as of version 1.17+ you cannot use leg 总的来说,您应该使用 Minecraft 自己的渲染系统,否则您就得使用更底层的 OpenGL 通用管线来达到目的。 ::: +::: 本文将就 Minecraft 渲染系统对一些关键术语和概念进行解释。 @@ -24,13 +25,13 @@ Although Minecraft is built using OpenGL, as of version 1.17+ you cannot use leg ## 缓冲构建器 `BufferBuilder` -缓冲构建器 `BufferBuilder` 是用来将渲染数据格式化并上传到 OpenGL 的类。 它负责创建一个缓冲,其将随后上传到 OpenGL 用于绘制。 +这个方法返回一个顶点构建器(vertex builder),我们可以用它来向这个顶点指定附加信息。 按照我们先前定义的顶点格式 `VertexFormat` 在附加这些信息时是至关重要的。 如果我们不这么做的话,OpenGL 将无法正确地解释我们的数据。 当我们构建完一个顶点后,我们调用 `.next()` 方法。 这将完成当前的顶点并准备好下一个顶点的构建器。 缓冲构建器 `BufferBuilder` 是用来将渲染数据格式化并上传到 OpenGL 的类。 它负责创建一个缓冲,其将随后上传到 OpenGL 用于绘制。 -镶嵌器 `Tessellator` 负责创建一个缓冲构建器 `BufferBuilder`,用于将渲染数据格式化并上传到 OpenGL。 您可以通过 `Tessellator.getBuffer()` 来创建一个缓冲构建器 `BufferBuilder`。 +镶嵌器 `Tessellator` 负责创建一个缓冲构建器 `BufferBuilder`,用于将渲染数据格式化并上传到 OpenGL。 您可以通过 `Tessellator.getBuffer()` 来创建一个缓冲构建器 `BufferBuilder`。 镶嵌器 `Tessellator` 是 Minecraft 中用于渲染东西的主类。 它是一个单例,这意味着游戏中只有它的一个实例。 您可以通过 `Tessellator.getInstance()` 获取这个实例。 ### 初始化 `BufferBuilder` -在您能够向 `BufferBuilder` 写入任何数据前,您必须完成它的初始化。 这将通过调用 `BufferBuilder.begin(...)` 完成,它接受一个顶点格式 `VertexFormat` 参数和一个绘制模式参数。 +在您能够向 `BufferBuilder` 写入任何数据前,您必须完成它的初始化。 在您能够向 `BufferBuilder` 写入任何数据前,您必须完成它的初始化。 这将通过调用 `BufferBuilder.begin(...)` 完成,它接受一个顶点格式 `VertexFormat` 参数和一个绘制模式参数。 #### 顶点格式 @@ -57,24 +58,24 @@ Although Minecraft is built using OpenGL, as of version 1.17+ you cannot use leg #### 绘制模式 -绘制模式定义了数据是怎样用于绘制的。 可用的绘制模式如下: +绘制模式定义了数据是怎样用于绘制的。 可用的绘制模式如下: 可用的绘制模式如下: -| 绘制模式 | 描述 | -| --------------------------- | ------------------------------------------------ | -| `DrawMode.LINES` | 每个元素由 2 个顶点构成,代表一条直线。 | -| `DrawMode.LINE_STRIP` | 第一个元素需要 2 个顶点。 附加的元素只需要 1 个新的顶点就能绘制,创建出一条连续的线。 | -| `DrawMode.DEBUG_LINES` | 与 `DrawMode.LINES` 类似,但线在屏幕上总是保持 1 像素宽。 | -| `DrawMode.DEBUG_LINE_STRIP` | 与 `DrawMode.LINE_STRIP` 相同,但线总是保持 1 像素宽。 | -| `DrawMode.TRIANGLES` | 每个元素都由 3 个顶点组成,形成一个三角形。 | -| `DrawMode.TRIANGLE_STRIP` | 前 3 个顶点形成第一个三角形。 每个新增的顶点与前两个顶点形成一个新的三角形。 | -| `DrawMode.TRIANGLE_FAN` | 前 3 个顶点形成第一个三角形。 每个新增的顶点与第一个顶点和最后的一个顶点形成一个新的三角形。 | -| `DrawMode.QUADS` | 每个元素由 4 个顶点构成,形成一个四边形。 | +| 绘制模式 | 描述 | +| --------------------------- | ----------------------------------------------------------------- | +| `DrawMode.LINES` | 每个元素由 2 个顶点构成,代表一条直线。 | +| `DrawMode.LINE_STRIP` | 第一个元素需要 2 个顶点。 第一个元素需要 2 个顶点。 附加的元素只需要 1 个新的顶点就能绘制,创建出一条连续的线。 | +| `DrawMode.DEBUG_LINES` | 与 `DrawMode.LINES` 类似,但线在屏幕上总是保持 1 像素宽。 | +| `DrawMode.DEBUG_LINE_STRIP` | 与 `DrawMode.LINE_STRIP` 相同,但线总是保持 1 像素宽。 | +| `DrawMode.TRIANGLES` | 每个元素都由 3 个顶点组成,形成一个三角形。 | +| `DrawMode.TRIANGLE_STRIP` | 前 3 个顶点形成第一个三角形。 前 3 个顶点形成第一个三角形。 每个新增的顶点与前两个顶点形成一个新的三角形。 | +| `DrawMode.TRIANGLE_FAN` | 前 3 个顶点形成第一个三角形。 前 3 个顶点形成第一个三角形。 每个新增的顶点与第一个顶点和最后的一个顶点形成一个新的三角形。 | +| `DrawMode.QUADS` | 每个元素由 4 个顶点构成,形成一个四边形。 | ### 向 `BufferBuilder` 写入 `BufferBuilder` 初始化完成后,您就可以向它写入数据。 -`BufferBuilder` 允许我们一个顶点一个顶点地构造我们的缓冲。 我们调用 `buffer.vertex(matrix, float, float, float)` 方法来添加一个顶点。 参数 `matrix` 是变换矩阵,具体细节我们将在后文中讨论。 3 个 `float` 参数代表顶点坐标的 (x, y, z)。 +`BufferBuilder` 允许我们一个顶点一个顶点地构造我们的缓冲。 我们调用 `buffer.vertex(matrix, float, float, float)` 方法来添加一个顶点。 参数 `matrix` 是变换矩阵,具体细节我们将在后文中讨论。 3 个 `float` 参数代表顶点坐标的 (x, y, z)。 我们调用 `buffer.vertex(matrix, float, float, float)` 方法来添加一个顶点。 参数 `matrix` 是变换矩阵,具体细节我们将在后文中讨论。 3 个 `float` 参数代表顶点坐标的 (x, y, z)。 这个方法返回一个顶点构建器(vertex builder),我们可以用它来向这个顶点指定附加信息。 按照我们先前定义的顶点格式 `VertexFormat` 在附加这些信息时是至关重要的。 如果我们不这么做的话,OpenGL 将无法正确地解释我们的数据。 当我们构建完一个顶点后,我们调用 `.next()` 方法。 这将完成当前的顶点并准备好下一个顶点的构建器。 @@ -82,7 +83,7 @@ Although Minecraft is built using OpenGL, as of version 1.17+ you cannot use leg #### 什么是变换矩阵? -一个变换矩阵是一个 4×4 的矩阵,用于变换一个向量。 在 Minecraft 中,变换矩阵只被用于变换我们传入顶点调用的坐标。 这些变换可以放缩,平移和旋转我们的模型。 +一个变换矩阵是一个 4×4 的矩阵,用于变换一个向量。 在 Minecraft 中,变换矩阵只被用于变换我们传入顶点调用的坐标。 这些变换可以放缩,平移和旋转我们的模型。 本文将就 Minecraft 渲染系统对一些关键术语和概念进行解释。 这些变换可以放缩,平移和旋转我们的模型。 它有时被称作位置矩阵,或模型矩阵。 @@ -94,7 +95,7 @@ drawContext.getMatrices().peek().getPositionMatrix(); #### 一个实际案例:渲染一个三角带 -用实际案例来解释如何向 `BufferBuilder` 写入会更轻松一些。 不妨让我们尝试用绘制模式 `DrawMode.TRIANGLE_STRIP` 和顶点格式 `POSITION_COLOR` 来渲染一些东西。 +用实际案例来解释如何向 `BufferBuilder` 写入会更轻松一些。 不妨让我们尝试用绘制模式 `DrawMode.TRIANGLE_STRIP` 和顶点格式 `POSITION_COLOR` 来渲染一些东西。 “剔除”的概念也值得我们理解。 剔除是从 3D 形状中移除那些在观察者视角不可见的面的过程。 如果一个面的顶点以错误的顺序被指定,这个面可能会因为被剔除而无法正确地渲染。 我们将在平视显示器(HUD)上的以下几个点按顺序绘制顶点: @@ -118,12 +119,12 @@ drawContext.getMatrices().peek().getPositionMatrix(); ![最终结果](/assets/develop/rendering/concepts-practical-example-final-result.png) :::tip -尝试给顶点随机的颜色和位置,看看会发生什么! 您也可以尝试使用不同的绘制模式和顶点格式。 +尝试给顶点随机的颜色和位置,看看会发生什么! 您也可以尝试使用不同的绘制模式和顶点格式。 您也可以尝试使用不同的绘制模式和顶点格式。 ::: ## 矩阵栈 `MatrixStack` -在学习完如何向 `BufferBuilder` 写入后,您可能会好奇如何变换你的模型——或者甚至让它动起来。 这时就需要引入 `MatrixStack` 类。 +在学习完如何向 `BufferBuilder` 写入后,您可能会好奇如何变换你的模型——或者甚至让它动起来。 这时就需要引入 `MatrixStack` 类。 这时就需要引入 `MatrixStack` 类。 `MatrixStack` 类有以下方法: @@ -142,6 +143,7 @@ You must push and pop the matrix stack when you're done with it. If you don't, y 在您获取变换矩阵前请确保向矩阵栈压入一个新的矩阵! ::: +::: @[code lang=java transcludeWith=:::2](@/reference/latest/src/client/java/com/example/docs/rendering/RenderingConceptsEntrypoint.java) @@ -149,11 +151,11 @@ You must push and pop the matrix stack when you're done with it. If you don't, y ## 四元数 `Quaternion`(旋转物体) -四元数是三维空间中的旋转的一种表示。 通过 `multiply(Quaternion, x, y, z)` 方法,它们被用于旋转 `MatrixStack` 栈顶的矩阵。 +四元数是三维空间中的旋转的一种表示。 四元数是三维空间中的旋转的一种表示。 通过 `multiply(Quaternion, x, y, z)` 方法,它们被用于旋转 `MatrixStack` 栈顶的矩阵。 您几乎不太可能需要直接使用 `Quaternion` 类,因为 Minecraft 在工具类 `RotationAxis` 中提供了许多预先定义的 `Quaternion` 实例。 -不妨让我们尝试绕 z 轴旋转我们的菱形。 我们可以通过 `MatrixStack` 和 `multiply(Quaternion, x, y, z)` 方法来实现。 +不妨让我们尝试绕 z 轴旋转我们的菱形。 不妨让我们尝试绕 z 轴旋转我们的菱形。 我们可以通过 `MatrixStack` 和 `multiply(Quaternion, x, y, z)` 方法来实现。 @[code lang=java transcludeWith=:::3](@/reference/latest/src/client/java/com/example/docs/rendering/RenderingConceptsEntrypoint.java) diff --git a/translated/zh_cn/develop/rendering/draw-context.md b/translated/zh_cn/develop/rendering/draw-context.md index 0d9d18ca1..6ff11b305 100644 --- a/translated/zh_cn/develop/rendering/draw-context.md +++ b/translated/zh_cn/develop/rendering/draw-context.md @@ -11,11 +11,11 @@ authors: `DrawContext` 是控制渲染的核心类。 它提供了诸多渲染图形、文字、纹理的方法,此外还用来操纵 `MatrixStack` 和 `BufferBuilder`。 -## 绘制图形 +## 绘制矩形 -使用 `DrawContext` 绘制**矩形**十分容易。 如果您想绘制三角形或其他不规则图形,您需要使用 `BufferBuilder` 手动添加图形顶点信息。 +使用 `DrawContext` 绘制**矩形**十分容易。 使用 `DrawContext` 绘制**矩形**十分容易。 如果您想绘制三角形或其他不规则图形,您需要使用 `BufferBuilder` 手动添加图形顶点信息。 -### 绘制矩形 +### 绘制边框 您可以使用 `DrawContext#fill` 方法来绘制一个实心矩形。 @@ -23,9 +23,9 @@ authors: ![矩形](/assets/develop/rendering/draw-context-rectangle.png) -### 绘制边框 +### 绘制图形 -假设我们想勾勒出我们刚才绘制的矩形的轮廓。 我们可以使用 `DrawContext#drawBorder` 方法来绘制轮廓。 +假设我们想勾勒出我们刚才绘制的矩形的轮廓。 假设我们想勾勒出我们刚才绘制的矩形的轮廓。 我们可以使用 `DrawContext#drawBorder` 方法来绘制轮廓。 @[code lang=java transcludeWith=:::2](@/reference/latest/src/client/java/com/example/docs/rendering/DrawContextExampleScreen.java) @@ -49,7 +49,7 @@ authors: 裁剪区域可以内嵌! 但是请一定配对 `enableScissor` 和 `disableScissor`,否则错误的裁剪区域将影响到其他界面元素。 ::: -要启用裁剪功能,只需调用 `DrawContext#enableScissor` 方法。 同样地,调用 `DrawContext#disableScissor` 方法以禁用裁剪功能。 +`DrawContext` 有一套内建的裁剪功能。 它可以用来裁剪渲染区域。 这个功能在绘制某些元素时十分有用,比如悬浮提示,或者其他不应该超出指定渲染区域的界面元素。 要启用裁剪功能,只需调用 `DrawContext#enableScissor` 方法。 同样地,调用 `DrawContext#disableScissor` 方法以禁用裁剪功能。 @[code lang=java transcludeWith=:::4](@/reference/latest/src/client/java/com/example/docs/rendering/DrawContextExampleScreen.java) @@ -59,7 +59,7 @@ authors: ## 绘制纹理 -注意,不存在唯一“正确”的绘制纹理的方法,因为 `drawTexture` 有很多重载。 本节内容只会涵盖最常用的方法。 +注意,不存在唯一“正确”的绘制纹理的方法,因为 `drawTexture` 有很多重载。 本节内容只会涵盖最常用的方法。 本节内容只会涵盖最常用的方法。 ### 绘制整个纹理 @@ -87,7 +87,7 @@ authors: `DrawContext` 提供了许多不言自明的渲染文字的方法,您可以自行尝试,此处不再赘述。 -假设我们想在界面上绘制 `Hello World`。 我们可以使用 `DrawContext#drawText` 方法来完成。 +假设我们想在界面上绘制 `Hello World`。 我们可以使用 `DrawContext#drawText` 方法来完成。 `DrawContext` 是控制渲染的核心类。 它提供了诸多渲染图形、文字、纹理的方法,此外还用来操纵 `MatrixStack` 和 `BufferBuilder`。 @[code lang=java transcludeWith=:::7](@/reference/latest/src/client/java/com/example/docs/rendering/DrawContextExampleScreen.java) diff --git a/translated/zh_cn/develop/rendering/gui/custom-widgets.md b/translated/zh_cn/develop/rendering/gui/custom-widgets.md index ca6511a65..6702c439a 100644 --- a/translated/zh_cn/develop/rendering/gui/custom-widgets.md +++ b/translated/zh_cn/develop/rendering/gui/custom-widgets.md @@ -22,7 +22,7 @@ authors: ## 将组件添加至界面 -如同其他组件,您需要使用 `Screen#addDrawableChild` 来将组件添加到界面中。 请确保这一步在 `Screen#init` 方法中完成。 +如同其他组件,您需要使用 `Screen#addDrawableChild` 来将组件添加到界面中。 请确保这一步在 `Screen#init` 方法中完成。 请确保这一步在 `Screen#init` 方法中完成。 @[code lang=java transcludeWith=:::3](@/reference/latest/src/client/java/com/example/docs/rendering/screens/CustomScreen.java) diff --git a/translated/zh_cn/index.md b/translated/zh_cn/index.md index b25d33f05..36aab6f83 100644 --- a/translated/zh_cn/index.md +++ b/translated/zh_cn/index.md @@ -14,7 +14,7 @@ features: linkText: 快速上手 - title: 玩家指南 icon: 📚 - details: 您在考虑使用 Fabric 模组吗? 我们的玩家指南将全程为您服务。 这些指南将从 Fabric 模组的下载、安装、错误排除等方面帮助您。 + details: 您在考虑使用 Fabric 模组吗? 我们的玩家指南将全程为您服务。 这些指南将从 Fabric 模组的下载、安装、错误排除等方面帮助您。 我们的玩家指南将全程为您服务。 这些指南将从 Fabric 模组的下载、安装、错误排除等方面帮助您。 link: /zh_cn/players/ linkText: 详情 --- diff --git a/translated/zh_cn/players/installing-fabric.md b/translated/zh_cn/players/installing-fabric.md index e18e6b50a..bc2106ccb 100644 --- a/translated/zh_cn/players/installing-fabric.md +++ b/translated/zh_cn/players/installing-fabric.md @@ -15,9 +15,10 @@ authors: 您可以从 [Fabric Website](https://fabricmc.net/use/) 下载 Fabric 的安装程序。 -如果您使用 Windows,下载 `.exe` 版本 (`Download For Windows`),因为它不需要您的系统已安装 Java。 相反,它使用官方启动器附带的 Java。 +如果您使用 Windows,下载 `.exe` 版本 (`Download For Windows`),因为它不需要您的系统已安装 Java。 相反,它使用官方启动器附带的 Java。 相反,它使用官方启动器附带的 Java。 -对于 macOS 和 Linux,您应该下载 `.jar` 版本。 有时,您需要在此步骤之前安装 Java。 +对于 macOS 和 Linux,您应该下载 `.jar` 版本。 有时,您需要在此步骤之前安装 Java。 的时候,再次点击 `Open`。 +::: ## 2. 运行 Fabric 安装程序 @@ -31,7 +32,7 @@ authors: ![高亮 "Install" 的 Fabric 安装程序](/assets/players/installing-fabric/macos-downloads.png) -当询问您 "Are you sure you want to open it?" 的时候,再次点击 `Open`。 +当询问您 "Are you sure you want to open it?" ::: 当您打开安装器的时候,您将会看到像是这样的屏幕: @@ -50,6 +51,6 @@ authors: ## 下一步 -现在您已经安装了 Fabric,您可以向您的游戏添加模组了! Check out the [Finding Trustworthy Mods](./finding-mods.md) guide for more information. +现在您已经安装了 Fabric,您可以向您的游戏添加模组了! Check out the [Finding Trustworthy Mods](./finding-mods.md) guide for more information. Check out the [Finding Trustworthy Mods](./finding-mods.md) guide for more information. 如果您在遵循本指南时遇到任何问题,可以在 [Fabric Discord](https://discord.gg/v6v4pMv) 的 `#player-support` 频道中寻求帮助。 diff --git a/translated/zh_cn/players/installing-java/linux.md b/translated/zh_cn/players/installing-java/linux.md index 912ca6150..b46adb50c 100644 --- a/translated/zh_cn/players/installing-java/linux.md +++ b/translated/zh_cn/players/installing-java/linux.md @@ -16,7 +16,7 @@ authors: ![输入 "java -version" 的终端。](/assets/players/installing-java/linux-java-version.png) :::warning -要使用大多数现代 Minecraft 版本,您至少需要安装 Java 17。 如果此命令显示版本低于 17,您需要更新您的现有 Java。 +要使用大多数现代 Minecraft 版本,您至少需要安装 Java 17。 如果此命令显示版本低于 17,您需要更新您的现有 Java。 如果此命令显示版本低于 17,您需要更新您的现有 Java。 ::: ## 2. 下载并安装 Java 17 diff --git a/translated/zh_cn/players/updating-fabric.md b/translated/zh_cn/players/updating-fabric.md index f0167c225..a94e32c5b 100644 --- a/translated/zh_cn/players/updating-fabric.md +++ b/translated/zh_cn/players/updating-fabric.md @@ -28,7 +28,7 @@ authors: ## 3. 在 Minecraft 启动其中打开配置 -在安装器结束时,您可以打开 Minecraft 启动器并前往 `Installations` 选项。 您应当前往您的 Fabric 配置并打开编辑界面。 +在安装器结束时,您可以打开 Minecraft 启动器并前往 `Installations` 选项。 您应当前往您的 Fabric 配置并打开编辑界面。 您应当前往您的 Fabric 配置并打开编辑界面。 替换版本为您刚才安装的 Fabric 加载器版本并点击 `保存`。 diff --git a/translated/zh_tw/CONTRIBUTING.md b/translated/zh_tw/CONTRIBUTING.md index e57de5510..170eb02da 100644 --- a/translated/zh_tw/CONTRIBUTING.md +++ b/translated/zh_tw/CONTRIBUTING.md @@ -1,6 +1,6 @@ # Fabric 文件貢獻指南 -這個網站使用 [VitePress](https://vitepress.vuejs.org/) 來從各種 Markdown 檔案轉換成靜態 HTML。 這個網站使用 [VitePress](https://vitepress.vuejs.org/) 來從各種 Markdown 檔案轉換成靜態 HTML。 這個網站使用 [VitePress](https://vitepress.vuejs.org/) 來從各種 Markdown 檔案轉換成靜態 HTML。 這個網站使用 [VitePress](https://vitepress.vuejs.org/) 來從各種 Markdown 檔案轉換成靜態 HTML。 你應該熟悉 VitePress 支援的 Markdown 擴充功能,詳細內容請參閱[這裡](https://vitepress.vuejs.org/guide/markdown.html#features)。 +這個網站使用 [VitePress](https://vitepress.dev/) 來將各種 Markdown 檔案轉換成靜態 HTML。 這個網站使用 [VitePress](https://vitepress.vuejs.org/) 來從各種 Markdown 檔案轉換成靜態 HTML。 這個網站使用 [VitePress](https://vitepress.vuejs.org/) 來從各種 Markdown 檔案轉換成靜態 HTML。 這個網站使用 [VitePress](https://vitepress.vuejs.org/) 來從各種 Markdown 檔案轉換成靜態 HTML。 這個網站使用 [VitePress](https://vitepress.vuejs.org/) 來從各種 Markdown 檔案轉換成靜態 HTML。 你應該熟悉 VitePress 支援的 Markdown 擴充功能,詳細內容請參閱[這裡](https://vitepress.vuejs.org/guide/markdown.html#features)。 ## 目錄 @@ -12,6 +12,7 @@ - [擴充指南](#guidance-for-expansion) - [內容驗證](#guidance-for-expansion) - [清理](#cleanup) + - [翻譯文件](#translating-documentation) ## 如何貢獻 @@ -61,7 +62,7 @@ npm run preview ### 風格指南 -所有 Fabric 文件網站上的頁面都應遵循風格指南。 所有 Fabric 文件網站上的頁面都應遵循風格指南。 如果你對任何事情感到不確定,可以在 [Fabric Discord](https://discord.gg/v6v4pMv) 或 GitHub 討論中提問。 所有 Fabric 文件網站上的頁面都應遵循風格指南。 所有 Fabric 文件網站上的頁面都應遵循風格指南。 如果你對任何事情感到不確定,可以在 [Fabric Discord](https://discord.gg/v6v4pMv) 或 GitHub 討論中提問。 所有 Fabric 文件網站上的頁面都應遵循風格指南。 如果你對任何事情感到不確定,可以在 [Fabric Discord](https://discord.gg/v6v4pMv) 或 GitHub 討論中提問。 +所有 Fabric 文件網站上的頁面都應遵循風格指南。 所有 Fabric 文件網站上的頁面都應遵循風格指南。 如果你對任何事情感到不確定,可以在 [Fabric Discord](https://discord.gg/v6v4pMv) 或 GitHub 討論中提問。 所有 Fabric 文件網站上的頁面都應遵循風格指南。 所有 Fabric 文件網站上的頁面都應遵循風格指南。 如果你對任何事情感到不確定,可以在 [Fabric Discord](https://discord.gg/v6v4pMv) 或 GitHub 討論中提問。 所有 Fabric 文件網站上的頁面都應遵循風格指南。 所有 Fabric 文件網站上的頁面都應遵循風格指南。 如果你對任何事情感到不確定,可以在 [Fabric Discord](https://discord.gg/v6v4pMv) 或 GitHub 討論中提問。 所有 Fabric 文件網站上的頁面都應遵循風格指南。 如果你對任何事情感到不確定,可以在 [Fabric Discord](https://discord.gg/v6v4pMv) 或 GitHub 討論中提問。 風格指南如下: @@ -127,11 +128,11 @@ npm run preview } ``` -3. 我們遵循美式英語的文法規則。 我們遵循美式英語的文法規則。 你可以使用 [LanguageTool](https://languagetool.org/) 在輸入時檢查你的語法,但不要太擔心。 我們的文件團隊將在清理階段審查並更正文法錯誤。 然而,一開始就努力做到正確可以節省我們的時間。 我們的文件團隊將在清理階段審查並更正文法錯誤。 然而,一開始就努力做到正確可以節省我們的時間。 我們遵循美式英語的文法規則。 你可以使用 [LanguageTool](https://languagetool.org/) 在輸入時檢查你的語法,但不要太擔心。 我們的文件團隊將在清理階段審查並更正文法錯誤。 然而,一開始就努力做到正確可以節省我們的時間。 我們的文件團隊將在清理階段審查並更正文法錯誤。 然而,一開始就努力做到正確可以節省我們的時間。 +3. 所有的原始文件都會以英語撰寫,並遵循美式英語的文法規則。 你可以使用 [LanguageTool](https://languagetool.org/) 在輸入時檢查你的語法,但不要太擔心。 我們的文件團隊將在清理階段審查並更正文法錯誤。 然而,一開始就努力做到正確可以節省我們的時間。 我們的文件團隊將在清理階段審查並更正文法錯誤。 然而,一開始就努力做到正確可以節省我們的時間。 -4. 如果你正在建立新章節,你應該在 `.vitepress/sidebars` 資料夾中建立一個新的側邊欄,並將其新增到 `config.mts` 檔案中。 如果你需要幫助,請在 [Fabric Discord](https://discord.gg/v6v4pMv) 的 `#wiki` 頻道中提問。 如果你正在建立新章節,你應該在 `.vitepress/sidebars` 資料夾中建立一個新的側邊欄,並將其新增到 `config.mts` 檔案中。 如果你需要幫助,請在 [Fabric Discord](https://discord.gg/v6v4pMv) 的 `#wiki` 頻道中提問。 所有新增內容的合併請求都經過內容驗證,這是最重要的階段,因為它確保內容準確無誤並符合 Fabric 文件的風格指南。 +4. 如果你正在建立新章節,你應該在 `.vitepress/sidebars` 資料夾中建立一個新的側邊欄,並將其新增到 `config.mts` 檔案中。 如果你需要幫助,請在 [Fabric Discord](https://discord.gg/v6v4pMv) 的 `#wiki` 頻道中提問。 如果你需要幫助,請在 [Fabric Discord](https://discord.gg/v6v4pMv) 的 `#docs` 頻道中提問。 -5. 當建立新頁面時,你應將其新增到 `.vitepress/sidebars` 資料夾中相關的側邊欄中。 當建立新頁面時,你應將其新增到 `.vitepress/sidebars` 資料夾中相關的側邊欄中。 同樣,如果需要幫助,請在 Fabric Discord 的 `#wiki` 頻道中提問。 +5. 當建立新頁面時,你應將其新增到 `.vitepress/sidebars` 資料夾中相關的側邊欄中。 同上,如果你需要幫助,請在Fabric Discord上的`#docs`頻道中提問。 6. 任何影像應該放置在 `/assets` 資料夾中的適當位置。 @@ -172,3 +173,7 @@ npm run preview ### 清理 在這個階段,文件團隊將在合併之前修復任何文法問題並進行他們認為必要的任何其他變更! + +## 翻譯文件 + +如果想將文件翻譯成別的語言,你可以在[Fabric Crowdin](https://crowdin.com/project/fabricmc)頁面上翻譯。 diff --git a/translated/zh_tw/index.md b/translated/zh_tw/index.md index bb6c9061d..26370039f 100644 --- a/translated/zh_tw/index.md +++ b/translated/zh_tw/index.md @@ -14,7 +14,7 @@ features: linkText: 開始使用 - title: 玩家指南 icon: 📚 - details: 你是一位希望使用由 Fabric 驅動的模組的玩家嗎?我們的玩家指南可以滿足你的需求。這些指南將幫助你下載、安裝和疑難排解 Fabric 模組。 我們的玩家指南可以滿足你的需求。 這些指南將幫助你下載、安裝和疑難排解 Fabric 模組。 我們的玩家指南可以滿足你的需求。 這些指南將幫助你下載、安裝和疑難排解 Fabric 模組。 我們的玩家指南可以滿足你的需求。 這些指南將幫助你下載、安裝和疑難排解 Fabric 模組。 + details: 你是一位希望使用由 Fabric 驅動的模組的玩家嗎?我們的玩家指南可以滿足你的需求。這些指南將幫助你下載、安裝和疑難排解 Fabric 模組。 我們的玩家指南可以滿足你的需求。 這些指南將幫助你下載、安裝和疑難排解 Fabric 模組。 我們的玩家指南可以滿足你的需求。 這些指南將幫助你下載、安裝和疑難排解 Fabric 模組。 我們的玩家指南可以滿足你的需求。 這些指南將幫助你下載、安裝和疑難排解 Fabric 模組。 我們的玩家指南可以滿足你的需求。 這些指南將幫助你下載、安裝和疑難排解 Fabric 模組。 link: /zh_tw/develop/ linkText: 閱讀更多 --- diff --git a/translated/zh_tw/players/finding-mods.md b/translated/zh_tw/players/finding-mods.md index 74d317f53..8345a1c1b 100644 --- a/translated/zh_tw/players/finding-mods.md +++ b/translated/zh_tw/players/finding-mods.md @@ -27,8 +27,8 @@ authors: 惡意軟體網站對於每個人來說可能不是很明顯。 如果您不確定,你應該向他人尋求意見,或者完全避免該網站,僅依賴於可信任的來源,例如 Modrinth 和 CurseForge。 ::: -有許多聲稱提供 Minecraft 模組的網站,實際上只是惡意軟體網站。 你應該盡量避免這些網站。 你應該盡量避免這些網站。 你應該盡量避免這些網站。 +有許多聲稱提供 Minecraft 模組的網站,實際上只是惡意軟體網站。 你應該盡量避免這些網站。 你應該盡量避免這些網站。 你應該盡量避免這些網站。 你應該盡量避免這些網站。 -你可以使用防病毒軟體和像 [Windows Defender](https://www.microsoft.com/zh-tw/windows/comprehensive-security) 或 [VirusTotal](https://www.virustotal.com/) 這樣的網站來檢查下載的模組。 但是,不要完全依賴這些方法,因為有時候它們可能不準確。 但是,不要完全依賴這些方法,因為有時候它們可能不準確。 但是,不要完全依賴這些方法,因為有時候它們可能不準確。 +你可以使用防病毒軟體和像 [Windows Defender](https://www.microsoft.com/zh-tw/windows/comprehensive-security) 或 [VirusTotal](https://www.virustotal.com/) 這樣的網站來檢查下載的模組。 但是,不要完全依賴這些方法,因為有時候它們可能不準確。 但是,不要完全依賴這些方法,因為有時候它們可能不準確。 但是,不要完全依賴這些方法,因為有時候它們可能不準確。 但是,不要完全依賴這些方法,因為有時候它們可能不準確。 同樣地,如果你有疑問,歡迎在 [Fabric Discord](https://discord.gg/v6v4pMv) 的 `#player-support` 頻道中尋求意見。 diff --git a/translated/zh_tw/players/installing-java/linux.md b/translated/zh_tw/players/installing-java/linux.md index 9a60a1ab1..82f905010 100644 --- a/translated/zh_tw/players/installing-java/linux.md +++ b/translated/zh_tw/players/installing-java/linux.md @@ -16,7 +16,7 @@ authors: ![終端機中輸入了「java -version」。](/assets/players/installing-java/linux-java-version.png) :::warning -要使用大多數現代的 Minecraft,你需要至少安裝 Java 17。 如果這個命令顯示低於 17 的任何版本,你需要更新現有的 Java 安裝。 如果你打算開發模組,你應參考另一個指南。 +要使用大多數現代的 Minecraft,你需要至少安裝 Java 17。 如果這個命令顯示低於 17 的任何版本,你需要更新現有的 Java 安裝。 如果你打算開發模組,你應參考另一個指南。 如果你打算開發模組,你應參考另一個指南。 ::: ## 2. 下載並安裝 Java 17 diff --git a/translated/zh_tw/players/installing-java/windows.md b/translated/zh_tw/players/installing-java/windows.md index c87dfa3a7..044950622 100644 --- a/translated/zh_tw/players/installing-java/windows.md +++ b/translated/zh_tw/players/installing-java/windows.md @@ -21,12 +21,12 @@ Minecraft 啟動器附帶了自己的 Java 安裝,因此這部分只在你想 開啟命令提示字元後,輸入 `java -version` 並按下 Enter 鍵。 -如果命令成功執行,你會看到類似這樣的內容。如果命令失敗,請繼續進行下一步。 如果命令失敗,請繼續進行下一步。 如果命令失敗,請繼續進行下一步。 如果命令失敗,請繼續進行下一步。 +如果命令成功執行,你會看到類似這樣的內容。如果命令失敗,請繼續進行下一步。 如果命令失敗,請繼續進行下一步。 如果命令失敗,請繼續進行下一步。 如果命令失敗,請繼續進行下一步。 如果命令失敗,請繼續進行下一步。 ![命令提示字元中輸入了「java -version」。](/assets/players/installing-java/windows-java-version.png) :::warning -要使用大多數現代的 Minecraft,你需要至少安裝 Java 17。 如果這個命令顯示低於 17 的任何版本,你需要更新現有的 Java 安裝。 如果你打算開發模組,你應參考另一個指南。 +要使用大多數現代的 Minecraft,你需要至少安裝 Java 17。 如果這個命令顯示低於 17 的任何版本,你需要更新現有的 Java 安裝。 如果你打算開發模組,你應參考另一個指南。 如果你打算開發模組,你應參考另一個指南。 ::: ## 2. 下載 Java 17 安裝程式。 @@ -43,7 +43,7 @@ Minecraft 啟動器附帶了自己的 Java 安裝,因此這部分只在你想 ## 3. 執行安裝程式! -依照安裝程式中的步驟安裝 Java 17。 當你到達這個頁面時,你應該將以下功能設定為「整個功能將安裝在本機硬碟上」: 當你到達這個頁面時,你應該將以下功能設定為「整個功能將安裝在本機硬碟上」: 當你到達這個頁面時,你應該將以下功能設定為「整個功能將安裝在本機硬碟上」: 當你到達這個頁面時,你應該將以下功能設定為「整個功能將安裝在本機硬碟上」: 當你到達這個頁面時,你應該將以下功能設定為「整個功能將安裝在本機硬碟上」: +依照安裝程式中的步驟安裝 Java 17。 當你到達這個頁面時,你應該將以下功能設定為「整個功能將安裝在本機硬碟上」: 當你到達這個頁面時,你應該將以下功能設定為「整個功能將安裝在本機硬碟上」: 當你到達這個頁面時,你應該將以下功能設定為「整個功能將安裝在本機硬碟上」: 當你到達這個頁面時,你應該將以下功能設定為「整個功能將安裝在本機硬碟上」: 當你到達這個頁面時,你應該將以下功能設定為「整個功能將安裝在本機硬碟上」: 當你到達這個頁面時,你應該將以下功能設定為「整個功能將安裝在本機硬碟上」: - `Set JAVA_HOME environment variable` - 這將加入到你的 PATH 中。 - `JavaSoft (Oracle) registry keys` diff --git a/translated/zh_tw/players/troubleshooting/crash-reports.md b/translated/zh_tw/players/troubleshooting/crash-reports.md index 9eaac8ef7..5e32b7ae2 100644 --- a/translated/zh_tw/players/troubleshooting/crash-reports.md +++ b/translated/zh_tw/players/troubleshooting/crash-reports.md @@ -15,7 +15,7 @@ authors: ## 尋找崩潰報告 -崩潰報告儲存在遊戲目錄中的 crash-reports 資料夾中。 如果您正在使用伺服器,則它們儲存在伺服器目錄中的 `crash-reports` 資料夾中。 如果您正在使用伺服器,則它們儲存在伺服器目錄中的 `crash-reports` 資料夾中。 +崩潰報告儲存在遊戲目錄中的 crash-reports 資料夾中。 如果您正在使用伺服器,則它們儲存在伺服器目錄中的 `crash-reports` 資料夾中。 如果您正在使用伺服器,則它們儲存在伺服器目錄中的 `crash-reports` 資料夾中。 如果您正在使用伺服器,則它們儲存在伺服器目錄中的 `crash-reports` 資料夾中。 對於第三方啟動器,你應參考它們的文件以找到崩潰報告的位置。 @@ -47,9 +47,9 @@ authors: 崩潰報告由幾個部分組成,每個部分都使用標題分隔: -- `---- Minecraft Crash Report ----`,報告的摘要。 這個部分包含導致崩潰的主要錯誤、發生時間以及相關的堆疊追蹤。 這是崩潰報告中最重要的部分,因為堆疊追蹤通常包含導致崩潰的模組的參考。 這個部分包含導致崩潰的主要錯誤、發生時間以及相關的堆疊追蹤。 這是崩潰報告中最重要的部分,因為堆疊追蹤通常包含導致崩潰的模組的參考。 +- `---- Minecraft Crash Report ----`,報告的摘要。 這個部分包含導致崩潰的主要錯誤、發生時間以及相關的堆疊追蹤。 這是崩潰報告中最重要的部分,因為堆疊追蹤通常包含導致崩潰的模組的參考。 這個部分包含導致崩潰的主要錯誤、發生時間以及相關的堆疊追蹤。 這是崩潰報告中最重要的部分,因為堆疊追蹤通常包含導致崩潰的模組的參考。 這個部分包含導致崩潰的主要錯誤、發生時間以及相關的堆疊追蹤。 這是崩潰報告中最重要的部分,因為堆疊追蹤通常包含導致崩潰的模組的參考。 - `-- Last Reload --`,這個部分除非崩潰發生在資源重新載入期間(F3+T),否則沒有什麼用。 這個部分將包含上次重新載入的時間以及重新載入過程中發生的任何錯誤的相關堆疊追踪。 這些錯誤通常是由資源包引起的,除非它們對遊戲造成問題,否則可以忽略。 -- `-- System Details --`,這個部分包含有關你系統的資訊,例如作業系統、Java 版本和配置給遊戲的記憶體。 這個部分對於確定你是否使用正確的 Java 版本以及是否為遊戲配置足夠的記憶體很有用。 這個部分對於確定你是否使用正確的 Java 版本以及是否為遊戲配置足夠的記憶體很有用。 +- `-- System Details --`,這個部分包含有關你系統的資訊,例如作業系統、Java 版本和配置給遊戲的記憶體。 這個部分對於確定你是否使用正確的 Java 版本以及是否為遊戲配置足夠的記憶體很有用。 這個部分對於確定你是否使用正確的 Java 版本以及是否為遊戲配置足夠的記憶體很有用。 這個部分對於確定你是否使用正確的 Java 版本以及是否為遊戲配置足夠的記憶體很有用。 - 在這一部分,Fabric 將包括一個自訂行,其中說明了 `Fabric Mods:`,後面跟著您安裝的所有模組的清單。 這個部分對於確定模組之間是否可能發生衝突很有用。 ### 分解崩潰報告 @@ -58,7 +58,7 @@ authors: 使用上面連結的範例,我們可以分析崩潰報告,找出崩潰的原因,包括導致崩潰的模組。 -崩潰報告是排解遊戲或伺服器問題的非常重要的一部分。 它們包含了關於崩潰的大量資訊,可以幫助你找到崩潰的原因。 `---- Minecraft Crash Report ----` 部分中的堆棧跟踪在這種情況下最重要,因為它包含導致崩潰的主要錯誤。 在這個案例中,錯誤是 `java.lang.NullPointerException: Cannot invoke "net.minecraft.class_2248.method_9539()" because "net.minecraft.class_2248.field_10540" is null`。 +崩潰報告是排解遊戲或伺服器問題的非常重要的一部分。 它們包含了關於崩潰的大量資訊,可以幫助你找到崩潰的原因。 `---- Minecraft Crash Report ----` 部分中的堆棧跟踪在這種情況下最重要,因為它包含導致崩潰的主要錯誤。 在這個案例中,錯誤是 `java.lang.NullPointerException: Cannot invoke "net.minecraft.class_2248.method_9539()" because "net.minecraft.class_2248.field_10540" is null`。 `---- Minecraft Crash Report ----` 部分中的堆棧跟踪在這種情況下最重要,因為它包含導致崩潰的主要錯誤。 在這個案例中,錯誤是 `java.lang.NullPointerException: Cannot invoke "net.minecraft.class_2248.method_9539()" because "net.minecraft.class_2248.field_10540" is null`。 由於堆疊追蹤中提到了大量的模組,要指出責任者可能有些困難,但首先要做的是尋找導致崩潰的模組。 @@ -77,7 +77,7 @@ at link.infra.indium.renderer.render.TerrainBlockRenderInfo.shouldDrawFaceInner( ## Mixin 崩潰 :::info -Mixin 是一種讓模組無需修改遊戲原始碼即可修改遊戲的方法。 它們被許多模組使用,是模組開發人員非常強大的工具。 它們被許多模組使用,是模組開發人員非常強大的工具。 +Mixin 是一種讓模組無需修改遊戲原始碼即可修改遊戲的方法。 它們被許多模組使用,是模組開發人員非常強大的工具。 它們被許多模組使用,是模組開發人員非常強大的工具。 它們被許多模組使用,是模組開發人員非常強大的工具。 ::: 當 mixin 崩潰時,堆疊追蹤通常會提到 mixin 和被修改的類。