# moirstral/autotranslation architecture

> Architecture diagram of the GitHub repository moirstral/autotranslation, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-28). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/moirstral/autotranslation
- Repository: https://github.com/moirstral/autotranslation

## Overview

AutoTranslation is a Minecraft mod that detects missing current-language entries, translates them, and loads the generated translations into the game. Players also have an experimental screen-translation workflow and commands for reloading resources and packaging translations. The README documents configurable translator selection and full/incremental resource packs. Some implementation files were not sampled, so uncertain links between translation workers and providers are omitted; Fabric and Forge bootstrap paths are shown separately.

Main entry points: [`common/src/main/java/me/langyue/autotranslation/resource/ResourceManager.java`](https://github.com/moirstral/autotranslation/blob/master/common/src/main/java/me/langyue/autotranslation/resource/ResourceManager.java) (Resource processing), [`common/src/main/java/me/langyue/autotranslation/ScreenTranslationHelper.java`](https://github.com/moirstral/autotranslation/blob/master/common/src/main/java/me/langyue/autotranslation/ScreenTranslationHelper.java) (Screen translation), [`common/src/main/java/me/langyue/autotranslation/translate/TranslatorManager.java`](https://github.com/moirstral/autotranslation/blob/master/common/src/main/java/me/langyue/autotranslation/translate/TranslatorManager.java) (Provider selection), [`common/src/main/java/me/langyue/autotranslation/mixin/ClientLanguageMixin.java`](https://github.com/moirstral/autotranslation/blob/master/common/src/main/java/me/langyue/autotranslation/mixin/ClientLanguageMixin.java) (Missing-text detection)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_translation["Language translation"]
  node_detect["Missing-text detection"]
  node_translation_helper["Translation requests"]
  node_thread_pool["Translation workers"]
  node_translator_manager["Provider selection"]
  node_translator_api["Translator interface<br/>[ITranslator.java]"]
  node_google["Google provider<br/>[Google.java]"]
  node_http["HTTP client"]
end

subgraph group_screens["Screen translation"]
  node_screen_helper["Screen translation"]
  node_screen_icon["Screen toggle"]
  node_patchouli["Patchouli support"]
end

subgraph group_runtime["Game integration"]
  node_fabric_boot["Fabric bootstrap"]
  node_forge_boot["Forge bootstrap"]
  node_core["Mod lifecycle"]
  node_lang_load["Language loading"]
  node_screen_hooks["Screen hooks<br/>[ScreenMixin.java]"]
  node_render_hook["Render hook"]
end

subgraph group_management["Resources and controls"]
  node_resource_manager["Resource processing"]
  node_config["Mod configuration<br/>[Config.java]"]
  node_commands["In-game commands"]
  node_resource_files[("Generated language files")]
end

node_player(("Player"))
node_google_service(("Google Translate"))

node_player -->|"loads language"| node_lang_load
node_fabric_boot -->|"initializes"| node_core
node_forge_boot -->|"initializes"| node_core
node_lang_load -->|"compares entries"| node_detect
node_detect -->|"records missing keys"| node_resource_manager
node_resource_manager -->|"requests translations"| node_translation_helper
node_translation_helper -->|"queues work"| node_thread_pool
node_translator_manager -->|"provides implementation"| node_translator_api
node_translator_manager -->|"selects default"| node_google
node_google -->|"sends requests"| node_http
node_http -->|"makes HTTP calls"| node_google_service
node_resource_manager -->|"writes and loads"| node_resource_files
node_player -->|"toggles translation"| node_screen_icon
node_screen_icon -->|"changes screen state"| node_screen_helper
node_render_hook -->|"prepares rendering"| node_screen_helper
node_screen_hooks -->|"checks screen state"| node_screen_helper
node_patchouli -.->|"checks translation state"| node_screen_helper
node_player -->|"runs commands"| node_commands
node_commands -->|"reloads or packages"| node_resource_manager
node_player -->|"configures mod"| node_config
node_config -->|"selects provider"| node_translator_manager

click node_fabric_boot "https://github.com/moirstral/autotranslation/blob/master/fabric/src/main/java/me/langyue/autotranslation/fabric/AutoTranslationFabric.java"
click node_forge_boot "https://github.com/moirstral/autotranslation/blob/master/forge/src/main/java/me/langyue/autotranslation/forge/AutoTranslationForge.java"
click node_core "https://github.com/moirstral/autotranslation/blob/master/common/src/main/java/me/langyue/autotranslation/AutoTranslation.java"
click node_lang_load "https://github.com/moirstral/autotranslation/blob/master/common/src/main/java/me/langyue/autotranslation/mixin/ClientLanguageMixin.java"
click node_screen_hooks "https://github.com/moirstral/autotranslation/blob/master/common/src/main/java/me/langyue/autotranslation/mixin/ScreenMixin.java"
click node_render_hook "https://github.com/moirstral/autotranslation/blob/master/forge/src/main/java/me/langyue/autotranslation/forge/mixin/GameRendererMixin.java"
click node_detect "https://github.com/moirstral/autotranslation/blob/master/common/src/main/java/me/langyue/autotranslation/mixin/ClientLanguageMixin.java"
click node_resource_manager "https://github.com/moirstral/autotranslation/blob/master/common/src/main/java/me/langyue/autotranslation/resource/ResourceManager.java"
click node_translation_helper "https://github.com/moirstral/autotranslation/blob/master/common/src/main/java/me/langyue/autotranslation/TranslatorHelper.java"
click node_thread_pool "https://github.com/moirstral/autotranslation/blob/master/common/src/main/java/me/langyue/autotranslation/translate/TranslateThreadPool.java"
click node_translator_manager "https://github.com/moirstral/autotranslation/blob/master/common/src/main/java/me/langyue/autotranslation/translate/TranslatorManager.java"
click node_translator_api "https://github.com/moirstral/autotranslation/blob/master/common/src/main/java/me/langyue/autotranslation/translate/ITranslator.java"
click node_google "https://github.com/moirstral/autotranslation/blob/master/common/src/main/java/me/langyue/autotranslation/translate/google/Google.java"
click node_http "https://github.com/moirstral/autotranslation/blob/master/common/src/main/java/me/langyue/autotranslation/translate/google/HttpClientUtil.java"
click node_screen_helper "https://github.com/moirstral/autotranslation/blob/master/common/src/main/java/me/langyue/autotranslation/ScreenTranslationHelper.java"
click node_screen_icon "https://github.com/moirstral/autotranslation/blob/master/common/src/main/java/me/langyue/autotranslation/gui/widgets/AutoTranslationIcon.java"
click node_patchouli "https://github.com/moirstral/autotranslation/blob/master/common/src/main/java/me/langyue/autotranslation/mixin/compat/patchouli/PatchouliBookTextRendererMixin.java"
click node_config "https://github.com/moirstral/autotranslation/blob/master/common/src/main/java/me/langyue/autotranslation/config/Config.java"
click node_commands "https://github.com/moirstral/autotranslation/blob/master/common/src/main/java/me/langyue/autotranslation/command/AutoTranslationCommands.java"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_detect,node_translation_helper,node_thread_pool,node_translator_manager,node_translator_api,node_google,node_http toneBlue
class node_screen_helper,node_screen_icon,node_patchouli toneAmber
class node_fabric_boot,node_forge_boot,node_core,node_lang_load,node_screen_hooks,node_render_hook toneMint
class node_resource_manager,node_config,node_commands,node_resource_files toneRose
class node_player,node_google_service toneIndigo
```

## Components

### Language translation

- [Missing-text detection](https://github.com/moirstral/autotranslation/blob/master/common/src/main/java/me/langyue/autotranslation/mixin/ClientLanguageMixin.java): `common/src/main/java/me/langyue/autotranslation/mixin/ClientLanguageMixin.java`
- [Translation requests](https://github.com/moirstral/autotranslation/blob/master/common/src/main/java/me/langyue/autotranslation/TranslatorHelper.java): `common/src/main/java/me/langyue/autotranslation/TranslatorHelper.java`
- [Translation workers](https://github.com/moirstral/autotranslation/blob/master/common/src/main/java/me/langyue/autotranslation/translate/TranslateThreadPool.java): `common/src/main/java/me/langyue/autotranslation/translate/TranslateThreadPool.java`
- [Provider selection](https://github.com/moirstral/autotranslation/blob/master/common/src/main/java/me/langyue/autotranslation/translate/TranslatorManager.java): `common/src/main/java/me/langyue/autotranslation/translate/TranslatorManager.java`
- [Translator interface](https://github.com/moirstral/autotranslation/blob/master/common/src/main/java/me/langyue/autotranslation/translate/ITranslator.java): `common/src/main/java/me/langyue/autotranslation/translate/ITranslator.java`
- [Google provider](https://github.com/moirstral/autotranslation/blob/master/common/src/main/java/me/langyue/autotranslation/translate/google/Google.java): `common/src/main/java/me/langyue/autotranslation/translate/google/Google.java`
- [HTTP client](https://github.com/moirstral/autotranslation/blob/master/common/src/main/java/me/langyue/autotranslation/translate/google/HttpClientUtil.java): `common/src/main/java/me/langyue/autotranslation/translate/google/HttpClientUtil.java`

### Screen translation

- [Screen translation](https://github.com/moirstral/autotranslation/blob/master/common/src/main/java/me/langyue/autotranslation/ScreenTranslationHelper.java): `common/src/main/java/me/langyue/autotranslation/ScreenTranslationHelper.java`
- [Screen toggle](https://github.com/moirstral/autotranslation/blob/master/common/src/main/java/me/langyue/autotranslation/gui/widgets/AutoTranslationIcon.java): `common/src/main/java/me/langyue/autotranslation/gui/widgets/AutoTranslationIcon.java`
- [Patchouli support](https://github.com/moirstral/autotranslation/blob/master/common/src/main/java/me/langyue/autotranslation/mixin/compat/patchouli/PatchouliBookTextRendererMixin.java): `common/src/main/java/me/langyue/autotranslation/mixin/compat/patchouli/PatchouliBookTextRendererMixin.java`

### Game integration

- [Fabric bootstrap](https://github.com/moirstral/autotranslation/blob/master/fabric/src/main/java/me/langyue/autotranslation/fabric/AutoTranslationFabric.java): `fabric/src/main/java/me/langyue/autotranslation/fabric/AutoTranslationFabric.java`
- [Forge bootstrap](https://github.com/moirstral/autotranslation/blob/master/forge/src/main/java/me/langyue/autotranslation/forge/AutoTranslationForge.java): `forge/src/main/java/me/langyue/autotranslation/forge/AutoTranslationForge.java`
- [Mod lifecycle](https://github.com/moirstral/autotranslation/blob/master/common/src/main/java/me/langyue/autotranslation/AutoTranslation.java): `common/src/main/java/me/langyue/autotranslation/AutoTranslation.java`
- [Language loading](https://github.com/moirstral/autotranslation/blob/master/common/src/main/java/me/langyue/autotranslation/mixin/ClientLanguageMixin.java): `common/src/main/java/me/langyue/autotranslation/mixin/ClientLanguageMixin.java`
- [Screen hooks](https://github.com/moirstral/autotranslation/blob/master/common/src/main/java/me/langyue/autotranslation/mixin/ScreenMixin.java): `common/src/main/java/me/langyue/autotranslation/mixin/ScreenMixin.java`
- [Render hook](https://github.com/moirstral/autotranslation/blob/master/forge/src/main/java/me/langyue/autotranslation/forge/mixin/GameRendererMixin.java): `forge/src/main/java/me/langyue/autotranslation/forge/mixin/GameRendererMixin.java`

### Resources and controls

- [Resource processing](https://github.com/moirstral/autotranslation/blob/master/common/src/main/java/me/langyue/autotranslation/resource/ResourceManager.java): `common/src/main/java/me/langyue/autotranslation/resource/ResourceManager.java`
- [Mod configuration](https://github.com/moirstral/autotranslation/blob/master/common/src/main/java/me/langyue/autotranslation/config/Config.java): `common/src/main/java/me/langyue/autotranslation/config/Config.java`
- [In-game commands](https://github.com/moirstral/autotranslation/blob/master/common/src/main/java/me/langyue/autotranslation/command/AutoTranslationCommands.java): `common/src/main/java/me/langyue/autotranslation/command/AutoTranslationCommands.java`
- **Generated language files**

### Other components

- **Player**
- **Google Translate**

## Connections

- Player → Language loading: loads language
- Fabric bootstrap → Mod lifecycle: initializes
- Forge bootstrap → Mod lifecycle: initializes
- Language loading → Missing-text detection: compares entries
- Missing-text detection → Resource processing: records missing keys
- Resource processing → Translation requests: requests translations
- Translation requests → Translation workers: queues work
- Provider selection → Translator interface: provides implementation
- Provider selection → Google provider: selects default
- Google provider → HTTP client: sends requests
- HTTP client → Google Translate: makes HTTP calls
- Resource processing → Generated language files: writes and loads
- Player → Screen toggle: toggles translation
- Screen toggle → Screen translation: changes screen state
- Render hook → Screen translation: prepares rendering
- Screen hooks → Screen translation: checks screen state
- Patchouli support → Screen translation: checks translation state
- Player → In-game commands: runs commands
- In-game commands → Resource processing: reloads or packages
- Player → Mod configuration: configures mod
- Mod configuration → Provider selection: selects provider
