Как получить счет воспроизведения с другого сервера Paper Spigot, работающего через Bungeecord - PullRequest
0 голосов
/ 24 февраля 2020

В настоящее время я работаю над плагином для Bukkit (Paper Spigot), который действует как очередь. Этот плагин работает на сервере очередей, который затем перенаправляет игроков на нужный сервер, когда на соответствующем сервере меньше установленного количества игроков. Мне нужно получить playercount с соответствующего сервера и использовать его в коде из моего плагина очереди. Я нашел примеры того, как это сделать, используя канал сообщений Bukkit, но для этого требуются игроки (я думаю), и я не совсем понимаю это, хотя я прочитал много других статей и сообщений от stackoverflow, так как у большинства этих людей были немного другие проблемы , Я также слышал, что другие люди говорят о сокетах, но я не уверен, как они работают. Я в порядке с запуском второго плагина на правильном сервере или сервере Bungeecord. Мне просто нужно знать, какой код писать и где его писать! или хотя бы полезный пример работающей системы.

Вот мой код:

package com.Package;

import org.bukkit.Bukkit;
//import org.bukkit.command.Command;
//import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.event.player.PlayerJoinEvent;
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;
import java.util.ArrayList;
import java.util.logging.Logger;

public class AnarchyQueue extends JavaPlugin implements PluginMessageListener {
    ArrayList<Player> players = new ArrayList<Player>();
    Boolean isListening = false;
    int playerNumber = 0;
    @Override
    public void onEnable() {
        getServer().getMessenger().registerOutgoingPluginChannel(this, "BungeeCord");
        getServer().getMessenger().registerIncomingPluginChannel(this, "BungeeCord", this);
        Bukkit.getScheduler().scheduleSyncRepeatingTask(this, new Runnable() {
            public void run() {
                getCount();
                log(Integer.toString(playerNumber));
            }
        }, 200L, 200L);
    }
    @Override
    public void onDisable() {

    }
    private void log(String str)
    {
        Logger.getLogger("Minecraft").info(str);
    }
    public void onPlayerJoin(PlayerJoinEvent event)
    {
        players.add(event.getPlayer());
    }
    /*public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
        if (command.getName().equalsIgnoreCase("players")) {
            if (!(sender instanceof Player)) {
                sender.sendMessage("You must be in game!");
                return true;
            }
            else {
                getCount();
            }
        }
        return true;   
    }*/
    private void getCount() {   
        ByteArrayDataOutput out = ByteStreams.newDataOutput();
        out.writeUTF("PlayerCount");
        out.writeUTF("anarchy");
        Player player = Bukkit.getPlayerExact("Ed_Silver");
        player.sendPluginMessage(this, "BungeeCord", out.toByteArray());
        isListening=true;
    }
    @Override
    public void onPluginMessageReceived(String channel, Player player, byte[] message) {
        if (channel.equals("BungeeCord")) {
            ByteArrayDataInput in = ByteStreams.newDataInput(message);
            String subchannel = in.readUTF();
            if (subchannel.equals("PlayerCount") && isListening) {
                int playerCount = in.readInt();
                playerNumber = playerCount;
                isListening=false;
            }
        }
    }
}

Я знаю, что этот код сломан во многих отношениях, я не собираюсь его исправлять - я просто хочу сделать то, что я ' Я делаю, а я позабочусь об остальном позже. (давая код, потому что люди, как правило, становятся грязными, если они думают, что вы не пробовали :)!)

Не стесняйтесь спрашивать более подробную информацию и т. д. c ...

Заранее спасибо , Эдвард


- РЕДАКТИРОВАТЬ -

Я нашел джедаев и экспериментировал. Если бы кто-то мог объяснить мне джедаев, это было бы здорово. Это то, что я нашел до сих пор:

public static void main(String[] args) {// priOnEnable() {
        //Connecting to Redis server on localhost 
        Jedis jedis = new Jedis("localhost"); 
        System.out.println("Connection to server sucessfully"); 
        //check whether server is running or not 
        System.out.println("Server is running: "+jedis.ping());
    }

Однако, появляется ошибка. Я считаю, что мне нужно запустить что-то еще, чтобы управлять Redis или чем-то еще.

Еще раз спасибо,

Эдвард

1 Ответ

0 голосов
/ 27 февраля 2020

Что я сделал: Установленный Redis (https://github.com/MicrosoftArchive/redis/releases) Использовал такие руководства, как https://www.tutorialspoint.com/redis/redis_java.htm для разработки кода. Удачи всем, кто пытается это сделать! Веселитесь, и я надеюсь, что вы решите это!

...