From 0db88ac9fe9b575a5510b9b9e5beeffc01374a29 Mon Sep 17 00:00:00 2001 From: Full_droper Date: Fri, 2 Oct 2026 21:06:03 +0300 Subject: [PATCH] 0.2.0: KubeJS (+Rhino, Better Advanced Tooltips); tools/add-mod.mjs Co-Authored-By: Claude Opus 5.5 --- index.toml | 15 +++++++++ mods/better-advanced-tooltips.pw.toml | 13 ++++++++ mods/kubejs.pw.toml | 13 ++++++++ mods/rhino.pw.toml | 13 ++++++++ pack.toml | 4 +-- tools/add-mod.mjs | 46 +++++++++++++++++++++++++++ 6 files changed, 102 insertions(+), 2 deletions(-) create mode 100644 mods/better-advanced-tooltips.pw.toml create mode 100644 mods/kubejs.pw.toml create mode 100644 mods/rhino.pw.toml create mode 100644 tools/add-mod.mjs diff --git a/index.toml b/index.toml index 26c34e4..4807768 100644 --- a/index.toml +++ b/index.toml @@ -849,6 +849,11 @@ file = "mods/balm.pw.toml" hash = "392901b7f79963442553456af846d06f48b4057a054a928adb8a76eea13c6383" metafile = true +[[files]] +file = "mods/better-advanced-tooltips.pw.toml" +hash = "03084ff4f74cedc1b8ac6c85a98842f75956fb4fa811d285d8ca7caa8d54da5d" +metafile = true + [[files]] file = "mods/better-ping-display.pw.toml" hash = "cc2e6dda94a7a6f5487843cafe569d8044bf9482cbf03f062cf4595f1fb05281" @@ -1114,6 +1119,11 @@ file = "mods/kotlin-for-forge.pw.toml" hash = "27302b0087cf53570cd7a3b4eb550a208cbb6f6ba07210c604176155f39e0078" metafile = true +[[files]] +file = "mods/kubejs.pw.toml" +hash = "7e0eca275f27b6543f06c36dec433851a956960cbedd2be57d19e159d636bfc1" +metafile = true + [[files]] file = "mods/longer-chat-history.pw.toml" hash = "12e4601519ca5fb940e9658b71f2218f2a06c41847b714978e1568435688858d" @@ -1214,6 +1224,11 @@ file = "mods/reeses-sodium-options.pw.toml" hash = "09306b955060349986ccf6a6d2a67f1e019fa172a7dc690dd6007f81c966309a" metafile = true +[[files]] +file = "mods/rhino.pw.toml" +hash = "673de9cae75d2ad02796368939384de0d7238cf5c782975d71848a2187f753e7" +metafile = true + [[files]] file = "mods/rrls.pw.toml" hash = "b78044fd79ce21750d05dc61b6aede33c4b87cdc16a26f5aff472d4f73ab623c" diff --git a/mods/better-advanced-tooltips.pw.toml b/mods/better-advanced-tooltips.pw.toml new file mode 100644 index 0000000..9e0f939 --- /dev/null +++ b/mods/better-advanced-tooltips.pw.toml @@ -0,0 +1,13 @@ +name = "Better Advanced Tooltips" +filename = "better-advanced-tooltips-2101.1.0-build.5.jar" +side = "both" + +[download] +url = "https://cdn.modrinth.com/data/iHLDc0eo/versions/uPFbnD32/better-advanced-tooltips-2101.1.0-build.5.jar" +hash-format = "sha512" +hash = "05b5cdad948d1735eab7a67a16aaf32814678c392014ec2ada61b8341c0ed1c1ac181cab1de9da3f2c4632592f4a1a5db254bd0543e6778897c8ccd260894142" + +[update] +[update.modrinth] +mod-id = "iHLDc0eo" +version = "uPFbnD32" diff --git a/mods/kubejs.pw.toml b/mods/kubejs.pw.toml new file mode 100644 index 0000000..487b8f8 --- /dev/null +++ b/mods/kubejs.pw.toml @@ -0,0 +1,13 @@ +name = "KubeJS" +filename = "kubejs-neoforge-2101.7.2-build.377.jar" +side = "both" + +[download] +url = "https://cdn.modrinth.com/data/umyGl7zF/versions/THIGFPwf/kubejs-neoforge-2101.7.2-build.377.jar" +hash-format = "sha512" +hash = "fcdbee8790f8f39c106ab4bf606808c9c5bf0f13a41e216207a6fe4d15bf4a5722ce57078781e3a1823e7fdd2928e8e042d104d8ae255a36db8f12a9f46d8089" + +[update] +[update.modrinth] +mod-id = "umyGl7zF" +version = "THIGFPwf" diff --git a/mods/rhino.pw.toml b/mods/rhino.pw.toml new file mode 100644 index 0000000..5b428c2 --- /dev/null +++ b/mods/rhino.pw.toml @@ -0,0 +1,13 @@ +name = "Rhino" +filename = "rhino-2101.2.8-build.91.jar" +side = "both" + +[download] +url = "https://cdn.modrinth.com/data/sk9knFPE/versions/SqkDvOLG/rhino-2101.2.8-build.91.jar" +hash-format = "sha512" +hash = "e3d92f663bc07872a83b0a6474b30a75230e9f92a2844fd98da1842ec9a79712bcb7d8e76574cc11ae3aeceb47f2933c60ddd6cf41f3ad7027bd573623730945" + +[update] +[update.modrinth] +mod-id = "sk9knFPE" +version = "SqkDvOLG" diff --git a/pack.toml b/pack.toml index 5bedf9a..d105f32 100644 --- a/pack.toml +++ b/pack.toml @@ -1,12 +1,12 @@ name = "Create RP" author = "Pinecraft-CreateRP" -version = "0.1.0" +version = "0.2.0" pack-format = "packwiz:1.1.0" [index] file = "index.toml" hash-format = "sha256" -hash = "82d2822700967bcd03c3e01038401304546e4a1c690ad35d680e38a55742001d" +hash = "7265bf5b29ad41fe2e41155af009dd5a4dc0c7a4520721917317abb505948403" [versions] minecraft = "1.21.1" diff --git a/tools/add-mod.mjs b/tools/add-mod.mjs new file mode 100644 index 0000000..4f3064b --- /dev/null +++ b/tools/add-mod.mjs @@ -0,0 +1,46 @@ +// Adds a Modrinth mod (and its required dependencies, recursively) to this packwiz pack. +// node tools/add-mod.mjs [...] → latest NeoForge 1.21.1 version +// node tools/add-mod.mjs @ → that exact version +// Writes mods/.pw.toml, then run: node tools/reindex.mjs +import fs from 'fs'; +import path from 'path'; +import { fileURLToPath } from 'url'; + +const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..'); +const UA = { 'User-Agent': 'Pinecraft-CreateRP/add-mod' }; +const api = p => fetch('https://api.modrinth.com/v2' + p, { headers: UA }).then(r => { + if (!r.ok) throw new Error(`${p}: HTTP ${r.status}`); + return r.json(); +}); +const q = s => JSON.stringify(s); + +const existing = new Set(fs.readdirSync(path.join(root, 'mods')).filter(f => f.endsWith('.pw.toml')).map(f => { + const t = fs.readFileSync(path.join(root, 'mods', f), 'utf8'); + return (t.match(/^mod-id = "([^"]+)"/m) || [])[1]; +}).filter(Boolean)); + +const sideOf = p => p.server_side === 'unsupported' ? 'client' : p.client_side === 'unsupported' ? 'server' : 'both'; + +async function add(spec, depth = 0) { + const [ref, wanted] = spec.split('@'); + const project = await api(`/project/${ref}`); + const pad = ' '.repeat(depth); + if (existing.has(project.id)) { console.log(`${pad}= ${project.title} — already in the pack`); return; } + const versions = await api(`/project/${project.id}/version?loaders=${encodeURIComponent('["neoforge"]')}&game_versions=${encodeURIComponent('["1.21.1"]')}`); + const v = wanted ? versions.find(x => x.version_number === wanted) : versions[0]; + if (!v) throw new Error(`${project.title}: no NeoForge 1.21.1 version${wanted ? ' ' + wanted : ''}`); + const f = v.files.find(x => x.primary) || v.files[0]; + const toml = [ + `name = ${q(project.title)}`, `filename = ${q(f.filename)}`, `side = ${q(sideOf(project))}`, '', + '[download]', `url = ${q(f.url)}`, 'hash-format = "sha512"', `hash = ${q(f.hashes.sha512)}`, '', + '[update]', '[update.modrinth]', `mod-id = ${q(project.id)}`, `version = ${q(v.id)}`, '' + ].join('\n'); + fs.writeFileSync(path.join(root, 'mods', `${project.slug}.pw.toml`), toml); + existing.add(project.id); + console.log(`${pad}+ ${project.title} ${v.version_number} (${sideOf(project)})`); + for (const d of v.dependencies.filter(d => d.dependency_type === 'required' && d.project_id)) { + await add(d.project_id, depth + 1); + } +} + +for (const spec of process.argv.slice(2)) await add(spec);