gpt4 book ai didi

java - 如何从通过 Bungeecord 运行的另一台 Paper Spigot 服务器获取玩家计数

转载 作者:行者123 更新时间:2023-12-01 18:15:20 25 4
gpt4 key购买 nike

我目前正在为 Bukkit(Paper Spigot)开发一个充当队列的插件。该插件在队列服务器中运行,当正确服务器的玩家数量少于设定数量时,该插件会将玩家转移到正确的服务器。我需要从正确的服务器获取玩家计数,并在队列插件的代码中使用它。我找到了如何使用 Bukkit 的消息 channel 来做到这一点的示例,但这需要玩家(我认为),而且我并不完全理解它,尽管我读过许多其他文章和 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;
}
}
}
}

我知道这段代码在很多方面都被破坏了,我并不是真的想修复它 - 我只是想要一种方法来完成我正在做的事情,稍后我会解决其余的问题。 (提供代码,因为如果人们认为您没有尝试过,他们往往会变得衬衫:)!)

请随时询问更多详细信息等...

提前致谢,爱德华

<小时/>

--编辑--

我已经找到了 Jedis 并一直在进行实验。如果有人可以向我解释绝地武士,那就太好了。这是我到目前为止发现的:

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 或其他东西。

再次感谢

爱德华

最佳答案

我做了什么:已安装 Redis ( https://github.com/MicrosoftArchive/redis/releases )使用的指南如 https://www.tutorialspoint.com/redis/redis_java.htm制定代码。祝所有尝试此操作的人好运!玩得开心,我希望你能成功!

关于java - 如何从通过 Bungeecord 运行的另一台 Paper Spigot 服务器获取玩家计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60381218/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com