在PM服务器中获取玩家设备端系统

YuIo_PQ

【Lv:5】

注册
2018/03/17
消息
590
金粒
359,861.44金粒
最近,这个东西在国外挺流行的,就拿来分享一下。
首先,你的插件应该需要多use(调用)以下两个事件:
PHP:
use pocketmine\event\server\DataPacketReceiveEvent;
use pocketmine\network\mcpe\protocol\LoginPacket;
具体调用过程如下:
PHP:
public const OS_TABLE = [
        'Unknown',
        'Android',
        'iOS',
        'macOS',
        'FireOS',
        'Windows 10',
        'Windows',
        'Dedicated',
    ];
记录:
PHP:
public function onData(DataPacketReceiveEvent $event){
        $pk = $event->getPacket();
        if($pk instanceof LoginPacket) {
            $this->cache[$pk->username] = Main::OS_TABLE[$pk->clientData["DeviceOS"]];
        }
    }
get(获取):
PHP:
$os = $this->storage->get($target->getName());
之后你就可以可以通过调用$os来检测了,以下案例仅供参考:
某世界只能某个设备系统的人进入
配置文件格式:
YAML:
"Android": []
"iOS": []
"Windows10": []
"FireOS": []
"macOS": []
"Unknown": []
代码格式:
PHP:
public function onLevelChange(EntityLevelChangeEvent $e){
        $p = $e->getEntity();
        if(!$p instanceof Player) return;
        if(in_array($e->getTarget()->getFolderName(), $this->getConfig()->get($os = $this->getOS($p->getName())))){
            $p->sendMessage(TextFormat::RED . $os . TextFormat::WHITE . " 的用户无法进入这个世界.");
            $e->setCancelled();
        }
    }
 
最后编辑:
不过那个$this->getOS($player->getName())有代码供参考吗
 
配置文件那个是YAML格式,不是BB代码
 
其实可以$player->getDeviceOS(),1是安卓,2是iOS,4是fireOS,7是win 10,macOS我不知道
 

在线会员

  • mc_xiaoQAQ_
  • 沐予
  • Lxc
  • bast_l
  • 青云yyy
  • 蓝色之空
后退
顶部 底部