Aller au contenu principal

API zQuests

zQuests fournit une API pour les developpeurs afin d'interagir avec les quetes, gerer la progression et creer des integrations personnalisees.

Configuration

Maven/Gradle

Ajoutez l'API zQuests comme dependance :

repositories {
maven {
name = "groupezReleases"
url = uri("https://repo.groupez.dev/releases")
}
}

dependencies {
compileOnly("fr.maxlego08.quests:zquests-api:<version>")
}

Remplacez <version> par la version de zQuests executee sur votre serveur.

plugin.yml

Ajoutez zQuests comme dependance :

depend: [zQuests]
# ou
softdepend: [zQuests]

Acces aux managers

Utilisez le ServicesManager de Bukkit pour acceder aux managers de zQuests :

import fr.maxlego08.quests.api.QuestManager;
import fr.maxlego08.quests.api.HologramManager;
import fr.maxlego08.quests.api.WayPointManager;
import org.bukkit.Bukkit;

public class MonPlugin extends JavaPlugin {

private QuestManager questManager;
private HologramManager hologramManager;
private WayPointManager wayPointManager;

@Override
public void onEnable() {
// Obtenir le manager de quetes
questManager = Bukkit.getServicesManager().load(QuestManager.class);

// Obtenir le manager d'hologrammes (optionnel)
hologramManager = Bukkit.getServicesManager().load(HologramManager.class);

// Obtenir le manager de waypoints (optionnel)
wayPointManager = Bukkit.getServicesManager().load(WayPointManager.class);

if (questManager != null) {
getLogger().info("API zQuests chargee !");
}
}
}

Quest Manager

Le QuestManager est l'interface principale de l'API pour interagir avec les quetes.

Obtenir les informations de quete

// Obtenir une quete par son nom
Optional<Quest> quest = questManager.getQuest("casseur-pierre-1");

// Obtenir toutes les quetes
List<Quest> toutesQuetes = questManager.getQuests();

// Verifier si une quete existe
boolean existe = questManager.getQuest("nom-quete").isPresent();

Donnees de quete du joueur

UUID playerId = player.getUniqueId();

// Obtenir les quetes actives du joueur
List<ActiveQuest> quetesActives = questManager.getActiveQuests(playerId);

// Verifier si le joueur a une quete specifique active
boolean aQuete = questManager.hasActiveQuest(playerId, "casseur-pierre-1");

// Obtenir la progression du joueur sur une quete
Optional<ActiveQuest> queteActive = questManager.getActiveQuest(playerId, "casseur-pierre-1");
if (queteActive.isPresent()) {
int progression = queteActive.get().getProgress();
int objectif = queteActive.get().getQuest().getGoal();
}

Demarrer et completer des quetes

// Demarrer une quete pour un joueur
questManager.startQuest(playerId, "casseur-pierre-1");

// Completer une quete pour un joueur
questManager.completeQuest(playerId, "casseur-pierre-1");

// Supprimer une quete des donnees du joueur
questManager.deleteQuest(playerId, "casseur-pierre-1");

// Redemarrer une quete
questManager.restartQuest(playerId, "casseur-pierre-1");

Modifier la progression

// Definir une valeur de progression exacte
questManager.setProgress(playerId, "casseur-pierre-1", 250);

// Ajouter a la progression
questManager.addProgress(playerId, "casseur-pierre-1", 10);

Gerer les evenements de quete

Declenchez la progression de quete pour des types de quetes specifiques :

// Gerer la progression de casse de bloc
int misAJour = questManager.handleQuests(
playerId,
QuestType.BLOCK_BREAK,
1, // quantite
Material.STONE // donnees de l'action
);

// Gerer la progression de meurtre d'entite
questManager.handleQuests(
playerId,
QuestType.ENTITY_KILL,
1,
EntityType.ZOMBIE
);

// Gerer la progression de quete personnalisee
questManager.handleQuests(
playerId,
QuestType.CUSTOM,
1,
"mes-donnees-personnalisees"
);

La valeur de retour indique combien de quetes ont ete mises a jour.

Types de quetes personnalises

Utilisation du type CUSTOM

Le type de quete CUSTOM vous permet de creer des quetes suivies par votre propre logique :

quests:
- type: CUSTOM
name: "parler-pnj"
display-name: "Parler au Guide"
goal: 1
actions:
- data: "pnj:guide"

Declenchez la progression depuis votre plugin :

// Quand le joueur parle a votre PNJ
public void onInteractionPNJ(Player player, String pnjId) {
QuestManager manager = Bukkit.getServicesManager().load(QuestManager.class);
if (manager != null) {
// Les donnees doivent correspondre aux donnees d'action de la quete
int resultat = manager.handleQuests(
player.getUniqueId(),
QuestType.CUSTOM,
1,
"pnj:" + pnjId
);

if (resultat > 0) {
// La/les quete(s) ont ete mises a jour
player.sendMessage("Progression de quete mise a jour !");
}
}
}

Quetes de contenu d'inventaire

Pour les quetes INVENTORY_CONTENT qui necessitent la livraison d'items :

// Creer la verification du contenu d'inventaire
InventoryContent content = new InventoryContent(player, "nom_pnj");

// Traiter la quete (verifie l'inventaire et retire les items)
int resultat = questManager.handleInventoryQuests(content);

Evenements

zQuests declenche plusieurs evenements que vous pouvez ecouter :

QuestStartEvent

Declenche quand une quete demarre pour un joueur.

@EventHandler
public void onQuestStart(QuestStartEvent event) {
Player player = event.getPlayer();
Quest quest = event.getQuest();

if (player != null) {
player.sendMessage("Quete demarree : " + quest.getDisplayName());
}
}

QuestProgressEvent

Declenche quand une progression de quete est faite.

@EventHandler
public void onQuestProgress(QuestProgressEvent event) {
Player player = event.getPlayer();
ActiveQuest queteActive = event.getActiveQuest();
int progression = queteActive.getProgress();
int objectif = queteActive.getQuest().getGoal();

if (player != null) {
player.sendMessage("Progression : " + progression + "/" + objectif);
}
}

QuestCompleteEvent

Declenche quand une quete est completee.

@EventHandler
public void onQuestComplete(QuestCompleteEvent event) {
Player player = event.getPlayer();
Quest quest = event.getActiveQuest().getQuest();

if (player != null) {
player.sendMessage("Completee : " + quest.getDisplayName());

// Donner des recompenses personnalisees
player.getInventory().addItem(new ItemStack(Material.DIAMOND, 5));
}
}

QuestFavoriteChangeEvent

Declenche quand le statut favori d'une quete change.

@EventHandler
public void onFavoriteChange(QuestFavoriteChangeEvent event) {
Player player = event.getPlayer();
boolean estFavori = event.isFavorite();

if (player != null && estFavori) {
player.sendMessage("Quete ajoutee aux favoris !");
}
}

QuestPostProgressEvent

Declenche apres que la progression de quete soit traitee.

@EventHandler
public void onPostProgress(QuestPostProgressEvent event) {
// Utile pour le post-traitement ou la journalisation
}

QuestUserLoadEvent

Declenche quand les donnees de quete d'un joueur sont chargees.

@EventHandler
public void onUserLoad(QuestUserLoadEvent event) {
UUID playerId = event.getPlayerId();
// Les donnees de quete du joueur sont maintenant disponibles
}

Hologram Manager

Gerez les hologrammes de quetes par programme :

HologramManager hologramManager = Bukkit.getServicesManager().load(HologramManager.class);

if (hologramManager != null) {
// Rafraichir tous les hologrammes pour un joueur
hologramManager.refreshHolograms(player);

// Rafraichir tous les hologrammes globalement
hologramManager.refreshAllHolograms();
}

Waypoint Manager

Gerez les waypoints de quetes :

WayPointManager wayPointManager = Bukkit.getServicesManager().load(WayPointManager.class);

if (wayPointManager != null) {
// Rafraichir les waypoints pour un joueur
wayPointManager.refreshWaypoints(player);
}

Exemple complet

Voici un exemple de plugin complet qui s'integre avec zQuests :

package com.exemple.integrationquetes;

import fr.maxlego08.quests.api.QuestManager;
import fr.maxlego08.quests.api.QuestType;
import fr.maxlego08.quests.api.events.QuestCompleteEvent;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerInteractEntityEvent;
import org.bukkit.plugin.java.JavaPlugin;

public class IntegrationQuetes extends JavaPlugin implements Listener {

private QuestManager questManager;

@Override
public void onEnable() {
questManager = Bukkit.getServicesManager().load(QuestManager.class);

if (questManager == null) {
getLogger().warning("zQuests non trouve !");
return;
}

getServer().getPluginManager().registerEvents(this, this);
getLogger().info("Integration de quetes activee !");
}

@EventHandler
public void onInteractionPNJ(PlayerInteractEntityEvent event) {
Player player = event.getPlayer();

// Exemple : Declencher une quete personnalisee quand le joueur interagit avec un villageois
if (event.getRightClicked().getType().name().equals("VILLAGER")) {
int resultat = questManager.handleQuests(
player.getUniqueId(),
QuestType.CUSTOM,
1,
"villageois:interaction"
);

if (resultat > 0) {
player.sendMessage("§aProgression de quete : Parle au villageois !");
}
}
}

@EventHandler
public void onQuestComplete(QuestCompleteEvent event) {
Player player = event.getPlayer();
if (player == null) return;

String nomQuete = event.getActiveQuest().getQuest().getName();

// Gestion personnalisee pour des quetes specifiques
if (nomQuete.equals("quete-speciale")) {
player.sendMessage("§6§lQuete speciale completee !");
// Ajoutez votre logique personnalisee ici
}
}
}

Bonnes pratiques

  1. Verifiez les null - Verifiez toujours si les managers sont disponibles
  2. Utilisez les evenements - Ecoutez les evenements au lieu de verifier periodiquement les changements
  3. Considerations async - Les operations de quete sont thread-safe mais les callbacks peuvent etre async
  4. Cachez les references - Stockez les references des managers dans onEnable() au lieu de les recuperer a chaque fois
  5. Gerez les soft dependencies - Faites de zQuests une soft-depend si votre plugin doit fonctionner sans

Javadocs de l'API

Pour la documentation complete de l'API, consultez les Javadocs generees depuis le code source ou explorez le module API dans le depot GitHub.

Copyright © 2026 GroupeZ|Build #loading...|-