В настоящее время я работаю над плагином для 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 или чем-то еще.
Еще раз спасибо,
Эдвард