publicuhc/minecraft-auth

用于认证检查的模拟Minecraft服务器

1.1.1 2015-07-18 19:20 UTC

This package is not auto-updated.

Last update: 2024-09-28 16:36:15 UTC


README

SensioLabsInsight

PHP库,用于运行一个模拟的Minecraft服务器,该服务器检查与会话服务器上的认证是否正确,并在之后将玩家踢出。它具有一个回调函数来更改断开连接的消息。我使用它来验证码,以链接Minecraft账户,而不需要输入密码。

安装

通过composer安装,将"publicuhc/minecraft-auth": "dev-master"添加到您的composer require中。

依赖项:将在安装时由composer处理,需要PHP mcrypt扩展才能运行。(您可以在linux上使用apt-get install php5-mcrypt或类似命令进行安装)

示例用法

use PublicUHC\MinecraftAuth\AuthServer\AuthServer;

$server = new AuthServer(25565, '0.0.0.0');

$server->on('login_success', function($username, $uuid, DisconnectPacket $packet){
    echo "USERNAME: $username, UUID: $uuid\n";
    $packet->setReason("USERNAME: $username, UUID: $uuid");
});

$server->on('status_request', function(StatusResponsePacket $packet) {
    $packet->setDescription('test server')
        ->setMaxPlayers(10)
        ->setOnlineCount(1000)
        ->setVersion('1.8+')
        ->setProtocol(47);
});

$server->start();

说明

new AuthServer(25565, '0.0.0.0');

创建一个新的认证服务器,绑定到端口号25565,并在所有接口(0.0.0.0)上。如果省略第二个参数,则将绑定到127.0.0.1以进行本地连接。

$server->on('login_success', function($username, $uuid, DisconnectPacket $packet){
    echo "USERNAME: $username, UUID: $uuid\n";
    $packet->setReason("USERNAME: $username, UUID: $uuid");
});

这是登录成功事件。每当建立成功连接时都会调用此事件。用户名是连接的客户端的用户名,UUID是Minecraft UUID(不带-s)。$packet是一个DisconnectPacket对象,将在事件后发送给客户端。使用setReason(设置一个数组/字符串原因,在发送前将被json编码)或setReasonJSON(设置一个预编码的json字符串)。

$server->on('status_request', function(StatusResponsePacket $packet) {
    $packet->setDescription('test')
        ->setMaxPlayers(10)
        ->setOnlineCount(1000)
        ->setVersion('1.8+')
        ->setProtocol(47);
        ->setOnlinePlayers([
            [
                'name' => 'Eluinhost',
                'id'   => '000000000000-0000-0000-0000-00000000'
            ]
        ]);
});

这是状态请求事件。每当客户端请求服务器列表数据时都会调用此事件。

->setDescription(string); - 设置在服务器列表中显示的描述
->setMaxPlayers(int) - 列表中的/后面的数字
->setOnlineCount(int) - 列表中的/前面的数字
->setVersion(string) - 如果客户端连接到不同的协议,则将显示此版本号而不是最小/最大玩家数
->setProtocol(47) - 设置要设置的协议版本,我们只接受47,因此要么将其设置为47,要么省略它 ->setOnlinePlayers(array) - 当悬停在在线计数上时显示的玩家名称数组。有关数组格式,请检查PHPDoc注释
->setFavicon(string) - 文本格式的图像(例如,data:image/png;base64,DATAHERE)

所有这些方法都可以忽略。如果没有设置,将使用以下值

->setDescription(string); - 默认:§4▁§e▂§4▃§e▄§4▅§e▆§4▇§e█ §4§l PHPAuthServer §e█§4▇§e▆§4▅§e▄§4▃§e▂§4▁ §c▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
->setMaxPlayers(int) - 默认:-1
->setOnlineCount(int) - 默认:-1
->setVersion(string) - 默认:1.8+ ->setProtocol(47) - 默认:47 ->setOnlinePlayers(array) - 默认:[]
->setFavicon(string) - 默认:null(没有favicon)

由于PHP的单线程性质,所有事件都将阻止其他代码。如果在其中运行任何长时间运行的过程,它将停止处理其他连接,直到完成。要么保持计算量低,要么进行进程分叉以运行长时间运行代码。

`$server->start()`

启动服务器,此方法之后的任何方法都不会被调用,因为它会阻塞,确保在调用此方法之前运行所需的所有内容。