Files
Documentation/content/gameplay-systems/objectives.fr.md
2026-01-20 20:33:59 +01:00

5.4 KiB

title, type, weight
title type weight
Objectifs docs 1

Le systeme d'objectifs fournit des mecaniques de quetes avec des taches, des completions et un suivi de progression.

Package: com.hypixel.hytale.builtin.adventure.objectives

Concepts Cles

ObjectiveAsset

Les objectifs sont definis comme des assets JSON charges depuis Objectives/:

public class ObjectiveAsset {
    protected String id;                              // Identifiant unique
    protected String category;                        // Categorie de quete
    protected TaskSet[] taskSets;                     // Groupes de taches sequentiels
    protected ObjectiveCompletionAsset[] completionHandlers;  // Recompenses
    protected String objectiveTitleKey;               // Cle de localisation du titre
    protected String objectiveDescriptionKey;         // Cle de localisation de description
    protected boolean removeOnItemDrop;               // Retirer items objectif au drop
}

TaskSet

Chaque objectif contient un ou plusieurs TaskSets a completer sequentiellement:

public class TaskSet {
    protected String descriptionId;      // Cle de description optionnelle
    protected ObjectiveTaskAsset[] tasks; // Taches a completer en parallele
}

Instance d'Objectif

Quand demarre, une instance Objective suit l'etat:

public class Objective {
    private final UUID uuid;                    // ID unique de l'instance
    private final String objectiveId;           // Reference ID de l'asset
    private final Set<UUID> playerUUIDs;        // Joueurs participants
    private ObjectiveTask[] currentTasks;       // Taches actives
    private int taskSetIndex;                   // Index du TaskSet courant
}

Types de Taches

Le systeme fournit des types de taches integres enregistres par ObjectivePlugin:

Type Classe Description
Craft CraftObjectiveTask Fabriquer des items specifiques
Gather GatherObjectiveTask Collecter des items dans l'inventaire
UseBlock UseBlockObjectiveTask Interagir avec des blocs
UseEntity UseEntityObjectiveTask Interagir avec des entites
TreasureMap TreasureMapObjectiveTask Trouver des emplacements de tresor
ReachLocation ReachLocationTask Atteindre des coordonnees specifiques

Exemple d'Asset de Tache

# 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 }
      ]
    }
  ]
}

Gestionnaires de Completion

Quand tous les TaskSets sont completes, les gestionnaires de completion s'executent:

Type Classe Description
GiveItems GiveItemsCompletion Donner des items au joueur
ClearObjectiveItems ClearObjectiveItemsCompletion Retirer les items lies a l'objectif

Utilisation de l'API

Demarrer des Objectifs

ObjectivePlugin plugin = ObjectivePlugin.get();

// Demarrer un objectif pour un joueur
plugin.startObjective(player, "collect_wood");

// Avec des donnees personnalisees
Objective objective = plugin.startObjective(player, "collect_wood", customData);

Suivre la Progression

// Obtenir les objectifs actifs du joueur
ObjectiveHistoryComponent history = store.getComponent(
    playerRef,
    ObjectiveHistoryComponent.getComponentType()
);

// Verifier le statut de l'objectif
ObjectiveHistoryData data = history.getObjectiveData("collect_wood");
if (data != null && data.isCompleted()) {
    // Deja complete
}

Completer des Objectifs

// Marquer l'objectif comme complete (declenche les completions)
objective.complete(objectivePlugin);

// Annuler l'objectif sans recompenses
objective.cancel(objectivePlugin);

Conditions de Declenchement

Les objectifs peuvent avoir des conditions de declenchement pour l'activation:

// Declencheur base sur la meteo
public class WeatherTriggerCondition { /* ... */ }

// Declencheur base sur la position
public class ObjectiveLocationTriggerCondition { /* ... */ }

// Declencheur base sur l'heure
public class HourRangeTriggerCondition { /* ... */ }

Marqueurs de Position

Utilisez les marqueurs pour creer des objectifs spatiaux:

// Definir une zone de marqueur
public interface ObjectiveLocationMarkerArea {
    boolean isInArea(Vector3d position);
}

// Types de zones integres
public class ObjectiveLocationAreaRadius { /* Zone spherique */ }
public class ObjectiveLocationAreaBox { /* Zone boite */ }

Commandes

Commande Description
/objective start <id> [joueur] Demarrer un objectif
/objective complete <id> [joueur] Forcer la completion
/objective history [joueur] Voir l'historique
/objective panel Ouvrir le panneau admin

Evenements

// Coffre au tresor ouvert pendant l'objectif
public class TreasureChestOpeningEvent implements IEvent<UUID> {
    public TreasureChestState getChestState();
    public Player getPlayer();
}

Configuration

Les assets sont charges depuis le repertoire Objectives/ avec support d'heritage:

# Objectives/config.yaml
ObjectiveGameplayConfig:
  DefaultObjectives:
    - tutorial_quest
    - welcome_message