Skip to content

QuestHelper

ShaneeexD edited this page Feb 18, 2026 · 1 revision

QuestHelper

Quest system support for building structured progression systems in plugins.

Overview

What it does:

  • Provides data structures for quests with objectives, rewards, and prerequisites
  • Supports repeatable quests (daily, weekly loops)
  • Tracks quest progress and completion
  • Integrates with player progression systems

When to use:

  • Building RPG-style progression systems
  • Story/mission-based gameplay
  • Repeatable daily or weekly quests
  • Achievement systems with prerequisites

Available Methods

Quest Data Structures

Quest

Represents a quest with objectives, rewards, and metadata.

public class Quest {
    String id;
    String name;
    String description;
    List<Objective> objectives;
    List<Reward> rewards;
    List<String> prerequisites; // Quest IDs that must be completed first
    boolean repeatable;
    int repeatCooldownTicks; // For repeatable quests
}

Objective

Represents a single quest objective.

public class Objective {
    String type; // "kill", "collect", "visit", "craft", etc.
    String target; // Entity type, item ID, zone name, etc.
    int requiredAmount;
    String description;
}

Reward

Represents a quest reward.

public class Reward {
    String type; // "item", "currency", "experience", etc.
    String itemId; // For item rewards
    int quantity;
    int currencyAmount; // For currency rewards
}

registerQuest(world, quest)

Registers a quest in the world for use by players.

Quest quest = new Quest();
quest.id = "kill_skeletons";
quest.name = "Skeleton Slayer";
quest.description = "Defeat 10 skeleton warriors";
quest.objectives = Arrays.asList(
    new Objective("kill", "Skeleton_Warrior", 10, "Defeat skeleton warriors")
);
quest.rewards = Arrays.asList(
    new Reward("item", "Weapon_Sword_Iron", 1),
    new Reward("currency", null, 100)
);

QuestHelper.registerQuest(world, quest);

startQuestForPlayer(world, playerEntity, questId)

Starts a quest for a specific player if prerequisites are met.

boolean started = QuestHelper.startQuestForPlayer(world, playerEntity, "kill_skeletons");
if (started) {
    PlayerHelper.sendMessage(playerEntity, "Quest started: Skeleton Slayer!");
} else {
    PlayerHelper.sendMessage(playerEntity, "You don't meet the prerequisites for this quest.");
}

checkQuestProgress(world, playerEntity, questId)

Returns the current progress on a quest objective.

int progress = QuestHelper.checkQuestProgress(world, playerEntity, "kill_skeletons");
PlayerHelper.sendMessage(playerEntity, "Progress: " + progress + "/10 skeletons defeated");

completeQuest(world, playerEntity, questId)

Completes a quest and gives rewards if objectives are met.

boolean completed = QuestHelper.completeQuest(world, playerEntity, "kill_skeletons");
if (completed) {
    PlayerHelper.sendMessage(playerEntity, "Quest completed! Rewards received.");
    // Rewards are automatically given (items added to inventory, currency added)
} else {
    PlayerHelper.sendMessage(playerEntity, "Quest objectives not yet completed.");
}

getActiveQuests(world, playerEntity)

Returns a list of quest IDs the player is currently working on.

List<String> activeQuests = QuestHelper.getActiveQuests(world, playerEntity);
PlayerHelper.sendMessage(playerEntity, "Active quests: " + String.join(", ", activeQuests));

getCompletedQuests(world, playerEntity)

Returns a list of quest IDs the player has completed.

List<String> completedQuests = QuestHelper.getCompletedQuests(world, playerEntity);
PlayerHelper.sendMessage(playerEntity, "Completed quests: " + completedQuests.size());

setQuestRepeatable(questId, repeatable, cooldownTicks)

Makes a quest repeatable with an optional cooldown.

// Daily repeatable quest (assuming 24000 ticks per day)
QuestHelper.setQuestRepeatable("daily_mining", true, 24000);

// One-time quest
QuestHelper.setQuestRepeatable("main_story_1", false, 0);

addQuestPrerequisite(questId, prerequisiteQuestId)

Adds a prerequisite quest that must be completed before this quest can be started.

QuestHelper.addQuestPrerequisite("advanced_combat", "basic_training");

Examples

Basic Quest Setup

// Register a simple kill quest
Quest killQuest = new Quest();
killQuest.id = "defeat_goblins";
killQuest.name = "Goblin Hunter";
killQuest.description = "Defeat 5 goblins in the forest";
killQuest.objectives = Arrays.asList(
    new Objective("kill", "Goblin_Scout", 5, "Defeat goblin scouts")
);
killQuest.rewards = Arrays.asList(
    new Reward("item", "Armor_Helmet_Leather", 1),
    new Reward("currency", null, 50)
);

QuestHelper.registerQuest(world, killQuest);

// Start quest when player enters zone
EventHelper.onPlayerJoinWorld(plugin, world -> {
    // Check if player has quest available
    if (!QuestHelper.getCompletedQuests(world, playerEntity).contains("defeat_goblins") &&
        !QuestHelper.getActiveQuests(world, playerEntity).contains("defeat_goblins")) {
        
        QuestHelper.startQuestForPlayer(world, playerEntity, "defeat_goblins");
    }
});

Repeatable Daily Quest

// Daily mining quest
Quest dailyMine = new Quest();
dailyMine.id = "daily_miner";
dailyMine.name = "Miner's Daily Grind";
dailyMine.description = "Mine 20 blocks of any ore";
dailyMine.objectives = Arrays.asList(
    new Objective("mine", "ore", 20, "Mine any ore blocks")
);
dailyMine.rewards = Arrays.asList(
    new Reward("item", "Tool_Pickaxe_Iron", 1)
);
dailyMine.repeatable = true;
dailyMine.repeatCooldownTicks = 24000; // 1 day

QuestHelper.registerQuest(world, dailyMine);

Quest Chain with Prerequisites

// Story quest chain
Quest quest1 = new Quest();
quest1.id = "village_help";
quest1.name = "Village Helper";
quest1.description = "Help the villagers with basic tasks";
// ... setup objectives and rewards

Quest quest2 = new Quest();
quest2.id = "explore_caves";
quest2.name = "Cave Explorer";
quest2.description = "Explore the dangerous caves";
// ... setup objectives and rewards

// Make quest2 require quest1 completion
QuestHelper.addQuestPrerequisite("explore_caves", "village_help");

QuestHelper.registerQuest(world, quest1);
QuestHelper.registerQuest(world, quest2);

Clone this wiki locally