LogoLogo
BlogSite internet
  • 🏠Accueil
  • Documentation pour les devs et admins
    • Contribuer au plugin
      • Build le plugin
      • Impératifs
    • Contribuer au wiki
    • Utiliser le plugin
    • Les systèmes
      • Les quètes
      • Les intérèts
  • Commandes
    • Mail
    • Fun
    • Utilitaire
    • Économie
    • Téléportation
    • Amis
  • Features
    • Les Contest
    • Les Villes
    • Nourriture custom
    • Trade
    • Les jeux et évents aléatoires
    • Les LootBox
    • Les dimensions
  • Outils
    • Marteaux
    • Wands
Propulsé par GitBook
Sur cette page
  • Table des matières
  • Vue d'ensemble
  • Architecture du système
  • Guide d'implémentation
  • Créer une nouvelle quête
  • Enregistrer une quête
  • Implementer une progression
  • Composants du système
  • Récompenses
  • Progression
  • Utilisation avancée
  • QuestBuilder
  • Bonnes pratiques

Cet article vous a-t-il été utile ?

Modifier sur GitHub
  1. Documentation pour les devs et admins
  2. Les systèmes

Les quètes

Dernière mise à jour il y a 1 mois

Cet article vous a-t-il été utile ?

Table des matières

Vue d'ensemble

Le système de quêtes permet d'implémenter des objectifs pour les joueurs dans le jeu. Il est conçu pour être flexible, permettant de créer diverses quêtes avec différents niveaux de complexité et de récompenses.

Architecture du système

Le système est composé des éléments suivants :

Composant
Description

Quête

Objet principal qui contient un nom, une description, une icône et une liste de paliers

Palier de Quête

Niveau de progression avec un objectif et des récompenses

Étape de Quête

Sous-objectifs optionnels au sein d'un palier

Récompenses

Objets ou argent attribués lorsqu'un palier est complété

Progression

Système de suivi et sauvegarde de l'avancement des joueurs

Guide d'implémentation

Créer une nouvelle quête

  1. Créez une classe qui étend Quest :

package fr.openmc.core.features.quests.quests;

import fr.openmc.core.features.quests.objects.Quest;
import fr.openmc.core.features.quests.objects.QuestTier;
import fr.openmc.core.features.quests.rewards.QuestMoneyReward;
import org.bukkit.Material;

public class MinerQuest extends Quest {

    public MinerQuest() {
        // Nom de la quête: String, description: String, icône: ItemStack ou Material, Action bar: boolean *facultatif*
        super("Mineur professionnel", "Miner {target} blocs", Material.DIAMOND_PICKAXE, false);

        this.addTiers(
            new QuestTier(10, new QuestMoneyReward(100)),
            new QuestTier(50, new QuestMoneyReward(500)),
            new QuestTier(100, new QuestMoneyReward(1000))
        );
    }
}

pour l'action bar, le boolean est facultatif, par défaut il est à false. Il permet d'afficher la progression de la quête dans la barre d'action du joueur, elle s'afficheras a chaque palier (50), pour éviter de spammer le joueur.

Enregistrer une quête

Ajoutez votre quête au gestionnaire dans la méthode loadDefaultQuests :

public void loadDefaultQuests() {
    this.registerQuests(
        new MinerQuest(),
        new FishingQuest(),
        // Autres quêtes...
    );
}

Implementer une progression

  1. Une progression unique (1):

    @EventHandler
    public void onPlayerBreakBlock(BlockBreakEvent event) {
        if (event.getBlock().getType() == Material.DIAMOND_ORE) {
            // incrementer la progression de la quête de 1
            this.incrementProgress(event.getPlayer().getUniqueId());
        }
    }
  1. Une progression multiple (n):

    @EventHandler
    public void onPlayerBreakBlock(FurnaceExtractEvent event) {
        if (event.getBlock().getType() == Material.DIAMOND_ORE) {
            if (event.getItemType().equals(Material.IRON_INGOT)) {
                int amount = event.getItemAmount(); // Récupérer le nombre d'items extraits
                // incrementer la progression de la quête de amount (n)
                this.incrementProgress(event.getPlayer().getUniqueId(), amount);
            }
        }
    }
  1. Progression avec les étapes:

        this.incrementStepProgress(playerUUID, 0); // Incrémente la progression de l'étape 0 (= index)
        this.incrementProgress(playerUUID); // Incrémente la progression de la quête

Composants du système

Récompenses

Deux types de récompenses sont disponibles :

  1. Récompenses en objets (QuestItemReward) :

    // Donne 5 diamants
    new QuestItemReward(Material.DIAMOND, 5);
    
    // Ou avec un ItemStack personnalisé
    ItemStack customItem = new ItemStack(Material.DIAMOND_SWORD);
    // Personnalisation de l'objet...
    new QuestItemReward(customItem);
  2. Récompenses en argent (QuestMoneyReward) :

    // Donne 500 unités de monnaie
    new QuestMoneyReward(500);

Progression

La progression des joueurs est automatiquement gérée par le QuestProgressSaveManager :

  • Les données sont stockées dans des fichiers YAML

  • Emplacement : dossier quests du répertoire de données du plugin

  • Chargement et sauvegarde automatiques

Utilisation avancée

QuestBuilder

Le QuestBuilder permet de créer des quêtes avec des étapes.

Quest armorQuest = new QuestBuilder("Armure précieuse", "Fabriquer une armure complète en diamant", new ItemStack(Material.DIAMOND_CHESTPLATE))
        .tier(4, "Fabriquer une armure complète en diamant", new QuestItemReward(Material.DIAMOND, 10))
        .step("Casque en diamant", 1)
        .step("Plastron en diamant", 1)
        .step("Pantalon en diamant", 1)
        .step("Bottes en diamant", 1)
        .requireAllSteps(true)
        .build();

// Enregistrer la quête
for (int i = 0; i < armorQuest.getTiers().size(); i++) {
    this.addTier(armorQuest.getTiers().get(i)); // Ajoute chaque palier à la quête 
}  

Bonnes pratiques

  1. Nommage clair : Utilisez des noms et descriptions explicites pour les quêtes

  2. Équilibre des récompenses : Assurez-vous que les récompenses sont proportionnelles à la difficulté

  3. Tests rigoureux : Vérifiez que les déclencheurs d'événements fonctionnent correctement

  4. Progression intuitive : Concevez des paliers avec une difficulté progressive

  5. Documentation : Commentez votre code pour faciliter la maintenance


Développé par

Axeno
Vue d'ensemble
Architecture du système
Guide d'implémentation
Créer une nouvelle quête
Enregistrer une quête
Gérer des événements spécifiques
Composants du système
Récompenses
Progression
Utilisation avancée
QuestBuilder
Bonnes pratiques