Skip to main content

Progress APIs

Verification boundary

This page documents the committed source. Treat revision-sensitive RuneLite UI, packet, or in-game outcomes as pending live-client verification unless the page records direct evidence.

com.n3plugins.sdk.progress owns reference coverage for quest and achievement diary reads. You can find usage examples in SDK Examples And Best Practices; this page serves as the API reference.

note

Progress APIs read eligibility/progress state. They do not perform quest steps, claim diary rewards, or click Quest Helper targets.

QuestProgressApi

QuestProgressApi wraps RuneLite Quest state reads and adapts walker QuestRequirement checks.

QuestState state = QuestProgressApi.state(Quest.COOKS_ASSISTANT);
InteractionResult complete = QuestProgressApi.isComplete(Quest.COOKS_ASSISTANT);

Optional<Quest> quest = QuestProgressApi.findQuest("Cook's Assistant");
Optional<QuestProgress> progress = QuestProgressApi.progress("COOKS_ASSISTANT");

InteractionResult allowed = QuestProgressApi.satisfies(requirement);

Methods:

  • state(quest) - current quest state, or QuestState.NOT_STARTED when the quest is null or unavailable.
  • isStarted(quest) - true when the quest state is not NOT_STARTED.
  • isComplete(quest) - true when the quest state is FINISHED.
  • progress(quest) - immutable QuestProgress, or empty for null quests.
  • all() - progress for every RuneLite Quest enum value.
  • started() - started or completed quest snapshots.
  • completed() - completed quest snapshots.
  • findQuest(name) - finds by enum name or player-facing quest name using normalized case/punctuation-insensitive matching.
  • progress(name) - resolves a name with findQuest(...) and returns progress.
  • satisfies(requirement) - evaluates a walker QuestRequirement against the current quest state.
  • setStateReaderForTesting(reader) and resetStateReaderForTesting() - test hooks for quest-state reads.

QuestProgress contains the Quest, display name, QuestState, started flag, and complete flag.

DiaryProgressApi

DiaryProgressApi exposes mapped achievement diary task progress backed by stable RuneLite varbits or varplayers.

Optional<DiaryProgress> lumbridgeEasy =
DiaryProgressApi.progress(DiaryRegion.LUMBRIDGE, DiaryTier.EASY);

List<DiaryProgress> varrock = DiaryProgressApi.forRegion(DiaryRegion.VARROCK);
InteractionResult taskDone = DiaryProgressApi.isComplete(task);

Methods:

  • progress(region, tier) - progress for a mapped diary tier, or empty when no stable mapping exists.
  • all() - every mapped diary tier.
  • forRegion(region) - all mapped tiers in one diary region.
  • tasks(region, tier) - immutable mapped task list for a diary tier.
  • isComplete(task) - true when a mapped task's completion mask is set.
  • progress(task) - DiaryTaskProgress for one mapped task.
  • setReadersForTesting(varbitReader, varPlayerReader) - test hook for raw variable reads.
  • setTasksForTesting(tasks) - test hook for mapped task coverage.
  • resetForTesting() - restores live readers and default mappings.

DiaryProgress contains region, tier, mapped task progress, completed task count, total mapped task count, and an isComplete() flag. DiaryTask stores region, tier, display name, source kind (VARBIT or VARPLAYER), variable id, and completion mask. DiaryTaskProgress stores the mapped task, raw variable value, and complete flag.

Caution

Diary coverage is intentionally partial. The API exposes only explicitly mapped varbit/varplayer-backed tasks; it does not guess unmapped tasks.