Files
MineGeo/app/downloads/page.tsx
pavel444-byte 658c8974ac
All checks were successful
Deploy MineGeo to Dokploy / deploy (push) Successful in 6m26s
Release v0.1.4 with terrain rescanning and owner-published map updates
2026-10-28 19:40:53 +05:00

183 lines
7.4 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import { getI18n } from "@/lib/i18n";
import { Header, Footer } from "@/components/Shell";
import { Blocks, Server, Download, ExternalLink } from "lucide-react";
import { existsSync } from "node:fs";
import Link from "next/link";
import desktopRelease from "@/shared/desktop-release.json";
const release = "0.1.4";
const versions = ["1.21.11", "26.1", "26.2"];
export const dynamic = "force-dynamic";
export default async function Downloads() {
const { t } = await getI18n();
const pluginPath = `/tools/plugin/minegeo-plugin-${release}.jar`;
const plugin = existsSync(`public${pluginPath}`);
return (
<>
<Header />
<main className="section page-content" id="main-content" tabIndex={-1}>
<article className="tool-card desktop-download-card">
<span className="eyebrow">{t("MINEGEO DESKTOP")}</span>
<h2>{t("Your next expedition, on your desktop.")}</h2>
<p className="muted">
{t(
"Download the portable app, run the EXE, and start exploring. No installation needed.",
)}
</p>
<a className="button primary" href={desktopRelease.file} download>
<Download size={16} /> {t("Download for Windows")}
</a>
<p className="muted desktop-download-version">
{t(
"Windows 10/11 · 64-bit · Version {version} · Internet required",
{ version: desktopRelease.version },
)}
</p>
<p className="muted">
{t(
"The app connects to minegeo.site and keeps you signed in on this device.",
)}
</p>
<p className="muted">
{t(
"This release is unsigned. Windows may show a publisher warning when you open it.",
)}
</p>
</article>
<span className="eyebrow">
{t("MADE FOR THE PEOPLE WHO KNOW THEIR WORLDS")}
</span>
<h1>{t("Become a cartographer.")}</h1>
<p className="lead">
{t(
"Two ways to bring your world to MineGeo. Both create private drafts for you to preview before submitting for review.",
)}
</p>
<div className="tool-grid">
<article className="tool-card">
<Blocks size={34} />
<span className="eyebrow">{t("FOR PLAYERS")}</span>
<h2>{t("Fabric capture mod.")}</h2>
<p className="muted">
{t(
"Explore normally and capture the places worth remembering. Your server doesn’t need a plugin.",
)}
</p>
<ul>
<li>
{t(
"Minecraft Java 1.21.11, 26.1 & 26.2 + Fabric Loader + Fabric API",
)}
</li>
<li>{t("Open the capture panel with G")}</li>
<li>{t("Link your account through a browser pairing code")}</li>
<li>{t("Capture 5–24 viewpoints for a new map, then upload")}</li>
<li>
{t(
"Paste a map ID into “Add to map” to contribute 1–12 panoramas",
)}
</li>
<li>
{t("Only terrain received by your client enters the map")}
</li>
<li>{t("Contributions check the recorded server address")}</li>
</ul>
{versions.map((version) =>
existsSync(
`public/tools/mod/minegeo-fabric-${version}-${release}.jar`,
) ? (
<a
key={version}
className="button primary download-build-link"
href={`/tools/mod/minegeo-fabric-${version}-${release}.jar`}
download
>
<Download size={16} /> {t("Download Fabric mod")} · {version}
</a>
) : (
<p className="muted" key={version}>
{version}: {t("The Fabric build is not available yet.")}
</p>
),
)}
<p className="muted tool-card-note tool-card-note-spaced">
{t(
"Install the JAR in your Minecraft mods folder alongside Fabric API.",
)}
</p>
<p className="muted">
{t(
"Java 21 for 1.21.11; Java 25 for 26.1 and 26.2. Both tools connect to minegeo.site automatically.",
)}
</p>
</article>
<article className="tool-card">
<Server size={34} />
<span className="eyebrow">{t("FOR SERVER ADMINISTRATORS")}</span>
<h2>{t("Server export plugin.")}</h2>
<p className="muted">
{t(
"Export generated Overworld terrain. MineGeo renders panoramas without a connected player or BlueMap.",
)}
</p>
<ul>
<li>{t("Bukkit/Paper 1.21.11, 26.1 & 26.2")}</li>
<li>{t("Select a bounded area and export existing chunks")}</li>
<li>{t("Choose up to 24 random, safe surface viewpoints")}</li>
<li>
Use /minegeo contribute &lt;map ID&gt; to join an existing map
</li>
<li>{t("Link a contributor token and upload resumably")}</li>
<li>
{t("Set the public Minecraft server address before exporting")}
</li>
<li>{t("Vanilla blocks/fluids, simplified lighting")}</li>
</ul>
{plugin ? (
<a className="button primary" href={pluginPath} download>
<Download size={16} /> {t("Download server plugin")}
</a>
) : (
<p className="muted">
{t("The plugin build is not available yet.")}
</p>
)}
<pre>
{
"/minegeo server play.your-server.example\n/minegeo link <dashboard token>\n/minegeo area world -64 -64 64 64\n/minegeo export My Overworld\n/minegeo status\n# Wait for Export complete, then:\n/minegeo upload"
}
</pre>
<p className="muted">
{t(
"Start with a small, explored area around your builds. Exports are saved in",
)}{" "}
<code>plugins/MineGeo/exports/export-…/</code>
{t(
". The manifest appears when export finishes. Upload sends the latest completed export; it does not capture the world.",
)}
</p>
<p className="muted tool-card-note">
{t(
"Put the JAR in plugins/ and restart. Set server-name and server-address in plugins/MineGeo/config.yml, then run /minegeo reload. Permission: minegeo.admin. The same plugin JAR supports all three versions.",
)}
</p>
</article>
</div>
<div className="contribute-banner">
<div>
<h2>{t("Your map, your credit.")}</h2>
<p>
{t(
"Map owners can allow player contributions. Each player may add up to 12 panoramas per map. Owners approve the selection, then moderators review the map update before it becomes playable.",
)}
</p>
</div>
<Link className="button" href="/dashboard">
{t("Open my dashboard")} <ExternalLink size={15} />
</Link>
</div>
</main>
<Footer />
</>
);
}