Configuration Résolu Java : erreur inconnue

Alex Fatta

Commandant de la Flotte et de la Horde
13 Août 2014
1 389
1
191
187
Bonjour !

Je reviens vers vous pour vous demander de l'aide concernant une erreur apparue dans mes logs. Je suis en création d'un nouveau plugin. Je possède plusieurs class chacune ayant des fonctions spécifiques. Ma première question est la suivante @Detobel36 :
Est-ce que on peut mettre extends JavaPlugins et/ou implements Listener dans plusieurs class de façon à avoir dans une class les onEnable et onDisable et dans plusieurs autre onCommand ?

Ensuite voici l'erreur :
Code:
[15:54:39 INFO]: [FallenKingdoms] Enabling FallenKingdoms v1.0.0
[15:54:39 INFO]: [FallenKingdoms] Plugin de FallenKingodms actif !
[15:54:39 ERROR]: Error occurred while enabling FallenKingdoms v1.0.0 (Is it up to date?)
java.lang.IllegalArgumentException: Plugin already initialized!
        at org.bukkit.plugin.java.PluginClassLoader.initialize(PluginClassLoader.java:122) ~[spigot_server.jar:git-Spigot-db6de12-18fbb24]
        at org.bukkit.plugin.java.JavaPlugin.<init>(JavaPlugin.java:66) ~[spigot_server.jar:git-Spigot-db6de12-18fbb24]
        at Managers.GameManager.<init>(GameManager.java:14) ~[?:?]
        at fr.alexfatta.fallenkingdoms.main.onEnable(main.java:25) ~[?:?]
        at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:321) ~[spigot_server.jar:git-Spigot-db6de12-18fbb24]
        at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:340) [spigot_server.jar:git-Spigot-db6de12-18fbb24]
        at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:405) [spigot_server.jar:git-Spigot-db6de12-18fbb24]
        at org.bukkit.craftbukkit.v1_8_R3.CraftServer.loadPlugin(CraftServer.java:357) [spigot_server.jar:git-Spigot-db6de12-18fbb24]
        at org.bukkit.craftbukkit.v1_8_R3.CraftServer.enablePlugins(CraftServer.java:317) [spigot_server.jar:git-Spigot-db6de12-18fbb24]
        at net.minecraft.server.v1_8_R3.MinecraftServer.s(MinecraftServer.java:414) [spigot_server.jar:git-Spigot-db6de12-18fbb24]
        at net.minecraft.server.v1_8_R3.MinecraftServer.k(MinecraftServer.java:378) [spigot_server.jar:git-Spigot-db6de12-18fbb24]
        at net.minecraft.server.v1_8_R3.MinecraftServer.a(MinecraftServer.java:333) [spigot_server.jar:git-Spigot-db6de12-18fbb24]
        at net.minecraft.server.v1_8_R3.DedicatedServer.init(DedicatedServer.java:263) [spigot_server.jar:git-Spigot-db6de12-18fbb24]
        at net.minecraft.server.v1_8_R3.MinecraftServer.run(MinecraftServer.java:525) [spigot_server.jar:git-Spigot-db6de12-18fbb24]
        at java.lang.Thread.run(Unknown Source) [?:1.8.0_121]
Caused by: java.lang.IllegalStateException: Initial initialization
        at org.bukkit.plugin.java.PluginClassLoader.initialize(PluginClassLoader.java:125) ~[spigot_server.jar:git-Spigot-db6de12-18fbb24]
        at org.bukkit.plugin.java.JavaPlugin.<init>(JavaPlugin.java:66) ~[spigot_server.jar:git-Spigot-db6de12-18fbb24]
        at fr.alexfatta.fallenkingdoms.main.<init>(main.java:16) ~[?:?]
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[?:1.8.0_121]
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) ~[?:1.8.0_121]
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) ~[?:1.8.0_121]
        at java.lang.reflect.Constructor.newInstance(Unknown Source) ~[?:1.8.0_121]
        at java.lang.Class.newInstance(Unknown Source) ~[?:1.8.0_121]
        at org.bukkit.plugin.java.PluginClassLoader.<init>(PluginClassLoader.java:76) ~[spigot_server.jar:git-Spigot-db6de12-18fbb24]
        at org.bukkit.plugin.java.JavaPluginLoader.loadPlugin(JavaPluginLoader.java:131) ~[spigot_server.jar:git-Spigot-db6de12-18fbb24]
        at org.bukkit.plugin.SimplePluginManager.loadPlugin(SimplePluginManager.java:329) ~[spigot_server.jar:git-Spigot-db6de12-18fbb24]
        at org.bukkit.plugin.SimplePluginManager.loadPlugins(SimplePluginManager.java:251) ~[spigot_server.jar:git-Spigot-db6de12-18fbb24]
        at org.bukkit.craftbukkit.v1_8_R3.CraftServer.loadPlugins(CraftServer.java:292) ~[spigot_server.jar:git-Spigot-db6de12-18fbb24]
        at net.minecraft.server.v1_8_R3.DedicatedServer.init(DedicatedServer.java:198) ~[spigot_server.jar:git-Spigot-db6de12-18fbb24]
        ... 2 more

Ma class main :
Code:
package fr.alexfatta.fallenkingdoms;

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

public class main extends JavaPlugin implements Listener{
   
    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();
        getCommand("fk").setExecutor(new Managers.GameManager()); // /fk start, pause, play, stop
    }
   
    @Override
    public void onDisable() {
        getLogger().info("Plugin de FallenKingodms inactif !");
    }
   
}

Voilà voilà !

Bien à vous,

AlexFatta

EDIT : J'avais pas vu ceci la première fois : fr.alexfatta.fallenkingdoms.main.onEnable(main.java:25)

Donc c'est le getCommand qui fonctionne pas. Mais pourquoi ? J'ai bien un autre package qui se nomme Managers et qui contient une class GameManager. Tout est bon pourtant :/
 
Salut,

EDIT : J'avais pas vu ceci la première fois : fr.alexfatta.fallenkingdoms.main.onEnable(main.java:25)
Wait, wait... C'est surtout ça qu'il faut lire:
Code:
Caused by: java.lang.IllegalStateException: Initial initialization
       at org.bukkit.plugin.java.PluginClassLoader.initialize(PluginClassLoader.java:125) ~[spigot_server.jar:git-Spigot-db6de12-18fbb24]
       at org.bukkit.plugin.java.JavaPlugin.<init>(JavaPlugin.java:66) ~[spigot_server.jar:git-Spigot-db6de12-18fbb24]
       at fr.alexfatta.fallenkingdoms.main.<init>(main.java:16) ~[?:?]
       at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[?:1.8.0_121]
       at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) ~[?:1.8.0_121]
Erreur ligne 16:
Code:
getCommand("fk").setExecutor(new Managers.GameManager()); // /fk start, pause, play, stop
Deux choses:
  1. Ton plugin.yml contient bien la commande "fk" ?
  2. Managers.GameManager ? Si c'est ce que je pense, c'est pas du tout une bonne pratique ! :/ En java un fichier = une classe. Les classes imbriquées c'est très rare et ça doit pas être utilisé comme ça...
Pour pouvoir t'aider plus et si ce n'est pas le point 1, peux-tu me donner/montrer ton fichier Managers stp.


Cordialement,
Detobel36
 
Re !

Merci @Detobel36 pour ta réponse !

Managers est un package qui contient ces 4 class : GameManager, GamePlayManager, TABManager, TeamManager.
Voici le plugin.yml :
Code:
main: fr.alexfatta.fallenkingdoms.main
name: FallenKingdoms
author: AlexFatta
version: 1.0.0
commands:
    fk:

AlexFatta
 
Salut,

Managers est un package qui contient ces 4 class : GameManager, GamePlayManager, TABManager, TeamManager.
C'est un package ? Alors pourquoi écrire GameManager.... ?

Dans le plugin.yml c'est tout de même bien de mettre une description xD
Code:
main: fr.alexfatta.fallenkingdoms.main
name: FallenKingdoms
author: AlexFatta
version: 1.0.0
commands:
   fk:
    description: Commande principal du plugin

Et donc pour ton package:
Code:
package fr.alexfatta.fallenkingdoms;

import fr.alexfatta.fallenkingdoms.Managers.GameManager; // DETO: modification ici
import org.bukkit.ChatColor;
import org.bukkit.event.Listener;
import org.bukkit.plugin.java.JavaPlugin;

public class main extends JavaPlugin implements Listener{
  
   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();
       // DETO: modification ici
       getCommand("fk").setExecutor(new GameManager()); // /fk start, pause, play, stop
   }
  
   @Override
   public void onDisable() {
       getLogger().info("Plugin de FallenKingodms inactif !");
   }
  
}
Et du coup une question en passant, tous tes packages: "fr.alexfatta.fallenkingdoms" sont en minuscule, pourquoi avoir mis "Managers" en majuscule ? :/


Cordialement,
Detobel36
 
Et du coup une question en passant, tous tes packages: "fr.alexfatta.fallenkingdoms" sont en minuscule, pourquoi avoir mis "Managers" en majuscule ? :/
En effet c'est une excellente question x)

J'ai refait les packages, mais il me semble qu'ils ne se mettent pas en "sous-package", ils sont alignées avec le premier. Et je les aient renommés en
fr.alexfatta.fallenkingdoms.managers

J'ai essayé ce que tu as donné avec les 2 modifications que tu as donné et toujours la même erreurs, juste le numéro de ligne qui change mais qui concerne les mêmes lignes x) .

Je comprends pas trop pourquoi ça foire :3

AlexFatta

EDIT : j'ai trouvé comment mettre les packages dans l'ordre hiérarchique x) Enfin bon c'est pas pour autant que ça fonctionne ^^
 
Dernière édition:
Ah pardon j'avais pas saisi x)
Le voici :
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;

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

}

A savoir que j'ai mis implements JavaPlugin dans une autre class nommée TeamManager que voici (elle n'est pas finie) :
PHP:
package fr.alexfatta.fallenkingdoms.managers;

import org.bukkit.ChatColor;
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;

public class TeamManager extends JavaPlugin{
   
    @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("create")){
                        if(args[2].equalsIgnoreCase("blue") || args[2].equalsIgnoreCase("red") || args[2].equalsIgnoreCase("yellow") || args[2].equalsIgnoreCase("green") || args[2].equalsIgnoreCase("purple")){  
                            String etat = "true";
                            this.getConfig().set("teams." + args[2], etat);
                            player.sendMessage(main.gamePrefix + ChatColor.GREEN + "Team " + args[2] + "ajoutée avec succès !");
                        }
                    }
                }
            }
        }
        return false;
    }

}

AlexFatta
 
Salut,

Bon bah voila, le problème est trouvé...
Tu ne peux avoir qu'un seul "JavaPlugin". Seul ton main peut hérité de JavaPlugin. Quand tu veux faire des commandes, il faut "implement CommandExecutor"


Cordialement,
Detobel36
 
Ah ok !

Mais alors du coup j'ai repensé à ce que tu m'avais dit il y a longtemps sur ceci :
Code:
public void onEnable() {
        addGadget(new SpeedHackGadget());
        addGadget(new FireballGadget());
        addGadget(new PunchSkyGadget());
        addGadget(new coming());
        getServer().getPluginManager().registerEvents(new GadgetsListener(this), this);
        getCommand("gadgets").setExecutor(new MyCommandGadgetsExecutor(this));
    }

Mais puisque c'est dans un autre package, ça fonctionne pareil, j'ai juste à implémenter le package comme tu l'a montré plus haut ?

AlexFatta
 
Salut,

Ah ok !

Mais alors du coup j'ai repensé à ce que tu m'avais dit il y a longtemps sur ceci :
Code:
public void onEnable() {
        addGadget(new SpeedHackGadget());
        addGadget(new FireballGadget());
        addGadget(new PunchSkyGadget());
        addGadget(new coming());
        getServer().getPluginManager().registerEvents(new GadgetsListener(this), this);
        getCommand("gadgets").setExecutor(new MyCommandGadgetsExecutor(this));
    }

Mais puisque c'est dans un autre package, ça fonctionne pareil, j'ai juste à implémenter le package comme tu l'a montré plus haut ?
Rien compris :/

"Implémenter le package" ça veut rien dire :/ Moi je t'ai juste dis qu'en Java, il n'est pas habituelle de faire:
Code:
package.class()
Et que l'on fera plutôt un import avec directement l'appel à la class dans le code:
Code:
...

import package

....
// dans le code
class()


Cordialement,
Detobel36