Skip to main content
Loadouts declare a target state; plans assert current state; actions change state. This page covers all three plus the tab-switching contract that gates them.

Equipment actions

EquipmentActions provides result-aware wear and remove dispatches. All writes return InteractionResult and route through the pacer. EquipmentInventorySlot (RuneLite API) defines the slots: HEAD, CAPE, AMULET, WEAPON, BODY, SHIELD, ARMS, LEGS, HAIR, GLOVES, BOOTS, JAW, RING, and AMMO. Granular reads use com.n3plugins.sdk.query.Equipment and EquipmentItemQuery.
equip requires the Inventory tab to be visible. Both unequip overloads require the Equipment tab. A closed prerequisite returns WIDGET_HIDDEN targeting the required tab; these actions never open a tab for you.
Check isEquipped(...) before calling equip(...) to avoid redundant widget interactions.

Loadouts

com.n3plugins.sdk.loadouts defines the desired state for inventory and equipment. A loadout is a target, not an action: bank and production workflow builders reconcile live game state against it.
InventoryPlan asserts current state (“do I have this right now?”). InventoryLoadout and EquipmentLoadout declare target state (“what should I hold or wear after restocking?”).
Build items fluently:
Builder options: amount(int) (default 1), optional(boolean), noted(boolean), stackable(boolean), and slot(EquipmentInventorySlot) (required for equipment loadouts).
InventoryLoadout.add throws IllegalArgumentException when items exceed the 28-slot capacity. Both loadout types expose isFulfilled(), getRequiredItems(), getExcessItems(), getForeignItemIds(), and setItemDepletionListener(...). Builders use getForeignItemIds(), getMissingItems(), and getUnequippedItems() to plan deposits, withdrawals, and equips. ItemMetadataResolver derives stackability from client metadata. In tests without a client, set stackable(...) explicitly or inject a resolver with ItemMetadataResolver.setResolverForTesting(...). BankActions.withdraw(loadout, maxActions) withdraws missing loadout items with a depletion listener and an action cap:

Tab actions

TabActions separates deliberate tab changes from check-only prerequisites.
The Tab enum covers COMBAT, SKILLS, QUESTS, INVENTORY, EQUIPMENT, PRAYER, MAGIC, FRIENDS_CHAT, FRIENDS, LOGOUT, SETTINGS, EMOTES, and MUSIC. Each constant holds three packed widget IDs; a zero value means the slot is absent in that layout.
open is the only shared tab API that changes the selected tab, and a dispatched click is not proof of convergence. Interface states such as an open bank hide sidebar tabs entirely, which surfaces as TAB_NOT_FOUND. Observe isOpen(...) after dispatch instead of relying on the result alone.
Requested inventory, equipment, prayer, magic, combat, and minigame actions never select a side tab for their caller. Open the tab explicitly first.