Blok v server listu: specifikace
Otevřená specifikace bloku „keystone“, který server přidává do odpovědi na ping v server listu, a manifestu vedle něj – pole, verze formátu, příklady – pro jakýkoli launcher. Otevřená je specifikace, kód Keystone ne.
Na téhle stránce 5 částí
Blok v server listu: specifikace
Server s Keystone může launcheru říct dřív, než se kdokoli připojí, jaký modpack běží, jaká hra a loader, jaký Keystone, jeho resource pack a klientské mody, které doporučuje. Udělá to v obyčejném pingu server listu. Tahle stránka je specifikace toho, co posílá, aby ho mohl číst jakýkoli launcher. Specifikace je otevřená; kód Keystone je All Rights Reserved. Jak to majitel nastaví, je na stránce server list.
Kde je
#Odpověď na ping server listu (status) je JSON objekt; Keystone do ní přidá jeden klíč, "keystone". Vanilla klienti i jiné launchery čtou odpověď benevolentně a klíč, který neznají, přeskočí, takže blok je bezpečné posílat všem. Celá odpověď je jeden řetězec, který hra omezuje na 32 767 znaků společně s popisem a ikonou; kdyby se blok nevešel nebo cokoli při přidávání selhalo, odpověď odejde přesně tak, jak ji napsal vanilla. Blok zůstává hluboko pod kilobajtem.
Blok, verze 1
#"keystone": {
"v": 1,
"pack": "curseforge:123456@7654321",
"game": "1.21.1",
"loader": "neoforge",
"loaderVersion": "21.1.209",
"java": 21,
"heap": "6G",
"manifest": {"url": "https://example.com/manifest.json", "sha256": "…64 hex…"},
"keystoneVersion": "0.3.0",
"keystoneClient": "optional",
"recommend": [
{"mod": "modrinth:AANobbMI", "version": "mc1.21.1-0.6.0", "why": {"en": "Smoother frames", "cs": "Plynulejší obraz"}},
{"mod": "modrinth:sodium-extra", "atLeast": "0.6.0", "required": true, "why": {"en": "The HUD needs it"}},
{"mod": "modrinth:AANobbMI", "or": "curseforge:394468"},
{"preset": "my-quality"}
],
"resourcePack": {"url": "https://example.com/pack.zip", "sha1": "…40 hex…"}
}
| Pole | Vždy | Význam |
|---|---|---|
v |
ano | Verze formátu, 1. Launcher, který verzi nezná, blok ignoruje. |
game, loader |
ano | Verze Minecraftu a loader (neoforge), jak je server spouští. |
loaderVersion |
ne | Vlastní verze loaderu. |
pack |
ne | Modpack: curseforge:<id projektu>[@<id souboru>] nebo modrinth:<projekt>[@<verze>]. Jen id – písmena, číslice, _ a -, každé nejvýš 64; id na CurseForge jsou čísla. |
java |
ne | Verze Javy, kterou pack chce (8–99). |
heap |
ne | Doporučená paměť, 512M až 64G (6G, 6144M). |
manifest |
ne | url (https, tisknutelné ASCII, bez uživatele, bez #fragmentu, nejvýš 512 znaků) a sha256 manifestu, jak je zapsaný. Jen obojí spolu: odkaz, který nejde ověřit, se neposílá. |
keystoneVersion |
ne | Keystone, který server spouští, bez části buildu (0.3.0, ne 0.3.0+1.21.1-neoforge), aby launcher mohl nabídnout klientskou část ve stejné verzi. |
keystoneClient |
s keystoneVersion |
Zatím optional: hráč bez klientské části se připojí stejně. required je vyhrazené pro server, jehož funkce ji potřebují. |
recommend |
ne | Nejvýš 12 položek a 3 000 znaků. Položka je {"mod": "<portál>:<id>"} s version (přesně jedna: id nebo číslo verze na Modrinthu, id souboru na CurseForge) nebo atLeast (Modrinth, číslované verze), volitelně or (stejný mod na druhém portálu); nebo {"preset": "<id>"} pro preset nastavení launcheru. required: true je pro hráče ke čtení a nikoho nezastaví. why drží důvod v každém jazyce (en, cs), každý nejvýš 120 znaků. |
resourcePack |
ne | Vlastní resource pack serveru ze server.properties (ten, který vanilla dá každému hráči při připojení), jen s https url a jeho sha1. |
Server, který nic neoznamuje, žádný blok neposílá.
Manifest, formát 1
#Soubor na adrese manifest.url. Stejné mody dají stejné bajty – žádný čas, soubory seřazené podle jména – takže jeho hash se změní, jen když se změní něco, co by hráč poznal.
{
"format": 1,
"game": "1.21.1",
"loader": "neoforge",
"loaderVersion": "21.1.209",
"pack": "curseforge:123456@7654321",
"java": 21,
"heap": "6G",
"note": "Text pro hráče, nejvýš 280 znaků",
"mods": [
{"file": "create-1.21.1-6.0.6.jar", "ids": ["create"], "name": "Create", "version": "6.0.6",
"client": "required", "size": 12345678, "sha1": "…", "sha512": "…", "curseforge": 1234567890}
]
}
mods vypíše soubory, které hra hráče potřebuje (client: required), nebo všechny soubory, když majitel zapne manifest.server-only. curseforge je vlastní otisk souboru CurseForge, sha1 a sha512 otisky Modrinthu, takže launcher každý soubor najde na portálu podle hashe.
Pravidlo: id a hashe, nikdy stahování ze serveru
#Nic v bloku ani v manifestu není soubor ke stažení ze serveru nebo z adresy, kterou majitel napsal. Launcher najde pack i každý mod na portálu podle id nebo hashe a ověří hash portálu; manifest ověří podle sha256 v pingu. Jediná adresa kromě manifestu je resource pack, který vanilla už dává každému hráči při připojení, a i ten jen s SHA-1. Launcher kvůli jedinému poli mimo tvar odmítne celý blok; Keystone proto každou hodnotu před odesláním zkontroluje podle těchto tvarů a co nesedí, vynechá a důvod napíše do logu.
Co tu server nikdy neřekne
#Všechno v bloku dostane každý, kdo pingne, bez klíče. Proto obsahuje jen to, co majitel napsal úmyslně, a to, co server stejně prozrazuje (hra, loader, verze Keystone) – nikdy seznam modů (ten je v manifestu, jen když ho majitel zveřejní), nikdy cestu, nikdy klíč.
Pomohla vám tahle stránka?
Otevře panel zpětné vazby s touhle stránkou v příloze. Přistane do jedné fronty se vším ostatním.