Configuration Résolu Java : erreur inconnue

Alex Fatta

Commandant de la Flotte et de la Horde
13 Août 2014
1 391
1
191
187
Ah ! Donc il faudrait enlever les autres package et tout mettre dans le même que la class main ?

AlexFatta
 

Detobel36

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

Ah ! Donc il faudrait enlever les autres package et tout mettre dans le même que la class main ?
Je vois pas de quoi tu parles... Tu pars trop loin j'ai l'impression.

Les packages ce sont comme des dossiers. Le but est d'organiser tes fichiers, de les classer, de mettre ensemble les choses qui ont un lien entre eux (c'est ce dernier point le plus important).

En java il est totalement possible de tout faire dans un package. Ou à l'inverse de faire une class par package. Les deux sont possibles. Mais la bonne pratique se trouve au milieu: mettre dans un même package les choses qui ont un lien.

Une autre chose à savoir ce que normalement ton main il est tout petit (en orienté objet, c'est l'objectif). Ce sont les objets qui sont "spécialisé" pour réalisé des actions précises.
Dans certains règles de bonne pratique on va même jusqu’à limité la taille des méthodes à 20 lignes... Avec pour but de faire des petites méthodes faisant des actions précises et pouvant être réutilisé un maximum (au sein d'une même class, voir d'un même package mais pas spécialement dans tout le projet).

Bref, maintenant que tu sais ça, peux-tu me reformuler ta question car franchement c'est pas clair :/ Tout dans le main, non c'est pas une bonne idée.


Cordialement,
Detobel36
 

Alex Fatta

Commandant de la Flotte et de la Horde
13 Août 2014
1 391
1
191
187
Non bien sûr pas tout dans le main ce serait trop gros. Mais dans le même package fr.alexfatta.fallenkingdoms.

Cela étant, j'ai trouvé ceci : https://bukkit.org/threads/commands-in-different-classes.73875/
Je m'en suis servi de cette sorte :
Code:
import fr.alexfatta.fallenkingdoms.managers.GameManager;

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

public class main extends JavaPlugin implements Listener{
    
    private GameManager GameManager; //modif ici
    
    public static String gamePrefix = ChatColor.GRAY + "[" + ChatColor.RED + "FallenKingdoms" + ChatColor.GRAY + "] ";
    public static String argument = ChatColor.RED + "Erreur : ce n'est pas le bon argument !";
    
    @Override
    public void onEnable() {
        getLogger().info("Plugin de FallenKingodms actif !");
        saveDefaultConfig();
        GameManager = new GameManager(); //modif ici
        //modif ici
        getCommand("fk").setExecutor(GameManager); // /fk start, pause, play, stop
    }

Cela pourrait fonctionner ?

AlexFatta
 

Detobel36

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

Mais tu peux directement fait le new dans le setExecutor... Le soucis c'est que tu fais un extends du JavaPlugin.
Je pense qu'il faut vraiment que tu relises mes messages car j'ai l'impression que tu as rien compris !

main.java
PHP:
package fr.alexfatta.fallenkingdoms.managers;

import fr.alexfatta.fallenkingdoms.managers.GameManager;
import org.bukkit.ChatColor;
import org.bukkit.event.Listener;
import org.bukkit.plugin.java.JavaPlugin;

public class main extends JavaPlugin { // Pourquoi implement un listener, tu l'utilises pas...

    // Un maximum de private !  Si tu veux récupérer ces valeurs tu fais un getter, si tu veux le modifier, un setter
    // et si tu les modifie pas, rajoute le mot clef "final"
    private static String gamePrefix = ChatColor.GRAY + "[" + ChatColor.RED + "FallenKingdoms" + ChatColor.GRAY + "] ";
    private static String argument = ChatColor.RED + "Erreur : ce n'est pas le bon argument !";
  
    @Override
    public void onEnable() {
        getLogger().info("Plugin de FallenKingodms actif !");
        saveDefaultConfig();
        getCommand("fk").setExecutor(new GameManager()); // /fk start, pause, play, stop
    }

GameManager.java
PHP:
package fr.alexfatta.fallenkingdoms.managers;

import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.World;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.permissions.Permission;
import org.bukkit.plugin.java.JavaPlugin;

import fr.alexfatta.fallenkingdoms.main;

// la on implement CommandExecutor.  On NE PEUT PAS extends à NOUVEAU JavaPlugin
// Sinon tu as deux main et bukkit ne sais pas lequel est le bon !
public class GameManager implements CommandExecutor {
  
    // On oublies pas de mettre private/public (à moins que tu sache ce que ça veut dire quand on met rien...)
    private World world;
    private boolean statuts = false;
  
    @Override
    public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
        if(label.equalsIgnoreCase("fk")) {
            if(sender instanceof Player) { // Pourquoi faire deux condition ?  Tu peux les mettre ensemble avec un "&&"... Bref
                // blabla du code... bla bla
            } 
        }
       
        return false;
    }

}


Cordialement,
Detobel36
 

Alex Fatta

Commandant de la Flotte et de la Horde
13 Août 2014
1 391
1
191
187
Ah oui je vois.

Ok alors du coup j'ai un peu testé tout ça, et y'a bien des choses à dire. En premier, j'ai fait une class qui se nomme PlayerJoinListener que voici :
Code:
public class PlayerJoinListener implements Listener{
    
    public void onJoin(PlayerJoinEvent pje){
        Player player = pje.getPlayer();
        pje.setJoinMessage(main.getGamePrefix() + ChatColor.YELLOW + player.getName() + ChatColor.GRAY + " à rejoint la partie !");
        
    }
    
    public void onKick(PlayerKickEvent pke){
        Player player = pke.getPlayer();
        pke.setLeaveMessage(main.getGamePrefix() + ChatColor.YELLOW + player.getName() + ChatColor.GRAY + " à rejoint la partie !");
    }

}
Elle ne fonctionne pas. Je ne sais pas pourquoi mais quand je me connecte, il ne se passe rien.

Ensuite, j'ai essayé ceci :
Code:
    public void onEnable() {
        getLogger().info("Plugin de FallenKingodms actif !");
        getCommand("fk").setExecutor(new GameManager()); // /fk start, pause, play, stop
        getCommand("fk").setExecutor(new TeamManager());
    }

Et là, si je rentre que /fk, il me met "An internal error etc..." alors que sans le TeamManager, le message d'erreur d'argument se met très bien. La console me met que c'est à a ligne 20. Voici le TeamManager (oui j'ai modifié des choses et le message ce n'est que pour tester) :
Code:
package fr.alexfatta.fallenkingdoms.managers;

import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.permissions.Permission;

import fr.alexfatta.fallenkingdoms.main;


public class TeamManager implements CommandExecutor{
    
    @Override
    public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
        if(label.equalsIgnoreCase("fk") && sender instanceof Player){
            Player player = (Player) sender;
            if(sender.hasPermission(new Permission("fk.teams.manage"))){
                if(args[0].equalsIgnoreCase("team")){
                    if(args[1].equalsIgnoreCase("add")){
                        player.sendMessage(main.getGamePrefix() + ChatColor.GREEN + "Tu souhaite ajouter, cela est bien.");
                    }
                }
            }
        }
        return false;
    }


}
Selon lui c'est l'args[0] qui fait une erreur.

Enfin, seule ou non, la class GameManager ne fonctionne pas. J'essaie /fk start, pase, stop ou play, mais rien. Pas d'erreur dans la console, elle n'effectue pas la commande demandée et pas de broadcast dans le tchat :'( Qu'est-ce qui n'a pas fonctionné selon vous ?

Code:
package fr.alexfatta.fallenkingdoms.managers;

import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.World;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;

import fr.alexfatta.fallenkingdoms.main;

public class GameManager implements CommandExecutor{
    
    private World world;
    private boolean statuts = false;
    
    @Override
    public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
        if(label.equalsIgnoreCase("fk") && sender instanceof Player){
                Player player = (Player) sender;
                
                if(args.length <= 0){
                    player.sendMessage(main.getGamePrefix() + main.getArgument());
                
                }else if (label.equalsIgnoreCase("start")){
                    if(setStatuts(false)){   
                        world = player.getWorld();
                        world.setTime(0);
                        Bukkit.broadcastMessage(main.getGamePrefix() + ChatColor.GREEN + "FallenKingdoms lancé par " + player.getName());
                        Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "gamerule doDaylightCycle true");
                        setStatuts(true);
                    }else {
                        player.sendMessage(main.getGamePrefix() + ChatColor.RED + "Erreur : la partie est déjà lancée !");
                    }
                
                }else if(label.equalsIgnoreCase("stop")){
                    if(setStatuts(true)){
                        Bukkit.broadcastMessage(main.getGamePrefix() + ChatColor.GREEN + "FallenKingdoms arrêté par " + ChatColor.LIGHT_PURPLE + player.getName());
                        Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "gamerule doDaylightCycle false");
                        setStatuts(false);
                    }else {
                        player.sendMessage(main.getGamePrefix() + ChatColor.RED + "Erreur : la partie est déjà arrêtée !");
                    }
                
                }else if(label.equalsIgnoreCase("pause")){
                    if(setStatuts(true)){
                        Bukkit.broadcastMessage(main.getGamePrefix() + ChatColor.GREEN + "FallenKingdoms mis en pause par " + ChatColor.LIGHT_PURPLE + player.getName());
                        Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "gamerule doDaylightCycle false");
                        setStatuts(false);
                    }else {
                        player.sendMessage(main.getGamePrefix() + ChatColor.RED + "Erreur : la partie est déjà mise en pause !");
                    }
                
                }else if(label.equalsIgnoreCase("play")){
                    if(setStatuts(false)){
                        Bukkit.broadcastMessage(main.getGamePrefix() + ChatColor.GREEN + "FallenKingdoms relancé par " + ChatColor.LIGHT_PURPLE + player.getName());
                        Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "gamerule doDaylightCycle true");
                        setStatuts(true);
                    }else {
                        player.sendMessage(main.getGamePrefix() + ChatColor.RED + "Erreur : la partie est déjà relancée !");
                    }
                }       
        }
        return false;
    }

    public boolean isStatuts() {
        return statuts;
    }

    public boolean setStatuts(boolean statuts) {
        this.statuts = statuts;
        return statuts;
    }

}

Voilà vous avez tout. En tout cas merci @Detobel36 pour l'executor, ça m'a bien aidé, mais un problème de résolu, un autre arrive xDD

Si vous avez des propositions,

AlexFatta
 

Detobel36

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

Tu l'appel où "PlayerJoinListener" ?

Pour l'erreur... Bah tu as trouvé le soucis, tu as pas testé si le args avait la bonne taille. Il peut être vide. Il faut donc faire un args.length > 0

Pour les commandes, c'est normal:
PHP:
           if(label.equalsIgnoreCase("fk") && sender instanceof Player){
               Player player = (Player) sender;
               
               if(args.length <= 0){
                   player.sendMessage(main.getGamePrefix() + main.getArgument());
               
               }else if (label.equalsIgnoreCase("start")){
                   ...
Première condition tu check si label = fk. Si c'est non, il ne va pas plus loin. Si c'est oui, il continue et puis test: label = start. Comment veux-tu qu'il soit égal a start si c'est déjà égale a fk...


Cordialement,
Detobel36
 

Alex Fatta

Commandant de la Flotte et de la Horde
13 Août 2014
1 391
1
191
187
Mon dieu, rien ne fonctionne... je suis désespéré... Le seul problème résolu c'est le /fk qui maintenant s'affiche bien.

J'ai continué le code et cette fois-ci j'ai retourné le problème dans tous les sens mais rien n'y fait, je ne vois pas ce qui lui pose problème @Detobel36 .
Voici la console quand je rentre la commande /fk team add AlexFatta Blue (ça fais la même chose avec le remove)
Code:
AlexFatta issued server command: /fk team add AlexFatta Blue
[23:37:50 ERROR]: null
org.bukkit.command.CommandException: Unhandled exception executing command 'fk' in plugin FallenKingdoms v1.0.0
        at org.bukkit.command.PluginCommand.execute(PluginCommand.java:46) ~[spigot_server.jar:git-Spigot-db6de12-18fbb24]
        at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:141) ~[spigot_server.jar:git-Spigot-db6de12-18fbb24]
        at org.bukkit.craftbukkit.v1_8_R3.CraftServer.dispatchCommand(CraftServer.java:641) ~[spigot_server.jar:git-Spigot-db6de12-18fbb24]
        at net.minecraft.server.v1_8_R3.PlayerConnection.handleCommand(PlayerConnection.java:1162) [spigot_server.jar:git-Spigot-db6de12-18fbb24]
        at net.minecraft.server.v1_8_R3.PlayerConnection.a(PlayerConnection.java:997) [spigot_server.jar:git-Spigot-db6de12-18fbb24]
        at net.minecraft.server.v1_8_R3.PacketPlayInChat.a(PacketPlayInChat.java:45) [spigot_server.jar:git-Spigot-db6de12-18fbb24]
        at net.minecraft.server.v1_8_R3.PacketPlayInChat.a(PacketPlayInChat.java:1) [spigot_server.jar:git-Spigot-db6de12-18fbb24]
        at net.minecraft.server.v1_8_R3.PlayerConnectionUtils$1.run(SourceFile:13) [spigot_server.jar:git-Spigot-db6de12-18fbb24]
        at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) [?:1.8.0_121]
        at java.util.concurrent.FutureTask.run(Unknown Source) [?:1.8.0_121]
        at net.minecraft.server.v1_8_R3.SystemUtils.a(SourceFile:44) [spigot_server.jar:git-Spigot-db6de12-18fbb24]
        at net.minecraft.server.v1_8_R3.MinecraftServer.B(MinecraftServer.java:715) [spigot_server.jar:git-Spigot-db6de12-18fbb24]
        at net.minecraft.server.v1_8_R3.DedicatedServer.B(DedicatedServer.java:374) [spigot_server.jar:git-Spigot-db6de12-18fbb24]
        at net.minecraft.server.v1_8_R3.MinecraftServer.A(MinecraftServer.java:654) [spigot_server.jar:git-Spigot-db6de12-18fbb24]
        at net.minecraft.server.v1_8_R3.MinecraftServer.run(MinecraftServer.java:557) [spigot_server.jar:git-Spigot-db6de12-18fbb24]
        at java.lang.Thread.run(Unknown Source) [?:1.8.0_121]
Caused by: java.lang.NullPointerException
        at fr.alexfatta.fallenkingdoms.managers.TeamManager.onCommand(TeamManager.java:27) ~[?:?]
        at org.bukkit.command.PluginCommand.execute(PluginCommand.java:44) ~[spigot_server.jar:git-Spigot-db6de12-18fbb24]
        ... 15 more

Voici le code :
Code:
package fr.alexfatta.fallenkingdoms.managers;

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

import fr.alexfatta.fallenkingdoms.main;


public class TeamManager implements CommandExecutor{
   
    @Override
    public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
        Player player = (Player) sender;
        if(label.equalsIgnoreCase("fk") && sender instanceof Player){
            if(args.length <= 0){
                player.sendMessage(main.getGamePrefix() + main.getArgument());
           
            }else if(args[0].equalsIgnoreCase("team") && args[1].equalsIgnoreCase("add")){ //add
                if(args[3].equalsIgnoreCase("Blue")){  
                    if(args.length > 3){
                        Player p = Bukkit.getServer().getPlayer(args[3]);
                        main.Blue.add(p);
                        String s = args[3];
                        player.sendMessage(main.getGamePrefix() + ChatColor.GREEN + "Tu as ajouté " + ChatColor.LIGHT_PURPLE + p.getName() + ChatColor.GREEN + " à la team " + s);
                        p.sendMessage(main.getGamePrefix() + ChatColor.GREEN + "Tu as été ajouté à la team " + ChatColor.LIGHT_PURPLE + s);
                        p.getPlayer().setPlayerListName(ChatColor.BLUE + p.getPlayer().getName());
                    }
             }

De plus, la class GameManager ne fonctionne toujours pas. J'ai modifié par ceci :
Code:
package fr.alexfatta.fallenkingdoms.managers;

import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.World;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;

import fr.alexfatta.fallenkingdoms.main;

public class GameManager implements CommandExecutor{
   
    private World world;
    private boolean statuts = false;
   
    @Override
    public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
        if(label.equalsIgnoreCase("fk") && sender instanceof Player){
                Player player = (Player) sender;
               
                if(args.length < 0){
                    player.sendMessage(main.getGamePrefix() + main.getArgument());
               
                }if(args[0].equalsIgnoreCase("start")){
                    if(statuts = false){  
                        world = player.getWorld();
                        world.setTime(0);
                        Bukkit.broadcastMessage(main.getGamePrefix() + ChatColor.GREEN + "FallenKingdoms lancé par " + player.getName());
                        Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "gamerule doDaylightCycle true");
                        setStatuts(true);
                    }else {
                        player.sendMessage(main.getGamePrefix() + ChatColor.RED + "Erreur : la partie est déjà lancée !");
                    }
               
                }else if(args[0].equalsIgnoreCase("stop")){
                    if(statuts = true){
                        Bukkit.broadcastMessage(main.getGamePrefix() + ChatColor.GREEN + "FallenKingdoms arrêté par " + ChatColor.LIGHT_PURPLE + player.getName());
                        Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "gamerule doDaylightCycle false");
                        setStatuts(false);
                    }else {
                        player.sendMessage(main.getGamePrefix() + ChatColor.RED + "Erreur : la partie est déjà arrêtée !");
                    }
               
                }else if(args[0].equalsIgnoreCase("pause")){
                    if(statuts = true){
                        Bukkit.broadcastMessage(main.getGamePrefix() + ChatColor.GREEN + "FallenKingdoms mis en pause par " + ChatColor.LIGHT_PURPLE + player.getName());
                        Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "gamerule doDaylightCycle false");
                        setStatuts(false);
                    }else {
                        player.sendMessage(main.getGamePrefix() + ChatColor.RED + "Erreur : la partie est déjà mise en pause !");
                    }
               
                }else if(args[0].equalsIgnoreCase("play")){
                    if(statuts = false){
                        Bukkit.broadcastMessage(main.getGamePrefix() + ChatColor.GREEN + "FallenKingdoms relancé par " + ChatColor.LIGHT_PURPLE + player.getName());
                        Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "gamerule doDaylightCycle true");
                        setStatuts(true);
                    }else {
                        player.sendMessage(main.getGamePrefix() + ChatColor.RED + "Erreur : la partie est déjà relancée !");
                    }
                }      
        }
        return false;
    }

    public boolean isStatuts() {
        return statuts;
    }

    public boolean setStatuts(boolean statuts) {
        this.statuts = statuts;
        return statuts;
    }

}

Et rien ne se passe dans la console pour le /fk start.

Ensuite pour répondre à ta question du JoinListener, dans le onEnable de la class main, j'ai ajouté ceci :
Code:
new ListenerManager(this).registerListeners();

Et j'ai crée cette class qui contient :
Code:
package fr.alexfatta.fallenkingdoms.listeners;

import org.bukkit.Bukkit;
import org.bukkit.plugin.Plugin;
import org.bukkit.plugin.PluginManager;

public class ListenerManager {
   
    public Plugin plugin;
    public PluginManager pluginManager;
   
    public ListenerManager(Plugin plugin){
        this.plugin = plugin;
        this.pluginManager = Bukkit.getPluginManager();
    }

    public void registerListeners() {

    }

}
Et ça ne fonctionne toujours pas :'( Le Java aura ma peau je crois xD

Voilà je crois que j'ai fais le tour. Franchement je conçois que ce soit soûlant de me répondre @Detobel36 je le comprends ^^ Mais y'a des points sur lesquels je comprends pas pourquoi ça ne fonctionne pas. Enfin quand tu aura 10 minutes, j'attendrai ta réponse avec impatience, je suis trop curieux :p Si tu as des idées, je prends toute remarque ^^

Merci ! :D

AlexFatta
 

Luca_008

Architecte en herbe
21 Novembre 2016
150
20
125
22
J'ai lu les messages précédents donc je ne sais pas si j'ai loupé quand même quelque chose, mais pourquoi pour déclarer un event tu fais autant de manip ?
Dans ta classe principale dans le onEnable() tu mets
Code:
        PluginManager pm = getServer().getPluginManager();
        pm.registerEvents(new LeNomDeTaClasseOuY'aL'event(this), this);
Ensuite il va sûrement te mettre une erreur, car dans ta classe ou y'a l'event, y'aura pas de constructeur pour ton main
Donc tu cliques sur l'erreur tu choisis un truc du genre "Create constructor" et dans cette class il va te mettre par défaut
Code:
    public LeNomDeLaClass(LeNomDeTonMain JspCeQueC'estMaisToucheLePas) {
        // TODO Auto-generated constructor stub
    }
Tu supprimes "// TODO Auto-generated constructor stub" et tu mets
Code:
this.main = LeTrucQueJeSaisPasCeQueC'est;
et en dessus de:
Code:
    public LeNomDeLaClass(LeNomDeTonMain JspCeQueC'estMaisToucheLePas) {
       this.main = JspCeQueC'estMaisToucheLePas;
    }
Tu mets
Code:
private LeNomDeLaClasseMain main;
En gros si admettons ton main s'apelle "Test" et ta classe ou y'a l'event "Join" ça va te donner
Code:
public class Join implements Listener {
 
    private Test main;

    public Join(Test test) {
        this.main = test;
    }
 
    @EventHandler
    public void TonEvent(PlayerJoinEvent event){

T'auras même plus besoin d'importer ta main(import fr.alexfatta.fallenkingdoms.main: ),
tout est fait avec le constructeur...

J'espère que ça aura été compréhensible ^^
Bonne journée
 
  • J'aime
Reactions: Detobel36

Detobel36

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

Effectivement @Luca_008 c'est une solution :) Il est aussi possible de ne rien passer à la construction et de faire un getter static qui permet de récupérer l'instance principal. Les deux se font ;)

Ce que je comprend pas @Alex Fatta c'est pourquoi tu fais tout ça ? Pourquoi tu ne fais pas un petit peu à la fois. Tu arrives directement avec des classes "énormes" presque finie alors que tu n'a jamais essayé de lancé ton plugin. C'est pas comme qu'il faut travailler !
Tu met dans ton main le onEnable, onDisable, onLoad, ... et tu test. Boum, une première fois. Avec juste des messages qui disent que le plugin se lance.
Ensuit tu déclares une commande, tu créé un fichier pour gérer la commande mais tu le laisse vide au début. Tu tests. Ensuite tu rajoute la méthode pour la commande en mettant un message de débug pour voir si il s'affiche quand on fait une commande. Tu tests. Ensuite tu met une première condition. Tu tests, ... Bref, fais ça étape par étape.

Pourquoi as-tu fais un fichier "ListenerManager" ? Quel est le but ? Surtout que la tu ne nous montre pas de Listener, tu nous montre des class gérant des commandes. C'est pas la même chose !

Et pourquoi tu met autant de public ?! Un maximum de private ! Ca évite de faire des fautes et d'accéder à des attributs d'une class.

Pourquoi as-tu changé ce que je t'ai montré dans le main.java que je t'avais donné ? Je fais un simple "new Class()" sans ajouter quoi que ce soit. Ca aurait très bien marché... Pourquoi tu dois rajouter un fichier inutile ?

Remarques:
  1. args[0] récupère la première valeur de la liste (un informaticien compte toujours à partir de 0). Donc la taille doit être de 1. Il faut donc avant cela faire avoir un code équivalent à celui-ci:
    Code:
    if(args.lenght == 1) {
        // ici on peut utiliser args[0];
    }
    Ou alors:
    Code:
    if(args.lenght >= 1) {
        // ici on peut utiliser args[0];
    }
    Ou encore:
    Code:
    if(!(args.lenght <= 0)) {
        // ici on peut utiliser args[0];
    }
    Et donc :
    Ou encore:
    Code:
    if(args.lenght <= 0) {
        // message d'erreur
    } else {
        // ici on peut utiliser args[0];
    }

  2. Pour faire un test il faut deux "=" -> "==".
    Exemple:
    Code:
    int i = 0;
    System.out.println(i); // Affiche 0
    if(i == 1) {
        System.out.println("Vrai " + i);
    } else {
        System.out.println("Faux " + i);
    }
    // Affiche: Faux 0
    
    // Mais maintenant:
    if(i = 1) {
        System.out.println("Vrai " + i);
    } else {
        System.out.println("Faux " + i);
    }
    // Affiche: Vrai 1
    Cette exemple nous montre que faire "i = qqch" change ça valeur... Ce n'est donc pas un test !!!
  3. Dans un test il va de toute façon tester que quelque chose est vrai ou pas.
    Donc inutile de faire un "== true" ou "== false"
    Code:
    Boolean test = true;
    
    // Ceci:
    if(test == true) {
        // ton code
    }
    // Est totalement équivalent à ceci:
    if(test) {
        // ton code
    }
    
    // Et ceci:
    if(test == false) {
        // ton code
    }
    // est totalement équivalent à ceci:
    if(!test) {
        // ton code
    }


Cordialement,
Detobel36
 

Luca_008

Architecte en herbe
21 Novembre 2016
150
20
125
22
Dans un test il va de toute façon tester que quelque chose est vrai ou pas.
Donc inutile de faire un "== true" ou "== false"
Je le savais pas x) Je lis exprès les problèmes des autres pour avoir des conseils :p
et de faire un getter static qui permet de récupérer l'instance principal.
Il faut donc créer une instance dans le main ?