(Avis aux développeurs) message d'erreur suite au dev' d'un plugin

ProMineServeur

Aventurier
18 Mai 2017
11
0
2
23
Bonjour,
J'ai développé un plugin permettant de se tp sur un serveur de BungeeCord à partir d'un menu.
Le problème est que quand je clique sur un item dans ce menu pour me tp, rien ne ce passe et un message d'erreur s'affiche dans la console:

[15:45:45 ERROR]: Could not pass event InventoryClickEvent to Switcher v1.0 org.bukkit.event.EventException: null at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:306) ~[Lobby.jar:git-Spigot-3d850ec-809c399] at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62) ~[Lobby.jar:git-Spigot-3d850ec-809c399] at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:500) [Lobby.jar:git-Spigot-3d850ec-809c399] at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:485) [Lobby.jar:git-Spigot-3d850ec-809c399] at net.minecraft.server.v1_12_R1.PlayerConnection.a(PlayerConnection.java:1889) [Lobby.jar:git-Spigot-3d850ec-809c399] at net.minecraft.server.v1_12_R1.PacketPlayInWindowClick.a(SourceFile:33) [Lobby.jar:git-Spigot-3d850ec-809c399] at net.minecraft.server.v1_12_R1.PacketPlayInWindowClick.a(SourceFile:10) [Lobby.jar:git-Spigot-3d850ec-809c399] at net.minecraft.server.v1_12_R1.PlayerConnectionUtils$1.run(SourceFile:13) [Lobby.jar:git-Spigot-3d850ec-809c399] at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) [?:?] at java.util.concurrent.FutureTask.run(Unknown Source) [?:?] at net.minecraft.server.v1_12_R1.SystemUtils.a(SourceFile:46) [Lobby.jar:git-Spigot-3d850ec-809c399] at net.minecraft.server.v1_12_R1.MinecraftServer.D(MinecraftServer.java:748) [Lobby.jar:git-Spigot-3d850ec-809c399] at net.minecraft.server.v1_12_R1.DedicatedServer.D(DedicatedServer.java:406) [Lobby.jar:git-Spigot-3d850ec-809c399] at net.minecraft.server.v1_12_R1.MinecraftServer.C(MinecraftServer.java:679) [Lobby.jar:git-Spigot-3d850ec-809c399] at net.minecraft.server.v1_12_R1.MinecraftServer.run(MinecraftServer.java:577) [Lobby.jar:git-Spigot-3d850ec-809c399] at java.lang.Thread.run(Unknown Source) [?:?] Caused by: java.lang.IllegalArgumentException: Plugin source cannot be null at org.bukkit.plugin.messaging.StandardMessenger.validatePluginMessage(StandardMessenger.java:473) ~[Lobby.jar:git-Spigot-3d850ec-809c399] at org.bukkit.craftbukkit.v1_12_R1.entity.CraftPlayer.sendPluginMessage(CraftPlayer.java:1078) ~[Lobby.jar:git-Spigot-3d850ec-809c399] at fr.genesysfrenesy.plugin.PlayerJoinListeners.onClick(PlayerJoinListeners.java:146) ~[?:?] at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?] at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:?] at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:?] at java.lang.reflect.Method.invoke(Unknown Source) ~[?:?] at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:302) ~[Lobby.jar:git-Spigot-3d850ec-809c399] ... 15 more

Quelqu'un pourrait m'aider ?
Merci
 

crokis

Développeur PHP/Java/SQL
16 Juillet 2015
51
25
28
Auvergne-Rhône-Alpes, France
Bonjour,

Analyser une calltrace sans code va être compliqué ^^
Pourrais-tu poster ta fonction appelant l’évènement InventoryClickEvent ?
Elle se trouve sans doute dans une de tes class Listeners :)

Cordialement
 
Dernière édition:

ProMineServeur

Aventurier
18 Mai 2017
11
0
2
23
Sur ce plugin j'ai tout fait dans la même classe sauf la class Main, même si c'est pas très propre (je débute). Voilà l'event InventoryClickEvent:

@EventHandler
public void onClick(InventoryClickEvent event) {

Inventory inv = event.getInventory();
Player player = (Player) event.getWhoClicked();
ItemStack current = event.getCurrentItem();


if(current == null) return;

if(inv.getName().equals("§8Menu")) {

event.setCancelled(true);
player.closeInventory();

switch(current.getType()) {

case BED:
ByteArrayOutputStream b = new ByteArrayOutputStream();
DataOutputStream out = new DataOutputStream(b);

try {
out.writeUTF("Connect");
out.writeUTF("semirp");
}catch(IOException e) {
e.printStackTrace();
}

player.sendPluginMessage(main, "BungeeCord", b.toByteArray());

player.sendMessage("Téléportation...");
break;

case COBBLESTONE:

player.sendMessage("Téléportation...");
break;

case GRASS:

player.sendMessage("Téléportation...");
break;

case NOTE_BLOCK:

player.sendMessage("Téléportation...");
break;

case DIAMOND_SWORD:

player.sendMessage("Téléportation...");
break;

case REDSTONE_BLOCK:
player.closeInventory();


default: break;


Sachant que les case "COBBLESTONE", etc... sont pour chaque serveurs, par exemple, la cobble pour se tp à un serveur build
 
Dernière édition par un modérateur:

Detobel36

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

Tout d'abord, j'aimerais faire remarqué qu'on n'est pas dans la bonne section. Ici c'est pour la recherche, la présentation et la suggestion de plugin. Le support se fait dans la catégorie "Support".

Bon, ensuite ce serait bien de soigner la présentation... Ton code est horrible à lire vu que tous les espaces sont supprimé, il faudrait mettre la balise code la prochaine fois.

Enfin, concernant ton soucis, as-tu bien tout déclaré dans ton main ?
C'est-à-dire, avoir fait un "implements PluginMessageListener" et avoir déclarer un nouveau plugin channel:
Code:
this.getServer().getMessenger().registerOutgoingPluginChannel(this, "BungeeCord");


Cordialement,
Detobel36
 

ProMineServeur

Aventurier
18 Mai 2017
11
0
2
23
Bonjour,
pour le support je ne savait pas et je précise que je suis débutant donc j'essaye déjà de faire des plugins qui fonctionnent.
Et oui j'ai bien tout déclaré dans Main
 

crokis

Développeur PHP/Java/SQL
16 Juillet 2015
51
25
28
Auvergne-Rhône-Alpes, France
Bonjour,

Je pense que Detobel36 souhaite notamment évoquer le fait qu'il vaudrait mieux que tu utilise la fonction "Code" de l'éditeur de texte de ce forum pour text posts (bouton [+] à gauche de la disquette, puis </> Code).

Pourrais-tu nous fournir également ta méthode onClick qui se trouve dans ton fichier PlayerJoinListeners.java ?

Cordialement
 

ProMineServeur

Aventurier
18 Mai 2017
11
0
2
23
Code:
    @EventHandler
    public void onClick(InventoryClickEvent event) {
        
        Inventory inv = event.getInventory();
        Player player = (Player) event.getWhoClicked();
        ItemStack current = event.getCurrentItem();
        
        
        if(current == null) return;
        
        if(inv.getName().equals("§8Menu")) {
            
            event.setCancelled(true);
            player.closeInventory();
            
            switch(current.getType()) {

            case BED:
                ByteArrayOutputStream  b = new ByteArrayOutputStream();
                DataOutputStream out = new DataOutputStream(b);
                
                try {
                    out.writeUTF("Connect");
                    out.writeUTF("semirp");
                }catch(IOException e) {
                    e.printStackTrace();
                }
                
                player.sendPluginMessage(main, "BungeeCord", b.toByteArray());
                
                player.sendMessage("Téléportation...");
                break;
                
            case COBBLESTONE:
                
                player.sendMessage("Téléportation...");
                break;
                
            case GRASS:
                
                player.sendMessage("Téléportation...");
                break;
                
            case NOTE_BLOCK:
                
                player.sendMessage("Téléportation...");
                break;
                
            case DIAMOND_SWORD:
                
                player.sendMessage("Téléportation...");
                break;
                
            case REDSTONE_BLOCK:
                player.closeInventory();

                
                default: break;
 

crokis

Développeur PHP/Java/SQL
16 Juillet 2015
51
25
28
Auvergne-Rhône-Alpes, France
Si tu essaie de remplacer ces deux lignes :
Code:
ByteArrayOutputStream  b = new ByteArrayOutputStream();
DataOutputStream out = new DataOutputStream(b);

Par la ligne suivante :
Code:
ByteArrayDataOutput out = ByteStreams.newDataOutput();

Peux-tu me dire ce que ça te donne ? :)
En voyant rapidement ton code, il me semble que le type de out n'est pas celui attendu pour un OutputStream ;)