Описание
# Setsumeisho
A Minecraft mod that displays in-game instruction overlays to players, designed for minigames and events. The server sends instruction screens to clients showing controls, descriptions, and timers — with optional auto-translation, cinematic sequences, and keyboard icon rendering.
---
## Features
- Instruction overlay with title, subtitle, controls, and description sections
- Custom keyboard/icon font rendered inside the overlay
- Per-language content: each instruction file supports multiple `lang` entries (`es`, `en`, etc.)
- Auto-translation via the MyMemory API (optional)
- Pre-translation cache so players receive content in their language on open
- Minimize/restore animation via a post-process shader
- Timer display with configurable countdown
- Cinematic support: run console commands on a schedule when an instruction opens
- Background texture support sent from server to client
---
## Installation
1. Place the mod JAR in the `mods/` folder.
2. Start the server once to generate the default configuration file at `config/setsumeisho/default.json`.
---
## Commands
All commands require operator permissions (level 2+).
| Command | Description |
|---|---|
| `/setsumeisho open ` | Opens the named instruction screen for the executing player |
| `/setsumeisho open ` | Opens the instruction screen for a specific player |
| `/setsumeisho close` | Closes the currently open instruction overlay |
| `/setsumeisho create ` | Creates a new template JSON file at `config/setsumeisho/.json` |
| `/setsumeisho pretranslate ` | Pre-translates the instruction file and caches the result |
---
## Configuration
All instruction files live in `config/setsumeisho/`. Each file is a JSON array with three objects: the **language entries**, the **config block**, and the **cinematics block**.
### Structure
```json
[
{
"lang": "es",
"title": "TÍTULO",
"subtitle": "Subtítulo",
"title_controls": "Controles Especiales",
"title_description": "Instrucciones",
"controls": [
"[[ICON:LEFT_CLICK]] Descripción del control.",
"[[ICON:SPACE]] Otro control."
],
"description": "Descripción del objetivo del minijuego."
},
{
"lang": "en",
"title": "TITLE",
"subtitle": "Subtitle",
"title_controls": "Special Controls",
"title_description": "Instructions",
"controls": [
"[[ICON:LEFT_CLICK]] Control description.",
"[[ICON:SPACE]] Another control."
],
"description": "Minigame objective description."
},
{
"config": {
"timer": "00:00:10",
"minimize_scale": [0.36, 0.356],
"minimize_position": [0.57, 0.395],
"title_pos": [0.5, 0.08],
"subtitle_pos": [0.5, 0.15],
"title_controls_pos": [0.02, 0.2],
"controls_pos": [0.5, 0.25],
"title_description_pos": [0.02, 0.65],
"description_pos": [0.05, 0.7],
"title_scale": 4.0,
"subtitle_scale": 3.0,
"title_controls_scale": 1.6,
"controls_scale": 1.6,
"title_description_scale": 1.6,
"description_scale": 1.6,
"timer_pos": [0.5, 0.01],
"timer_scale": 1.45
}
},
{
"cinematics": {
"commands": [
"console_command: cam-server start wawa @a 10s",
"wait: 10s",
"console_command: say La cinemática ha finalizado."
]
}
}
]
```
### Language entries
| Field | Description |
|---|---|
| `lang` | Language code (`es`, `en`, etc.) — matched to the client's language setting |
| `title` | Main title shown at the top of the overlay |
| `subtitle` | Subtitle shown below the title |
| `title_controls` | Section header for the controls list |
| `controls` | Array of control descriptions; supports `[[ICON:KEY]]` placeholders and `\n` line breaks |
| `title_description` | Section header for the description block |
| `description` | Body text for the description section |
### Icon placeholders
Use `[[ICON:KEY_NAME]]` inside `controls` or `description` strings to embed keyboard/mouse icons. Examples:
- `[[ICON:LEFT_CLICK]]`
- `[[ICON:RIGHT_CLICK]]`
- `[[ICON:SPACE]]`
- `[[ICON:CTRL]]`
- `[[ICON:W]]`, `[[ICON:A]]`, `[[ICON:S]]`, `[[ICON:D]]`
### Text formatting
Inside any text field you can use:
- `&` — Minecraft chat formatting codes (e.g. `&l` bold, `&c` red)
- `#RRGGBB` — Inline hex color
### Config block
All position values are normalized screen coordinates `[x, y]` where `(0, 0)` is top-left and `(1, 1)` is bottom-right.
| Field | Type | Description |
|---|---|---|
| `timer` | `"HH:MM:SS"` | Countdown duration shown at the top |
| `timer_pos` | `[x, y]` | Timer position |
| `timer_scale` | float | Timer text scale |
| `minimize_scale` | `[x, y]` | Scale of the minimized state widget |
| `minimize_position` | `[x, y]` | Position of the minimized widget |
| `title_pos` | `[x, y]` | Title position |
| `title_scale` | float | Title text scale |
| `subtitle_pos` | `[x, y]` | Subtitle position |
| `subtitle_scale` | float | Subtitle text scale |
| `title_controls_pos` | `[x, y]` | Controls section header position |
| `title_controls_scale` | float | Controls section header scale |
| `controls_pos` | `[x, y]` | Controls list position |
| `controls_scale` | float | Controls list text scale |
| `title_description_pos` | `[x, y]` | Description section header position |
| `title_description_scale` | float | Description section header scale |
| `description_pos` | `[x, y]` | Description body position |
| `description_scale` | float | Description body text scale |
### Cinematics block
The `commands` array runs sequentially when the instruction screen opens.
| Prefix | Example | Description |
|---|---|---|
| `console_command:` | `console_command: say Hello` | Runs a server command |
| `wait:` | `wait: 5s` | Waits the specified time before the next command |
---
## Translation
The mod can auto-translate instruction content using the [MyMemory](https://mymemory.translated.net/) free API. Configure this in `config/setsumeisho/translation.json`:
```json
{
"enabled": false,
"source_lang": "es",
"api_key": ""
}
```
Use `/setsumeisho pretranslate ` to pre-generate translations and cache them, so clients receive content in their own language without latency when the screen opens.