Add Reaper's Sky dedicated server deploy files
- server/mods.json: 59 server-safe mods pinned by sha1 (19 client-only excluded) - server/deploy.sh: idempotent Debian 13 installer (Java 21, NeoForge 21.1.248, mods, eula/server.properties, 8G run.sh) - server/build_mods.py: regenerate mods.json from the Prism instance - server/README.md: setup + ops guide
This commit is contained in:
@@ -0,0 +1,62 @@
|
||||
# Reaper's Sky - Dedicated Server
|
||||
|
||||
Everything needed to run the Reaper's Sky NeoForge **1.21.1** server (NeoForge
|
||||
**21.1.248**) on Debian 13 (trixie).
|
||||
|
||||
## Quick start (on the server box)
|
||||
|
||||
```sh
|
||||
sudo ./deploy.sh # installs Java 21 + curl/unzip, NeoForge, the 59 mods, config
|
||||
./run.sh # start the server (run inside tmux/screen so it survives logout)
|
||||
```
|
||||
|
||||
The first `./run.sh` generates the world. Wait for `Done (...)` in the console,
|
||||
then connect with IP **`reaperofveriod.nl`** (port 25565).
|
||||
|
||||
`deploy.sh` is idempotent — safe to re-run; it skips anything already in place
|
||||
and verifies every mod by sha1 before installing.
|
||||
|
||||
## What deploy.sh does
|
||||
|
||||
| Step | Result |
|
||||
|------|--------|
|
||||
| System packages | `openjdk-21-jre-headless`, `curl`, `unzip` (needs root/`sudo`) |
|
||||
| NeoForge server | Official installer from Maven → server files + `libraries/` |
|
||||
| Mods | Downloads the 59 server-safe mods pinned in `mods.json`, sha1-verified |
|
||||
| Config | `eula.txt` (EULA accepted), `server.properties` (IP, motd, 8 G) |
|
||||
| Run script | `run.sh` with 8 GB + G1GC (`nogui`) |
|
||||
|
||||
Install location defaults to `~/reaper-sky-server`. Override with `DIR=/path`,
|
||||
memory with `MEMORY=6G`, etc.:
|
||||
|
||||
```sh
|
||||
sudo DIR=/srv/minecraft MEMORY=10G ./deploy.sh
|
||||
```
|
||||
|
||||
## Keeping it running
|
||||
|
||||
```sh
|
||||
tmux new -s mc # new session
|
||||
cd ~/reaper-sky-server && ./run.sh
|
||||
# detach with Ctrl-b d, reattach later with: tmux attach -t mc
|
||||
```
|
||||
|
||||
Stop the server cleanly with the console command `stop` (Ctrl-c also works).
|
||||
|
||||
## Configuration notes
|
||||
|
||||
- `server.properties` sets `online-mode=true` (Mojang authentication). Set it to
|
||||
`false` in `~/reaper-sky-server/server.properties` to allow unauthenticated
|
||||
clients, then restart.
|
||||
- `difficulty=hard`, `spawn-protection=0`, `view-distance=10` are set for the
|
||||
airship-focused, land-claim-friendly experience.
|
||||
- The 19 client-only mods (Iris/shaders, Sodium, Minimap, Jade, JEI, etc.) are
|
||||
intentionally excluded here — the server is pure gameplay logic.
|
||||
|
||||
## Updating the pack
|
||||
|
||||
1. Add/remove mods in the Prism instance `Reaper's Sky - dev`.
|
||||
2. Rebuild + push the mrpack (see repo root `README.md`).
|
||||
3. Re-run `server/build_mods.py` or regenerate `mods.json`, commit, push.
|
||||
4. On the server: `git pull && sudo ./deploy.sh && ./run.sh`
|
||||
(also remove any stale jars from `~/reaper-sky-server/mods/` first).
|
||||
@@ -0,0 +1,92 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Regenerate server/mods.json from the Prism instance's mods directory.
|
||||
|
||||
For every .jar in the pack instance it:
|
||||
- computes sha1
|
||||
- looks up the Modrinth download URL via the version_file API
|
||||
(aero-shadow-fix is CurseForge-only, pinned manually)
|
||||
- drops the 19 client-only mods
|
||||
and writes the server manifest to mods.json.
|
||||
|
||||
Usage: python3 build_mods.py
|
||||
"""
|
||||
import hashlib, json, os, subprocess, sys, time
|
||||
|
||||
INSTANCE = os.path.expanduser(
|
||||
"~/.local/share/PrismLauncher/instances/Reaper's Sky - dev/.minecraft/mods")
|
||||
OUT = os.path.join(os.path.dirname(os.path.abspath(__file__)), "mods.json")
|
||||
MC_VERSION = "1.21.1"
|
||||
NEOFORGE_VERSION = "21.1.248"
|
||||
|
||||
CLIENT_ONLY = {
|
||||
"iris-neoforge-1.8.14-beta.1+mc1.21.1.jar",
|
||||
"EuphoriaPatcher-1.9.3-r5.8.1-neoforge.jar",
|
||||
"iris-flywheel-compat-NeoForge-2.3.1.jar",
|
||||
"sodium-neoforge-0.8.12+mc1.21.1.jar",
|
||||
"ImmediatelyFast-NeoForge-1.6.12+1.21.1.jar",
|
||||
"entityculling-neoforge-1.10.5-mc1.21.1.jar",
|
||||
"dynamic-fps-3.11.4+mc1.21.0-neoforge.jar",
|
||||
"MouseTweaks-neoforge-mc1.21-2.26.1.jar",
|
||||
"appleskin-neoforge-mc1.21-3.0.9.jar",
|
||||
"Controlling-neoforge-1.21.1-19.0.5.jar",
|
||||
"Searchables-neoforge-1.21.1-1.0.2.jar",
|
||||
"skinlayers3d-neoforge-1.11.2-mc1.21.1.jar",
|
||||
"xaerominimap-neoforge-1.21.1-26.4.2.jar",
|
||||
"xaeroworldmap-neoforge-1.21.1-1.44.2.jar",
|
||||
"Jade-1.21.1-NeoForge-15.10.6.jar",
|
||||
"jade-sable-compat-1.3.0.jar",
|
||||
"aero-shadow-fix.jar",
|
||||
"aeronautics-propeller-blur-1.0a.jar",
|
||||
"jei-1.21.1-neoforge-19.44.0.403.jar",
|
||||
}
|
||||
|
||||
CURSEFORGE_ONLY = {
|
||||
"aero-shadow-fix.jar": "https://www.curseforge.com/api/v1/mods/1641969/files/8589529/download",
|
||||
}
|
||||
|
||||
UA = "opencode-pack-builder/1.0"
|
||||
|
||||
|
||||
def sha1(path):
|
||||
h = hashlib.sha1()
|
||||
with open(path, "rb") as f:
|
||||
for chunk in iter(lambda: f.read(65536), b""):
|
||||
h.update(chunk)
|
||||
return h.hexdigest()
|
||||
|
||||
|
||||
def resolve(jar, digest):
|
||||
if jar in CURSEFORGE_ONLY:
|
||||
return CURSEFORGE_ONLY[jar]
|
||||
r = subprocess.run(
|
||||
["curl", "-s", "--max-time", "20", "-H", f"User-Agent: {UA}",
|
||||
f"https://api.modrinth.com/v2/version_file/{digest}?algorithm=sha1"],
|
||||
capture_output=True, text=True)
|
||||
try:
|
||||
return json.loads(r.stdout)["files"][0]["url"]
|
||||
except Exception:
|
||||
return ""
|
||||
|
||||
|
||||
def main():
|
||||
mods = []
|
||||
for jar in sorted(os.listdir(INSTANCE)):
|
||||
if not jar.endswith(".jar"):
|
||||
continue
|
||||
if jar in CLIENT_ONLY:
|
||||
print(f" skip (client-only): {jar}")
|
||||
continue
|
||||
digest = sha1(os.path.join(INSTANCE, jar))
|
||||
url = resolve(jar, digest)
|
||||
if not url:
|
||||
print(f" !! no URL for {jar} -- fix manually", file=sys.stderr)
|
||||
mods.append({"file": jar, "url": url, "sha1": digest})
|
||||
time.sleep(0.1)
|
||||
manifest = {"minecraft": MC_VERSION, "neoforge": NEOFORGE_VERSION, "mods": mods}
|
||||
with open(OUT, "w") as f:
|
||||
json.dump(manifest, f, indent=2)
|
||||
print(f"Wrote {len(mods)} server mods to {OUT}")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Executable
+147
@@ -0,0 +1,147 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# Reaper's Sky - dedicated server deploy script (Debian 13 / trixie)
|
||||
#
|
||||
# Installs everything needed to run the Reaper's Sky NeoForge 21.1.248 server:
|
||||
# - OpenJDK 21 (JRE, headless) + curl/unzip
|
||||
# - NeoForge 21.1.248 server via its official installer
|
||||
# - the 59 server-safe mods (pinned in mods.json, verified by sha1)
|
||||
# - eula.txt + server.properties (IP reaperofveriod.nl)
|
||||
# - run.sh (8 GB, G1GC)
|
||||
#
|
||||
# Usage: sudo ./deploy.sh (installs packages, needs root/sudo)
|
||||
# ./deploy.sh (idempotent; safe to re-run)
|
||||
#
|
||||
# Defaults:
|
||||
# DIR = "$HOME/reaper-sky-server"
|
||||
# MEMORY = 8G
|
||||
set -euo pipefail
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
NEOFORGE_VERSION="21.1.248"
|
||||
MC_VERSION="1.21.1"
|
||||
INSTALLER_URL="https://maven.neoforged.net/releases/net/neoforged/neoforge/${NEOFORGE_VERSION}/neoforge-${NEOFORGE_VERSION}-installer.jar"
|
||||
|
||||
# --- config (override via env if you want) ------------------------------------
|
||||
SERVER_DIR="${DIR:-$HOME/reaper-sky-server}"
|
||||
MEMORY="${MEMORY:-8G}"
|
||||
SERVER_IP="${SERVER_IP:-reaperofveriod.nl}"
|
||||
DEFAULT_MOTD="Reaper's Sky"
|
||||
MOTD="${MOTD:-$DEFAULT_MOTD}"
|
||||
MAX_PLAYERS="${MAX_PLAYERS:-10}"
|
||||
|
||||
log() { printf '\033[1;34m[deploy]\033[0m %s\n' "$*"; }
|
||||
die() { printf '\033[1;31m[deploy] ERROR:\033[0m %s\n' "$*" >&2; exit 1; }
|
||||
|
||||
# --- 1. system packages (Debian 13 ships OpenJDK 21) --------------------------
|
||||
install_packages() {
|
||||
if [ "$(id -u)" -ne 0 ]; then
|
||||
if command -v sudo >/dev/null 2>&1; then SUDO="sudo"; else SUDO=""; fi
|
||||
else
|
||||
SUDO=""
|
||||
fi
|
||||
if command -v java >/dev/null 2>&1; then
|
||||
log "Java already present: $(java -version 2>&1 | head -1)"
|
||||
else
|
||||
log "Installing openjdk-21-jre-headless, curl, unzip (apt)..."
|
||||
${SUDO:+sudo} apt-get update -qq
|
||||
${SUDO:+sudo} apt-get install -y -qq openjdk-21-jre-headless curl unzip
|
||||
fi
|
||||
java -version >/dev/null 2>&1 || die "Java 21 not available after install"
|
||||
}
|
||||
|
||||
# --- 2. NeoForge server --------------------------------------------------------
|
||||
install_neoforge() {
|
||||
mkdir -p "$SERVER_DIR"
|
||||
cd "$SERVER_DIR"
|
||||
if [ -f "run.sh" ] && [ -d "libraries/net/neoforged/neoforge/$NEOFORGE_VERSION" ]; then
|
||||
log "NeoForge $NEOFORGE_VERSION already installed."
|
||||
return
|
||||
fi
|
||||
log "Downloading NeoForge $NEOFORGE_VERSION installer..."
|
||||
curl -fL --retry 3 -o "neoforge-${NEOFORGE_VERSION}-installer.jar" "$INSTALLER_URL"
|
||||
log "Running installer --installServer ..."
|
||||
java -jar "neoforge-${NEOFORGE_VERSION}-installer.jar" --installServer
|
||||
rm -f "neoforge-${NEOFORGE_VERSION}-installer.jar"
|
||||
chmod +x run.sh
|
||||
}
|
||||
|
||||
# --- 3. server mods (verified by sha1) -----------------------------------------
|
||||
install_mods() {
|
||||
[ -f "$SCRIPT_DIR/mods.json" ] || die "mods.json not found next to deploy.sh"
|
||||
mkdir -p "$SERVER_DIR/mods"
|
||||
cd "$SERVER_DIR/mods"
|
||||
python3 - "$SCRIPT_DIR/mods.json" <<'PY'
|
||||
import json, sys, hashlib, subprocess, os
|
||||
manifest = json.load(open(sys.argv[1]))
|
||||
for m in manifest["mods"]:
|
||||
fname, url, want = m["file"], m["url"], m["sha1"]
|
||||
tmp = fname + ".part"
|
||||
if os.path.exists(fname):
|
||||
h = hashlib.sha1()
|
||||
with open(fname, "rb") as fh:
|
||||
for b in iter(lambda: fh.read(65536), b""):
|
||||
h.update(b)
|
||||
if h.hexdigest() == want:
|
||||
continue # already present & correct
|
||||
subprocess.run(["curl", "-fL", "--retry", "3", "-o", tmp, url], check=True)
|
||||
h = hashlib.sha1()
|
||||
with open(tmp, "rb") as fh:
|
||||
for b in iter(lambda: fh.read(65536), b""):
|
||||
h.update(b)
|
||||
if h.hexdigest() != want:
|
||||
os.unlink(tmp)
|
||||
raise SystemExit(f"sha1 mismatch for {fname}")
|
||||
os.rename(tmp, fname)
|
||||
print(f" + {fname}")
|
||||
PY
|
||||
log "Mods ready: $(ls -1 "$SERVER_DIR/mods"/*.jar | wc -l) jars installed."
|
||||
}
|
||||
|
||||
# --- 4. eula + server.properties -----------------------------------------------
|
||||
write_config() {
|
||||
cd "$SERVER_DIR"
|
||||
if [ ! -f eula.txt ]; then
|
||||
printf 'eula=true\n' > eula.txt
|
||||
log "Accepted Minecraft EULA (eula.txt)."
|
||||
fi
|
||||
cat > server.properties <<EOF
|
||||
# Generated by Reaper's Sky deploy.sh
|
||||
server-ip=$SERVER_IP
|
||||
server-port=25565
|
||||
motd=$MOTD
|
||||
max-players=$MAX_PLAYERS
|
||||
online-mode=true
|
||||
difficulty=hard
|
||||
level-type=default
|
||||
allow-nether=true
|
||||
spawn-protection=0
|
||||
view-distance=10
|
||||
simulation-distance=10
|
||||
EOF
|
||||
log "Wrote server.properties (IP=$SERVER_IP, max=$MAX_PLAYERS)."
|
||||
}
|
||||
|
||||
# --- 5. run script ---------------------------------------------------------------
|
||||
write_run() {
|
||||
cat > "$SERVER_DIR/run.sh" <<'EOF'
|
||||
#!/usr/bin/env bash
|
||||
cd "$(dirname "$(readlink -f "$0")")"
|
||||
exec java -XmsMEMORY -XmxMEMORY -XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200 \
|
||||
@libraries/net/neoforged/neoforge/NEOFORGE_VERSION/unix_args.txt nogui
|
||||
EOF
|
||||
sed -i "s/MEMORY/$MEMORY/g; s/NEOFORGE_VERSION/$NEOFORGE_VERSION/g" "$SERVER_DIR/run.sh"
|
||||
chmod +x "$SERVER_DIR/run.sh"
|
||||
log "Wrote run.sh ($MEMORY RAM). Start with: cd $SERVER_DIR && ./run.sh"
|
||||
}
|
||||
|
||||
install_packages
|
||||
install_neoforge
|
||||
install_mods
|
||||
write_config
|
||||
write_run
|
||||
|
||||
log "Done. Reaper's Sky server is at: $SERVER_DIR"
|
||||
log "First boot generates the world. Run it with: cd $SERVER_DIR && ./run.sh"
|
||||
log "Console: run inside tmux/screen so it keeps running when you disconnect."
|
||||
log "To stop later: use the server console command stop"
|
||||
@@ -0,0 +1,301 @@
|
||||
{
|
||||
"minecraft": "1.21.1",
|
||||
"neoforge": "21.1.248",
|
||||
"mods": [
|
||||
{
|
||||
"file": "Apotheosis-1.21.1-8.7.0.jar",
|
||||
"url": "https://cdn.modrinth.com/data/rqFWfVlz/versions/wB4eASdJ/Apotheosis-1.21.1-8.7.0.jar",
|
||||
"sha1": "5537a71726a0f6a4c74257f26eeeea060a7327c4"
|
||||
},
|
||||
{
|
||||
"file": "ApothicAttributes-1.21.1-2.10.1.jar",
|
||||
"url": "https://cdn.modrinth.com/data/DGaH8Rh0/versions/Xtaunf84/ApothicAttributes-1.21.1-2.10.1.jar",
|
||||
"sha1": "cdcf0c7a6398913efa76b5b4e41e4fb67033156e"
|
||||
},
|
||||
{
|
||||
"file": "ApothicEnchanting-1.21.1-1.6.1.jar",
|
||||
"url": "https://cdn.modrinth.com/data/pL8MtgqY/versions/56c0M28v/ApothicEnchanting-1.21.1-1.6.1.jar",
|
||||
"sha1": "1644e9da873f36cf9875e4ad351ef458756c347e"
|
||||
},
|
||||
{
|
||||
"file": "ApothicSpawners-1.21.1-1.4.0.jar",
|
||||
"url": "https://cdn.modrinth.com/data/DfxVkOAO/versions/pWfxcfO2/ApothicSpawners-1.21.1-1.4.0.jar",
|
||||
"sha1": "b3be29751daea738e691db8949cce079e5aae3be"
|
||||
},
|
||||
{
|
||||
"file": "Clumps-neoforge-1.21.1-19.0.0.1.jar",
|
||||
"url": "https://cdn.modrinth.com/data/Wnxd13zP/versions/jo7lDoK4/Clumps-neoforge-1.21.1-19.0.0.1.jar",
|
||||
"sha1": "fa2576297c7bd12b28aa7070e8141792bd66da4c"
|
||||
},
|
||||
{
|
||||
"file": "Design-n-Decor-1.21.1-2.2b.jar",
|
||||
"url": "https://cdn.modrinth.com/data/x49wilh8/versions/uQsIRky8/Design-n-Decor-1.21.1-2.2b.jar",
|
||||
"sha1": "ff5f0411a3d82e15d69b65617128f6d54e818e1b"
|
||||
},
|
||||
{
|
||||
"file": "ExplorersCompass-1.21.1-3.4.0-neoforge.jar",
|
||||
"url": "https://cdn.modrinth.com/data/RV1qfVQ8/versions/hIJ2Ev1Q/ExplorersCompass-1.21.1-3.4.0-neoforge.jar",
|
||||
"sha1": "9f62af344988a6e2d855b113e61cf0e1611c7e0f"
|
||||
},
|
||||
{
|
||||
"file": "FarmersDelight-1.21.1-1.3.3.jar",
|
||||
"url": "https://cdn.modrinth.com/data/R2OftAxM/versions/wpkbWnVh/FarmersDelight-1.21.1-1.3.3.jar",
|
||||
"sha1": "55ea87dec84a632690a748857db08a35941980b6"
|
||||
},
|
||||
{
|
||||
"file": "GlitchCore-neoforge-1.21.1-2.1.0.2.jar",
|
||||
"url": "https://cdn.modrinth.com/data/s3dmwKy5/versions/S2TfWrZR/GlitchCore-neoforge-1.21.1-2.1.0.2.jar",
|
||||
"sha1": "e3d4bb80a06f619be989ab529d0cd4e33e076943"
|
||||
},
|
||||
{
|
||||
"file": "NaturesCompass-1.21.1-3.4.0-neoforge.jar",
|
||||
"url": "https://cdn.modrinth.com/data/fPetb5Kh/versions/nFniEtJV/NaturesCompass-1.21.1-3.4.0-neoforge.jar",
|
||||
"sha1": "e19721873bebc4dbc1674bb101af39d0ea406b95"
|
||||
},
|
||||
{
|
||||
"file": "Patchouli-1.21.1-93-NEOFORGE.jar",
|
||||
"url": "https://cdn.modrinth.com/data/nU0bVIaL/versions/BIogJv2D/Patchouli-1.21.1-93-NEOFORGE.jar",
|
||||
"sha1": "5413bb9b8fc35ebe46b06b48bf9afafbd8471140"
|
||||
},
|
||||
{
|
||||
"file": "Placebo-1.21.1-9.9.2.jar",
|
||||
"url": "https://cdn.modrinth.com/data/tCkE8p2N/versions/1Ypo4tf4/Placebo-1.21.1-9.9.2.jar",
|
||||
"sha1": "d44335094cf2db64998cb3ee31e58d8c01e80b4a"
|
||||
},
|
||||
{
|
||||
"file": "Terralith_1.21.1_v2.6.2_Neoforge.jar",
|
||||
"url": "https://cdn.modrinth.com/data/8oi3bsk5/versions/IY93YaEe/Terralith_1.21.1_v2.6.2_Neoforge.jar",
|
||||
"sha1": "d4a9fe71b841f70edfb4b280f9bf5c58e4a28224"
|
||||
},
|
||||
{
|
||||
"file": "ToughAsNails-neoforge-1.21.1-10.1.0.13.jar",
|
||||
"url": "https://cdn.modrinth.com/data/ge1sOdFH/versions/mboAbksk/ToughAsNails-neoforge-1.21.1-10.1.0.13.jar",
|
||||
"sha1": "38046bbfcd35cb1eb2bd17d9a9c3428b9750a82a"
|
||||
},
|
||||
{
|
||||
"file": "WeightedInventory-1.21.1-2.2.0.jar",
|
||||
"url": "https://cdn.modrinth.com/data/4hc3F83g/versions/qR45xqMV/WeightedInventory-1.21.1-2.2.0.jar",
|
||||
"sha1": "8d4c5b5191b0ebf980a81b882a47435cbb6eae31"
|
||||
},
|
||||
{
|
||||
"file": "YungsApi-1.21.1-NeoForge-5.1.7.jar",
|
||||
"url": "https://cdn.modrinth.com/data/Ua7DFN59/versions/8Zmd0JGx/YungsApi-1.21.1-NeoForge-5.1.7.jar",
|
||||
"sha1": "1c2e7b0d294690f9ed5e6627ba28182605543654"
|
||||
},
|
||||
{
|
||||
"file": "YungsBetterDesertTemples-1.21.1-NeoForge-4.1.5.jar",
|
||||
"url": "https://cdn.modrinth.com/data/XNlO7sBv/versions/GQ9iNWkI/YungsBetterDesertTemples-1.21.1-NeoForge-4.1.5.jar",
|
||||
"sha1": "90529257dbd92558998c65178294bc7b2fd16a64"
|
||||
},
|
||||
{
|
||||
"file": "YungsBetterDungeons-1.21.1-NeoForge-5.1.4.jar",
|
||||
"url": "https://cdn.modrinth.com/data/o1C1Dkj5/versions/D6aZn0Em/YungsBetterDungeons-1.21.1-NeoForge-5.1.4.jar",
|
||||
"sha1": "73a660c13063450e555e5e2c015ae24d606b32b4"
|
||||
},
|
||||
{
|
||||
"file": "YungsBetterStrongholds-1.21.1-NeoForge-5.1.3.jar",
|
||||
"url": "https://cdn.modrinth.com/data/kidLKymU/versions/8U0dIfSM/YungsBetterStrongholds-1.21.1-NeoForge-5.1.3.jar",
|
||||
"sha1": "5d06a5850af7c577612d4592706a8e156bbe1cbf"
|
||||
},
|
||||
{
|
||||
"file": "aeronautics-covers-1.0.1.jar",
|
||||
"url": "https://cdn.modrinth.com/data/eWrKPy9E/versions/R35biaZf/aeronauticscovers-1.21.1-NeoForge-1.0.1.jar",
|
||||
"sha1": "c4404a98d85c75e5e80ace462c3ed1bdf0b1c93e"
|
||||
},
|
||||
{
|
||||
"file": "aeronautics-dyeable-components-1.0.4.jar",
|
||||
"url": "https://cdn.modrinth.com/data/LBYQlFkX/versions/kOW3VwPl/dyeable-components-1.0.4%2Bmc1.21.1.jar",
|
||||
"sha1": "caf60f71d89a3068cd07283f45bffc31704a7474"
|
||||
},
|
||||
{
|
||||
"file": "aeronautics-gadgets-and-gizmos-1.1.3.jar",
|
||||
"url": "https://cdn.modrinth.com/data/Sza3GgEL/versions/vQlkDgnK/createthrusters-bundled-V1.1.3.jar",
|
||||
"sha1": "d29df5e23a6aee1171b08b424d73c02d6fc3dd6e"
|
||||
},
|
||||
{
|
||||
"file": "aeronautics-portable-engine-liquid-fuel-2.0.0.jar",
|
||||
"url": "https://cdn.modrinth.com/data/HLbPoouI/versions/L6KPVFxI/portable_engine_liquid_fuel-2.0.0-neoforge-1.21.1.jar",
|
||||
"sha1": "f9602c7f9a8268507a835bfa47db1512d356dae7"
|
||||
},
|
||||
{
|
||||
"file": "aeroworks-1.4.2.jar",
|
||||
"url": "https://cdn.modrinth.com/data/P26k79kP/versions/tQ0dgIjI/aeroworks-1.4.2.jar",
|
||||
"sha1": "3aad876e7a97236925da6ec61c8f176394e61a99"
|
||||
},
|
||||
{
|
||||
"file": "ars_nouveau-1.21.1-5.13.0.jar",
|
||||
"url": "https://cdn.modrinth.com/data/TKB6INcv/versions/ugLa4qlw/ars_nouveau-1.21.1-5.13.0.jar",
|
||||
"sha1": "b8d71856fd76d89573e6976f2461ea7385a3fff7"
|
||||
},
|
||||
{
|
||||
"file": "balm-neoforge-1.21.1-21.0.65.jar",
|
||||
"url": "https://cdn.modrinth.com/data/MBAkmtvl/versions/KgypwTqX/balm-neoforge-1.21.1-21.0.65.jar",
|
||||
"sha1": "69e0b3b69dd23c132e85b7e82310f45ae96b263d"
|
||||
},
|
||||
{
|
||||
"file": "cable_facades-1.21.1-NeoForge-2.1.3.jar",
|
||||
"url": "https://cdn.modrinth.com/data/twipgzWx/versions/fhYja6UD/cable_facades-1.21.1-NeoForge-2.1.3.jar",
|
||||
"sha1": "52d5edbf92af50ab258565b51836c7e4ba9dc6e9"
|
||||
},
|
||||
{
|
||||
"file": "carryon-neoforge-1.21.1-2.2.6.13.jar",
|
||||
"url": "https://cdn.modrinth.com/data/joEfVgkn/versions/PV8oLZ1q/carryon-neoforge-1.21.1-2.2.6.13.jar",
|
||||
"sha1": "2ceb0d9284525b6cb2a214c88cf6511cab91f601"
|
||||
},
|
||||
{
|
||||
"file": "copycats-3.0.6+mc.1.21.1-neoforge.jar",
|
||||
"url": "https://cdn.modrinth.com/data/UT2M39wf/versions/DVQFhrV3/copycats-3.0.6%2Bmc.1.21.1-neoforge.jar",
|
||||
"sha1": "0e683c5d3db4942899453fd93054ac0a926c7ef8"
|
||||
},
|
||||
{
|
||||
"file": "corpse-neoforge-1.21.1-1.1.13.jar",
|
||||
"url": "https://cdn.modrinth.com/data/WrpuIfhw/versions/Zwf8nv8y/corpse-neoforge-1.21.1-1.1.13.jar",
|
||||
"sha1": "a735362c4e5ef705956f1fcbac01fb9f1aae5b8e"
|
||||
},
|
||||
{
|
||||
"file": "create-1.21.1-6.0.10.jar",
|
||||
"url": "https://cdn.modrinth.com/data/LNytGWDc/versions/UjX6dr61/create-1.21.1-6.0.10.jar",
|
||||
"sha1": "0e97e49837bed766e6f28a4c95b04885d6acc353"
|
||||
},
|
||||
{
|
||||
"file": "create-aeronautics-bundled-1.21.1-1.3.1.jar",
|
||||
"url": "https://cdn.modrinth.com/data/oWaK0Q19/versions/Vzp221Un/create-aeronautics-bundled-1.21.1-1.3.1.jar",
|
||||
"sha1": "15d273d891578d583aa142354b63ed70f87fee62"
|
||||
},
|
||||
{
|
||||
"file": "create-confectionery1.21.1_v1.1.3b.jar",
|
||||
"url": "https://cdn.modrinth.com/data/WPE5gRs9/versions/ndnETBEN/create-confectionery1.21.1_v1.1.3b.jar",
|
||||
"sha1": "47e235efa862c5cbea53fdf8346d4c499674defa"
|
||||
},
|
||||
{
|
||||
"file": "create-new-age-1.2.0+neoforge-mc1.21.1.jar",
|
||||
"url": "https://cdn.modrinth.com/data/FTeXqI9v/versions/IwtuwMZy/create-new-age-1.2.0%2Bneoforge-mc1.21.1.jar",
|
||||
"sha1": "849df57070ffa75c2446b9c460d03f6b49fa089e"
|
||||
},
|
||||
{
|
||||
"file": "create-simulated-thrusters-1.0.1.jar",
|
||||
"url": "https://cdn.modrinth.com/data/EAUfbep8/versions/GFGgvio1/create_simulated_thrusters-1.21.1-NeoForge-1.0.1.jar",
|
||||
"sha1": "bddb8bcbfe49231e196d1d40c8178aaf4dbebae5"
|
||||
},
|
||||
{
|
||||
"file": "create-the-air-war-4.67.jar",
|
||||
"url": "https://cdn.modrinth.com/data/GMrNnOis/versions/JnF14u1u/create_the_air_wars-4.67.jar",
|
||||
"sha1": "8e5ba8f70df9a64bb51b9bfe35a01476873f014d"
|
||||
},
|
||||
{
|
||||
"file": "create_connected-1.3.2-mc1.21.1.jar",
|
||||
"url": "https://cdn.modrinth.com/data/Vg5TIO6d/versions/klOWKza5/create_connected-1.3.2-mc1.21.1.jar",
|
||||
"sha1": "920de05b13c32fe1417d0aec0615057aa480cc8d"
|
||||
},
|
||||
{
|
||||
"file": "create_jetpack-forge-5.2.1.jar",
|
||||
"url": "https://cdn.modrinth.com/data/UbFnAd4l/versions/sCwiqLqq/create_jetpack-forge-5.2.1.jar",
|
||||
"sha1": "cbd949c62723d805c2ab019def6e6718c50037b8"
|
||||
},
|
||||
{
|
||||
"file": "createbigcannons-5.11.7+mc.1.21.1.jar",
|
||||
"url": "https://cdn.modrinth.com/data/GWp4jCJj/versions/bOiDu0LS/createbigcannons-5.11.7%2Bmc.1.21.1.jar",
|
||||
"sha1": "c90ee0b2142e2c58d233e150cb3a24c7cb07eb2d"
|
||||
},
|
||||
{
|
||||
"file": "createdieselgenerators-1.21.1-1.3.15.jar",
|
||||
"url": "https://cdn.modrinth.com/data/ZM3tt6p1/versions/UoPH8lO1/createdieselgenerators-1.21.1-1.3.15.jar",
|
||||
"sha1": "7f751dabfa83c141c1d13025cd16f06553ba459b"
|
||||
},
|
||||
{
|
||||
"file": "curios-neoforge-9.5.1+1.21.1.jar",
|
||||
"url": "https://cdn.modrinth.com/data/vvuO3ImH/versions/yohfFbgD/curios-neoforge-9.5.1%2B1.21.1.jar",
|
||||
"sha1": "418fcd42e3a7844c9bdc71c9b6401fdb3894e0c4"
|
||||
},
|
||||
{
|
||||
"file": "deployer-0.1.2.jar",
|
||||
"url": "https://cdn.modrinth.com/data/OZhUIuou/versions/XrLW2FiE/deployer-0.1.2.jar",
|
||||
"sha1": "c3d2d9baad2e714cb8bf8ae6df9bc9cac6e87c1c"
|
||||
},
|
||||
{
|
||||
"file": "ends_delight-2.6.1+neoforge.1.21.1.jar",
|
||||
"url": "https://cdn.modrinth.com/data/yHN0njMr/versions/YTApg6Hl/ends_delight-2.6.1%2Bneoforge.1.21.1.jar",
|
||||
"sha1": "0613a535d82b7a3d51d0caf0e04b082cb4c062e9"
|
||||
},
|
||||
{
|
||||
"file": "expandeddelight-0.1.4.jar",
|
||||
"url": "https://cdn.modrinth.com/data/e9V6wFcR/versions/RTRYPIJp/expandeddelight-0.1.4.jar",
|
||||
"sha1": "cf26fe18c3a9deec525fe0f0e7c2d3b9f4e9f484"
|
||||
},
|
||||
{
|
||||
"file": "ferritecore-7.0.3-neoforge.jar",
|
||||
"url": "https://cdn.modrinth.com/data/uXXizFIs/versions/x7kQWVju/ferritecore-7.0.3-neoforge.jar",
|
||||
"sha1": "9563692efb708b6b568df27a01ec52f6311928ef"
|
||||
},
|
||||
{
|
||||
"file": "geckolib-neoforge-1.21.1-4.9.2.jar",
|
||||
"url": "https://cdn.modrinth.com/data/8BmcQJ2H/versions/tPkJmim6/geckolib-neoforge-1.21.1-4.9.2.jar",
|
||||
"sha1": "14c64013cadee7d28f3685f94350f9a4d2ec6d86"
|
||||
},
|
||||
{
|
||||
"file": "irons_lib-1.21.1-2.1.0.jar",
|
||||
"url": "https://cdn.modrinth.com/data/9nfaJPtX/versions/sQyzhxuH/irons_lib-1.21.1-2.1.0.jar",
|
||||
"sha1": "70fba64d12b6ff9553580e52101d989c89297797"
|
||||
},
|
||||
{
|
||||
"file": "irons_spellbooks-1.21.1-3.16.3.jar",
|
||||
"url": "https://cdn.modrinth.com/data/s4OWxYQQ/versions/slKLosTb/irons_spellbooks-1.21.1-3.16.3.jar",
|
||||
"sha1": "e8832385c01db56b9fcb19c48fcedc76a3a70d92"
|
||||
},
|
||||
{
|
||||
"file": "kotlinforforge-5.12.0-all.jar",
|
||||
"url": "https://cdn.modrinth.com/data/ordsPcFz/versions/uhJhCT7X/kotlinforforge-5.12.0-all.jar",
|
||||
"sha1": "d10d062caf1aad9aec82d7852f2fee1781735c1f"
|
||||
},
|
||||
{
|
||||
"file": "lithium-neoforge-0.15.4+mc1.21.1.jar",
|
||||
"url": "https://cdn.modrinth.com/data/gvQqBUqZ/versions/DDUrRVCA/lithium-neoforge-0.15.4%2Bmc1.21.1.jar",
|
||||
"sha1": "97212e45c963730bbfc7c44780df99317814c21b"
|
||||
},
|
||||
{
|
||||
"file": "lithostitched-1.8.0+beta4-neoforge-21.1.jar",
|
||||
"url": "https://cdn.modrinth.com/data/XaDC71GB/versions/81DDKTGJ/lithostitched-1.8.0%2Bbeta4-neoforge-21.1.jar",
|
||||
"sha1": "0edda78ec8500143cca898881c476b2b04dac75a"
|
||||
},
|
||||
{
|
||||
"file": "modernfix-neoforge-5.27.20+mc1.21.1.jar",
|
||||
"url": "https://cdn.modrinth.com/data/nmDcB62a/versions/VsJnrw8k/modernfix-neoforge-5.27.20%2Bmc1.21.1.jar",
|
||||
"sha1": "bc1a70e72e7dba8a3ff41404765fdd03a7ac6575"
|
||||
},
|
||||
{
|
||||
"file": "player-animation-lib-forge-2.0.4+1.21.1.jar",
|
||||
"url": "https://cdn.modrinth.com/data/gedNE4y2/versions/HJZB6bmA/player-animation-lib-forge-2.0.4%2B1.21.1.jar",
|
||||
"sha1": "05be8ddcc78532b9a5520c718edc6c971cd0057c"
|
||||
},
|
||||
{
|
||||
"file": "railways-0.3.0-beta.2+neoforge-mc1.21.1.jar",
|
||||
"url": "https://cdn.modrinth.com/data/L3Jv0QZI/versions/czVeSmZo/railways-0.3.0-beta.2%2Bneoforge-mc1.21.1.jar",
|
||||
"sha1": "82a28ce51fdbc583477d7ae7c4c94cc6d23ec2b4"
|
||||
},
|
||||
{
|
||||
"file": "ritchiesprojectilelib-2.1.2+mc.1.21.1-neoforge.jar",
|
||||
"url": "https://cdn.modrinth.com/data/B3pb093D/versions/hZ6B2Z0x/ritchiesprojectilelib-2.1.2%2Bmc.1.21.1-neoforge.jar",
|
||||
"sha1": "ec2e4996f8bee8714173e603e379fef8a6901765"
|
||||
},
|
||||
{
|
||||
"file": "sable-neoforge-1.21.1-2.0.5.jar",
|
||||
"url": "https://cdn.modrinth.com/data/T9PomCSv/versions/U678xqle/sable-neoforge-1.21.1-2.0.5.jar",
|
||||
"sha1": "05f666e973d32baaaf405acb9bbed6615b909971"
|
||||
},
|
||||
{
|
||||
"file": "simulated-gauges-1.1.0.jar",
|
||||
"url": "https://cdn.modrinth.com/data/AwDdvIWn/versions/LWK7hUmm/simulated_gauges-1.1.0.jar",
|
||||
"sha1": "3588378ea8d5e424ecd00fdaa16a4e3355f09365"
|
||||
},
|
||||
{
|
||||
"file": "spark-1.10.124-neoforge.jar",
|
||||
"url": "https://cdn.modrinth.com/data/l6YH9Als/versions/v5qtqRQi/spark-1.10.124-neoforge.jar",
|
||||
"sha1": "9430cc2ab64ff89d698be593769fb9f9ee4efae6"
|
||||
},
|
||||
{
|
||||
"file": "waystones-neoforge-1.21.1-21.1.41.jar",
|
||||
"url": "https://cdn.modrinth.com/data/LOpKHB2A/versions/fxszxKRW/waystones-neoforge-1.21.1-21.1.41.jar",
|
||||
"sha1": "ce8f17600506c2a201c6eb5ff50e16d39f775ad6"
|
||||
}
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user