クライアントが古い時のkickメッセージにバージョン更新を促すようする

どうも。takesi-kaityoです!

こちらもsrcが必要になってくるので、まだ持っていない方は

https://github.com/H4PM/Elywing

からダウンロードしてください。

ではまずsrc➔pocketmineの順にフォルダを開いていくと、中に

Player.phpが入っていると思います。

今回はその中身を書き換えます。

Player.phpを開くと2280行目あたりに

if($packet->protocol !== ProtocolInfo::CURRENT_PROTOCOL){

if($packet->protocol < ProtocolInfo::CURRENT_PROTOCOL){

$message = "disconnectionScreen.outdatedClient";

$pk = new PlayStatusPacket();

$pk->status = PlayStatusPacket::LOGIN_FAILED_CLIENT;

$this->directDataPacket($pk);

}else{

$message = "disconnectionScreen.outdatedServer";

$pk = new PlayStatusPacket();

$pk->status = PlayStatusPacket::LOGIN_FAILED_SERVER;

$this->directDataPacket($pk);

}

$this->close("", $message, false);

break;

}

が書かれていると思います

(この記事を書いた時点で2280行目あたりにありますが、更新されて位置が変わっている可能性があるので2280行目あたりに見当たらない場合は文字検索をかけてください)


if($packet->protocol < ProtocolInfo::CURRENT_PROTOCOL)

クライアントのProtocolがサーバーのProtocolより古いのであれば..(if文)

意味していて、

}else{

でその逆クライアントのProtocolがサーバーのProtocolより新しいのであば..

if($packet->protocol > ProtocolInfo::CURRENT_PROTOCOL)を意味しています。

では編集していきましょう!

if($packet->protocol !== ProtocolInfo::CURRENT_PROTOCOL){

if($packet->protocol < ProtocolInfo::CURRENT_PROTOCOL){

//$message = "disconnectionScreen.outdatedClient";

$message = "MinecraftPEのバージョンを" . \pocketmine\MINECRAFT_VERSION . "にしてください。";

$pk = new PlayStatusPacket();

$pk->status = PlayStatusPacket::LOGIN_FAILED_CLIENT;

$this->directDataPacket($pk);

}else{

//$message = "disconnectionScreen.outdatedServer";

$message = "MinecraftPEのバージョンを" . \pocketmine\MINECRAFT_VERSION . "にしてください。";

$pk = new PlayStatusPacket();

$pk->status = PlayStatusPacket::LOGIN_FAILED_SERVER;

$this->directDataPacket($pk);

}

$this->close("", $message, false);

break;


}


いちおう、復元したくなった時のために、前のものはコメントアウト(//)しました。

\pocketmine\MINECRAFT_VERSIONはサーバーのバージョンを意味していて、

src➔pocketmine➔PocketMine.phpの75行目あたりに

 const VERSION = "1.0";

const API_VERSION = "3.0.0-ALPHA1";

const CODENAME = "Birpen";

const MINECRAFT_VERSION = "v1.0.3 alpha";

const MINECRAFT_VERSION_NETWORK = "1.0.3";

const GENISYS_API_VERSION = '1.9.3';

とあると思います。ここの、MINECRAFT_VERSIONを取得します。

こうすると、古いProtocolのプレイヤーが入ったときに

23:40:04|情報 > [/xxx.xxx.xxx.xxx:19132] は 古いクライアントです!により、退室しました。

23:40:04|情報 > [/xxx.xxx.xxx.xxx:19132] は MinecraftPEのバージョンをv1.0.3 alphaにしてください。 により、退室しました。

になります。

以上クライアントが古い時のkickメッセージにバージョン更新を促すようする方法の

紹介でした!