--- title: Objectives type: docs weight: 1 --- The objectives system provides quest mechanics with tasks, completions, and progress tracking. **Package:** `com.hypixel.hytale.builtin.adventure.objectives` ## Core Concepts ### ObjectiveAsset Objectives are defined as JSON assets loaded from `Objectives/`: ```java public class ObjectiveAsset { protected String id; // Unique identifier protected String category; // Quest category protected TaskSet[] taskSets; // Sequential task groups protected ObjectiveCompletionAsset[] completionHandlers; // Rewards protected String objectiveTitleKey; // Localization key for title protected String objectiveDescriptionKey; // Localization key for description protected boolean removeOnItemDrop; // Remove objective items on drop } ``` ### TaskSet Each objective contains one or more TaskSets that must be completed sequentially: ```java public class TaskSet { protected String descriptionId; // Optional description key protected ObjectiveTaskAsset[] tasks; // Tasks to complete in parallel } ``` ### Objective Instance When started, an `Objective` instance tracks state: ```java public class Objective { private final UUID uuid; // Unique instance ID private final String objectiveId; // Asset ID reference private final Set playerUUIDs; // Participating players private ObjectiveTask[] currentTasks; // Active tasks private int taskSetIndex; // Current TaskSet index } ``` ## Task Types The system provides built-in task types registered by `ObjectivePlugin`: | Type | Class | Description | |------|-------|-------------| | `Craft` | `CraftObjectiveTask` | Craft specific items | | `Gather` | `GatherObjectiveTask` | Collect items in inventory | | `UseBlock` | `UseBlockObjectiveTask` | Interact with blocks | | `UseEntity` | `UseEntityObjectiveTask` | Interact with entities | | `TreasureMap` | `TreasureMapObjectiveTask` | Find treasure locations | | `ReachLocation` | `ReachLocationTask` | Reach specific coordinates | ### Task Asset Example ```yaml # Objectives/collect_wood.json { "Id": "collect_wood", "Category": "tutorial", "TaskSets": [ { "Tasks": [ { "Type": "Gather", "Item": "oak_log", "Amount": 10 } ] } ], "Completions": [ { "Type": "GiveItems", "Items": [ { "Item": "gold_coin", "Amount": 5 } ] } ] } ``` ## Completion Handlers When all TaskSets complete, completion handlers execute: | Type | Class | Description | |------|-------|-------------| | `GiveItems` | `GiveItemsCompletion` | Give items to player | | `ClearObjectiveItems` | `ClearObjectiveItemsCompletion` | Remove objective-related items | ## API Usage ### Starting Objectives ```java ObjectivePlugin plugin = ObjectivePlugin.get(); // Start objective for player plugin.startObjective(player, "collect_wood"); // With custom data Objective objective = plugin.startObjective(player, "collect_wood", customData); ``` ### Tracking Progress ```java // Get player's active objectives ObjectiveHistoryComponent history = store.getComponent( playerRef, ObjectiveHistoryComponent.getComponentType() ); // Check objective status ObjectiveHistoryData data = history.getObjectiveData("collect_wood"); if (data != null && data.isCompleted()) { // Already completed } ``` ### Completing Objectives ```java // Mark objective as complete (triggers completions) objective.complete(objectivePlugin); // Cancel objective without rewards objective.cancel(objectivePlugin); ``` ## Trigger Conditions Objectives can have trigger conditions for activation: ```java // Weather-based trigger public class WeatherTriggerCondition { /* ... */ } // Location-based trigger public class ObjectiveLocationTriggerCondition { /* ... */ } // Time-based trigger public class HourRangeTriggerCondition { /* ... */ } ``` ## Location Markers Use markers to create spatial objectives: ```java // Define marker area public interface ObjectiveLocationMarkerArea { boolean isInArea(Vector3d position); } // Built-in area types public class ObjectiveLocationAreaRadius { /* Spherical area */ } public class ObjectiveLocationAreaBox { /* Box area */ } ``` ## Commands | Command | Description | |---------|-------------| | `/objective start [player]` | Start an objective | | `/objective complete [player]` | Force complete | | `/objective history [player]` | View history | | `/objective panel` | Open admin panel | ## Events ```java // Treasure chest opened during objective public class TreasureChestOpeningEvent implements IEvent { public TreasureChestState getChestState(); public Player getPlayer(); } ``` ## Configuration Assets are loaded from `Objectives/` directory with inheritance support: ```yaml # Objectives/config.yaml ObjectiveGameplayConfig: DefaultObjectives: - tutorial_quest - welcome_message ```