Résolu Problème PluginMessage

DuckInGame

Bucheron
3 Mai 2019
8
1
14
24
Bonjour / Bonsoir,
Je créer un plugin de Hub pour mon serveur et quand je tente de faire connecter un joueur sur un autre lobby, une erreur apparaît dans la console, je suis sous Spigot-1.8, je me suis renseigner sur le wiki des plugins message de spigot (https://www.spigotmc.org/wiki/bukkit-bungee-plugin-messaging-channel/), hélas, j'ai rien trouvé par rapport à mon bug

Voici l'erreur se trouvant dans la console :
Code:
[14:56:46 ERROR]: Could not pass event InventoryClickEvent to BressolaMainHub v1.000.00
org.bukkit.event.EventException
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:310) ~[spigot-1.8.8.jar:git-Spigot-db6de12-18fbb24]
        at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62) ~[spigot-1.8.8.jar:git-Spigot-db6de12-18fbb24]
        at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:502) [spigot-1.8.8.jar:git-Spigot-db6de12-18fbb24]
        at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:487) [spigot-1.8.8.jar:git-Spigot-db6de12-18fbb24]
        at net.minecraft.server.v1_8_R3.PlayerConnection.a(PlayerConnection.java:1630) [spigot-1.8.8.jar:git-Spigot-db6de12-18fbb24]
        at net.minecraft.server.v1_8_R3.PacketPlayInWindowClick.a(SourceFile:31) [spigot-1.8.8.jar:git-Spigot-db6de12-18fbb24]
        at net.minecraft.server.v1_8_R3.PacketPlayInWindowClick.a(SourceFile:9) [spigot-1.8.8.jar:git-Spigot-db6de12-18fbb24]
        at net.minecraft.server.v1_8_R3.PlayerConnectionUtils$1.run(SourceFile:13) [spigot-1.8.8.jar:git-Spigot-db6de12-18fbb24]
        at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) [?:1.8.0_251]
        at java.util.concurrent.FutureTask.run(Unknown Source) [?:1.8.0_251]
        at net.minecraft.server.v1_8_R3.SystemUtils.a(SourceFile:44) [spigot-1.8.8.jar:git-Spigot-db6de12-18fbb24]
        at net.minecraft.server.v1_8_R3.MinecraftServer.B(MinecraftServer.java:715) [spigot-1.8.8.jar:git-Spigot-db6de12-18fbb24]
        at net.minecraft.server.v1_8_R3.DedicatedServer.B(DedicatedServer.java:374) [spigot-1.8.8.jar:git-Spigot-db6de12-18fbb24]
        at net.minecraft.server.v1_8_R3.MinecraftServer.A(MinecraftServer.java:654) [spigot-1.8.8.jar:git-Spigot-db6de12-18fbb24]
        at net.minecraft.server.v1_8_R3.MinecraftServer.run(MinecraftServer.java:557) [spigot-1.8.8.jar:git-Spigot-db6de12-18fbb24]
        at java.lang.Thread.run(Unknown Source) [?:1.8.0_251]
Caused by: java.lang.IllegalArgumentException: Plugin source cannot be null
        at org.bukkit.plugin.messaging.StandardMessenger.validatePluginMessage(StandardMessenger.java:473) ~[spigot-1.8.8.jar:git-Spigot-db6de12-18fbb24]
        at org.bukkit.craftbukkit.v1_8_R3.entity.CraftPlayer.sendPluginMessage(CraftPlayer.java:1039) ~[spigot-1.8.8.jar:git-Spigot-db6de12-18fbb24]
        at fr.DuckInGame.MainPluginHub.Events.ClickInGameMenu.onClickInGameMenu(ClickInGameMenu.java:36) ~[?:?]
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_251]
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_251]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_251]
        at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_251]
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:306) ~[spigot-1.8.8.jar:git-Spigot-db6de12-18fbb24]
        ... 15 more

Et voici le code du plugin :

Java:
package fr.DuckInGame.MainPluginHub.Events;
import java.util.Random;

import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;

import com.google.common.io.ByteArrayDataOutput;
import com.google.common.io.ByteStreams;

import fr.DuckInGame.MainPluginHub.Main;

public class ClickInGameMenu implements Listener {
    
    private Main plugin = Main.getPlugin(Main.class);
    
    @EventHandler
    public void onClickInGameMenu(InventoryClickEvent e) {
        ItemStack is = e.getCurrentItem();
        Inventory inv = e.getInventory();
        Player p = (Player) e.getWhoClicked();
        int slot = e.getSlot();
        
        if(is == null) return;
        if(inv.getName().equalsIgnoreCase("Game Menu - Page 1")) {
            ByteArrayDataOutput out = ByteStreams.newDataOutput();
            Random random = new Random();
            if(slot == 9) {
                String[] hubservers = {"hub1", "hub2", "hub3"};
                
                out.writeUTF("Connect");
                out.writeUTF(hubservers[random.nextInt(hubservers.length)]);
                
                p.sendPluginMessage(plugin, "BungeeCord", out.toByteArray());
            }
        }
    }

}

Merci d'avance de votre aide,
Cordialement DuckInGame.
 

ShE3py

Enbogueuse
Support
26 Septembre 2015
4 129
162
461
247
21
Mìlhüsa
Bonjour,

Code:
[14:56:46 ERROR]: Could not pass event InventoryClickEvent to BressolaMainHub v1.000.00
Caused by: java.lang.IllegalArgumentException: Plugin source cannot be null
        at org.bukkit.plugin.messaging.StandardMessenger.validatePluginMessage(StandardMessenger.java:473) ~[spigot-1.8.8.jar:git-Spigot-db6de12-18fbb24]
        at org.bukkit.craftbukkit.v1_8_R3.entity.CraftPlayer.sendPluginMessage(CraftPlayer.java:1039) ~[spigot-1.8.8.jar:git-Spigot-db6de12-18fbb24]
        at fr.DuckInGame.MainPluginHub.Events.ClickInGameMenu.onClickInGameMenu(ClickInGameMenu.java:36) ~[?:?]
        ... 20 more

Java:
// private Main plugin = Main.getPlugin(Main.class);
player.sendPluginMessage(plugin, "BungeeCord", out.toByteArray());

Il semblerait que ta variable plugin soit nulle, je ne sais pas comment tu définis Main#getPlugin(Class), mais à mon avis pas de la bonne manière.
Le plus simple est de faire une variable globale :
Java:
public class MyPlugin extends JavaPlugin {
    public static MyPlugin instance;
    
    @Override
    public void onEnable() {
        instance = this;
    }
}

player.sendPluginMessage(MyPlugin.instance, "BungeeCord", out.toByteArray());

Et sinon je vois que tu as des majuscules dans tes noms de packages, par convention ceux-ci doivent être en minuscules :
fr.duckingame.mainpluginhub.events.ClickInGameMenu

Cordialement,
ShE3py.