init and some qol stuff for a modpack maker
This commit is contained in:
17
.gitignore
vendored
Normal file
17
.gitignore
vendored
Normal file
@@ -0,0 +1,17 @@
|
||||
### PAX ###
|
||||
pax
|
||||
pax.exe
|
||||
libssl*.dll
|
||||
libcrypto*.dll
|
||||
cacert.pem
|
||||
|
||||
### Modpack ###
|
||||
.out/
|
||||
.dist/
|
||||
|
||||
# python
|
||||
.venv
|
||||
|
||||
# client
|
||||
client/.version
|
||||
client/curseforge
|
||||
7
.vscode/settings.json
vendored
Normal file
7
.vscode/settings.json
vendored
Normal file
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"[python]": {
|
||||
"editor.defaultFormatter": "ms-python.black-formatter"
|
||||
},
|
||||
"python.formatting.provider": "none",
|
||||
"python.analysis.typeCheckingMode": "basic"
|
||||
}
|
||||
24
README.md
Normal file
24
README.md
Normal file
@@ -0,0 +1,24 @@
|
||||
# FishPog Pixelmon
|
||||
|
||||
This is the repo for FishPog Pixelmon, and a bit of experimental tooling to make my life easier in designing, updating, and getting non-technical people to be able to easily install the modpack, all without having to use curseforge.
|
||||
|
||||
## Building the modpack
|
||||
|
||||
```bash
|
||||
git clone https://git.233hfd.com/joey/FishPogPixelmon.git
|
||||
cd FishPogPixelmon
|
||||
|
||||
source ./venv.sh # or just venv.bat on windows
|
||||
|
||||
python tooling.py --setup
|
||||
```
|
||||
|
||||
now, pax will be installed, which will allow you to edit the modpack. refer to the pax github for more info.
|
||||
|
||||
## exporting the modpack
|
||||
|
||||
```bash
|
||||
python tooling.py --export
|
||||
```
|
||||
|
||||
this command will package up the pack with pax, then bundle some scripts with it that allows for auto-updating and automatically downloading the mods from curseforge, rather than having to distribute a large zip file.
|
||||
46
client/client.ps1
Normal file
46
client/client.ps1
Normal file
@@ -0,0 +1,46 @@
|
||||
# check if winget is installed and if so, set a flag to true
|
||||
$winget = Get-Command winget -ErrorAction SilentlyContinue
|
||||
|
||||
if (!$winget) {
|
||||
Write-Host "Error: winget is not installed." -Foreground Red
|
||||
Write-Host "This script may not work withotu winget." -Foreground Red
|
||||
Write-Host "Run 'Add-AppxPackage -RegisterByFamilyName -MainPackage Microsoft.DesktopAppInstaller_8wekyb3d8bbwe' in an admin powershell prompt to install winget." -Foreground Red
|
||||
}
|
||||
|
||||
# Check that python is installed
|
||||
if (-not (Get-Command "python" -ErrorAction SilentlyContinue)) {
|
||||
Write-Host "Error: python is not installed." -Foreground Red
|
||||
|
||||
if ($winget) {
|
||||
Write-Host "Attempting to install python."
|
||||
winget install --id=Python.Python.3.11 -e
|
||||
}
|
||||
else {
|
||||
Write-Host "Please install python to continue." -Foreground Red
|
||||
exit 1
|
||||
}
|
||||
}
|
||||
|
||||
# Check that java is installed
|
||||
if (-not (Get-Command "java" -ErrorAction SilentlyContinue)) {
|
||||
Write-Host "Error: java is not installed." -Foreground Red
|
||||
|
||||
if ($winget) {
|
||||
Write-Host "Attempting to install java."
|
||||
winget install AdoptOpenJDK.OpenJDK.11
|
||||
}
|
||||
else {
|
||||
Write-Host "Please install java to continue." -Foreground Red
|
||||
exit 1
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (Test-Path ".venv") { } else { python -m venv .venv }
|
||||
|
||||
.venv\Scripts\Activate
|
||||
|
||||
python -m pip install --upgrade pip
|
||||
python -m pip install -r requirements.txt
|
||||
|
||||
python .\client.py
|
||||
3
client/client.py
Normal file
3
client/client.py
Normal file
@@ -0,0 +1,3 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
DOWNLOADER_URL = "https://github.com/North-West-Wind/CurseForge-CLI/releases/latest/download/curseforge.zip"
|
||||
22
client/client.sh
Normal file
22
client/client.sh
Normal file
@@ -0,0 +1,22 @@
|
||||
#!/bin/bash
|
||||
|
||||
# check that python is installed
|
||||
if ! [ -x "$(command -v python)" ]; then
|
||||
echo 'Error: python is not installed. Please install it to continue.' >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# check that java is installed
|
||||
if ! [ -x "$(command -v java)" ]; then
|
||||
echo 'Error: java is not installed. Please install it to continue.' >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -d .venv ]; then; else python -m venv .venv; fi
|
||||
|
||||
source .venv/bin/activate
|
||||
|
||||
python -m pip install --upgrade pip
|
||||
python -m pip install -r requirements.txt
|
||||
|
||||
python ./client.py
|
||||
5
client/requirements.txt
Normal file
5
client/requirements.txt
Normal file
@@ -0,0 +1,5 @@
|
||||
certifi==2023.5.7
|
||||
charset-normalizer==3.1.0
|
||||
idna==3.4
|
||||
requests==2.31.0
|
||||
urllib3==2.0.3
|
||||
194
modpack/manifest.json
Normal file
194
modpack/manifest.json
Normal file
@@ -0,0 +1,194 @@
|
||||
{
|
||||
"minecraft": {
|
||||
"version": "1.16.5",
|
||||
"modLoaders": [
|
||||
{
|
||||
"id": "forge-36.2.34",
|
||||
"primary": true
|
||||
}
|
||||
]
|
||||
},
|
||||
"manifestType": "minecraftModpack",
|
||||
"overrides": "overrides",
|
||||
"manifestVersion": 1,
|
||||
"version": "0.1.0",
|
||||
"author": "Liightninggod",
|
||||
"name": "FishPog Pixelmon",
|
||||
"files": [
|
||||
{
|
||||
"projectID": 32274,
|
||||
"fileID": 4012858,
|
||||
"required": true,
|
||||
"__meta": {
|
||||
"name": "JourneyMap"
|
||||
}
|
||||
},
|
||||
{
|
||||
"projectID": 223852,
|
||||
"fileID": 3776277,
|
||||
"required": true,
|
||||
"__meta": {
|
||||
"name": "Storage Drawers"
|
||||
}
|
||||
},
|
||||
{
|
||||
"projectID": 233342,
|
||||
"fileID": 3216206,
|
||||
"required": true,
|
||||
"__meta": {
|
||||
"name": "Fairy Lights"
|
||||
}
|
||||
},
|
||||
{
|
||||
"projectID": 235279,
|
||||
"fileID": 3376782,
|
||||
"required": true,
|
||||
"__meta": {
|
||||
"name": "Chisel",
|
||||
"dependencies": [
|
||||
267602
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"projectID": 237307,
|
||||
"fileID": 3738137,
|
||||
"required": true,
|
||||
"__meta": {
|
||||
"name": "Cosmetic Armor Reworked"
|
||||
}
|
||||
},
|
||||
{
|
||||
"projectID": 238222,
|
||||
"fileID": 4371666,
|
||||
"required": true,
|
||||
"__meta": {
|
||||
"name": "Just Enough Items (JEI)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"projectID": 247560,
|
||||
"fileID": 4024011,
|
||||
"required": true,
|
||||
"__meta": {
|
||||
"name": "Oh The Biomes You'll Go"
|
||||
}
|
||||
},
|
||||
{
|
||||
"projectID": 252848,
|
||||
"fileID": 3382150,
|
||||
"required": true,
|
||||
"__meta": {
|
||||
"name": "Nature's Compass"
|
||||
}
|
||||
},
|
||||
{
|
||||
"projectID": 267602,
|
||||
"fileID": 3137659,
|
||||
"required": true,
|
||||
"__meta": {
|
||||
"name": "ConnectedTexturesMod"
|
||||
}
|
||||
},
|
||||
{
|
||||
"projectID": 268495,
|
||||
"fileID": 3863227,
|
||||
"required": true,
|
||||
"__meta": {
|
||||
"name": "Simple Storage Network"
|
||||
}
|
||||
},
|
||||
{
|
||||
"projectID": 328085,
|
||||
"fileID": 3536025,
|
||||
"required": true,
|
||||
"__meta": {
|
||||
"name": "Create",
|
||||
"dependencies": [
|
||||
486392
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"projectID": 361385,
|
||||
"fileID": 3276350,
|
||||
"required": true,
|
||||
"__meta": {
|
||||
"name": "Pam's HarvestCraft 2 - Crops"
|
||||
}
|
||||
},
|
||||
{
|
||||
"projectID": 365460,
|
||||
"fileID": 3281234,
|
||||
"required": true,
|
||||
"__meta": {
|
||||
"name": "Pam's HarvestCraft 2 - Trees"
|
||||
}
|
||||
},
|
||||
{
|
||||
"projectID": 372534,
|
||||
"fileID": 3190867,
|
||||
"required": true,
|
||||
"__meta": {
|
||||
"name": "Pam's HarvestCraft 2 - Food Core"
|
||||
}
|
||||
},
|
||||
{
|
||||
"projectID": 389487,
|
||||
"fileID": 4564388,
|
||||
"required": true,
|
||||
"__meta": {
|
||||
"name": "Pixelmon"
|
||||
}
|
||||
},
|
||||
{
|
||||
"projectID": 402231,
|
||||
"fileID": 3418627,
|
||||
"required": true,
|
||||
"__meta": {
|
||||
"name": "Pam's HarvestCraft 2 - Food Extended",
|
||||
"dependencies": [
|
||||
372534
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"projectID": 486392,
|
||||
"fileID": 3535459,
|
||||
"required": true,
|
||||
"__meta": {
|
||||
"name": "Flywheel"
|
||||
}
|
||||
},
|
||||
{
|
||||
"projectID": 509285,
|
||||
"fileID": 3503936,
|
||||
"required": true,
|
||||
"__meta": {
|
||||
"name": "Create Deco",
|
||||
"dependencies": [
|
||||
328085
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"projectID": 535563,
|
||||
"fileID": 3882536,
|
||||
"required": true,
|
||||
"__meta": {
|
||||
"name": "Create gear addon",
|
||||
"dependencies": [
|
||||
328085
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"projectID": 818696,
|
||||
"fileID": 4369234,
|
||||
"required": true,
|
||||
"__meta": {
|
||||
"name": "PokeFactory Compatibility"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
0
modpack/overrides/.gitkeep
Normal file
0
modpack/overrides/.gitkeep
Normal file
6
pyproject.toml
Normal file
6
pyproject.toml
Normal file
@@ -0,0 +1,6 @@
|
||||
[tool.isort]
|
||||
profile = "black"
|
||||
|
||||
[tool.black]
|
||||
line-length = 119
|
||||
target-version = ['py311']
|
||||
5
requirements.txt
Normal file
5
requirements.txt
Normal file
@@ -0,0 +1,5 @@
|
||||
certifi==2023.5.7
|
||||
charset-normalizer==3.1.0
|
||||
idna==3.4
|
||||
requests==2.31.0
|
||||
urllib3==2.0.3
|
||||
95
tooling.py
Normal file
95
tooling.py
Normal file
@@ -0,0 +1,95 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
import os, sys, argparse, tempfile, subprocess, shutil, requests
|
||||
|
||||
parser = argparse.ArgumentParser(description="a helper script for liightninggod modpacks")
|
||||
|
||||
parser.add_argument("--export", "-e", help="export modpack zip", action="store_true")
|
||||
parser.add_argument("--setup", "-s", help="setup project and install dependencies", action="store_true")
|
||||
parser.add_argument("--force", "-f", help="forces things when needed, like redoing setup", action="store_true")
|
||||
parser.add_argument("--build-pax", help="builds pax from source, even if on a supported platform", action="store_true")
|
||||
args = parser.parse_args()
|
||||
|
||||
WORKING_DIR = os.getcwd()
|
||||
|
||||
PAX_GITHUB = "https://github.com/froehlichA/pax"
|
||||
PAX_LATEST_RELEASE = f"{PAX_GITHUB}/releases/latest/download"
|
||||
PAX_LINUX = f"{PAX_LATEST_RELEASE}/pax"
|
||||
PAX_WINDOWS = f"{PAX_LATEST_RELEASE}/pax-windows.zip"
|
||||
|
||||
|
||||
OS = sys.platform
|
||||
|
||||
|
||||
def __main__():
|
||||
if args.setup:
|
||||
print("setting up pack")
|
||||
setup_pack()
|
||||
return
|
||||
elif args.export:
|
||||
print("exporting modpack")
|
||||
return
|
||||
|
||||
print(
|
||||
"no command provided. pass the -h flag to see commands for pack, or run ./pax to interact with the modpack's files"
|
||||
)
|
||||
|
||||
|
||||
def setup_pack():
|
||||
pax()
|
||||
|
||||
|
||||
# pax
|
||||
def pax():
|
||||
if os.path.isfile(os.path.join(WORKING_DIR, "pax")) and not args.force:
|
||||
print("pax is already installed")
|
||||
return
|
||||
|
||||
if OS == "darwin" or args.build_pax:
|
||||
print("building pax from source...")
|
||||
pax_from_source()
|
||||
print("pax built successfully")
|
||||
return
|
||||
|
||||
if OS == "linux":
|
||||
print("downloading pax binary for linux...")
|
||||
r = requests.get(PAX_LINUX, allow_redirects=True)
|
||||
open("pax", "wb").write(r.content)
|
||||
os.chmod("pax", 0o755)
|
||||
return
|
||||
|
||||
if OS == "windows":
|
||||
print("downloading and extracting pax for windows...")
|
||||
r = requests.get(PAX_WINDOWS, allow_redirects=True)
|
||||
open("pax-windows.zip", "wb").write(r.content)
|
||||
shutil.unpack_archive("pax-windows.zip", ".")
|
||||
os.remove("pax-windows.zip")
|
||||
return
|
||||
|
||||
|
||||
def pax_from_source():
|
||||
if OS == "windows":
|
||||
print("building from source not supported on windows yet")
|
||||
os._exit(1)
|
||||
|
||||
if not command_exists("nimble"):
|
||||
print("nim is not installed - make sure it is installed for your platform")
|
||||
os._exit(1)
|
||||
|
||||
TMP = tempfile.mkdtemp()
|
||||
os.chdir(TMP)
|
||||
|
||||
subprocess.run(["git", "clone", PAX_GITHUB], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
|
||||
os.chdir("pax")
|
||||
|
||||
subprocess.run(["nimble", "build", "-d:release"], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
|
||||
subprocess.run(["cp", "./pax", WORKING_DIR])
|
||||
|
||||
|
||||
# helper functions
|
||||
def command_exists(binary_name):
|
||||
return shutil.which(binary_name) is not None
|
||||
|
||||
|
||||
# entry
|
||||
__main__()
|
||||
18
venv.ps1
Normal file
18
venv.ps1
Normal file
@@ -0,0 +1,18 @@
|
||||
# Check for python3 or python
|
||||
if (Get-Command "python3") {
|
||||
$python = "python3"
|
||||
} else {
|
||||
$python = "python"
|
||||
}
|
||||
|
||||
# Check if .venv directory exists
|
||||
if (-Not (Test-Path "./.venv")) {
|
||||
& $python -m venv .venv
|
||||
}
|
||||
|
||||
# Activate the virtual environment
|
||||
. ./.venv/bin/Activate.ps1
|
||||
|
||||
# Install required packages
|
||||
& $python -m pip install --upgrade pip
|
||||
& $python -m pip install -r requirements.txt
|
||||
15
venv.sh
Executable file
15
venv.sh
Executable file
@@ -0,0 +1,15 @@
|
||||
#!/bin/bash
|
||||
|
||||
if command -v python3 &> /dev/null; then
|
||||
python="python3"
|
||||
else
|
||||
python="python"
|
||||
fi
|
||||
|
||||
if [ -d .venv ]; then exit 0; fi
|
||||
|
||||
$python -m venv .venv
|
||||
source .venv/bin/activate
|
||||
|
||||
$python -m pip install --upgrade pip
|
||||
$python -m pip install -r requirements.txt
|
||||
Reference in New Issue
Block a user