Résolu Problème création plugin NullPointerException

Luca_008

Architecte en herbe
21 Novembre 2016
150
20
125
22
Bonjour, bonsoir,

Je me suis mis au développement Java depuis très peu, plus précisément au développement java pour la création de plugins pour spigot, j'ai la fameuse erreur "NullPointerException" qui est vraiment notre amie à tous :')

Je ne saurai décrire mon problème car pour certaines commandes ça fonctionne et certaines non '-'

Logs console ;

Code:
[21:58:16 ERROR]: Error occurred while enabling MonPlugin v1.0.4 (Is it up to date?)
java.lang.NullPointerException
        at me.Luca008.MonPlugin.MonPlugin.onEnable(MonPlugin.java:18) ~[?:?]
        at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:321) ~[spigot1.8.jar:git-Spigot-db6de12-18fbb24]
        at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:340) [spigot1.8.jar:git-Spigot-db6de12-18fbb24]
        at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:405) [spigot1.8.jar:git-Spigot-db6de12-18fbb24]
        at org.bukkit.craftbukkit.v1_8_R3.CraftServer.loadPlugin(CraftServer.java:357) [spigot1.8.jar:git-Spigot-db6de12-18fbb24]
        at org.bukkit.craftbukkit.v1_8_R3.CraftServer.enablePlugins(CraftServer.java:317) [spigot1.8.jar:git-Spigot-db6de12-18fbb24]
        at org.bukkit.craftbukkit.v1_8_R3.CraftServer.reload(CraftServer.java:741) [spigot1.8.jar:git-Spigot-db6de12-18fbb24]
        at org.bukkit.Bukkit.reload(Bukkit.java:535) [spigot1.8.jar:git-Spigot-db6de12-18fbb24]
        at org.bukkit.command.defaults.ReloadCommand.execute(ReloadCommand.java:25) [spigot1.8.jar:git-Spigot-db6de12-18fbb24]
        at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:141) [spigot1.8.jar:git-Spigot-db6de12-18fbb24]
        at org.bukkit.craftbukkit.v1_8_R3.CraftServer.dispatchCommand(CraftServer.java:641) [spigot1.8.jar:git-Spigot-db6de12-18fbb24]
        at org.bukkit.craftbukkit.v1_8_R3.CraftServer.dispatchServerCommand(CraftServer.java:627) [spigot1.8.jar:git-Spigot-db6de12-18fbb24]
        at net.minecraft.server.v1_8_R3.DedicatedServer.aO(DedicatedServer.java:412) [spigot1.8.jar:git-Spigot-db6de12-18fbb24]
        at net.minecraft.server.v1_8_R3.DedicatedServer.B(DedicatedServer.java:375) [spigot1.8.jar:git-Spigot-db6de12-18fbb24]
        at net.minecraft.server.v1_8_R3.MinecraftServer.A(MinecraftServer.java:654) [spigot1.8.jar:git-Spigot-db6de12-18fbb24]
        at net.minecraft.server.v1_8_R3.MinecraftServer.run(MinecraftServer.java:557) [spigot1.8.jar:git-Spigot-db6de12-18fbb24]
        at java.lang.Thread.run(Unknown Source) [?:1.8.0_101]

Je sais lire les log et je vois que le problème vient de ma classe principale nommée "MonPlugin" dans l'event "OnEnable" à la ligne 18


Je ne trouve pas l'erreur car la ligne 17 est pareille et y'a pas d'erreur.

Ma classe principale :

(J'ai identifié la ligne 17 et 18 en mettant un "17" et un "18" en debut de ligne. Ces nombres ne font pas partie de mon code Java :')

Code:
package me.Luca008.MonPlugin;

import org.bukkit.event.Listener;
import org.bukkit.plugin.PluginManager;
import org.bukkit.plugin.java.JavaPlugin;

import me.Luca008.MonPlugin.GmCommand;

public class MonPlugin extends JavaPlugin implements Listener{

        public void onEnable(){
        getLogger().warning("Plugin uniquement pour la version 1.8");
        PluginManager pm = getServer().getPluginManager();
        pm.registerEvents(new MesCommandes(this), this);
        pm.registerEvents(new Panneaux(this), this);
        getCommand("gm").setExecutor(new GmCommand());
17      getCommand("fly").setExecutor(new FlyCommand());
18      getCommand("kit").setExecutor(new KitCommand());
   
        getConfig().options().copyDefaults(true);
        saveConfig();
   
    }
    public void onDisable(){
        System.out.println("§aConfig saved");   
    }
}

"getCommand("kit").setExecutor(new KitCommand()):"

Pose problème alors que j'ai fais pareil que la ligne 17 et la ligne 17 est correcte d'après la console.


De plus, je n'ai pas d'erreur dans ma classe principale à la ligne 18, rien n'est souligné etc...

Autres:

Ma classe KitCommand

Code:
package me.Luca008.MonPlugin;

import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;

public class KitCommand implements CommandExecutor {



    @Override
    public boolean onCommand(CommandSender sender, Command cmd, String msg, String[] args) {
    
        Player p = (Player)sender;
    
        if(args[0].equalsIgnoreCase("Kit")){
            if(args.length == 0){
                p.sendMessage("Test");
            }
            if(args.length == 1){
                if(args[0].equalsIgnoreCase("Players")){
                    p.sendMessage("§7You received the kit §cPlayers");
                }
            }
        }
        return false;
    }

}

Screen du menu de mon plugin : http://prntscr.com/dwi2zk

Si vous pourriez m'aider ça serait aimable.

Bonne soirée
 
Dernière édition:

Noucho

Builder professionnel et Gérant de RegiGames
26 Février 2016
206
28
90
France
RegiGames.fr
Bien le bonsoir en ce bas monde,

N'étant pas un expert en codage java (il faudrait franchement que je m'y mette xD), je laisse @Detoblel36 se charger de t'aider, il le fera bien mieux que moi.
Si j'ai un conseil à te donner, peux-tu numéroter tes lignes, de façon à ce qu'on les identifie ? :)

Bien cordialement,
Noucho
 
Dernière édition:

Noucho

Builder professionnel et Gérant de RegiGames
26 Février 2016
206
28
90
France
RegiGames.fr
Bien le bonjour en ce bas monde,

Si cela ne vient pas de ta fameuse ligne 17, je pense que cela vient directement de ta classe, et que c'est donc pour cela que tu as l'erreur
java.lang.NullPointerException : Ton plugin lit ta ligne et voit qu'il faut saisir la classe principale, mais il n'arrive pas à la lire et te dit donc que pour lui il n'y a rien dans cette classe..
Etant donné que je ne m'y connais pas plus que ça, je ne peux pas plus t'aider ^^'

Bien cordialement,
Noucho
 

Detobel36

Créateur de plugins (PhoenixRebirth)
Support
17 Août 2012
10 531
24
2 247
347
27
Bruxelles - Belgique
www.phoenix-rebirth.fr
Salut,

Est-ce que la commande 'kit' est bien dans ton plugin.yml ?

Soit dit en passant, dans ton KitCommand, tu peux changer le if en else if:
Code:
            if(args.length == 0){
                p.sendMessage("Test");
            }
            else if(args.length == 1){
Ca change pas grand chose mais ça optimise un peu ton code tout de même :p


Cordialement,
Detobel36
 

Luca_008

Architecte en herbe
21 Novembre 2016
150
20
125
22
Est-ce que la commande 'kit' est bien dans ton plugin.yml ?
En effet j'ai oublié de le mettre dans le plugin.yml. Comme je l'ai précisé je suis débutant, voilà pourquoi j'ai du l'oublier x).

Soit dit en passant, dans ton KitCommand, tu peux changer le if en else if:

D'acc merci ^^ Effectivement mes plugins ne sont pas très propres pour l'instant. :(

Autre question: Dans le plugin.yml, il est possible de mettre la description et le permission-message en couleur? Si oui comment? Car avec le signe "paragraphe" et le & ça ne fonctionne pô :c

Bien le bonjour en ce bas monde,

Si cela ne vient pas de ta fameuse ligne 17, je pense que cela vient directement de ta classe, et que c'est donc pour cela que tu as l'erreur
java.lang.NullPointerException : Ton plugin lit ta ligne et voit qu'il faut saisir la classe principale, mais il n'arrive pas à la lire et te dit donc que pour lui il n'y a rien dans cette classe..
Etant donné que je ne m'y connais pas plus que ça, je ne peux pas plus t'aider ^^'

Bien cordialement,
Noucho
Merci beaucoup pour ton aide, je t'ai fais perdre ton temps pour une simple erreur d’inattention de ma part. Je suis désolé :p
 
Dernière édition par un modérateur:

Detobel36

Créateur de plugins (PhoenixRebirth)
Support
17 Août 2012
10 531
24
2 247
347
27
Bruxelles - Belgique
www.phoenix-rebirth.fr
Salut,

Autre question: Dans le plugin.yml, il est possible de mettre la description et le permission-message en couleur? Si oui comment? Car avec le signe "paragraphe" et le & ça ne fonctionne pô :c
C'est très moche de vouloir faire cela... En effet cette information pourrait se retrouver en console et donc afficher un truc pas très joli :/
Il faut mieux dans ton .java lié à ton event Command (dans le cas présent KitCommand par exemple) vérifier que la personne qui fait la commande est un joueur ou non et lui afficher des informations en couleur ou non.
Code:
if(sender instanceof Player) {
Player player = (Player) sender; // On transforme le sender en player (car on a vérifié avant :) ).
if(/* condition si la commande est bonne */) {
    // code
} else { // La commande est donc fausse;
    player.sendMessage(ChatColor.RED + "La bonne commande est: " + ChatColor.WHITE + ChatColor.ITALIC + "/kit <nom du kit>");
}


Cordialement,
Detobel36
 

Luca_008

Architecte en herbe
21 Novembre 2016
150
20
125
22
C'est très moche de vouloir faire cela... En effet cette information pourrait se retrouver en console et donc afficher un truc pas très joli :/
Il faut mieux dans ton .java lié à ton event Command (dans le cas présent KitCommand par exemple) vérifier que la personne qui fait la commande est un joueur ou non et lui afficher des informations en couleur ou non.
hm du coup je dois supprimer le permission-message dans le plugin.yml ? (Si y'en a un) (Dans mon cas, y'en a un. en blanc du coup)