# Keystone ve hře hráče: obrazovky, HUD a motivy

> Co klientská půlka kreslí od 0.3: rozcestník na K, Keystone Settings, motivy jako podmnožina CSS, HUD, který nic nezakryje, upozornění, vzhled herních obrazovek podle modpacku a veřejný ClientToolkit pro doplňky.

Source: https://stygion.eu/cs/docs/keystone/client
Updated: 2026-10-25

Od 0.3 klientská část – týž jar v `mods/` hráče, co si klient a server říkají, viz [klientská část](/docs/keystone/client-half) – kreslí skutečné obrazovky a HUD. Modul `client` na serveru je **ve výchozím stavu vypnutý**. Hráč bez klientské části nic nepřijde: každá obrazovka má svou verzi v chatu nebo v truhle. Nic tu nezávisí na STYGIONu.

## Rozcestník (K)

**K** otevře rozcestník hráče: dlaždici pro každou část Keystone, kterou server má, každou s živým číslem — **questy a zakázky** (kolik je dnes hotovo, kdy se resetují; `/quests`, `/jobs`), **seznamy** (`/lists`), **trh a bedny** (tvoje klíče a mince; `/market`, `/crate`, směnárna), **odznaky a novinky** (tvoje odznaky, dnešní hlas a série, `/changelog`). Dlaždice je tam jen tehdy, když server tu část pro hráče zapnutou má: rozcestník čte vlastní seznam příkazů serveru, takže vypnutý modul nebo chybějící oprávnění dlaždici prostě vynechá. Odznaky bere z modulu `badges` serveru (jeho pravidla nebo vlastní zdroj majitele), nikdy jen ze STYGIONu. Čísla jsou hodnoty HUD, které server už posílá; tlačítko spustí příkaz serveru, který otevře jeho obrazovku. Ozubené kolo v rohu otevře Keystone Settings.

## Keystone Settings

Otevře se ozubeným kolem v rozcestníku, malým **tlačítkem Keystone** na titulní obrazovce a v pauze, příkazem `/keystone settings` nebo tlačítkem Config v seznamu modů; vlastní klávesa není přiřazená, dokud si ji hráč nenastaví v Controls. Záložky **Chat, HUD, Ultimine, Upozornění a Motiv**, každá s živým náhledem. Všechno se ukládá jen na počítači hráče (`config/keystone-client.json`) a nikam se neposílá; co server zamkl, je vidět jako zamčené.

Tlačítko v menu (20×20, šestiúhelník s klenákem) se samo postaví vedle sloupce tlačítek na první místo, které nezabírá žádný widget hry ani jiného modu (čte je po sestavení obrazovky), jinak do volného rohu. Pack ho posune nebo skryje ve svém souboru: `"menu-button": {"title": "auto", "pause": "auto"}` — `auto`, `off` nebo `x,y` v pixelech GUI (záporné od pravého nebo dolního okraje).

## Motivy

Motiv jsou **data, nikdy kód**: malá podmnožina CSS, kterou klient kreslí sám – žádný prohlížeč, žádný skript – takže sdílený motiv umí změnit barvy a nic jiného.

```
:root { --accent: #e8913a; }
panel { background: #0f0d0b / 88%; border: 1px solid #5c2e14; radius: 3px; shadow: 2px 2px 0 #000000; }
tab:selected { background: var(--accent); color: #24110a; }
badge[legend] { background: linear-gradient(90deg, #a8204a, #ffca36); }
```

Selektor je slovo s volitelným `.část`, `[klíč]` a `:stav`; vlastnost se hledá od nejkonkrétnějšího selektoru k samotnému slovu a pak k výchozí hodnotě motivu. Čemu klient nerozumí, přeskočí, nikdy to není chyba; soubor se čte do 16 KB.

- Čtyři jsou v jaru: **Night** (výchozí), **STYGION**, **Mist** a **High contrast**. Server přidá vlastní jako `config/keystone/themes/<jméno>.kcss`.
- `theme.default` je vzhled, se kterým nový hráč začíná; `theme.offered` motivy, ze kterých si hráč smí vybrat.
- `theme.own` (zapnuto) dovolí hráči upravit si vlastní motiv a sdílet ho jako kód začínající `KS1:`, který jiný hráč vloží v Settings.

## HUD

Malý panel, který nic nezakryje. **Ve výchozím stavu jsou vidět jen questy**, vpravo nahoře: hlavička třeba `DNES · 2 / 3` s časem do resetu, nejvýš tři questy (`hud.quests.rows`), počet vpravo a jeden tenký pruh pod prvním nedokončeným. Quest, který dokončíš během hraní, na pár vteřin zezelená s nápisem *hotovo* a zabalí se. Panel není nikdy širší než `hud.width` procent obrazovky (výchozí 22); dlouhý název se zalomí na druhý řádek, nikdy se neusekne. HUD je na obrazovce zhruba stejně velký při každém měřítku GUI.

Ostatní prvky jsou vypnuté, dokud si je hráč nezapne (Keystone Settings → HUD): **pozice** (souřadnice, biom, směr, čas, svět, čí je claim), **server** (ping, TPS, hráči, příští restart, dnešní hlas a série), **hráč** (mince, klíče, rank a čas do dalšího, odznaky), **seznamy** (připnuté seznamy) a **panely** (vlastní panely majitele, [menu](/docs/keystone/menus)). Co server nezamkl, si hráč přetáhne, zvětší nebo skryje (Settings → HUD → Move panels).

**Uhýbá tomu, co už na obrazovce je.** Každý panel si vezme první volné místo: začne ve svém rohu, posune se podél okraje, pak zkusí další rohy, a přeskládá se, když se něco objeví — ikony efektů, bossbary, tooltip Jade, chat (otevřený zabere víc), scoreboard, hotbar, panel ultiminu a minimapy **JourneyMap** a **FTB Chunks** tam, kam je dají jejich vlastní nastavení (čte je z jejich configů; ani jeden mod není potřeba). Pro jakýkoli jiný mod je `hud.avoid`: roh a velikost v pixelech GUI nebo v procentech výšky obrazovky, případně odsazené od rohu — `top-right 120x90`, `top-right 120x90+0+20`, `top-left 30%x35%`. Stejné řádky může dát i pack do svého souboru (níž). Panel, který hráč přetáhl, zůstane přesně tam, kam ho dal.

`client.toml`: `hud.enabled`, `hud.every` (2 s; hodnoty se posílají jen při změně), `hud.elements` (co existuje), `hud.shown` (co vidí nový hráč; `quests`), `hud.locked` (co se nesmí posunout ani skrýt), `hud.anchor.<prvek>`, `hud.quests.rows` (3), `hud.width` (22), `hud.avoid`, `hud.position.claim`, `hud.position.biome`. Hodnoty a jejich klíče: [hodnoty HUD](/docs/keystone/hud-values).

## Upozornění

Krátká upozornění vyjedou v rohu: odznak, splněný quest, zmínka, týmový seznam, zakázka, restart nebo hlas. `toasts.kinds` říká, které druhy server vůbec posílá; každý hráč si vybere, které chce vidět.

## Chat

`chat.images` (zapnuto): obrázky a GIFy z Discordu se ukážou v chatu ve hře; stahuje je server jen z vlastních adres Discordu, nikdy hráči. `chat.heads` (zapnuto): řádky chatu ukazují hlavu toho, kdo píše.

## Vzhled herních obrazovek podle modpacku

`config/keystone-pack.json` patří **packu**, ne hráči, a když chybí, nic nemění:

```json
{"hud": {
  "background": "#E61A0C06", "border": "#FF5C2E14", "title": "#FFFFCA36", "text": "#FFF8E9CC",
  "muted": "#FFB9A184", "bar": "#FFE8913A", "track": "#FF2F170A", "done": "#FFA9C25A",
  "avoid": ["top-left 120x60"]
 },
 "menu-button": {"title": "auto", "pause": "auto"},
 "gui": {
  "container-label-color": "#F8E9CC",
  "container-label-screens": ["com.example.SomeScreen"],
  "tooltip": {"background": "#F01A0C06", "border-top": "#FFFFCA36", "border-bottom": "#FFA8204A"}
}}
```

Barvy se píšou jako ve hře: `#AARRGGBB` (alfa první) nebo `#RRGGBB`. `hud` nastaví barvy HUD přes motiv hráče (každý klíč je nepovinný) a přidá místa, kterým se HUD vyhne; `gui` obarví popisky obrazovek kontejnerů (všech herních a vyjmenovaných tříd) a tooltipy.

Barva popisků platí pro kontejnerové obrazovky samotné hry a pro vyjmenované třídy obrazovek, takže obrazovka modu se světlými texturami si nechá tmavé popisky. Barvy tooltipů platí na Minecraftu 1.21.x; 26.x kreslí tooltipy ze spritů, které místo toho přebarví resource pack. Obrazovky jiných modů se nikdy nepřebarvují.

## Pro doplňky: `ClientToolkit`

`ModuleContext.client()` dá modulu nebo doplňku klientskou část jako data, nikdy kód:

- `send(hráč, téma, data)` – data pod tématem (malá slova s tečkami), nejvýš 512 KiB.
- `open(hráč, obrazovka, data)` – jedna z obrazovek klienta (`quests`, `market`, `crate`, `changelog`, `menu`, `lists`, `jobs`, `settings`, `vote`); pro hráče bez klientské části vrátí false, ať volající odpoví do chatu.
- `notify(hráč, druh, titulek, text, ikona)` – upozornění.
- `onAction(téma, handler)` – co klientské části posílají zpátky, už s omezenou velikostí (8 KiB) a přečtené; každou hodnotu je potřeba kontrolovat jako argument příkazu.
- `hud(klíč, hodnota)` – hodnota HUD, ptá se jí při každém obnovení na vlákně serveru; musí to být levný pohled do paměti.

Pro hráče bez klientské části nedělá žádné volání nic. `Player.runCommand` spustí příkaz za hráče s jeho vlastními oprávněními. `GET /v1/client/hud` (scope `players.read`) vypíše klíče HUD a rozložení, které server navrhuje.
