All checks were successful
Deploy MineGeo to Dokploy / deploy (push) Successful in 5m57s
184 lines
7.5 KiB
TypeScript
184 lines
7.5 KiB
TypeScript
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.3";
|
||
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">
|
||
<article className="tool-card" style={{ marginBottom: 40 }}>
|
||
<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" style={{ marginTop: 16 }}>
|
||
{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"
|
||
href={`/tools/mod/minegeo-fabric-${version}-${release}.jar`}
|
||
download
|
||
style={{ marginRight: 8, marginBottom: 8 }}
|
||
>
|
||
<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" style={{ fontSize: 11, marginTop: 20 }}>
|
||
{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 <map ID> 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" style={{ fontSize: 11 }}>
|
||
{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 />
|
||
</>
|
||
);
|
||
}
|