This commit is contained in:
2026-10-20 19:38:18 +07:00
parent 00bd14bac1
commit 4e21fdba4e
8 changed files with 56 additions and 26 deletions
+9 -3
View File
@@ -9,8 +9,8 @@ function parseLatestBuild(readme) {
} }
async function loadLatestBuild() { async function loadLatestBuild() {
const status = document.getElementById('build-status'); const statuses = document.querySelectorAll('.build-status');
const download = document.getElementById('build-download'); const downloads = document.querySelectorAll('.build-download');
try { try {
const response = await fetch('/minecraft/api/readme', { const response = await fetch('/minecraft/api/readme', {
cache: 'no-store', cache: 'no-store',
@@ -23,12 +23,18 @@ async function loadLatestBuild() {
} }
const readme = new TextDecoder().decode(Uint8Array.from(atob(data.content), char => char.charCodeAt(0))); const readme = new TextDecoder().decode(Uint8Array.from(atob(data.content), char => char.charCodeAt(0)));
const build = parseLatestBuild(readme); const build = parseLatestBuild(readme);
for (const status of statuses) {
status.textContent = `Актуальная версия — ${build.version}`; status.textContent = `Актуальная версия — ${build.version}`;
}
for (const download of downloads) {
download.href = build.url; download.href = build.url;
download.textContent = `Скачать сборку ${build.version}`; download.textContent = `Скачать сборку ${build.version}`;
download.hidden = false; download.hidden = false;
}
} catch { } catch {
status.textContent = 'Не удалось определить актуальную версию. Открой репозиторий по ссылке внизу страницы.'; for (const status of statuses) {
status.textContent = 'Не удалось определить актуальную версию. Кнопка откроет репозиторий — выбери актуальную сборку в README.';
}
} }
} }
+30 -9
View File
@@ -5,8 +5,8 @@
<meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="gman-world — уютная техническая сборка Minecraft: механизмы Create, аэронавтика и виноделие."> <meta name="description" content="gman-world — уютная техническая сборка Minecraft: механизмы Create, аэронавтика и виноделие.">
<title>gman-world — Minecraft</title> <title>gman-world — Minecraft</title>
<link rel="stylesheet" href="/minecraft/style.css?v=20261017-steam"> <link rel="stylesheet" href="/minecraft/style.css?v=20261020-photos">
<script src="/minecraft/app.js?v=20261017-steam" defer></script> <script src="/minecraft/app.js?v=20261020-download-visible" defer></script>
<script src="/minecraft/motion.js?v=20261017-steam" defer></script> <script src="/minecraft/motion.js?v=20261017-steam" defer></script>
</head> </head>
<body> <body>
@@ -32,21 +32,39 @@
<div class="join-panel"> <div class="join-panel">
<p class="server"><span>АДРЕС СЕРВЕРА</span><code>90.189.218.191:25565</code></p> <p class="server"><span>АДРЕС СЕРВЕРА</span><code>90.189.218.191:25565</code></p>
<p id="server-status" role="status">Проверяем онлайн…</p> <p id="server-status" role="status">Проверяем онлайн…</p>
<a id="build-download" class="button" hidden>Скачать сборку</a> <a id="build-download" class="button build-download" href="https://git.3crabs.space/user-penguin/gmancraft">Скачать сборку</a>
<p id="build-status" class="hint" role="status">Проверяем актуальную версию…</p> <p id="build-status" class="hint build-status" role="status">Проверяем актуальную версию…</p>
<a class="button telemost" href="https://telemost.yandex.ru/j/76726739040099?skip_app=1" target="_blank" rel="noopener noreferrer">Зайти в Телемост</a> <a class="button telemost" href="https://telemost.yandex.ru/j/76726739040099?skip_app=1" target="_blank" rel="noopener noreferrer">Зайти в Телемост</a>
<noscript><p>Включи JavaScript для загрузки сборки и онлайна или открой репозиторий внизу страницы.</p></noscript> <noscript><p>Без JavaScript кнопка скачивания откроет репозиторий. Выбери актуальную сборку в README.</p></noscript>
</div> </div>
</div> </div>
</header> </header>
<div class="pipe pipe-bridge" aria-hidden="true"><span class="valve"></span><span class="pipe-joint"></span><div class="steam"><i></i><i></i><i></i></div></div> <div class="pipe pipe-bridge" aria-hidden="true"><span class="valve"></span><span class="pipe-joint"></span><div class="steam"><i></i><i></i><i></i></div></div>
<section class="world" aria-labelledby="world-title"> <section class="world" aria-labelledby="world-title">
<div class="section-heading"><p class="eyebrow">ЧТО БУДЕМ КРАФТИТЬ?</p><h2 id="world-title">Верстак приключений</h2></div> <div class="section-heading"><p class="eyebrow">ЗАШЁЛ НА ПЯТЬ МИНУТ</p><h2 id="world-title">Вот какой здесь вайб</h2></div>
<p class="world-intro">Механизмы Create, полёты и виноделье — повод собраться. А дальше у каждого найдётся своё «сейчас ещё одну штуку доделаю».</p>
<div class="world-grid"> <div class="world-grid">
<article class="theme mechanics"><div class="scene"><img src="/minecraft/create-foundry.webp" width="1672" height="941" loading="lazy" decoding="async" alt="Медные котлы, шестерни и конвейеры в блочной мастерской."><svg class="rotor card-rotor" viewBox="0 0 100 100" aria-hidden="true"><use href="#cog"/></svg></div><span class="theme-symbol" aria-hidden="true"><svg viewBox="0 0 16 16" width="48" height="48" aria-hidden="true" shape-rendering="crispEdges"><path fill="#69442c" d="M6 0h4v3h3v3h3v4h-3v3h-3v3H6v-3H3v-3H0V6h3V3h3z"/><path fill="#d7a358" d="M5 4h6v1h1v6h-1v1H5v-1H4V5h1z"/><path fill="#483523" d="M6 6h4v4H6z"/></svg></span><p class="eyebrow">КРУТИМ</p><h3>Механизмы Create</h3><p>Начни с шестерёнки. А потом попробуй остановиться — мастерская сама себя не построит!</p></article> <article class="theme theme-featured">
<article class="theme aviation"><div class="scene"><img src="/minecraft/airship-dock.webp" width="1672" height="941" loading="lazy" decoding="async" alt="Дирижабль у медной причальной башни над горами."><svg class="rotor card-rotor" viewBox="0 0 100 100" aria-hidden="true"><use href="#propeller"/></svg></div><span class="theme-symbol" aria-hidden="true"><svg viewBox="0 0 16 16" width="48" height="48" aria-hidden="true" shape-rendering="crispEdges"><path fill="#dbcaa0" d="M1 1h5v3h1v3h2V4h1V1h5v5h-3v1H9v2h3v1h3v5h-5v-3H9V9H7v3H6v3H1v-5h3V9h3V7H4V6H1z"/><path fill="#8d5632" d="M6 6h4v4H6z"/></svg></span><p class="eyebrow">ЛЕТАЕМ</p><h3>Аэронавтика</h3><p>Засиделся у верстака? Пора наверх. Там облака и отличный вид на твою базу.</p></article> <div class="scene"><img src="/minecraft/world-workshop.webp" width="1280" height="1169" loading="lazy" decoding="async" alt="Мастер в цехе склонился над чертежами механизмов."></div>
<article class="theme winery"><div class="scene"><img src="/minecraft/mechanical-winery.webp" width="1672" height="941" loading="lazy" decoding="async" alt="Механическая винодельня с медными чанами, бочками и виноградником."><div class="steam" aria-hidden="true"><i></i><i></i><i></i></div></div><span class="theme-symbol" aria-hidden="true"><svg viewBox="0 0 16 16" width="48" height="48" aria-hidden="true" shape-rendering="crispEdges"><path fill="#5e8441" d="M7 0h2v3h4v2H9v2H7V5H3V3h4z"/><path fill="#663c7a" d="M3 6h4v4H3zm6 0h4v4H9zM6 9h4v4H6zm1 4h3v3H7z"/><path fill="#a781b5" d="M3 6h2v1H3zm6 0h2v1H9zM6 9h2v1H6z"/></svg></span><p class="eyebrow">ВЫРАЩИВАЕМ</p><h3>Виноделье</h3><p>Пока механизмы работают, займись виноградником. И оставь место под бочки!</p></article> <div class="theme-copy"><p class="eyebrow">ПРИДУМЫВАЕМ</p><h3>По чертежу. Почти</h3><p>Зашёл поставить пару шестерёнок. Теперь у тебя цех, три схемы переделки и уверенность, что следующий конвейер точно будет последним.</p></div>
</article>
<article class="theme">
<div class="scene"><img src="/minecraft/world-waterwheel.webp" width="1280" height="1169" loading="lazy" decoding="async" alt="Мастер налаживает деревянное водяное колесо у реки."></div>
<div class="theme-copy"><p class="eyebrow">КРУТИМ</p><h3>Крутится — значит, работает</h3><p>Вода шумит, колесо вращается, мастерская оживает. Можно просто постоять и посмотреть. Но ты уже присматриваешь место для второго колеса.</p></div>
</article>
<article class="theme">
<div class="scene"><img src="/minecraft/world-building.webp" width="1280" height="1169" loading="lazy" decoding="async" alt="Улыбающийся строитель укладывает каменный блок на фоне храма и гор."></div>
<div class="theme-copy"><p class="eyebrow">СТРОИМ</p><h3>Ещё один блок — и домой</h3><p>С друзьями даже укладка камня превращается в приключение. Особенно когда строили сарай, а получился храм.</p></div>
</article>
<article class="theme">
<div class="scene"><img src="/minecraft/world-mine.webp" width="1280" height="861" loading="lazy" decoding="async" alt="Два шахтёра с фонарями на касках в тёмном подземном проходе."></div>
<div class="theme-copy"><p class="eyebrow">КОПАЕМ</p><h3>За углём точно алмазы</h3><p>Факелы взяли, кирки взяли, дорогу назад вроде запомнили. Наверху уже утро, но эту жилу надо докопать.</p></div>
</article>
<article class="theme">
<div class="scene"><img src="/minecraft/world-drilling.webp" width="1129" height="1280" loading="lazy" decoding="async" alt="Бурильщик стоит рядом с большой буровой установкой под открытым небом."></div>
<div class="theme-copy"><p class="eyebrow">МАСШТАБИРУЕМ</p><h3>Кирка ушла на пенсию</h3><p>Когда копать руками надоело, начинается инженерия. Бур побольше, склад пошире — теперь главное успевать за собственной машиной.</p></div>
</article>
</div> </div>
</section> </section>
@@ -56,7 +74,10 @@
<p class="eyebrow">НОВЫЙ ИГРОК</p> <p class="eyebrow">НОВЫЙ ИГРОК</p>
<h2 id="build-title">Первый заход</h2> <h2 id="build-title">Первый заход</h2>
<p class="hint">Файл .mrpack · импорт через Prism Launcher</p> <p class="hint">Файл .mrpack · импорт через Prism Launcher</p>
<a id="installation-build-download" class="button build-download" href="https://git.3crabs.space/user-penguin/gmancraft">Скачать сборку</a>
<p id="installation-build-status" class="hint build-status" role="status">Проверяем актуальную версию…</p>
<ol> <ol>
<li>Скачай и установи <a href="https://github.com/Diegiwg/PrismLauncher-Cracked" target="_blank" rel="noopener noreferrer">Prism Launcher</a>.</li>
<li>Скачай актуальную сборку.</li> <li>Скачай актуальную сборку.</li>
<li>В Prism Launcher выбери <strong>Add Instance → Import</strong> и укажи скачанный .mrpack.</li> <li>В Prism Launcher выбери <strong>Add Instance → Import</strong> и укажи скачанный .mrpack.</li>
<li>Дождись загрузки модов и запусти Minecraft.</li> <li>Дождись загрузки модов и запусти Minecraft.</li>
+13 -10
View File
@@ -29,7 +29,7 @@ a:focus-visible { outline: 3px solid #ffdf61; outline-offset: 5px; }
.brand { color: #fff0c8; font: 400 9px/1.8 var(--pixel); text-decoration: none; text-shadow: 2px 2px #302214; } .brand { color: #fff0c8; font: 400 9px/1.8 var(--pixel); text-decoration: none; text-shadow: 2px 2px #302214; }
.brand span { color: #dba16b; padding: 0 6px; } .brand span { color: #dba16b; padding: 0 6px; }
.nav-link { font: 400 10px/1.8 var(--pixel); } .nav-link { font: 400 10px/1.8 var(--pixel); }
.hero { position: relative; isolation: isolate; display: flex; align-items: center; min-height: 670px; margin: 20px 0 44px; padding: 32px 20px; border: 4px solid #191612; box-shadow: inset 0 0 0 3px #ba8b50, 6px 6px #0005; background: #3b4934 url('/minecraft/workshop.webp') 60% center / cover no-repeat; } .hero { position: relative; isolation: isolate; display: flex; align-items: center; min-height: 670px; margin: 20px 0 44px; padding: 32px 20px; border: 4px solid #191612; box-shadow: inset 0 0 0 3px #ba8b50, 6px 6px #0005; background: #3b4934 url('/minecraft/world-waterwheel.webp') 65% center / cover no-repeat; }
.hero::before { content: ''; position: absolute; inset: 0; z-index: -1; background: linear-gradient(90deg, #171a16ed, #171a16bb 45%, #171a1633); } .hero::before { content: ''; position: absolute; inset: 0; z-index: -1; background: linear-gradient(90deg, #171a16ed, #171a16bb 45%, #171a1633); }
.hero-copy { width: 100%; max-width: 600px; } .hero-copy { width: 100%; max-width: 600px; }
.eyebrow { color: #f1bf73; font: 400 9px/1.9 var(--pixel); } .eyebrow { color: #f1bf73; font: 400 9px/1.9 var(--pixel); }
@@ -47,17 +47,18 @@ code { font: 600 17px/1.6 monospace; color: #fff3ca; overflow-wrap: anywhere; }
.button:hover, .nav-link:hover, footer a:hover { background-color: #858b70; color: #ffffbf; box-shadow: inset 3px 3px #d4dab1, inset -3px -3px #535d43, 3px 3px #0005; } .button:hover, .nav-link:hover, footer a:hover { background-color: #858b70; color: #ffffbf; box-shadow: inset 3px 3px #d4dab1, inset -3px -3px #535d43, 3px 3px #0005; }
.button:active, .nav-link:active, footer a:active { box-shadow: inset 3px 3px #414535, inset -2px -2px #a0ab83; transform: translate(2px, 2px); } .button:active, .nav-link:active, footer a:active { box-shadow: inset 3px 3px #414535, inset -2px -2px #a0ab83; transform: translate(2px, 2px); }
.button[hidden] { display: none; } .button[hidden] { display: none; }
#build-download { display: block; background-color: #526f36; box-shadow: inset 3px 3px #8eac60, inset -3px -3px #2e4924, 3px 3px #0005; } .build-download { display: block; background-color: #526f36; box-shadow: inset 3px 3px #8eac60, inset -3px -3px #2e4924, 3px 3px #0005; }
#build-download[hidden] { display: none; } .build-download[hidden] { display: none; }
#build-download:hover { background-color: #657f42; } .build-download:hover { background-color: #657f42; }
#build-download:active { box-shadow: inset 3px 3px #2e4924, inset -2px -2px #8eac60; } .build-download:active { box-shadow: inset 3px 3px #2e4924, inset -2px -2px #8eac60; }
.telemost { display: block; } .telemost { display: block; }
.hint { font-size: 12px; color: var(--muted); overflow-wrap: anywhere; } .hint { font-size: 12px; color: var(--muted); overflow-wrap: anywhere; }
#build-status { margin: 12px 0; } .build-status { margin: 12px 0; }
.world { margin-bottom: 34px; } .world { margin-bottom: 34px; }
.world-intro { max-width: 740px; margin: 0 auto 28px; color: var(--muted); text-align: center; }
.section-heading { width: fit-content; max-width: 100%; margin: 0 auto 24px; padding: 16px 24px; text-align: center; border: 4px solid #241b13; background: repeating-linear-gradient(0deg, #0000 0 17px, #0002 17px 20px), #63462e; box-shadow: inset 3px 3px #9b7046, inset -3px -3px #39291d, 5px 5px #0004; } .section-heading { width: fit-content; max-width: 100%; margin: 0 auto 24px; padding: 16px 24px; text-align: center; border: 4px solid #241b13; background: repeating-linear-gradient(0deg, #0000 0 17px, #0002 17px 20px), #63462e; box-shadow: inset 3px 3px #9b7046, inset -3px -3px #39291d, 5px 5px #0004; }
.section-heading h2 { margin-bottom: 4px; } .section-heading h2 { margin-bottom: 4px; }
.world-grid { display: grid; gap: 20px; } .world-grid { display: grid; align-items: start; gap: 20px; }
.theme { min-width: 0; padding: 24px; border: 4px solid #33261b; background: #4d493d; box-shadow: inset 3px 3px #a48d67, inset -3px -3px #29271f, 4px 4px #0005; } .theme { min-width: 0; padding: 24px; border: 4px solid #33261b; background: #4d493d; box-shadow: inset 3px 3px #a48d67, inset -3px -3px #29271f, 4px 4px #0005; }
.theme-symbol { display: grid; width: 74px; height: 74px; place-items: center; border: 4px solid #25251f; background: #97917c; box-shadow: inset 3px 3px #5b5c4d, inset -3px -3px #c7bca0; } .theme-symbol { display: grid; width: 74px; height: 74px; place-items: center; border: 4px solid #25251f; background: #97917c; box-shadow: inset 3px 3px #5b5c4d, inset -3px -3px #c7bca0; }
.theme-symbol svg { image-rendering: pixelated; filter: drop-shadow(3px 3px #0005); } .theme-symbol svg { image-rendering: pixelated; filter: drop-shadow(3px 3px #0005); }
@@ -80,7 +81,9 @@ footer span { color: #c5c1ac; font-family: monospace; }
main { padding: 24px 32px 32px; } main { padding: 24px 32px 32px; }
.brand { font-size: 12px; } .brand { font-size: 12px; }
.hero { padding: 48px; } .hero { padding: 48px; }
.world-grid { grid-template-columns: repeat(3, minmax(0, 1fr)); } .world-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.theme-featured { grid-column: 1 / -1; display: grid; grid-template-columns: 1fr 1fr; align-items: center; gap: 32px; }
.theme-featured .scene { margin-bottom: 0; }
.downloads { grid-template-columns: repeat(2, minmax(0, 1fr)); } .downloads { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.downloads section { padding: 28px; } .downloads section { padding: 28px; }
} }
@@ -99,7 +102,7 @@ button { cursor: pointer; }
#motion-toggle { font-size: 8px; padding: 12px; } #motion-toggle { font-size: 8px; padding: 12px; }
.topbar, .join-panel, .theme, .downloads section { position: relative; border-color: #3e281a; box-shadow: inset 3px 3px #bc8c56, inset -3px -3px #573820, 5px 5px #0007; } .topbar, .join-panel, .theme, .downloads section { position: relative; border-color: #3e281a; box-shadow: inset 3px 3px #bc8c56, inset -3px -3px #573820, 5px 5px #0007; }
.topbar::after, .join-panel::after, .theme::after, .downloads section::after { content: ''; position: absolute; inset: 7px; pointer-events: none; background: radial-gradient(circle at 4px 4px, #ffe0a4 0 1px, #a66a3c 2px 3px, #302116 4px, transparent 5px) top left / 10px 10px no-repeat, radial-gradient(circle at 4px 4px, #ffe0a4 0 1px, #a66a3c 2px 3px, #302116 4px, transparent 5px) top right / 10px 10px no-repeat, radial-gradient(circle at 4px 4px, #e5bd79 0 1px, #8a512d 2px 3px, #302116 4px, transparent 5px) bottom left / 10px 10px no-repeat, radial-gradient(circle at 4px 4px, #e5bd79 0 1px, #8a512d 2px 3px, #302116 4px, transparent 5px) bottom right / 10px 10px no-repeat; } .topbar::after, .join-panel::after, .theme::after, .downloads section::after { content: ''; position: absolute; inset: 7px; pointer-events: none; background: radial-gradient(circle at 4px 4px, #ffe0a4 0 1px, #a66a3c 2px 3px, #302116 4px, transparent 5px) top left / 10px 10px no-repeat, radial-gradient(circle at 4px 4px, #ffe0a4 0 1px, #a66a3c 2px 3px, #302116 4px, transparent 5px) top right / 10px 10px no-repeat, radial-gradient(circle at 4px 4px, #e5bd79 0 1px, #8a512d 2px 3px, #302116 4px, transparent 5px) bottom left / 10px 10px no-repeat, radial-gradient(circle at 4px 4px, #e5bd79 0 1px, #8a512d 2px 3px, #302116 4px, transparent 5px) bottom right / 10px 10px no-repeat; }
.hero { background-image: url('/minecraft/steam-workshop.webp'); background-position: center; overflow: hidden; } .hero { overflow: hidden; }
.hero-copy { position: relative; z-index: 2; } .hero-copy { position: relative; z-index: 2; }
.join-panel { background: linear-gradient(125deg, #544536f5, #282e28fa); border-width: 6px; } .join-panel { background: linear-gradient(125deg, #544536f5, #282e28fa); border-width: 6px; }
.hero-machine { position: absolute; right: 3%; bottom: 24px; width: 350px; height: 300px; pointer-events: none; z-index: 1; background: linear-gradient(0deg, #141815cc, transparent); } .hero-machine { position: absolute; right: 3%; bottom: 24px; width: 350px; height: 300px; pointer-events: none; z-index: 1; background: linear-gradient(0deg, #141815cc, transparent); }
@@ -130,7 +133,7 @@ button { cursor: pointer; }
.world-grid { gap: 24px; } .world-grid { gap: 24px; }
.theme { padding: 18px; background-image: linear-gradient(135deg, #9c69451a, #0002); } .theme { padding: 18px; background-image: linear-gradient(135deg, #9c69451a, #0002); }
.scene { position: relative; margin: -2px -2px 22px; border: 3px solid #291e15; box-shadow: 0 0 0 2px #ad794b; overflow: hidden; } .scene { position: relative; margin: -2px -2px 22px; border: 3px solid #291e15; box-shadow: 0 0 0 2px #ad794b; overflow: hidden; }
.scene img { display: block; width: 100%; height: auto; aspect-ratio: 3 / 2; object-fit: cover; } .scene img { display: block; width: 100%; height: auto; aspect-ratio: 4 / 3; object-fit: cover; }
.card-rotor { position: absolute; width: 72px; height: 72px; bottom: 8px; right: 10px; background: #29261caa; border: 3px solid #a77a44; border-radius: 50%; } .card-rotor { position: absolute; width: 72px; height: 72px; bottom: 8px; right: 10px; background: #29261caa; border: 3px solid #a77a44; border-radius: 50%; }
.aviation .card-rotor { animation-duration: 4s; } .aviation .card-rotor { animation-duration: 4s; }
.theme-symbol { width: 52px; height: 52px; border-width: 3px; float: right; margin: 0 0 10px 10px; } .theme-symbol { width: 52px; height: 52px; border-width: 3px; float: right; margin: 0 0 10px 10px; }
Binary file not shown.

After

Width:  |  Height:  |  Size: 185 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 208 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 240 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 144 KiB