Ce guide explique comment ajouter un nouveau module de jeu (Scénario) au plugin Sky Defender. Le système est conçu pour être modulaire : chaque scénario est une classe isolée qui s'active et se désactive à la demande.
- Classe mère (Abstraite) :
fr.lliksel.skydefender.scenario.Scenario - Vos implémentations :
fr.lliksel.skydefender.scenario.impl.* - Le registre :
fr.lliksel.skydefender.manager.ScenarioManager
Créez une nouvelle classe Java dans le package fr.lliksel.skydefender.scenario.impl.
Par convention, nommez-la NomDuScenario.java (ex: NoFallScenario.java).
Elle doit hériter de la classe Scenario.
package fr.lliksel.skydefender.scenario.impl;
import fr.lliksel.skydefender.scenario.Scenario;
import org.bukkit.Material;
import org.bukkit.plugin.java.JavaPlugin;
import java.util.Arrays;
public class MonSuperScenario extends Scenario {
// Le constructeur doit OBLIGATOIREMENT prendre JavaPlugin en paramètre
public MonSuperScenario(JavaPlugin plugin) {
super(plugin,
"Nom du Scénario", // Nom affiché dans le GUI
Material.DIAMOND_SWORD, // Icône affichée dans le GUI
Arrays.asList( // Description (Lore)
"§7Description ligne 1",
"§7Description ligne 2"
)
);
}
}La classe Scenario implémente déjà l'interface Listener de Bukkit.
Vous pouvez donc ajouter directement vos méthodes @EventHandler dans votre classe.
La magie du système : Vous n'avez pas besoin d'enregistrer les events manuellement. La méthode toggle() de la classe mère s'occupe d'enregistrer vos listeners quand le scénario s'active, et de les désenregistrer quand il se désactive.
Exemple pour un scénario NoFall (pas de dégâts de chute) :
@EventHandler
public void onDamage(org.bukkit.event.entity.EntityDamageEvent event) {
// Vérifier si la cause est la chute
if (event.getCause() == org.bukkit.event.entity.EntityDamageEvent.DamageCause.FALL) {
// Vérifier si c'est un joueur (optionnel selon le but)
if (event.getEntity() instanceof org.bukkit.entity.Player) {
event.setCancelled(true); // Annuler les dégâts
}
}
}Si vous avez besoin d'initialiser des variables ou de lancer une tâche répétitive (Runnable) quand le scénario s'active, vous pouvez surcharger ces méthodes :
@Override
protected void onEnable() {
System.out.println("Mon scénario vient de démarrer !");
}
@Override
protected void onDisable() {
// Nettoyage si besoin
}Pour que votre scénario apparaisse dans le menu en jeu, vous devez l'ajouter au ScenarioManager.
- Ouvrez
src/main/java/fr/lliksel/skydefender/manager/ScenarioManager.java. - Dans le constructeur, ajoutez une ligne
registerScenario:
public ScenarioManager(SkyDefender plugin) {
this.plugin = plugin;
this.scenarios = new ArrayList<>();
// --- ENREGISTREMENT DES SCÉNARIOS ---
registerScenario(new CutCleanScenario(plugin));
// AJOUTEZ VOTRE LIGNE ICI :
registerScenario(new MonSuperScenario(plugin));
}- Compilez le plugin (
mvn clean package). - Lancez le serveur.
- Prenez l'Œil de l'Ender (Menu Admin).
- Allez dans Scénarios.
- Votre scénario doit apparaître. Cliquez dessus pour l'activer (il devient vert et enchanté).
- Testez en jeu !