1. Ce site utilise des cookies. En continuant à utiliser ce site, vous acceptez l'utilisation des cookies. En savoir plus.

[Tutoriel] Création d'un Plugin

Discussion dans 'Plugins' créé par FrozenLegend, 28 Mars 2015.

MineStrator, Votre hébergeur de serveur minecraft
  1. FrozenLegend

    FrozenLegend Sergent-chef

    293
    54
    28
    /!\ Le tuto est long car j'ai essayer de mettre le plus d'image possible ! /!\

    Bonjour à tous, aujourd'hui je vais vous faire un petit tutoriel sur la création d'un plugin.

    Ce plugin changeras le message de bienvenue (Si le joueur ce connecte pour la première fois il auras un message de bienvenue différent des autres)

    Il donneras un livre au nouveau venu, et changeras le message de déconnexion.

    /!\ Je fais ce plugin pour la version CB 1.7.2 r0.3 /!\

    Tout d'abord ce que vous avez besoin :

    Eclipse : Merci de vous Connecter/S'inscrire pour voir les liens.

    Bukkit 1.7.2 r0.3 : Merci de vous Connecter/S'inscrire pour voir les liens.


    Donc commençons par crée un nouveau projet JAVA comme ça :

    Screenshot_1.png


    Quand vous aurez cliquer sur Java Project une page s’ouvrira :

    Screenshot_20.png


    Nommer votre project pour moi c'est CMW puis faite NEXT >
    Aller dans la catégories Libraries.

    Cette page s'affiche alors :

    Screenshot_21.png

    Cliquer sur add External JARS et ajouter le jar bukkit-1.7.2-r0.3

    Screenshot_2.png

    Maintenant il faut crée un package :
    Clique droit sur src > New > Package

    Screenshot_3.png

    Cette page s'ouvre alors à vous :
    Screenshot_4.png

    /!\ NE PAS METTRE DE MAJUSCULE DANS LE NOM D'UN PACKAGE /!\

    Remplissez le nom de votre package de cette façon
    me.votrepseudo.nomdevotreplugin
    ou alors
    fr.votresite.nomdevotreplugin
    puis cliquez sur finish.

    Maintenant clique droit sur votre dossier de projet :
    Puis New > File

    Screenshot_5.png

    Cette page s'ouvre alors à vous :
    Screenshot_6.png
    Remplissez la case file name par plugin.yml puis faite Finish

    Maintenant clique droit sur votre package me.frozenlegend.tuto (pour moi)
    Puis New > Class
    Screenshot_7.png


    Cette page s'ouvre :

    Screenshot_22.png

    Il faut nommer votre classe moi je l'est nommé CMWTuto
    Puis cliquez sur browse à coter du java.lang.Object

    Suite au prochain post.
    (Limite de fichier joint atteint)​
     
    • J'aime J'aime x 1
    • Instructif Instructif x 1
    Dernière édition: 1 Avril 2015
  2. FrozenLegend

    FrozenLegend Sergent-chef

    293
    54
    28
    Une page s'ouvre alors à vous :
    Ecrivez javaplugin dans Choose a type puis selectioner JavaPlugin - org etc ...
    Screenshot_8.png
    Vous pouvez cliquez sur OK puis faire Finish
    Maintenant éditons le fichier plugin.yml
    Un fichier plugin.yml ce compose obligatoirement de :

    name: "Nom de votre plugin"
    main: "votre package"."votre class" ex:(me.frozen.legend.tuto.TutoCMW)
    version: "La version de votre plugin"
    Toute les autres choses sont optionnel.

    Screenshot_9.png

    Voila enregistrer votre plugin.yml et la création du projet est terminé ! Passons maintenant au code du Plugin !
    Votre class que vous avez crée ce compose de quelque ligne auto générer actuellement :
    Screenshot_10.png

    Il faut tout d'abord ajouter juste après extends JavaPlugin:
    Code:
    implements Listener
    Vous verrez que le Listener seras souligné en rouge
    Il faut mettre votre souris sur le mot souligné attendre 1 seconde est une petite fenêtre devrais apparaître avec une option Import 'Listener' (org.etc....)
    Vous devrez faire ça pour chaque mot souligné en rouge ! Ne l'oubliez pas c'est important !

    Screenshot_11.png
    Maintenant lions le plugin au serveur avec ce code que l'ont place dans notre class CMWTuto comme sur l'image :​
    Code:
        public void onEnable(){
            getServer().getPluginManager().registerEvents(this, this);
        }
    Screenshot_12.png

    On ajoute maintenant un bout de code pour voir si le joueurs c'est déjà connecter sur le serveur si c'est le cas on lui affiche juste le message de bienvenu voulu :
    Code:
    @EventHandler // Ne jamais oublier l'eventhandler il est très important sinon votre plugin ne fonctionneras pas
        public void onPlayerJoin(PlayerJoinEvent event){
            Player player = event.getPlayer(); // On recupère le joueur
            if(player.hasPlayedBefore()){ // On regarde si le joueurs c'est déjà connecter
                event.setJoinMessage("§e" + event.getPlayer().getName() + "§6 vient de se connecter"); // Si l'utilisateur c'est déjà connecter avant. On change juste le message ("Player" Join the game)
            }

    Screenshot_13.png

    Par contre si le joueurs ne c'est jamais connecter on lui affiche un message de bienvenu différent et on lui donne le livre des règles !
    Code:
    else // Sinon on fait autre chose pour les nouveau utilisateur (Phrase de bienvenue et le livre des règles)
            {
                event.setJoinMessage("§6Bienvenue à §e" + event.getPlayer().getName() + "§6 qui rejoins notre serveur !"); // Utilisateur qui se connecte pour la première fois sur le serveur.
            ItemStack livre = new ItemStack(Material.WRITTEN_BOOK, 1);
            BookMeta meta = (BookMeta) livre.getItemMeta();
            meta.setTitle("§6Règles du serveur SLCraft"); // 1er Phrases quand on passe la souris sur le livre
            meta.setAuthor("SLCraft Staff"); // 2ème Phrases quand on passe la souris sur le livre
            meta.setLore(Arrays.asList("§3Ce livre contient", "§ales règles du serveur")); // 3ème Phrases quand on passe la souris sur le livre
            meta.setPages(Arrays.asList(
                    "§4§lSommaire :§0 \n \n n°1 : §cLe grief §0\n n°2 : §cLe vol§0 \n n°3 : §cLe cheat§0 \n n°4 : §cL'usebug §0\n n°5 : §cSystèmes automatiques§0 \n n°6 : §cPortail vers le nether§0",
                    "§2§lArticle 1 : Le grief§0 \n \n Il est interdit de détruire ou de modifier les créations appartenant à autrui. Cela s'appelle le grief et un tel acte est puni d'un banissement définitif. ",
                    "§2§lArticle 2 : Le vol§0 \n \n Il est interdit de voler, que ce soit dans les coffres des autres, même s'ils ne sont pas protégés ou bien en ramassant les objets d'un joueur sur le sol.",
                    "§2§lArticle 3 : Le cheat§0 \n \n Toute forme de triche est interdite. Cela comprend les mods, en effet, ils permettent d'avoir un avantage sur les autres joueurs. Toute personne trichant sera bannie définitivement.",
                    "§2§lArticle 4 : L'usebug§0 \n \n Tous les bugs, qu'ils proviennent de Minecraft ou de Minebox, permettant de générer des ressources ou d'exploiter d'autres failles qui relèvent du cheat, sont interdits.",
                    "§2§lArticle 5 : Systèmes automatiques§0 \n \n Tout système permettant de générer des items ou de l’expérience automatiquement, comme les tours à mobs, est interdit.",
                    "§2§lArticle 6 : Les portails privés vers le nether§0 \n \n Il est défendu de créer de portails vers le nether. Empruntez le portail dans la salle des portail du spawn.",
                    "§4§lJ'aime les licornes."));
            livre.setItemMeta(meta);
            event.getPlayer().getInventory().addItem(livre); // Comme c'est la première fois qu'il se connecte on lui donne le livre des règles.
            }
    Screenshot_14.png

    Maintenant on change le message de déconnexion pour tout le monde :​

    Code:
    @EventHandler
        public void onPlayerQuit(PlayerQuitEvent event){
            event.setQuitMessage("§e" + event.getPlayer().getName() + "§6 vient de se déconnecter."); // On change le message de déconnexion !
            }
    Screenshot_16.png


    Code:
    package me.frozenlegend.tuto;
    
    import java.util.Arrays;
    
    import org.bukkit.Material;
    import org.bukkit.entity.Player;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.player.PlayerJoinEvent;
    import org.bukkit.event.player.PlayerQuitEvent;
    import org.bukkit.inventory.ItemStack;
    import org.bukkit.inventory.meta.BookMeta;
    import org.bukkit.plugin.java.JavaPlugin;
    
    public class CMWTuto extends JavaPlugin implements Listener{
    
        public void onEnable(){
            getServer().getPluginManager().registerEvents(this, this);
        }
    
        @EventHandler // Ne jamais oublier l'eventhandler il est très important sinon votre plugin ne fonctionneras pas
        public void onPlayerJoin(PlayerJoinEvent event){
            Player player = event.getPlayer(); // On recupère le joueur
            if(player.hasPlayedBefore()){ // On regarde si le joueurs c'est déjà connecter
                event.setJoinMessage("§e" + event.getPlayer().getName() + "§6 vient de se connecter"); // Si l'utilisateur c'est déjà connecter avant. On change juste le message ("Player" Join the game)
            }
            else // Sinon on fait autre chose pour les nouveau utilisateur (Phrase de bienvenue et le livre des règles)
            {
                event.setJoinMessage("§6Bienvenue à §e" + event.getPlayer().getName() + "§6 qui rejoins notre serveur !"); // Utilisateur qui se connecte pour la première fois sur le serveur.
            ItemStack livre = new ItemStack(Material.WRITTEN_BOOK, 1);
            BookMeta meta = (BookMeta) livre.getItemMeta();
            meta.setTitle("§6Règles du serveur SLCraft"); // 1er Phrases quand on passe la souris sur le livre
            meta.setAuthor("SLCraft Staff"); // 2ème Phrases quand on passe la souris sur le livre
            meta.setLore(Arrays.asList("§3Ce livre contient", "§ales règles du serveur")); // 3ème Phrases quand on passe la souris sur le livre
            meta.setPages(Arrays.asList(
                    "§4§lSommaire :§0 \n \n n°1 : §cLe grief §0\n n°2 : §cLe vol§0 \n n°3 : §cLe cheat§0 \n n°4 : §cL'usebug §0\n n°5 : §cSystèmes automatiques§0 \n n°6 : §cPortail vers le nether§0",
                    "§2§lArticle 1 : Le grief§0 \n \n Il est interdit de détruire ou de modifier les créations appartenant à autrui. Cela s'appelle le grief et un tel acte est puni d'un banissement définitif. ",
                    "§2§lArticle 2 : Le vol§0 \n \n Il est interdit de voler, que ce soit dans les coffres des autres, même s'ils ne sont pas protégés ou bien en ramassant les objets d'un joueur sur le sol.",
                    "§2§lArticle 3 : Le cheat§0 \n \n Toute forme de triche est interdite. Cela comprend les mods, en effet, ils permettent d'avoir un avantage sur les autres joueurs. Toute personne trichant sera bannie définitivement.",
                    "§2§lArticle 4 : L'usebug§0 \n \n Tous les bugs, qu'ils proviennent de Minecraft ou de Minebox, permettant de générer des ressources ou d'exploiter d'autres failles qui relèvent du cheat, sont interdits.",
                    "§2§lArticle 5 : Systèmes automatiques§0 \n \n Tout système permettant de générer des items ou de l’expérience automatiquement, comme les tours à mobs, est interdit.",
                    "§2§lArticle 6 : Les portails privés vers le nether§0 \n \n Il est défendu de créer de portails vers le nether. Empruntez le portail dans la salle des portail du spawn.",
                    "§4§lJ'aime les licornes."));
            livre.setItemMeta(meta);
            event.getPlayer().getInventory().addItem(livre); // Comme c'est la première fois qu'il se connecte on lui donne le livre des règles.
            }
        }
    
        @EventHandler
        public void onPlayerQuit(PlayerQuitEvent event){
            event.setQuitMessage("§e" + event.getPlayer().getName() + "§6 vient de se déconnecter."); // On change le message de déconnexion !
            }
    
    
    
    
    }

    Screenshot_17.png
    Suite au prochain post(Limite d'image encore :p)
     
    • Instructif Instructif x 1
  3. FrozenLegend

    FrozenLegend Sergent-chef

    293
    54
    28
    On fini par comment avoir son plugin en .Jar !

    Vous avez juste a faire clique droit sur votre fichier de projet et cliquer sur export comme ceci :
    Screenshot_18.png

    Choisissez ou vous voulez qu'il sois exporter et son nom en cliquant sur Browse !
    Screenshot_19.png

    Voila c'est la fin de se long tutoriel ! Il ne vous reste plus cas tester votre plugin !
    J'ai mis le mien à télécharger dans les fichier attachés !

    Cordialement, FrozenLegend

     

    Fichiers attachés:

    • CMWTuto.zip
      Taille de fichier:
      4.9 KB
      Affichages:
      288
    • Instructif Instructif x 1
  4. kumakuma215

    kumakuma215 ✬ Maréchal ✬

    1 641
    238
    83
    Ouais mais t'a pas expliquer comment mettre des commandes et tout sinon, tuto tres complet quand même ;)
     
  5. FrozenLegend

    FrozenLegend Sergent-chef

    293
    54
    28
    Les commandes sont inutile pour le plugin's crée dans le tuto, et quand on passe au commande ça devient tout de suite plus intéressant mais aussi plus complexe je voulais pas prendre le risque de "perdre" les gens qui débutent.
     
  6. kumakuma215

    kumakuma215 ✬ Maréchal ✬

    1 641
    238
    83
    D'accord ;)
     
  7. Jorishdpvp

    Jorishdpvp Sergent-chef

    263
    19
    18
    Merci beaucoup pour ce tuto ! :)
     
  8. POULPI49

    POULPI49 Soldat

    3
    0
    1
    le plugin marche ne ligne ?
     
  9. FrozenLegend

    FrozenLegend Sergent-chef

    293
    54
    28
    Bah logiquement un plugin c'est pour un serveur donc si on suis cette logique oui ! :confused:
    Plugin : Serveur
    Mod : Client (après tu peux avoir un serveur moddé mais faut un launcher)
     
  10. POULPI49

    POULPI49 Soldat

    3
    0
    1
    merci mec j'ais je crée un serveur maintenant avec mes propre plugin merci a toi <3
     
  11. Xx_Will33_xX

    Xx_Will33_xX Soldat

    45
    2
    8
    Je ferais une série sur Youtube mais ton tutoriel écrit est plutôt complet
     
  12. POULPI49

    POULPI49 Soldat

    3
    0
    1
    Cool ,je crée 3 plugin en tout grâce au TUTO jais un plugin avec des (un guns pour l'instant le temps que je trouve un système avec avec le rechargement :) si tu veu me contact , pour 1 plugin de vie (/set [ nurmero des cœur ajoute]) des d'autre truc :)
     
  13. SuperBGCrafteur

    SuperBGCrafteur Soldat

    24
    0
    6
    Il y a aussi une autre méthode on peut faire des classes secondaires perso c'est ce que j'utilise (et je savais coder en Java avant la parution du tutoriel). :)
    Je ferais problablement un tutoriel sur YouTube !
     
  14. FrozenLegend

    FrozenLegend Sergent-chef

    293
    54
    28
    Le tutoriel est très loin d'être complet, c'est juste pour expliquer quelque "base".
    Aucune utilité d'utiliser les class pour un petit plugin comme celui que j'ai expliquer ..
     
  15. AngryKiller

    AngryKiller ✬ Maréchal ✬

    1 037
    159
    63
    bon tuto mais ta pas expliqué comment on fait un fichier config.yml ou messages.yml
     
  16. kumakuma215

    kumakuma215 ✬ Maréchal ✬

    1 641
    238
    83
    Dans son plugin c'est pas nécessaire ^^
    Ps :
    @FrozenLegend
    Tu peux faire un tuto pour faire un plugin qui modifie la liste des plugins? (Sinon, j'arriverai à me débrouiller x))
     
  17. FrozenLegend

    FrozenLegend Sergent-chef

    293
    54
    28
    Je comprends pas trop ce que tu veux :p
     
  18. AngryKiller

    AngryKiller ✬ Maréchal ✬

    1 037
    159
    63
    il veut dire genre quand les joueurs font /pl sa met pas les vrais plugins
     
  19. cheesyp

    cheesyp Soldat

    13
    1
    3
    Alors je t'invite à te rendre sur la javadoc afin de savoir tout ce que tu veux savoir, ensuite si tu veux modifier ce que le /pl renvois, il faut que tu utilise l'event PlayerCommandPreprocessEvent cet event s'active lorsqu'une personne rentre une commande dans le chat, il te suffit de récupéré le message, de vérifier si il s'agit du /pl, de cancel l'event et ensuite d'envoyer un message custom.
    PHP:
    @EventHandler
    public void onPlayerCommand(PlayerCommandPreprocessEvent e)
    {
        
    String msg e.getMessage(); /* On récupère la commande */
        
    String[] cmd msg.split(" "); /* On supprime les espaces */

        
    if(cmd.length == && (cmd[0].equalsIgnoreCase("/pl")) /* On récupère la taille de la commande pour être sur que le joueur n'a pas juste mis un / et si la commande est /pl */
        
    {
            
    Player p e.getPlayer();
            
    p.sendMessage(ChatColor.GREEN "plugin1, plugin2, plugin3, ect...");
            
    e.setCancelled(true);

        }


    }
    A test car je l'ai fait sans ide donc je sais pas si il y a des erreurs.

    Ps: le lien de la javadoc Spigot Merci de vous Connecter/S'inscrire pour voir les liens.

    Pps: Pour ajouter la javadoc directement dans votre projet clic droit->properties->Javadoc Location et il suffit de mettre le lien de la javadoc
     

Partager cette page

Chargement...