Plugin Résolu >> Aide pour mon plugin

C

Compte supprimé

Invité
Je fais actuellement la nouvelle version de mon plugin Minecraft 1.12.2 (Avec Spigot).

Malheureusement, je rencontre un problème :

Code:
//BrCMD class
        getCommand("mbrhelp").setExecutor(new BrCMD());
        getCommand("mbrinfo").setExecutor(new BrCMD());
        getCommand("mbralert").setExecutor(new BrCMD());
        getCommand("mbrserver").setExecutor(new BrCMD());
        getCommand("mbrop").setExecutor(new BrCMD());
        getCommand("mbrconsole").setExecutor(new BrCMD());
        getCommand("mbrwarn").setExecutor(new BrCMD());
        getCommand("mbrevent").setExecutor(new BrCMD());

Voici la classe principale (Main). (Texte en rouge = Erreur)
Et voici la classe BrCMD (Qui contient le code pour toute les commandes ci-dessus)

https://hastebin.com/ufayiletay.java

(BrCMD ne contient aucune erreur d'après éclipse)


Je précise que je suis un noob et que je ne m'y connais que peu en JAVA.

J'aimerais pouvoir faire que la classe ai la même fonctionnalité mais que ce problème soit règlé

Merci d'avance !
 

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,

Oula oula...
Tu créer plusieurs fois le même objet.. Pourquoi ?
PHP:
final BrCMD brCmd = new BrCMD();
getCommand("mbrhelp").setExecutor(brCmd);
getCommand("mbrinfo").setExecutor(brCmd);
getCommand("mbralert").setExecutor(brCmd);
getCommand("mbrserver").setExecutor(brCmd);
getCommand("mbrop").setExecutor(brCmd);
getCommand("mbrconsole").setExecutor(brCmd);
getCommand("mbrwarn").setExecutor(brCmd);
getCommand("mbrevent").setExecutor(brCmd);


Cordialement,
Detobel36
 

ShE3py

Enbogueuse
Support
26 Septembre 2015
4 139
162
464
247
21
Mìlhüsa
Bonsoir,

Code:
public BrCMD(Main Main2) {
   this.main = Main2;
}

Ta classe n'a pas de constructeur par défaut, tu ne peux donc pas l'instanciée sans arguments.
De plus, évite de faire [ce qu'à dit Detobel].

L'instanciation se ferait par contre avec un truc du style :
Code:
new BrCMD(this);

Cordialement,
ShE3py.
 
  • J'aime
Reactions: Detobel36
C

Compte supprimé

Invité
Suis-je un noob @ShE3py si je te dis que je n'ai que partiellement compris :confused:
 

ShE3py

Enbogueuse
Support
26 Septembre 2015
4 139
162
464
247
21
Mìlhüsa
Un constructeur est une méthode appelée lors de la création du dit objet, qui doit initialiser tous ses membres (variables). Le constructeur par défaut est celui qui ne prend aucun argument, et est déclaré implicitement si aucun autre constructeur n'est présent.
Code:
class Foo {}

new Foo();       // ok, le constructeur a été défini implicitement

class Bar {
   public Bar() {}
}

new Bar();       // ok, le constructeur a été défini explicitement

class Baz {
   public int i;
   public String str;
}

new Baz();       // ok, i = 0 et str = null

class Qux {
   public final int i;
}

new Qux();       // erreur, i est final et doit être initialisé explicitement

class Quux {
   public Quux(int i) {
       this.i = i;
   }
  
   public final int i;
}

new Quux();       // erreur, aucun constructeur ne prend 0 paramètre
new Quux(0);      // ok, utilisation du constructeur Quux(int)

class Corge {
   public Corge(int i) {
       this.i = i;
   }
  
   public Corge() {
       this.i = -1;
   }
  
   public final int i;
}


new Corge(1);   // ok, utilisation du premier constructeur Corge(int), i = 1
new Corge();    // ok, utilisation du second constructeur Corge(), i = -1

Dans ton cas, le constructeur requière un objet de type Main. Il faut le passer lorsque tu créés l'objet, tu peux certainement utiliser this qui est égal à l'objet actuel, vu que tu créés l'objet depuis cette fameuse classe Main.

À noté que généralement, pour les classes étant censées n'être qu'en un seul exemplaire, on préfèrera les singletons que de passer celle-ci à travers tout le processus ;
Code:
class Grault {
   public static final Garply INSTANCE = new Garply();
}

// On peut ainsi accéder à la variable depuis n'importe quelle portion du code ;
Grault.INSTANCE.doSomething();
 
C

Compte supprimé

Invité
Je suis extrêmement désolé @ShE3py mais je pense même avec tes explications, je ne comprend ce que je dois faire.

Je suis nul.
 

ShE3py

Enbogueuse
Support
26 Septembre 2015
4 139
162
464
247
21
Mìlhüsa
Dans ton cas, new BrCMD() n'existe pas, tu ne peux donc pas appeler ce constructeur.
Il faut que tu remplaces par new BrCMD(this), car il demande un argument de type Main et que dans ton cas, tu appelles ceci depuis cette dite classe.

Bref, on est pas ici pour t'apprendre la sémantique, suit un tutoriel sur Java au lieu de copier-coller bêtement du code.
Celui de Jean-Michel Doudoux et ses quelques 3623 pages devrait t'aider à démarrer.
 
C

Compte supprimé

Invité
Merci énormément ! Tu m'as beaucoup aidé. :D :merci <3