Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions install.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
import pathlib

import forge_install
import neoforge_install
import fabric_install
import mod_download
from zipfile import ZipFile
Expand Down Expand Up @@ -211,6 +212,7 @@ def main(zipfile,
# * manual flag: run automatically or show GUI
modloaders = {
'forge': forge_install,
'neoforge': neoforge_install,
'fabric': fabric_install
}

Expand Down
93 changes: 93 additions & 0 deletions neoforge_install.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
#!/usr/bin/env python3
import os
import re
import subprocess
import sys
import time
from util import *

# https://files.minecraftforge.net/maven/net/minecraftforge/forge/1.12.2-14.23.5.2847/forge-1.12.2-14.23.5.2847-universal.jar

def get_neoforge_url(mcver, mlver):
index_url = 'https://maven.neoforged.net/releases/net/neoforged/neoforge/index.html'

outpath = '/tmp/neoforge-%s-index.html' % mcver
if not os.path.exists(outpath):
resp = download(index_url, outpath, False)
if resp != 200:
print("Got %d error trying to download NeoForge download index" % resp)
return ""

with open(outpath, 'r') as f:
match = re.search(r"href=\".*(https://maven\.neoforged\.net/.*-%s-.*\.jar)\"" % mlver, f.read())
if match:
url = match.group(1)
else:
print("Could not find NeoForge download URL for version %s (Minecraft version %s)" % (mlver, mcver))
return ""

return url

def guess_neoforge_url(mcver, mlver):
neoforge_fullver = mlver
return 'https://maven.neoforged.net/releases/net/neoforged/neoforge/%s/neoforge-%s-installer.jar' % (neoforge_fullver, neoforge_fullver)

def main(manifest, mcver, mlver, packname, mc_dir, manual):
url_providers = [guess_neoforge_url, get_neoforge_url]

outpath = '/tmp/neoforge-%s-installer.jar' % (mcver + '-' + mlver)

for provider in url_providers:
if os.path.exists(outpath):
break
url = provider(mcver, mlver)

resp = download(url, outpath, True)
if resp != 200:
print("Got %d error trying to download NeoForge" % resp)

if not os.path.exists(outpath):
print("Failed to download the NeoForge installer.")
sys.exit(2)

# Run the Forge auto-install hack
if manual:
print("Using the manual installer!")
print("***** NEW: INSTALL TO THE MAIN .MINECRAFT DIRECTORY *****")
print("***** (Just hit 'OK' with the default settings) *****")
for i in range(20):
print("^ ", end="", flush=True)
time.sleep(0.05)

subprocess.run(['java', '-jar', outpath])
else:
compile_hack = False
if not os.path.exists('ForgeHack.class'):
compile_hack = True
else:
src_modtime = os.stat('ForgeHack.java').st_mtime
cls_modtime = os.stat('ForgeHack.class').st_mtime
if src_modtime > cls_modtime:
print("hack source file updated, recompiling")
compile_hack = True

if compile_hack:
subprocess.run(['javac', 'ForgeHack.java'])
exit_code = subprocess.run(['java', 'ForgeHack', outpath, mc_dir]).returncode
if exit_code != 0:
print("Error running the auto-installer, try using --manual.")
sys.exit(3)

ver_id = get_version_id(mcver, mlver)
if not os.path.exists(mc_dir + '/versions/' + ver_id):
print("NeoForge installation not found.")
if manual:
print("Make sure you browsed to the correct minecraft directory.")
print("Expected to find a directory named %s in %s" % (ver_id, mc_dir + '/versions'))
print("If a similarly named directory was created in the expected folder, please submit a")
print("bug report.")
sys.exit(3)


def get_version_id(mcver, mlver):
return "neoforge-%s" % mlver