Bungeecord et spigot [Besoin d'aide / code]

Miicka

Aventurier
11 Juillet 2017
7
0
2
27
Bonjour,

Je voudrais voir le nombre total de joueurs sur un serveur en passant par des channels de communication entre bukkit et Bungee. Cela fonctionne bien je récupère les joueurs mais je voudrais les récupérer dans une variable mais lorsque celui-ci exécute la fonction et bien je récupère 0 car il y a un délai de réponse entre le serveur bukkit et le serveur Bungee. J'ai donc créé une méthode permettant d'attendre la réponse du serveur Bungee mais mon serveur crash. Voici le code :

Code:
package fr.miickadow.endawn;

import java.util.Arrays;

import org.bukkit.Bukkit;
import org.bukkit.DyeColor;
import org.bukkit.Material;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.Action;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.plugin.PluginManager;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.plugin.messaging.PluginMessageListener;

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


class endawngui extends JavaPlugin implements Listener, PluginMessageListener {
    private static endawngui instance;
 
    private boolean response = false;
    @Override
    public void onEnable() {
        instance = this;

        getLogger().info(getInstance() + " est activé !");

        this.getServer().getMessenger().registerOutgoingPluginChannel(this, "BungeeCord");
        this.getServer().getMessenger().registerIncomingPluginChannel(this, "BungeeCord", this);
  
        PluginManager pm = getServer().getPluginManager();
        pm.registerEvents(this, this);
    }

    private int test;
    public int gettest() {
        return test;
    }
    public void settest(int test) {
        this.test = test;
    }
    public boolean isResponse() {
        return response;
    }
    public void setResponse(boolean response) {
        this.response = response;
    }
    @Override
    public synchronized void onPluginMessageReceived(String channel, Player player, byte[] message) {
        try{
        if (!channel.equals("BungeeCord")) {
            return;
        }
        ByteArrayDataInput in = ByteStreams.newDataInput(message);
        if (channel.equals("BungeeCord")) {
            @SuppressWarnings("unused")
            String input = in.readUTF();
            @SuppressWarnings("unused")
            String server = in.readUTF();
            int result = in.readInt();
            settest(result);
            setResponse(true);
            player.sendMessage(gettest()+"/40");
        }

        }catch(Exception ex){
            ex.printStackTrace();
        }
    }
    public synchronized void playercount(String channel, String target, Player p){
         try{
    
               ByteArrayDataOutput out = ByteStreams.newDataOutput();
               out.writeUTF(target); // PlayerCount
               out.writeUTF(channel); // Server_test
               p.sendPluginMessage(instance, "BungeeCord", out.toByteArray());
    
               }catch(Exception ex){
                 ex.printStackTrace();
             }
           }
    public synchronized void actplayer(final Player p){
        Bukkit.getScheduler().runTaskAsynchronously(this, new Runnable() {
        
            @Override
            public void run() {
                p.sendMessage("TEST dans la méthode : "+ waitForResponse(p));
            
            }
        });

    }
 
    private synchronized int waitForResponse(Player p){
        response = false;
        String Server_test = "Server_test";
        String PlayerCount = "PlayerCount";
        playercount(Server_test, PlayerCount, p);
    
        while(!isResponse()){
            try {
                Thread.sleep(1);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    
        return gettest();
    
    }
     public static endawngui getInstance(){
            return instance;
     }

    @Override
    public void onDisable() {
        getLogger().info(getInstance() + " est désactivé !");

    }
  ...
}

Quelqu'un peut m'aider s'il vous plait ?

Cordialement,
Miicka