wyhpylc 发表于 2023-4-22 15:48:13

mcpi库

mcpi库有没有办法获取服务器内玩家信息(用户名和消息)服务器是离线服

isdkz 发表于 2023-4-22 15:48:14

wyhpylc 发表于 2023-4-22 16:42
az,player_info = rcon.run(f"data get entity {player_name}")返回的是列表吗?

不好意思,我之前的回答有误。`rcon.run()` 返回的实际上是一个字符串,而不是列表。

`player_info = rcon.run(f"data get entity {player_name}")` 会返回包含玩家信息的字符串。这个字符串可能会包含玩家的属性、位置、游戏模式等数据。

如果您想要从字符串中解析出特定的数据,可以使用正则表达式或其他字符串处理方法。例如,如果您想要提取玩家的位置,可以尝试使用以下代码:

import re

# 获取玩家信息
player_info = rcon.run(f"data get entity {player_name}")

# 使用正则表达式提取玩家的位置
position_pattern = re.compile(r"Pos:\[(-?\d+(\.\d+)?),\s(-?\d+(\.\d+)?),\s(-?\d+(\.\d+)?)\]")
position_match = position_pattern.search(player_info)

if position_match:
    x, _, y, _, z, _ = position_match.groups()
    print(f"玩家 {player_name} 的位置: X={x}, Y={y}, Z={z}")
else:
    print("无法找到玩家位置")


请注意,这个方法需要您熟悉正则表达式以解析所需的数据。同时,您需要根据实际情况调整正则表达式以匹配返回的字符串中的数据。

isdkz 发表于 2023-4-22 15:48:54

本帖最后由 isdkz 于 2023-4-22 15:50 编辑

MCPI (Minecraft: Pi Edition) API 是为了支持在树莓派设备上运行的 Minecraft 版本设计的。不过,您可以使用适用于更通用的 Minecraft 版本的库来获取服务器内的玩家信息。其中一种选择是使用 Minecraft 的 Python 库,如 `mcstatus` 和 `minepy`。

如果您想要获取服务器内玩家的用户名和消息,那么可以使用 RCON 和查询协议来实现。使用 RCON 可以允许您发送命令并接收服务器的响应,而查询协议可以帮助您获取服务器的一些基本信息。`mcstatus` 是一个适用于此目的的 Python 库。首先需要使用 pip 安装 `mcstatus`:

pip install mcstatus


然后,您可以使用以下示例代码来获取玩家的信息:

from mcstatus import MinecraftServer

# 替换为您的服务器地址和RCON密码
server = MinecraftServer.lookup("your_server_address")
rcon = server.rcon("your_rcon_password")

# 获取在线玩家列表
online_players = rcon.run("list")
print(online_players)

# 获取一个玩家的信息
player_name = "player_name"# 替换为您想要获取信息的玩家名
player_info = rcon.run(f"data get entity {player_name}")
print(player_info)


获取服务器内玩家的消息是一个更复杂的任务。一种可能的方法是编写一个自定义插件,使用 Bukkit/Spigot 或 Fabric 等 Minecraft 服务器插件框架。插件可以监听聊天事件,并将玩家的消息发送到一个外部程序,如 Python 脚本,用于处理和分析。然而,这种方法需要一定的 Java 编程和 Minecraft 服务器管理经验。

wyhpylc 发表于 2023-4-22 16:23:11

isdkz 发表于 2023-4-22 15:48
MCPI (Minecraft: Pi Edition) API 是为了支持在树莓派设备上运行的 Minecraft 版本设计的。不过,您可以使 ...

那假如我要实时监听服务器消息,有没有办法用Python实现

isdkz 发表于 2023-4-22 16:25:04

wyhpylc 发表于 2023-4-22 16:23
那假如我要实时监听服务器消息,有没有办法用Python实现

实时监听服务器消息的一种方法是使用 Python 库创建一个基于插座(socket)的连接,连接到 Minecraft 服务器的 RCON,并持续监听聊天事件。要实现这个功能,可以使用 `mcrcon` 库来与 RCON 交互。请注意,这种方法可能不是最优雅的解决方案,但它可以实现您的需求。

首先安装 `mcrcon`:

pip install mcrcon


接下来,使用以下代码创建一个连接到 Minecraft 服务器 RCON 的 Python 脚本:

import time
from mcrcon import MCRcon

# 用您的服务器 IP 地址、RCON 端口和密码替换以下信息
RCON_IP = "your_server_ip"
RCON_PORT = 25575# 请确保使用正确的 RCON 端口
RCON_PASSWORD = "your_rcon_password"

# 创建一个新的 RCON 连接
with MCRcon(RCON_IP, RCON_PASSWORD, RCON_PORT) as mcr:
    while True:
      # 运行一个命令以获取最后一条消息,这里我们使用“gamerule”命令
      # 以确保不干扰游戏进程
      mcr.command("gamerule sendCommandFeedback false")
      response = mcr.command("data get block 0 0 0 LastOutput")
      
      # 检查响应并处理结果,例如打印到控制台
      if "LastOutput" in response:
            chat_message = response.replace("LastOutput: ", "")
            print(chat_message)

      # 为了不过度请求服务器,等待几秒钟
      time.sleep(5)


这个代码示例会持续运行,并每隔一段时间请求服务器上的聊天消息。需要注意的是,这个方法可能会对服务器性能产生一定影响,所以谨慎使用。

然而,此方法可能无法获取所有消息,因为它依赖于在某个时刻查询服务器的消息。创建一个自定义 Minecraft 插件,监听聊天事件并将结果发送到 Python 脚本仍然是实现这一目标的更可靠和高效方法。这种方法可以确保所有消息都被捕获,并可以更精确地控制处理逻辑。创建此类插件需要 Java 编程经验和对 Minecraft 服务器插件框架(如 Bukkit/Spigot 或 Fabric)的了解。

wyhpylc 发表于 2023-4-22 16:42:15

isdkz 发表于 2023-4-22 16:25
实时监听服务器消息的一种方法是使用 Python 库创建一个基于插座(socket)的连接,连接到 Minecraft 服 ...

az,player_info = rcon.run(f"data get entity {player_name}")返回的是列表吗?

wyhpylc 发表于 2023-4-22 17:48:24

isdkz 发表于 2023-4-22 16:44
不好意思,我之前的回答有误。`rcon.run()` 返回的实际上是一个字符串,而不是列表。

`player_info =...

ok,感谢
页: [1]
查看完整版本: mcpi库