PackCheck is a local, informational RuneLite Plugin Hub plugin for named inventory and equipment checklists. It supports captured setups, researched built-in presets, required and optional rules, alternatives, 132 explicit dose families, 27 known charge/content families, base-pack inheritance, reusable add-ons, unexpected-item modes, an overlay, and debounced notifications.
PackCheck only compares your current setup with checklists you create. It does not click, withdraw, equip, use, activate or perform any gameplay action. Pack data remains local.
This repository targets the standard external Plugin Hub build, Java 11, and RuneLite latest.release. Context rules are stored as opt-in suggestion metadata in the current release; automatic contextual activation is intentionally not enabled.
The screenshots below were captured from RuneLite 1.12.35 on macOS while logged out. See the logged-out visual QA record for the exercised states and verification boundary.
| Choose a preset | Review its source | Reset customizations |
|---|---|---|
![]() |
![]() |
![]() |
| Edit the installed pack | Edit a dose requirement |
|---|---|
![]() |
![]() |
The clean logged-out state is also retained as visual evidence.
- Pack data is stored only under
.runelite/packcheck/in profile-keyed, versioned JSON files. - There is no server, telemetry, analytics, or network upload.
- Account display names, inventory contents, and equipment contents are not transmitted.
- Import and export happen only through text the user explicitly pastes or copies.
PackCheck never injects input, invokes gameplay menu actions, withdraws or deposits items, changes equipment, activates prayers, casts spells, consumes items, moves the player, attacks, teleports, types chat, predicts combat, recommends prayer switches, or changes game click zones. It uses no reflection, native access, subprocess execution, dynamic code loading, runtime code generation, or Java serialization.
The overlay is non-interactive and informational. The hotkey only opens PackCheck or selects the locally configured default checklist.
- Build or open this project as described below.
- Start the development client with
./gradlew run. - Enable PackCheck in RuneLite's plugin list.
- Open the PackCheck sidebar.
- Choose Capture setup, enter a pack name, review every generated rule, and save.
- Select a pack and optional add-ons. Resolve any displayed composition conflict explicitly.
Or choose Add preset, review its source and warning, and install one editable local copy. Editing an installed preset never changes the built-in definition. Reset preset restores the selected preset's current built-in name, rules, quantities, notes, and options after confirmation. Duplicating a preset creates an independent custom pack that is not linked to reset.
For a future Plugin Hub release, install it through RuneLite's Plugin Hub after review and publication.
Each requirement has a stable ID and supports required/optional, enabled/ignored, location, minimum/exact/maximum values, a measurement type, equipment slot, inventory slot, notes, and alternatives.
Alternative matcher syntax in the editor:
item:6570|Fire cape
item:8013,9780,13280|House teleport alternative|variations
family:prayer_potion|Prayer potion
family:super_restore|Super restore
Multiple lines are an “at least one of” group. Dose measurements sum every matching supported dose family. Item IDs are stable IDs; important requirements are never fuzzy-matched by name.
To override an inherited rule, choose Override inherited in the child editor. The stable requirement ID is retained. Uncheck Enabled to disable that inherited rule only in the child.
Presets are offline starting points, not prescriptive best-in-slot loadouts. Their quantities reflect the linked guide's baseline or a clearly documented conservative choice. Review every installed rule for your stats, gear, spellbook, risk tolerance, route, budget, and intended trip length. PackCheck can see the rune pouch item but cannot inspect its contents.
| Category | Preset | Research reference |
|---|---|---|
| Training | MM2 maniacal monkeys — Ice Barrage | Maniacal monkey strategies |
| Minigame | Fight Caves — ranged/Jad | Fight Cave strategies |
| Boss | Vorkath — ranged | Vorkath strategies |
| Boss | Zulrah — ranged/magic hybrid | Zulrah strategies |
| Boss | Alchemical Hydra — melee | Alchemical Hydra strategies |
| Boss | Barrows | Barrows strategies |
| Boss | General Graardor — solo melee | General Graardor strategies |
| Boss | The Whisperer | Whisperer strategies |
| Quest | Monkey Madness II — Glough | Monkey Madness II quick guide |
| Quest | Song of the Elves — Fragment of Seren | Fragment of Seren |
| Quest | Sins of the Father — Vanstrom Klause | Sins of the Father quick guide |
| Quest | Dragon Slayer II — Vorkath | Dragon Slayer II quick guide |
The preset catalog is hardcoded and performs no runtime web request. Source URLs are shown before installation and stored in catalog metadata, not in account data.
DoseService contains 132 explicit families. Item names are never parsed, and every item ID/dose value is reviewable in source. The expanded catalog covers:
- Core combat: attack, strength, defence, ranging, magic, combat, super attack/strength/defence/combat, bastion, and battlemage.
- Restoration and skilling: restore, prayer, super restore, energy, super energy, stamina, extended stamina, agility, fishing, super fishing, hunter, super hunter, magic essence, prayer regeneration, moonlight, extreme energy, and surge.
- Poison, venom, and dragonfire: antipoison, super antipoison, Antidote+/++, anti-venom/+, extended anti-venom+, Relicym's balm, Sanfew serum, antifire, extended antifire, super antifire, and extended super antifire.
- Brews and remedies: Saradomin, Zamorak, ancient, forgotten, and Armadyl brews; Menaphite remedy; Guthix rest/balance; Serum 207/208; goading; haemostatic dressing; and compost potion.
- Divine boosts: divine super attack, strength, defence, combat, ranging, magic, bastion, and battlemage.
- Minigame and raid supplies: Nightmare Zone absorption/overload/super ranging/super magic, Egniol, blighted super restore, all weak/standard/strong Chambers of Xeric Elder/Kodai/Twisted/Revitalisation/Xeric's aid/Prayer enhance/Overload tiers, and Tombs of Amascut nectar, Tears of Elidinis, liquid adrenaline, ambrosia, blessed crystal scarab, silk dressing, and smelling salts.
- Mixes: the regular barbarian potion mixes, antifire and ancient variants, plus Sapphire glacialis, Snowy knight, Ruby harvest, Black warlock, Sunlight moth, and Moonlight moth mixes.
Family keys are stable snake-case identifiers such as extended_super_antifire, prayer_regeneration, divine_bastion, cox_overload_strong, and toa_smelling_salts. Use DoseService.supportedFamilies() or inspect DoseService for the complete authoritative list. Unsupported families should use item quantity and are labeled unsupported if configured as doses.
ChargeService contains 27 families backed only by explicit item variants:
- Teleports: ring of dueling, games necklace, slayer ring, burning amulet, amulet of glory (including trimmed variants), skills necklace, combat bracelet, digsite pendant, necklace of passage, ring of returning, ring of wealth (regular and imbued), enchanted lyre, and teleport crystal.
- Other uses: abyssal bracelet, fungicide spray, watering can, waterskin, ogre bellows, and imp-in-a-box.
- Visible container contents: baskets of apples, bananas, oranges, strawberries, and tomatoes; sacks of cabbages, onions, and potatoes.
These mappings follow the explicit-variant portion of RuneLite's own Item Charges data. A present item with no reliable item-ID mapping returns UNKNOWN_CHARGES; PackCheck never invents a charge count. Blowpipes, tridents, powered staves, recoil/forging jewellery, bracelets whose remaining uses are tracked from chat or account state, and degradable equipment without per-charge public item variants remain unsupported by known-charge rules.
Export provides either versioned JSON or a packcheck: URL-safe encoded string. Import always shows a preview. Merge regenerates colliding pack IDs and remaps imported parent relationships; replace requires a separate explicit choice. The repository backs up data before schema migration and preserves malformed input as a timestamped .bak file before recovering with an empty store.
Requirements: a Java 11-compatible JDK and internet access for Gradle's first dependency resolution.
./gradlew test
./gradlew build
./gradlew runThe run task launches RuneLite in developer mode. Jagex-account login for a development client follows RuneLite's official Using Jagex Accounts guide. Automated tests do not prove authenticated or in-game behavior.
On the current macOS workstation, the only installed runtime is JDK 23. RuneLite's macOS fullscreen adapter needs this development-only module export when launching with that JDK:
JAVA_TOOL_OPTIONS='--add-exports=java.desktop/com.apple.eawt=ALL-UNNAMED' ./gradlew run --no-daemonThis is a local launcher workaround, not plugin code or a Plugin Hub runtime requirement.
- Automatic contextual suggestions are not active in 1.1. The local data model/editor stores user-created region, bank, Slayer, and location association metadata for a later opt-in implementation.
- Charge support is intentionally limited to explicit item variants. Internal, varbit, chat-derived, or percentage durability is not guessed.
- Dose support is broad but still explicit. Newly released dose variants require a source update before PackCheck will count them.
- Built-in presets are researched starting points, not guarantees of safety or success. They cannot account for skill levels, gear quality, guide changes, personal mechanics, pouch contents, or supplies consumed before the snapshot.
- Capture creates reviewable minimum rules and does not infer fixed inventory slots. Equipped items are fixed to their observed equipment slots.
- Item-variation matching must be enabled per matcher in the editor; exact matching is the default.
- Live, authenticated RuneLite behavior must be confirmed manually by the user.
BSD 2-Clause. See LICENSE.





