Files
Emil 89c53d7058 Expand material support and checkpoint the completed building toolkit
Expose the runtime block/item registry through compact material search and
single-material descriptions. Preserve private block-entity data through
checked edits and durable undo without sending payloads to model context.

Include the completed terrain tools, isolated world/map plugin, station lift,
ACP streaming and guidance fixes, local camera auto-connect, construction
scripts, and their public documentation, references and verification records.
Active station decoration and private runtime data remain outside this commit.

Validation: 145 Maven tests, 47 Bridge tests, successful camera Gradle build,
and isolated Paper verification of all 1,196 block defaults plus 5,392
independent property cases for placement, same-material edits and restoration.
2026-09-13 16:59:13 +03:00

52 lines
2.1 KiB
Python

#!/usr/bin/env python3
"""Build the opt-in isolated Paper regression probe; never install or run it."""
from __future__ import annotations
import argparse
import os
from pathlib import Path
import shutil
import subprocess
ROOT = Path(__file__).resolve().parents[2]
OUTPUT = ROOT / ".runtime" / "material-registry-probe"
PLUGIN = """name: MaterialRegistryProbe
version: '1.0'
main: probe.MaterialRegistryProbe
api-version: '26.2'
depend: [MinecraftBuilderMCP]
commands:
registryprobe:
description: Run isolated all-registry block snapshot verification
"""
def main() -> None:
parser = argparse.ArgumentParser(description=__doc__)
parser.add_argument("--paper-home", type=Path, default=ROOT / ".runtime" / "server",
help="Prepared Paper installation whose libraries supply the compile classpath")
parser.add_argument("--java-home", type=Path,
default=Path(os.environ.get("MCB_JAVA_HOME", str(Path.home() / ".cache" / "minecraft-builder-mcp" / "jdk-25.0.2"))),
help="JDK 25 or newer; defaults to the project's downloaded JDK")
args = parser.parse_args()
libraries = sorted((args.paper_home / "libraries").rglob("*.jar"))
if not libraries:
parser.error("No Paper dependency jars found; prepare the local development server first")
javac, jar = args.java_home / "bin" / "javac", args.java_home / "bin" / "jar"
if not javac.is_file() or not jar.is_file():
parser.error("JDK javac/jar unavailable; supply --java-home or MCB_JAVA_HOME")
classes = OUTPUT / "classes"
if classes.exists():
shutil.rmtree(classes)
classes.mkdir(parents=True)
subprocess.run([str(javac), "--release", "25", "-cp", os.pathsep.join(str(p.resolve()) for p in libraries),
"-d", str(classes), str(Path(__file__).with_name("MaterialRegistryProbe.java"))], check=True)
(classes / "plugin.yml").write_text(PLUGIN, encoding="utf-8")
output = OUTPUT / "material-registry-probe.jar"
subprocess.run([str(jar), "--create", "--file", str(output), "-C", str(classes), "."], check=True)
print(output)
if __name__ == "__main__":
main()