This commit is contained in:
2026-05-18 00:56:31 +02:00
parent 16b4395a00
commit e1fe85a916
6 changed files with 4870 additions and 6 deletions
+4 -1
View File
@@ -48,4 +48,7 @@ build
.kotlin
.claude
.claude
src/torchcs/server/src/com/mojang
src/torchcs/server/src/net/minecraft
File diff suppressed because it is too large Load Diff
+3
View File
@@ -3,3 +3,6 @@
org.gradle.configuration-cache=true
minecraft_version=26.1.2
minecraft_extracted=/home/reversedcodes/dev/GitHub/TorchCS/TorchCS-MC/bin/minecraft/java/26.1.2/extracted
minecraft_main_class=net.minecraft.server.Main
+47 -5
View File
@@ -7,6 +7,7 @@ import zipfile
from pathlib import Path
from common.constants import java_executable
from common.http_client_minecraft import download_file, fetch_latest_java_server_metadata
from common.version_tracker import VersionTrackerDatabase
log = logging.getLogger("SetupMinecraft")
@@ -31,7 +32,7 @@ def run_ripper(ripper_jar: Path, input_jar: Path, output_dir: Path) -> None:
if process.returncode != 0:
raise RuntimeError(f"Ripper exited with code {process.returncode}")
def setup_minecraft_java(ripper_jar: Path, java_path: Path) -> None:
def setup_minecraft_java(ripper_jar: Path, java_path: Path, database_dir: Path) -> None:
metadata = fetch_latest_java_server_metadata()
if metadata is None:
@@ -42,7 +43,10 @@ def setup_minecraft_java(ripper_jar: Path, java_path: Path) -> None:
version_id = metadata["id"]
version_path = java_path / version_id
if (version_path / ".setup-complete").exists():
gradle_properties = java_path.parents[2] / "gradle.properties"
current_version = _read_gradle_property(gradle_properties, "minecraft_version")
if current_version == version_id:
log.info("Minecraft Java %s is already set up, skipping.", version_id)
return
@@ -61,14 +65,51 @@ def setup_minecraft_java(ripper_jar: Path, java_path: Path) -> None:
inner_jar = extract_jar(server_jar, version_id)
run_ripper(ripper_jar, inner_jar, inner_jar.parent / "src")
project_src = java_path.parents[2] / "src" / "torchcs" / "server" / "src"
run_ripper(ripper_jar, inner_jar, project_src)
(version_path / ".setup-complete").touch()
log.info("Building version database...")
db = VersionTrackerDatabase(str(database_dir / f"{version_id}.csv"))
db.populate_from_src(project_src)
database_dir.mkdir(parents=True, exist_ok=True)
db.save()
extracted_dir = version_path / "extracted"
main_class = (extracted_dir / "META-INF" / "main-class").read_text().strip()
_write_gradle_properties(gradle_properties, {
"minecraft_version": version_id,
"minecraft_extracted": str(extracted_dir),
"minecraft_main_class": main_class,
})
log.info("Decompilation complete.")
log.info("Setup finished successfully.")
def _read_gradle_property(gradle_properties: Path, key: str) -> str | None:
if not gradle_properties.exists():
return None
for line in gradle_properties.read_text().splitlines():
if line.startswith(f"{key}="):
return line.split("=", 1)[1].strip()
return None
def _write_gradle_properties(gradle_properties: Path, values: dict) -> None:
lines = gradle_properties.read_text().splitlines() if gradle_properties.exists() else []
for key, value in values.items():
for i, line in enumerate(lines):
if line.startswith(f"{key}="):
lines[i] = f"{key}={value}"
break
else:
lines.append(f"{key}={value}")
gradle_properties.write_text("\n".join(lines) + "\n")
def main() -> None:
parser = argparse.ArgumentParser(description="Set up a Minecraft Java server and decompile it.")
parser.add_argument("--root", required=True, type=Path, help="Project root directory")
@@ -77,8 +118,9 @@ def main() -> None:
ripper_jar = args.root / "build" / "gradle" / "ripper" / "libs" / "ripper.jar"
java_path = args.root / "bin" / "minecraft" / "java"
database_dir = args.root / "database" / "mojang" / "server"
setup_minecraft_java(ripper_jar, java_path)
setup_minecraft_java(ripper_jar, java_path, database_dir)
if __name__ == "__main__":
main()
+1
View File
@@ -1,4 +1,5 @@
from common.hash_minecraft import list_minecraft_src_file_paths, sha256_hash_minecraft_src_file
from common.version_tracker import VersionTrackerDatabase
def find_modifies_vanilla_src():
pass
+25
View File
@@ -1,3 +1,28 @@
plugins {
id 'java'
}
if (!project.hasProperty('minecraft_version')) {
logger.warn("Minecraft not set up yet. Run: ./gradlew setupMinecraft")
return
}
dependencies {
compileOnly files("${minecraft_extracted}/META-INF/versions/${minecraft_version}/server-${minecraft_version}.jar")
compileOnly fileTree(dir: "${minecraft_extracted}/META-INF/libraries", include: "**/*.jar")
}
sourceSets {
main {
java {
srcDirs = ["src"]
}
}
}
jar {
manifest {
attributes 'Main-Class': minecraft_main_class,
'Minecraft-Version': minecraft_version
}
}