Links
Tags
Creators
Details
1.0.5-alpha.1
Compatibility
Required content
Changes
Chat Translation 1.0.5-alpha.1
This is an alpha release.
Added
-
Context-aware translation. Recent chat lines are sent to the AI so it can resolve pronouns, slang and elliptical replies. Turning a single ambiguous line into a sensible translation usually needs the surrounding conversation — "he took it and ran" should read differently after "I dropped my sword" than after "someone stole my diamonds".
The implementation is deliberately constrained:
- Only lines that were actually displayed in chat are recorded. Messages that failed, are still queued, or were shown untranslated never enter the context, so content the user never saw cannot influence later translations.
- Originals are recorded, not translations, so the model is not nudged by its own earlier output and errors do not compound.
- AI providers only. Google Free, MyMemory, Lingva, LibreTranslate and other per-sentence services ignore the context entirely through the interface's default implementation. Sending them history would add latency and leak more text for no benefit.
- The cache key now includes a context fingerprint and the model id, so the same line translated in two different conversations cannot collide.
Privacy: enabling this sends the last few chat lines to a third-party provider with every request. That is why it ships off by default and must be enabled explicitly. The number of attached lines is configurable from 0 to 8.
-
ProviderHealth circuit breaker. After 3 consecutive failures, or a permanent error such as an invalid key or unknown model, a provider cools down and fails fast instead of accepting every request. Cooldown starts at 20 seconds and backs off exponentially, and the first success resets it immediately. A dead endpoint can no longer stall the chat queue.
-
Translation quality guard. Models occasionally answer instead of translating (
Sure! Here is the translation: ...) or return a prose explanation. The mod now rejects explanatory openers, code fences, output wildly disproportionate to the source, and damaged placeholders, showing the original message instead of pasting noise into chat. -
Configurable AI timeout. Exposed as a slider in the config screen (10–180 seconds, default 45).
Changed
- Cache hits are now resolved through a provider-owned
peekCached()hook before a concurrency slot is taken. Only the provider knows the full cache identity, and a hit must never wait behind slow network requests.
Fixed
- Missing locale keys. Two configuration keys (
ai_api_key.tooltip,free_notice) were dropped from the German, French, Japanese and Korean locale files in 1.0.4, causing the config screen to show raw translation keys for those languages. All versions and locales now expose the same 36 keys.
Supported Versions
| Minecraft | Loader | Java |
|---|---|---|
| 1.21.1 | Fabric | 21+ |
| 1.21.4 | Fabric | 21+ |
| 1.21.8 | Fabric | 21+ |
| 1.21.11 | Fabric | 21+ |
| 26.1.2 | Fabric | 25+ |
| 26.2 | Fabric | 25+ |
| 26.3 | Fabric | 25+ |
This release ships builds for 1.21.11, 26.1.2, 26.2 and 26.3. The 1.21.1, 1.21.4 and 1.21.8 sources are unchanged and remain at 1.0.3-fix1.
Dependencies
Fabric API and Cloth Config are required; Mod Menu is recommended for the graphical configuration screen.
For 26.3: Fabric Loader 0.19.5, Fabric API 0.156.0+26.3, Cloth Config 26.3.159, Mod Menu 21.0.0.
Note On The Bundled Free Endpoint
The built-in ai_free provider (deepseek-v4.1-flash on api.mcapple.top) showed highly variable latency during testing — between roughly 3 and 87 seconds for the same request across sessions. The circuit breaker and the configurable timeout exist specifically to keep this from stalling chat, but if you want predictable behaviour, point the ai service at your own endpoint.
Optional dependencies
Projects on Modrinth are automatically available through a Maven repository for use with JVM build tools such as Gradle. To learn more about the Modrinth Maven API, click here.
Note: When available, you should use the creator's maven repo instead as it will have transitive dependency information that the Modrinth Maven API does not. You may also end up with duplicate dependencies if you use a mix of Modrinth and non-Modrinth Maven repositories for your dependencies, because the group identifier will be different when served through the Modrinth Maven API.
Maven coordinates:
Version ID:
build.gradle:
repositories {
exclusiveContent {
forRepository {
maven {
name = "Modrinth"
url = "https://api.modrinth.com/maven"
}
}
// forRepositories(fg.repository) // Uncomment when using ForgeGradle
filter {
includeGroup "maven.modrinth"
}
}
}
// Standard Gradle dependency
dependencies {
implementation "maven.modrinth:OvYCO8RT:tzHO367l"
}
// Legacy Loom dependency
dependencies {
modImplementation "maven.modrinth:OvYCO8RT:tzHO367l"
}

