Créer un plugin Minecraft RPG avec des Classes et Capacités en Java utilisant la POO


Minecraft est un jeu qui invite à l’exploration et à la créativité. Mais imaginez un serveur où les joueurs peuvent devenir des guerriers, des mages, ou encore des archers, chacun avec des capacités uniques. Dans cet article, nous allons créer un plugin Minecraft RPG en Java, tout en exploitant la programmation orientée objet (POO) pour concevoir un système de classes et de capacités modulaires.

Vous apprendrez à utiliser Gradle pour gérer votre projet et découvrirez comment appliquer les principes de la POO pour un code propre, extensible et maintenable.

Sommaire

  1. Configurer un Projet Minecraft avec Gradle
  1. Concevoir les Classes RPG avec la POO
  1. Intégrer les Classes dans le Plugin
  1. Tester et Packager le Plugin
  1. Sources et Références

Configurer un Projet Minecraft avec Gradle

1. Initialisation du Projet

Ouvrez un terminal et créez un nouveau projet Gradle :

gradle init

Lors de l’initialisation, sélectionnez :

  • Type de projet : Application.
  • Langage : Java.
  • Structure : Groovy.

2. Ajouter les Dépendances Spigot

Modifiez le fichier build.gradle pour inclure l’API Spigot :

plugins {
    id 'java'
}

repositories {
    mavenCentral()
    maven {
        url = 'https://hub.spigotmc.org/nexus/content/repositories/snapshots/'
    }
}

dependencies {
    compileOnly 'org.spigotmc:spigot-api:1.20.1-R0.1-SNAPSHOT'
}

Synchronisez le projet avec votre IDE (IntelliJ IDEA, Eclipse, ou autre).

Concevoir les Classes RPG avec la POO

Pour rendre notre plugin modulaire et facile à étendre, nous allons utiliser la programmation orientée objet.

1. Créer une Classe Abstraite pour les Classes RPG

Cette classe servira de base pour toutes les classes RPG. Elle définira les comportements communs comme l’activation de capacités.

package com.yourname.rpg;

import org.bukkit.entity.Player;

public abstract class RPGClass {
    protected String className;

    public RPGClass(String className) {
        this.className = className;
    }

    public abstract void useAbility(Player player);

    public String getClassName() {
        return className;
    }
}

2. Implémenter les Classes Spécifiques

Guerrier (Warrior)

package com.yourname.rpg;

import org.bukkit.entity.Player;
import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionEffectType;

public class Warrior extends RPGClass {
    public Warrior() {
        super("Warrior");
    }

    @Override
    public void useAbility(Player player) {
        player.addPotionEffect(new PotionEffect(PotionEffectType.INCREASE_DAMAGE, 200, 1));
        player.sendMessage("You activated Warrior's Rage!");
    }
}

Mage

package com.yourname.rpg;

import org.bukkit.Particle;
import org.bukkit.Sound;
import org.bukkit.entity.Player;

public class Mage extends RPGClass {
    public Mage() {
        super("Mage");
    }

    @Override
    public void useAbility(Player player) {
        player.getWorld().spawnParticle(Particle.SPELL, player.getLocation(), 30);
        player.getWorld().playSound(player.getLocation(), Sound.ENTITY_WITCH_AMBIENT, 1, 1);
        player.sendMessage("You cast a magical wave!");
    }
}

3. Utiliser une Fabrique pour Instancier les Classes

La fabrique permet de créer dynamiquement les classes RPG en fonction d’un nom.

package com.yourname.rpg;

public class RPGClassFactory {
    public static RPGClass createClass(String className) {
        switch (className.toLowerCase()) {
            case "warrior":
                return new Warrior();
            case "mage":
                return new Mage();
            default:
                throw new IllegalArgumentException("Unknown class: " + className);
        }
    }
}

Intégrer les Classes dans le Plugin

1. Créer la Classe Principale

La classe principale doit gérer l’activation du plugin et les commandes associées.

package com.yourname;

import com.yourname.rpg.RPGClass;
import com.yourname.rpg.RPGClassFactory;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;

import java.util.HashMap;
import java.util.Map;

public class RPGPlugin extends JavaPlugin implements CommandExecutor {
    private final Map<Player, RPGClass> playerClasses = new HashMap<>();

    @Override
    public void onEnable() {
        getCommand("class").setExecutor(this);
        getCommand("ability").setExecutor(this);
    }

    @Override
    public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
        if (sender instanceof Player) {
            Player player = (Player) sender;

            if (label.equalsIgnoreCase("class")) {
                if (args.length == 0) {
                    player.sendMessage("Usage: /class <classname>");
                    return false;
                }
                try {
                    RPGClass rpgClass = RPGClassFactory.createClass(args[0]);
                    playerClasses.put(player, rpgClass);
                    player.sendMessage("You are now a " + rpgClass.getClassName() + "!");
                } catch (IllegalArgumentException e) {
                    player.sendMessage(e.getMessage());
                }
                return true;
            }

            if (label.equalsIgnoreCase("ability")) {
                RPGClass rpgClass = playerClasses.get(player);
                if (rpgClass != null) {
                    rpgClass.useAbility(player);
                } else {
                    player.sendMessage("You haven't selected a class yet!");
                }
                return true;
            }
        }
        return false;
    }
}

Tester et Packager

  1. Compilez le plugin :
   gradle build
  1. Placez le fichier .jar généré dans le dossier plugins de votre serveur Spigot.
  2. Lancez le serveur et testez les commandes :

Tester les commandes

  • /class warrior ou /class mage.
  • /ability pour utiliser la capacité.

Sources et Références

  1. SpigotMC API Documentation
  2. Guide officiel de Gradle
  3. Concepts de la POO en Java
  4. Tutoriels de SpigotMC
  5. Configurer un serveur Minecraft avec Spigot
  6. Bukkit Sound List
  7. Guide sur les particules dans Minecraft
  8. Forum officiel de SpigotMC
  9. Java for Minecraft: Learn to Program with Minecraft Plugins par Adrienne Decker et Enrico Nardelli
  10. Head First Java par Kathy Sierra et Bert Bates
  11. Minecraft-France