simple catroom-EL 1.12.2 plugin to check packwiz
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Stella Reine 476910a26f feat: packwiz update checker plugin for CatRoom 1.12.2
Reports how far the server's installed pack has drifted from the remote
packwiz pack, without touching mods/ - applying updates stays with
startserver.sh's updpackwiz.

Diffs the remote index.toml against packwiz.json, then fetches the
.pw.toml of every changed mod so the report carries real mod names and
old -> new jar versions. Changes that do not affect this server are
tagged and hidden by default: mods the pack marks side = "client", and
files matching a glob in mods_excluded_from_server.txt.

Defaults ship as packwizupdater-config.yml rather than config.yml
because on a hybrid server the plugin class loader resolves
getResource("config.yml") against the mod classpath, where
AntiTrample-1.1.1.jar already owns that name.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-22 22:23:30 -05:00
gradle/wrapper feat: packwiz update checker plugin for CatRoom 1.12.2 2026-08-22 22:23:30 -05:00
src/main feat: packwiz update checker plugin for CatRoom 1.12.2 2026-08-22 22:23:30 -05:00
.gitignore feat: packwiz update checker plugin for CatRoom 1.12.2 2026-08-22 22:23:30 -05:00
build.gradle feat: packwiz update checker plugin for CatRoom 1.12.2 2026-08-22 22:23:30 -05:00
gradle.properties feat: packwiz update checker plugin for CatRoom 1.12.2 2026-08-22 22:23:30 -05:00
gradlew feat: packwiz update checker plugin for CatRoom 1.12.2 2026-08-22 22:23:30 -05:00
gradlew.bat feat: packwiz update checker plugin for CatRoom 1.12.2 2026-08-22 22:23:30 -05:00
README.md feat: packwiz update checker plugin for CatRoom 1.12.2 2026-08-22 22:23:30 -05:00
settings.gradle feat: packwiz update checker plugin for CatRoom 1.12.2 2026-08-22 22:23:30 -05:00

PackwizUpdater

CatRoom / Bukkit plugin for 1.12.2 that reports how far the server's installed packwiz pack has drifted from the remote pack. Read-only: it never touches mods/. Applying updates stays with startserver.sh's updpackwiz.

What it does

  • Fetches the remote pack.toml and index.toml.
  • Diffs them against packwiz.json, the state packwiz-installer leaves behind.
  • Fetches the .pw.toml metafile of every changed mod so the report shows real mod names and the old -> new jar version.
  • Flags changes this server does not care about:
    • client-only - the pack marks the mod side = "client", so -s server never installs it.
    • excluded - the file matches a glob in mods_excluded_from_server.txt, so startserver.sh deletes it after every update. These are hidden unless you pass all.

Commands

Command Description
/packwiz check Is the remote pack ahead of this server? Counts only.
/packwiz diff [all] File-by-file list, grouped into mods / configs / other.
/packwiz status Config paths, exclusion count, last check.
/packwiz reload Reload config.yml and the exclusion list.

Aliases: /pw, /packwizupdater. Permissions: packwiz.check, packwiz.admin (both default to op). The full report is always written to plugins/PackwizUpdater/last-diff.txt, so console output is never truncated.

Report markers

~ Ice and Fire: RotN Edition  Ice and Fire-2.0.0.jar -> Ice and Fire-2.1.0.jar
+ Dark Mode Everywhere  darkmodeeverywhere-1.12.2-1.1.4.jar [client-only]
- LagGoggles-1.12.2-5.9-140.jar [excluded]
~ Thaumic JEI (metadata only)  ThaumicJEI-1.12.2-1.7.0.jar

metadata only means the .pw.toml changed but still points at the same jar, so a re-run of packwiz downloads nothing new.

Config

config.yml defaults to the Friendpack v33 URL and the server root. Point pack-url at a different branch when the pack version bumps; cache-file and excluded-mods-file are resolved relative to server-dir.

Building

./gradlew build          # -> build/libs/PackwizUpdater-1.0.0.jar

The Bukkit API comes from the CatRoom jar named by catroomJar in gradle.properties; if that path does not exist, the build falls back to spigot-api:1.12.2-R0.1-SNAPSHOT from Maven.

Offline testing

The diff engine runs without a server:

java -cp build/libs/PackwizUpdater-1.0.0.jar:gson.jar \
  net.solarspire.packwiz.cli.DiffCli \
  https://code.solarspire.net/StynaST/friendpack/raw/branch/v33/pack.toml \
  /path/to/server/packwiz.json /path/to/server/mods_excluded_from_server.txt [all]

Hybrid-server note

On CatRoom the plugin class loader can resolve getResource("config.yml") to a Forge mod's jar - Friendpack's AntiTrample-1.1.1.jar ships one at its root, which made saveDefaultConfig() write the wrong file. The defaults are therefore bundled as packwizupdater-config.yml and copied to plugins/PackwizUpdater/config.yml by hand, and the config is read straight from that file instead of getConfig().