Files
MineGeo/app/downloads/page.tsx

155 lines
6.3 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";
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">
<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.vercel.app 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" 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 />
</>
);
}