Plugin Problème de récupération de variable

Nairolf_

Nairolf
15 Juillet 2020
66
4
35
24
www.youtube.com
Bonjour,
Je suis actuellement en train de créer un plugin, mais j'ai un problème, et je ne sais pas d'où il vient.
Lorsque le plugin se lance, ça m'affiche ça dans la console:
Java:
[19:48:07 INFO]: UP -> launched!
[19:48:07 ERROR]: Error occurred while enabling plugin v1.0.0.0 (Is it up to date?)
java.lang.IllegalArgumentException: Plugin already initialized!
    [...]
    at en.universalprogram.sworders.stb.game.Players.<init>(Players.java:15) ~[?:?]
    at en.universalprogram.sworders.stb.game.Game.<init>(Game.java:18) ~[?:?]
    [...]
Il y a plein d'autre erreurs, mais le problème est le même. Chaque problème viens d'une récupération de variable. Voici comment je procède:
Java:
private int minPlayers = new Main().minPlayers;
La variable est bien en public, et il n'y a aucunes erreurs avec Eclipse.
Comment résoudre le problème? Y a-t-il un autre moyen d'importer les variables?
Merci de votre aide :D
Cordialement
Nairolf
 
Dernière édition:

ShE3py

Enbogueuse
Support
26 Septembre 2015
4 087
157
456
247
21
Mìlhüsa
Bonsoir,

Avec une variable statique ?

Java:
public class MyPlugin extends JavaPlugin {
    public static final int MIN_PLAYERS = 4;
}

int minPlayers = MyPlugin.MIN_PLAYERS; // 4
ou
Java:
public class MyPlugin extends JavaPlugin {
    public static MyPlugin plugin;
    public int minPlayers;
   
    @Override
    public void onEnable() {
        MyPlugin.plugin = this;
    }
}

int minPlayers = MyPlugin.plugin.minPlayers; // 0

Et dans ton cas si c'est pour construire un objet, ça serait mieux de passer la variable en paramètre du constructeur, si par ex. tu as un ex aequo et que tu veux recréer une seconde manche avec qu'une sous-partie des joueurs (2+).

Java:
public class Game {
    // pourquoi ne pas simplement utiliser une List<Player> ?
    private final Players players;
    
    public Game(int minPlayers) {
        this.players = new Players(minPlayers);
    }
    
    public Game(List<Player> players) {
        this(players.size()); // appelle le constructeur Game(int)
        // cela évite de réécrire `this.players = new Players(minPlayers);`
        // + si tu modifies le premier constructeur, pas besoin de modifier le second
        
        this.players.addAll(players); // en supposant qu'une telle fonction existe dans ta classe custom
    }
}

Cordialement,
ShE3py

P.S.: Ton problème vient du fait que tu créer deux fois ton plugin, et le constructeur de JavaPlugin t'interdit de faire cela.
 
  • J'aime
Reactions: Nairolf_