mirror of
https://github.com/pmmp/PocketMine-MP.git
synced 2025-07-01 23:59:53 +00:00
wow. much packet. many code. such classes
This commit is contained in:
parent
82a486169f
commit
415c9f16f4
@ -23,36 +23,23 @@ class MinecraftInterface{
|
|||||||
public $client;
|
public $client;
|
||||||
public $bandwidth;
|
public $bandwidth;
|
||||||
private $socket;
|
private $socket;
|
||||||
private $data;
|
private $packets;
|
||||||
private $chunked;
|
|
||||||
private $toChunk;
|
|
||||||
private $needCheck;
|
|
||||||
function __construct($object, $server, $port = 25565, $listen = false, $client = false, $serverip = "0.0.0.0"){
|
function __construct($object, $server, $port = 25565, $listen = false, $client = false, $serverip = "0.0.0.0"){
|
||||||
$this->socket = new UDPSocket($server, $port, (bool) $listen, $serverip);
|
$this->socket = new UDPSocket($server, $port, (bool) $listen, $serverip);
|
||||||
if($this->socket->connected === false){
|
if($this->socket->connected === false){
|
||||||
console("[ERROR] Couldn't bind to $serverip:".$port, true, true, 0);
|
console("[SEVERE] Couldn't bind to $serverip:".$port, true, true, 0);
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
$this->bandwidth = array(0, 0, microtime(true));
|
$this->bandwidth = array(0, 0, microtime(true));
|
||||||
$this->client = (bool) $client;
|
$this->client = (bool) $client;
|
||||||
$this->start = microtime(true);
|
$this->start = microtime(true);
|
||||||
$this->chunked = array();
|
$this->packets = array();
|
||||||
$this->toChunk = array();
|
|
||||||
$this->needCheck = array();
|
|
||||||
$object->schedule(1, array($this, "checkChunked"), array(), true);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function close(){
|
public function close(){
|
||||||
return $this->socket->close(false);
|
return $this->socket->close(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function getStruct($pid){
|
|
||||||
if(isset(Protocol::$raknet[$pid])){
|
|
||||||
return Protocol::$raknet[$pid];
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function readPacket(){
|
public function readPacket(){
|
||||||
$pk = $this->popPacket();
|
$pk = $this->popPacket();
|
||||||
if($this->socket->connected === false){
|
if($this->socket->connected === false){
|
||||||
@ -73,9 +60,15 @@ class MinecraftInterface{
|
|||||||
private function parsePacket($buffer, $source, $port){
|
private function parsePacket($buffer, $source, $port){
|
||||||
$pid = ord($buffer{0});
|
$pid = ord($buffer{0});
|
||||||
if(RakNetInfo::isValid($pid)){
|
if(RakNetInfo::isValid($pid)){
|
||||||
$packet = new RakNetParser($buffer);
|
$parser = new RakNetParser($buffer);
|
||||||
@$packet->parse();
|
if($parser->packet !== false){
|
||||||
$this->data[] = array($pid, $packet->data, $buffer, $source, $port);
|
$this->packets[] = array(
|
||||||
|
"pid" => $pid,
|
||||||
|
"packet" => $packet,
|
||||||
|
"ip" => $source,
|
||||||
|
"port" => $port
|
||||||
|
);
|
||||||
|
}
|
||||||
}else{
|
}else{
|
||||||
if(ServerAPI::request()->api->dhandle("server.unknownpacket", array(
|
if(ServerAPI::request()->api->dhandle("server.unknownpacket", array(
|
||||||
"pid" => $pid,
|
"pid" => $pid,
|
||||||
@ -92,11 +85,10 @@ class MinecraftInterface{
|
|||||||
}
|
}
|
||||||
|
|
||||||
public function popPacket(){
|
public function popPacket(){
|
||||||
if(count($this->data) > 0){
|
if(count($this->packets) > 0){
|
||||||
$p = each($this->data);
|
$p = each($this->packets);
|
||||||
unset($this->data[$p[0]]);
|
unset($this->packets[$p[0]]);
|
||||||
$p = $p[1];
|
return $p[1];
|
||||||
return array("pid" => $p[0], "data" => $p[1], "raw" => $p[2], "ip" => $p[3], "port" => $p[4]);
|
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -1,876 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* ____ _ _ __ __ _ __ __ ____
|
|
||||||
* | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
|
|
||||||
* | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
|
|
||||||
* | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
|
|
||||||
* |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU Lesser General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* @author PocketMine Team
|
|
||||||
* @link http://www.pocketmine.net/
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
class CustomPacketHandler{
|
|
||||||
public $offset;
|
|
||||||
public $raw;
|
|
||||||
public $c;
|
|
||||||
public $data;
|
|
||||||
public $name = "";
|
|
||||||
|
|
||||||
public function get($len = true, $check = true){
|
|
||||||
if($len === true){
|
|
||||||
$data = substr($this->raw, $this->offset);
|
|
||||||
if($check === true){
|
|
||||||
$this->offset = strlen($this->raw);
|
|
||||||
}
|
|
||||||
return $data;
|
|
||||||
}
|
|
||||||
$data = substr($this->raw, $this->offset, $len);
|
|
||||||
if($check === true){
|
|
||||||
$this->offset += $len;
|
|
||||||
}
|
|
||||||
return $data;
|
|
||||||
}
|
|
||||||
|
|
||||||
private function feof(){
|
|
||||||
return !isset($this->raw{$this->offset});
|
|
||||||
}
|
|
||||||
|
|
||||||
public function __construct($pid, $raw = "", $data = array(), $create = false){
|
|
||||||
$this->raw = $raw;
|
|
||||||
$this->data = $data;
|
|
||||||
$this->offset = 0;
|
|
||||||
$this->c = (bool) $create;
|
|
||||||
if($pid === false){
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
switch($pid){
|
|
||||||
case MC_PING:
|
|
||||||
if($this->c === false){
|
|
||||||
$this->data["time"] = Utils::readLong($this->get(8));
|
|
||||||
}else{
|
|
||||||
$this->raw .= Utils::writeLong($this->data["time"]);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case MC_PONG:
|
|
||||||
if($this->c === false){
|
|
||||||
$this->data["ptime"] = Utils::readLong($this->get(8));
|
|
||||||
$this->data["time"] = Utils::readLong($this->get(8));
|
|
||||||
}else{
|
|
||||||
$this->raw .= Utils::writeLong($this->data["ptime"]);
|
|
||||||
$this->raw .= Utils::writeLong($this->data["time"]);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case MC_CLIENT_CONNECT:
|
|
||||||
if($this->c === false){
|
|
||||||
$this->data["clientID"] = Utils::readLong($this->get(8));
|
|
||||||
$this->data["session"] = Utils::readLong($this->get(8));
|
|
||||||
$this->data["unknown2"] = $this->get(1);
|
|
||||||
}else{
|
|
||||||
$this->raw .= Utils::writeLong($this->data["clientID"]);
|
|
||||||
$this->raw .= Utils::writeLong($this->data["session"]);
|
|
||||||
$this->raw .= "\x00";
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case MC_SERVER_HANDSHAKE:
|
|
||||||
if($this->c === false){
|
|
||||||
$this->data["cookie"] = $this->get(4); // 043f57fe
|
|
||||||
$this->data["security"] = $this->get(1);
|
|
||||||
$this->data["port"] = Utils::readShort($this->get(2), false);
|
|
||||||
$this->data["dataArray"] = Utils::readDataArray($this->get(true, false), 10, $offset);
|
|
||||||
$this->get($offset);
|
|
||||||
$this->data["timestamp"] = $this->get(2);
|
|
||||||
$this->data["session"] = Utils::readLong($this->get(8));
|
|
||||||
$this->data["session2"] = Utils::readLong($this->get(8));
|
|
||||||
}else{
|
|
||||||
$this->raw .= "\x04\x3f\x57\xfe";
|
|
||||||
$this->raw .= "\xcd";
|
|
||||||
$this->raw .= Utils::writeShort($this->data["port"]);
|
|
||||||
$this->raw .= Utils::writeDataArray(array(
|
|
||||||
"\xf5\xff\xff\xf5",
|
|
||||||
"\xff\xff\xff\xff",
|
|
||||||
"\xff\xff\xff\xff",
|
|
||||||
"\xff\xff\xff\xff",
|
|
||||||
"\xff\xff\xff\xff",
|
|
||||||
"\xff\xff\xff\xff",
|
|
||||||
"\xff\xff\xff\xff",
|
|
||||||
"\xff\xff\xff\xff",
|
|
||||||
"\xff\xff\xff\xff",
|
|
||||||
"\xff\xff\xff\xff",
|
|
||||||
));
|
|
||||||
$this->raw .= "\x00\x00";
|
|
||||||
$this->raw .= Utils::writeLong($this->data["session"]);
|
|
||||||
$this->raw .= Utils::writeLong($this->data["session2"]);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case MC_CLIENT_HANDSHAKE:
|
|
||||||
if($this->c === false){
|
|
||||||
$this->data["cookie"] = $this->get(4); // 043f57fe
|
|
||||||
$this->data["security"] = $this->get(1);
|
|
||||||
$this->data["port"] = Utils::readShort($this->get(2), false);
|
|
||||||
$this->data["dataArray0"] = $this->get(ord($this->get(1)));
|
|
||||||
$this->data["dataArray"] = Utils::readDataArray($this->get(true, false), 9, $offset);
|
|
||||||
$this->get($offset);
|
|
||||||
$this->data["timestamp"] = $this->get(2);
|
|
||||||
$this->data["session2"] = Utils::readLong($this->get(8));
|
|
||||||
$this->data["session"] = Utils::readLong($this->get(8));
|
|
||||||
}else{
|
|
||||||
$this->raw .= "\x04\x3f\x57\xfe";
|
|
||||||
$this->raw .= "\xed";
|
|
||||||
$this->raw .= Utils::writeShort($this->data["port"]);
|
|
||||||
$w = array_shift($this->data["dataArray"]);
|
|
||||||
$this->raw .= chr(strlen($w)).$w;
|
|
||||||
$this->raw .= Utils::writeDataArray($this->data["dataArray"]);
|
|
||||||
$this->raw .= "\x00\x00";
|
|
||||||
$this->raw .= Utils::writeLong($this->data["session2"]);
|
|
||||||
$this->raw .= Utils::writeLong($this->data["session"]);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case MC_SERVER_FULL:
|
|
||||||
if($this->c === false){
|
|
||||||
}else{
|
|
||||||
$this->raw .= RAKNET_MAGIC;
|
|
||||||
$this->raw .= Utils::writeLong($this->data["serverID"]);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case MC_DISCONNECT:
|
|
||||||
//null
|
|
||||||
break;
|
|
||||||
case MC_BANNED:
|
|
||||||
if($this->c === false){
|
|
||||||
}else{
|
|
||||||
$this->raw .= RAKNET_MAGIC;
|
|
||||||
$this->raw .= Utils::writeLong($this->data["serverID"]);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case MC_LOGIN:
|
|
||||||
if($this->c === false){
|
|
||||||
$this->data["username"] = $this->get(Utils::readShort($this->get(2), false));
|
|
||||||
$this->data["protocol1"] = Utils::readInt($this->get(4));
|
|
||||||
$this->data["protocol2"] = Utils::readInt($this->get(4));
|
|
||||||
$this->data["clientId"] = Utils::readInt($this->get(4));
|
|
||||||
$this->data["realms_data"] = $this->get(Utils::readShort($this->get(2), false));
|
|
||||||
}else{
|
|
||||||
$this->raw .= Utils::writeShort(strlen($this->data["username"])).$this->data["username"];
|
|
||||||
$this->raw .= Utils::writeInt(CURRENT_PROTOCOL).
|
|
||||||
Utils::writeInt(CURRENT_PROTOCOL).
|
|
||||||
Utils::writeInt($this->data["clientId"]);
|
|
||||||
$this->raw .= Utils::writeShort(strlen($this->data["realms_data"])).$this->data["realms_data"];
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case MC_LOGIN_STATUS:
|
|
||||||
if($this->c === false){
|
|
||||||
$this->data["status"] = Utils::readInt($this->get(4));
|
|
||||||
}else{
|
|
||||||
$this->raw .= Utils::writeInt($this->data["status"]);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case MC_READY:
|
|
||||||
if($this->c === false){
|
|
||||||
$this->data["status"] = ord($this->get(1));
|
|
||||||
}else{
|
|
||||||
$this->raw .= chr($this->data["status"]);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case MC_CHAT:
|
|
||||||
if($this->c === false){
|
|
||||||
$this->data["player"] = $this->get(Utils::readShort($this->get(2), false));
|
|
||||||
$this->data["message"] = $this->get(Utils::readShort($this->get(2), false));
|
|
||||||
}else{
|
|
||||||
$this->raw .= Utils::writeShort(strlen($this->data["player"])).$this->data["player"];
|
|
||||||
$this->raw .= Utils::writeShort(strlen($this->data["message"])).$this->data["message"];
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case MC_SET_TIME:
|
|
||||||
if($this->c === false){
|
|
||||||
$this->data["time"] = Utils::readInt($this->get(4));
|
|
||||||
$this->data["started"] = ord($this->get(1)) & 0x80 > 0;
|
|
||||||
}else{
|
|
||||||
$this->raw .= Utils::writeInt($this->data["time"])."\x80";
|
|
||||||
$this->raw .= chr((isset($this->data["started"]) and $this->data["started"] == true) ? 0x80:0x00);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case MC_START_GAME:
|
|
||||||
if($this->c === false){
|
|
||||||
$this->data["seed"] = Utils::readInt($this->get(4));
|
|
||||||
$this->data["generator"] = Utils::readInt($this->get(4));
|
|
||||||
$this->data["gamemode"] = Utils::readInt($this->get(4));
|
|
||||||
$this->data["eid"] = Utils::readInt($this->get(4));
|
|
||||||
$this->data["x"] = Utils::readFloat($this->get(4));
|
|
||||||
$this->data["y"] = Utils::readFloat($this->get(4));
|
|
||||||
$this->data["z"] = Utils::readFloat($this->get(4));
|
|
||||||
}else{
|
|
||||||
$this->raw .= Utils::writeInt($this->data["seed"]);
|
|
||||||
$this->raw .= Utils::writeInt($this->data["generator"]);
|
|
||||||
$this->raw .= Utils::writeInt($this->data["gamemode"]);
|
|
||||||
$this->raw .= Utils::writeInt($this->data["eid"]);
|
|
||||||
$this->raw .= Utils::writeFloat($this->data["x"]);
|
|
||||||
$this->raw .= Utils::writeFloat($this->data["y"]);
|
|
||||||
$this->raw .= Utils::writeFloat($this->data["z"]);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case MC_ADD_MOB:
|
|
||||||
if($this->c === false){
|
|
||||||
$this->data["eid"] = Utils::readInt($this->get(4));
|
|
||||||
$this->data["type"] = Utils::readInt($this->get(4));
|
|
||||||
$this->data["x"] = Utils::readFloat($this->get(4));
|
|
||||||
$this->data["y"] = Utils::readFloat($this->get(4));
|
|
||||||
$this->data["z"] = Utils::readFloat($this->get(4));
|
|
||||||
$this->data["pitch"] = Utils::readByte($this->get(1));
|
|
||||||
$this->data["yaw"] = Utils::readByte($this->get(1));
|
|
||||||
$this->data["metadata"] = Utils::readMetadata($this->get(true));
|
|
||||||
}else{
|
|
||||||
$this->raw .= Utils::writeInt($this->data["eid"]);
|
|
||||||
$this->raw .= Utils::writeInt($this->data["type"]);
|
|
||||||
$this->raw .= Utils::writeFloat($this->data["x"]);
|
|
||||||
$this->raw .= Utils::writeFloat($this->data["y"]);
|
|
||||||
$this->raw .= Utils::writeFloat($this->data["z"]);
|
|
||||||
$this->raw .= Utils::writeByte($this->data["pitch"]);
|
|
||||||
$this->raw .= Utils::writeByte($this->data["yaw"]);
|
|
||||||
$this->raw .= Utils::writeMetadata($this->data["metadata"]);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case MC_ADD_PLAYER:
|
|
||||||
if($this->c === false){
|
|
||||||
$this->data["clientID"] = Utils::readLong($this->get(8));
|
|
||||||
$this->data["username"] = $this->get(Utils::readShort($this->get(2), false));
|
|
||||||
$this->data["eid"] = Utils::readInt($this->get(4));
|
|
||||||
$this->data["x"] = Utils::readFloat($this->get(4));
|
|
||||||
$this->data["y"] = Utils::readFloat($this->get(4));
|
|
||||||
$this->data["z"] = Utils::readFloat($this->get(4));
|
|
||||||
$this->data["pitch"] = Utils::readByte($this->get(1));
|
|
||||||
$this->data["yaw"] = Utils::readByte($this->get(1));
|
|
||||||
$this->data["unknown1"] = Utils::readShort($this->get(2));
|
|
||||||
$this->data["unknown2"] = Utils::readShort($this->get(2));
|
|
||||||
$this->data["metadata"] = Utils::readMetadata($this->get(true));
|
|
||||||
}else{
|
|
||||||
$this->raw .= Utils::writeLong($this->data["clientID"]);
|
|
||||||
$this->raw .= Utils::writeShort(strlen($this->data["username"])).$this->data["username"];
|
|
||||||
$this->raw .= Utils::writeInt($this->data["eid"]);
|
|
||||||
$this->raw .= Utils::writeFloat($this->data["x"]);
|
|
||||||
$this->raw .= Utils::writeFloat($this->data["y"]);
|
|
||||||
$this->raw .= Utils::writeFloat($this->data["z"]);
|
|
||||||
$this->raw .= Utils::writeByte($this->data["pitch"]);
|
|
||||||
$this->raw .= Utils::writeByte($this->data["yaw"]);
|
|
||||||
$this->raw .= Utils::writeShort($this->data["unknown1"]);
|
|
||||||
$this->raw .= Utils::writeShort($this->data["unknown2"]);
|
|
||||||
$this->raw .= Utils::writeMetadata($this->data["metadata"]);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case MC_REMOVE_PLAYER:
|
|
||||||
if($this->c === false){
|
|
||||||
$this->data["eid"] = Utils::readInt($this->get(4));
|
|
||||||
$this->data["clientID"] = Utils::readLong($this->get(8));
|
|
||||||
}else{
|
|
||||||
$this->raw .= Utils::writeInt($this->data["eid"]);
|
|
||||||
$this->raw .= Utils::writeLong($this->data["clientID"]);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case MC_ADD_ENTITY:
|
|
||||||
if($this->c === false){
|
|
||||||
$this->data["eid"] = Utils::readInt($this->get(4));
|
|
||||||
$this->data["type"] = ord($this->get(1));
|
|
||||||
$this->data["x"] = Utils::readFloat($this->get(4));
|
|
||||||
$this->data["y"] = Utils::readFloat($this->get(4));
|
|
||||||
$this->data["z"] = Utils::readFloat($this->get(4));
|
|
||||||
$this->data["did"] = Utils::readInt($this->get(4));
|
|
||||||
if($this->data["did"] > 0){
|
|
||||||
$this->data["speedX"] = Utils::readShort($this->get(2));
|
|
||||||
$this->data["speedY"] = Utils::readShort($this->get(2));
|
|
||||||
$this->data["speedZ"] = Utils::readShort($this->get(2));
|
|
||||||
}
|
|
||||||
}else{
|
|
||||||
$this->raw .= Utils::writeInt($this->data["eid"]);
|
|
||||||
$this->raw .= chr($this->data["type"]);
|
|
||||||
$this->raw .= Utils::writeFloat($this->data["x"]);
|
|
||||||
$this->raw .= Utils::writeFloat($this->data["y"]);
|
|
||||||
$this->raw .= Utils::writeFloat($this->data["z"]);
|
|
||||||
$this->raw .= Utils::writeInt($this->data["did"]);
|
|
||||||
if($this->data["did"] > 0){
|
|
||||||
$this->raw .= Utils::writeShort($this->data["speedX"]);
|
|
||||||
$this->raw .= Utils::writeShort($this->data["speedY"]);
|
|
||||||
$this->raw .= Utils::writeShort($this->data["speedZ"]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case MC_REMOVE_ENTITY:
|
|
||||||
if($this->c === false){
|
|
||||||
$this->data["eid"] = Utils::readInt($this->get(4));
|
|
||||||
}else{
|
|
||||||
$this->raw .= Utils::writeInt($this->data["eid"]);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case MC_ADD_ITEM_ENTITY:
|
|
||||||
if($this->c === false){
|
|
||||||
$this->data["eid"] = Utils::readInt($this->get(4));
|
|
||||||
$this->data["block"] = Utils::readShort($this->get(2), false);
|
|
||||||
$this->data["stack"] = ord($this->get(1));
|
|
||||||
$this->data["meta"] = Utils::readShort($this->get(2), false);
|
|
||||||
$this->data["x"] = Utils::readFloat($this->get(4));
|
|
||||||
$this->data["y"] = Utils::readFloat($this->get(4));
|
|
||||||
$this->data["z"] = Utils::readFloat($this->get(4));
|
|
||||||
$this->data["yaw"] = Utils::readByte($this->get(1));
|
|
||||||
$this->data["pitch"] = Utils::readByte($this->get(1));
|
|
||||||
$this->data["roll"] = Utils::readByte($this->get(1));
|
|
||||||
}else{
|
|
||||||
$this->raw .= Utils::writeInt($this->data["eid"]);
|
|
||||||
$this->raw .= Utils::writeShort($this->data["block"]);
|
|
||||||
$this->raw .= chr($this->data["stack"]);
|
|
||||||
$this->raw .= Utils::writeShort($this->data["meta"]);
|
|
||||||
$this->raw .= Utils::writeFloat($this->data["x"]);
|
|
||||||
$this->raw .= Utils::writeFloat($this->data["y"]);
|
|
||||||
$this->raw .= Utils::writeFloat($this->data["z"]);
|
|
||||||
$this->raw .= Utils::writeByte($this->data["yaw"]);
|
|
||||||
$this->raw .= Utils::writeByte($this->data["pitch"]);
|
|
||||||
$this->raw .= Utils::writeByte($this->data["roll"]);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case MC_TAKE_ITEM_ENTITY:
|
|
||||||
if($this->c === false){
|
|
||||||
$this->data["target"] = Utils::readInt($this->get(4));
|
|
||||||
$this->data["eid"] = Utils::readInt($this->get(4));
|
|
||||||
}else{
|
|
||||||
$this->raw .= Utils::writeInt($this->data["target"]);
|
|
||||||
$this->raw .= Utils::writeInt($this->data["eid"]);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case MC_MOVE_ENTITY:
|
|
||||||
if($this->c === false){
|
|
||||||
$this->data["eid"] = Utils::readInt($this->get(4));
|
|
||||||
$this->data["x"] = Utils::readFloat($this->get(4));
|
|
||||||
$this->data["y"] = Utils::readFloat($this->get(4));
|
|
||||||
$this->data["z"] = Utils::readFloat($this->get(4));
|
|
||||||
}else{
|
|
||||||
$this->raw .= Utils::writeInt($this->data["eid"]);
|
|
||||||
$this->raw .= Utils::writeFloat($this->data["x"]);
|
|
||||||
$this->raw .= Utils::writeFloat($this->data["y"]);
|
|
||||||
$this->raw .= Utils::writeFloat($this->data["z"]);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case MC_MOVE_ENTITY_POSROT:
|
|
||||||
if($this->c === false){
|
|
||||||
$this->data["eid"] = Utils::readInt($this->get(4));
|
|
||||||
$this->data["x"] = Utils::readFloat($this->get(4));
|
|
||||||
$this->data["y"] = Utils::readFloat($this->get(4));
|
|
||||||
$this->data["z"] = Utils::readFloat($this->get(4));
|
|
||||||
$this->data["yaw"] = Utils::readFloat($this->get(4));
|
|
||||||
$this->data["pitch"] = Utils::readFloat($this->get(4));
|
|
||||||
}else{
|
|
||||||
$this->raw .= Utils::writeInt($this->data["eid"]);
|
|
||||||
$this->raw .= Utils::writeFloat($this->data["x"]);
|
|
||||||
$this->raw .= Utils::writeFloat($this->data["y"]);
|
|
||||||
$this->raw .= Utils::writeFloat($this->data["z"]);
|
|
||||||
$this->raw .= Utils::writeFloat($this->data["yaw"]);
|
|
||||||
$this->raw .= Utils::writeFloat($this->data["pitch"]);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case MC_ROTATE_HEAD:
|
|
||||||
if($this->c === false){
|
|
||||||
$this->data["eid"] = Utils::readInt($this->get(4));
|
|
||||||
$this->data["yaw"] = Utils::readFloat($this->get(4));
|
|
||||||
$this->data["pitch"] = Utils::readFloat($this->get(4));
|
|
||||||
}else{
|
|
||||||
$this->raw .= Utils::writeInt($this->data["eid"]);
|
|
||||||
$this->raw .= Utils::writeFloat($this->data["yaw"]);
|
|
||||||
$this->raw .= Utils::writeFloat($this->data["pitch"]);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case MC_MOVE_PLAYER:
|
|
||||||
if($this->c === false){
|
|
||||||
$this->data["eid"] = Utils::readInt($this->get(4));
|
|
||||||
$this->data["x"] = Utils::readFloat($this->get(4));
|
|
||||||
$this->data["y"] = Utils::readFloat($this->get(4));
|
|
||||||
$this->data["z"] = Utils::readFloat($this->get(4));
|
|
||||||
$this->data["yaw"] = Utils::readFloat($this->get(4));
|
|
||||||
$this->data["pitch"] = Utils::readFloat($this->get(4));
|
|
||||||
$this->data["bodyYaw"] = Utils::readFloat($this->get(4));
|
|
||||||
}else{
|
|
||||||
$this->raw .= Utils::writeInt($this->data["eid"]);
|
|
||||||
$this->raw .= Utils::writeFloat($this->data["x"]);
|
|
||||||
$this->raw .= Utils::writeFloat($this->data["y"]);
|
|
||||||
$this->raw .= Utils::writeFloat($this->data["z"]);
|
|
||||||
$this->raw .= Utils::writeFloat($this->data["yaw"]);
|
|
||||||
$this->raw .= Utils::writeFloat($this->data["pitch"]);
|
|
||||||
$this->raw .= Utils::writeFloat($this->data["bodyYaw"]);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case MC_PLACE_BLOCK:
|
|
||||||
if($this->c === false){
|
|
||||||
$this->data["eid"] = Utils::readInt($this->get(4));
|
|
||||||
$this->data["x"] = Utils::readInt($this->get(4));
|
|
||||||
$this->data["z"] = Utils::readInt($this->get(4));
|
|
||||||
$this->data["y"] = ord($this->get(1));
|
|
||||||
$this->data["block"] = ord($this->get(1));
|
|
||||||
$this->data["meta"] = ord($this->get(1));
|
|
||||||
$this->data["face"] = Utils::readByte($this->get(1));
|
|
||||||
}else{
|
|
||||||
$this->raw .= Utils::writeInt($this->data["eid"]);
|
|
||||||
$this->raw .= Utils::writeInt($this->data["x"]);
|
|
||||||
$this->raw .= Utils::writeInt($this->data["z"]);
|
|
||||||
$this->raw .= chr($this->data["y"]);
|
|
||||||
$this->raw .= chr($this->data["block"]);
|
|
||||||
$this->raw .= chr($this->data["meta"]);
|
|
||||||
$this->raw .= chr($this->data["face"]);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case MC_REMOVE_BLOCK: //Sent when a player removes a block, not used
|
|
||||||
if($this->c === false){
|
|
||||||
$this->data["eid"] = Utils::readInt($this->get(4));
|
|
||||||
$this->data["x"] = Utils::readInt($this->get(4));
|
|
||||||
$this->data["z"] = Utils::readInt($this->get(4));
|
|
||||||
$this->data["y"] = ord($this->get(1));
|
|
||||||
}else{
|
|
||||||
$this->raw .= Utils::writeInt($this->data["eid"]);
|
|
||||||
$this->raw .= Utils::writeInt($this->data["x"]);
|
|
||||||
$this->raw .= Utils::writeInt($this->data["z"]);
|
|
||||||
$this->raw .= chr($this->data["y"]);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case MC_UPDATE_BLOCK:
|
|
||||||
if($this->c === false){
|
|
||||||
$this->data["x"] = Utils::readInt($this->get(4));
|
|
||||||
$this->data["z"] = Utils::readInt($this->get(4));
|
|
||||||
$this->data["y"] = ord($this->get(1));
|
|
||||||
$this->data["block"] = ord($this->get(1));
|
|
||||||
$this->data["meta"] = ord($this->get(1));
|
|
||||||
}else{
|
|
||||||
$this->raw .= Utils::writeInt($this->data["x"]);
|
|
||||||
$this->raw .= Utils::writeInt($this->data["z"]);
|
|
||||||
$this->raw .= chr($this->data["y"]);
|
|
||||||
$this->raw .= chr($this->data["block"]);
|
|
||||||
$this->raw .= chr($this->data["meta"]);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case MC_ADD_PAINTING:
|
|
||||||
if($this->c === false){
|
|
||||||
$this->data["eid"] = Utils::readInt($this->get(4));
|
|
||||||
$this->data["x"] = Utils::readInt($this->get(4));
|
|
||||||
$this->data["y"] = Utils::readInt($this->get(4));
|
|
||||||
$this->data["z"] = Utils::readInt($this->get(4));
|
|
||||||
$this->data["direction"] = Utils::readInt($this->get(4));
|
|
||||||
$this->data["title"] = $this->get(Utils::readShort($this->get(2), false));
|
|
||||||
}else{
|
|
||||||
$this->raw .= Utils::writeInt($this->data["eid"]);
|
|
||||||
$this->raw .= Utils::writeInt($this->data["x"]);
|
|
||||||
$this->raw .= Utils::writeInt($this->data["y"]);
|
|
||||||
$this->raw .= Utils::writeInt($this->data["z"]);
|
|
||||||
$this->raw .= Utils::writeInt($this->data["direction"]);
|
|
||||||
$this->raw .= Utils::writeShort(strlen($this->data["title"])).$this->data["title"];
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case MC_EXPLOSION:
|
|
||||||
if($this->c === false){
|
|
||||||
$this->data["x"] = Utils::readFloat($this->get(4));
|
|
||||||
$this->data["y"] = Utils::readFloat($this->get(4));
|
|
||||||
$this->data["z"] = Utils::readFloat($this->get(4));
|
|
||||||
$this->data["radius"] = Utils::readFloat($this->get(4));
|
|
||||||
$this->data["count"] = Utils::readInt($this->get(4));
|
|
||||||
$this->data["records"] = array();
|
|
||||||
for($r = 0; $r < $this->data["count"] and !$this->feof(); ++$r){
|
|
||||||
$this->data["records"][] = new Vector3(Utils::readByte($this->get(1)), Utils::readByte($this->get(1)), Utils::readByte($this->get(1)));
|
|
||||||
}
|
|
||||||
}else{
|
|
||||||
$this->raw .= Utils::writeFloat($this->data["x"]);
|
|
||||||
$this->raw .= Utils::writeFloat($this->data["y"]);
|
|
||||||
$this->raw .= Utils::writeFloat($this->data["z"]);
|
|
||||||
$this->raw .= Utils::writeFloat($this->data["radius"]);
|
|
||||||
$this->data["records"] = (array) $this->data["records"];
|
|
||||||
$this->raw .= Utils::writeInt(count($this->data["records"]));
|
|
||||||
if(count($this->data["records"]) > 0){
|
|
||||||
foreach($this->data["records"] as $record){
|
|
||||||
$this->raw .= Utils::writeByte($record->x) . Utils::writeByte($record->y) . Utils::writeByte($record->z);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case MC_LEVEL_EVENT:
|
|
||||||
if($this->c === false){
|
|
||||||
$this->data["evid"] = Utils::readShort($this->get(2));
|
|
||||||
$this->data["x"] = Utils::readShort($this->get(2));
|
|
||||||
$this->data["y"] = Utils::readShort($this->get(2));
|
|
||||||
$this->data["z"] = Utils::readShort($this->get(2));
|
|
||||||
$this->data["data"] = Utils::readInt($this->get(4));
|
|
||||||
}else{
|
|
||||||
$this->raw .= Utils::writeShort($this->data["evid"]);
|
|
||||||
$this->raw .= Utils::writeShort($this->data["x"]);
|
|
||||||
$this->raw .= Utils::writeShort($this->data["y"]);
|
|
||||||
$this->raw .= Utils::writeShort($this->data["z"]);
|
|
||||||
$this->raw .= Utils::writeInt($this->data["data"]);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case MC_TILE_EVENT:
|
|
||||||
if($this->c === false){
|
|
||||||
$this->data["x"] = Utils::readInt($this->get(4));
|
|
||||||
$this->data["y"] = Utils::readInt($this->get(4));
|
|
||||||
$this->data["z"] = Utils::readInt($this->get(4));
|
|
||||||
$this->data["case1"] = Utils::readInt($this->get(4));
|
|
||||||
$this->data["case2"] = Utils::readInt($this->get(4));
|
|
||||||
}else{
|
|
||||||
$this->raw .= Utils::writeInt($this->data["x"]);
|
|
||||||
$this->raw .= Utils::writeInt($this->data["y"]);
|
|
||||||
$this->raw .= Utils::writeInt($this->data["z"]);
|
|
||||||
$this->raw .= Utils::writeInt($this->data["case1"]);
|
|
||||||
$this->raw .= Utils::writeInt($this->data["case2"]);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case MC_ENTITY_EVENT:
|
|
||||||
if($this->c === false){
|
|
||||||
$this->data["eid"] = Utils::readInt($this->get(4));
|
|
||||||
$this->data["event"] = ord($this->get(1));
|
|
||||||
}else{
|
|
||||||
$this->raw .= Utils::writeInt($this->data["eid"]);
|
|
||||||
$this->raw .= chr($this->data["event"]);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case MC_REQUEST_CHUNK:
|
|
||||||
if($this->c === false){
|
|
||||||
$this->data["x"] = Utils::readInt($this->get(4));
|
|
||||||
$this->data["z"] = Utils::readInt($this->get(4));
|
|
||||||
}else{
|
|
||||||
$this->raw .= Utils::writeInt($this->data["x"]);
|
|
||||||
$this->raw .= Utils::writeInt($this->data["z"]);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case MC_CHUNK_DATA:
|
|
||||||
if($this->c === false){
|
|
||||||
$this->data["x"] = Utils::readInt($this->get(4));
|
|
||||||
$this->data["z"] = Utils::readInt($this->get(4));
|
|
||||||
$this->data["data"] = $this->get(true);
|
|
||||||
}else{
|
|
||||||
$this->raw .= Utils::writeInt($this->data["x"]);
|
|
||||||
$this->raw .= Utils::writeInt($this->data["z"]);
|
|
||||||
$this->raw .= $this->data["data"];
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case MC_PLAYER_EQUIPMENT:
|
|
||||||
if($this->c === false){
|
|
||||||
$this->data["eid"] = Utils::readInt($this->get(4));
|
|
||||||
$this->data["block"] = Utils::readShort($this->get(2), false);
|
|
||||||
$this->data["meta"] = Utils::readShort($this->get(2), false);
|
|
||||||
$this->data["slot"] = ord($this->get(1));
|
|
||||||
}else{
|
|
||||||
$this->raw .= Utils::writeInt($this->data["eid"]);
|
|
||||||
$this->raw .= Utils::writeShort($this->data["block"]);
|
|
||||||
$this->raw .= Utils::writeShort($this->data["meta"]);
|
|
||||||
$this->raw .= chr($this->data["slot"]);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case MC_PLAYER_ARMOR_EQUIPMENT:
|
|
||||||
if($this->c === false){
|
|
||||||
$this->data["eid"] = Utils::readInt($this->get(4));
|
|
||||||
$this->data["slot0"] = ord($this->get(1));
|
|
||||||
$this->data["slot1"] = ord($this->get(1));
|
|
||||||
$this->data["slot2"] = ord($this->get(1));
|
|
||||||
$this->data["slot3"] = ord($this->get(1));
|
|
||||||
}else{
|
|
||||||
$this->raw .= Utils::writeInt($this->data["eid"]);
|
|
||||||
$this->raw .= chr($this->data["slot0"]);
|
|
||||||
$this->raw .= chr($this->data["slot1"]);
|
|
||||||
$this->raw .= chr($this->data["slot2"]);
|
|
||||||
$this->raw .= chr($this->data["slot3"]);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case MC_INTERACT:
|
|
||||||
if($this->c === false){
|
|
||||||
$this->data["action"] = Utils::readByte($this->get(1));
|
|
||||||
$this->data["eid"] = Utils::readInt($this->get(4));
|
|
||||||
$this->data["target"] = Utils::readInt($this->get(4));
|
|
||||||
}else{
|
|
||||||
$this->raw .= Utils::writeByte($this->data["action"]);
|
|
||||||
$this->raw .= Utils::writeInt($this->data["eid"]);
|
|
||||||
$this->raw .= Utils::writeInt($this->data["target"]);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case MC_USE_ITEM:
|
|
||||||
if($this->c === false){
|
|
||||||
$this->data["x"] = Utils::readInt($this->get(4));
|
|
||||||
$this->data["y"] = Utils::readInt($this->get(4));
|
|
||||||
$this->data["z"] = Utils::readInt($this->get(4));
|
|
||||||
$this->data["face"] = Utils::readInt($this->get(4));
|
|
||||||
$this->data["block"] = Utils::readShort($this->get(2));
|
|
||||||
$this->data["meta"] = Utils::readByte($this->get(1));
|
|
||||||
$this->data["eid"] = Utils::readInt($this->get(4));
|
|
||||||
$this->data["fx"] = Utils::readFloat($this->get(4));
|
|
||||||
$this->data["fy"] = Utils::readFloat($this->get(4));
|
|
||||||
$this->data["fz"] = Utils::readFloat($this->get(4));
|
|
||||||
$this->data["posX"] = Utils::readFloat($this->get(4));
|
|
||||||
$this->data["posY"] = Utils::readFloat($this->get(4));
|
|
||||||
$this->data["posZ"] = Utils::readFloat($this->get(4));
|
|
||||||
}else{
|
|
||||||
$this->raw .= Utils::writeInt($this->data["x"]);
|
|
||||||
$this->raw .= Utils::writeInt($this->data["y"]);
|
|
||||||
$this->raw .= Utils::writeInt($this->data["z"]);
|
|
||||||
$this->raw .= Utils::writeInt($this->data["face"]);
|
|
||||||
$this->raw .= Utils::writeShort($this->data["block"]);
|
|
||||||
$this->raw .= Utils::writeByte($this->data["meta"]);
|
|
||||||
$this->raw .= Utils::writeInt($this->data["eid"]);
|
|
||||||
$this->raw .= Utils::writeFloat($this->data["fx"]);
|
|
||||||
$this->raw .= Utils::writeFloat($this->data["fy"]);
|
|
||||||
$this->raw .= Utils::writeFloat($this->data["fz"]);
|
|
||||||
$this->raw .= Utils::writeFloat($this->data["posX"]);
|
|
||||||
$this->raw .= Utils::writeFloat($this->data["posY"]);
|
|
||||||
$this->raw .= Utils::writeFloat($this->data["posZ"]);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case MC_PLAYER_ACTION:
|
|
||||||
if($this->c === false){
|
|
||||||
$this->data["action"] = Utils::readInt($this->get(4));
|
|
||||||
$this->data["x"] = Utils::readInt($this->get(4));
|
|
||||||
$this->data["y"] = Utils::readInt($this->get(4));
|
|
||||||
$this->data["z"] = Utils::readInt($this->get(4));
|
|
||||||
$this->data["face"] = Utils::readInt($this->get(4));
|
|
||||||
$this->data["eid"] = Utils::readInt($this->get(4));
|
|
||||||
}else{
|
|
||||||
$this->raw .= Utils::writeInt($this->data["action"]);
|
|
||||||
$this->raw .= Utils::writeInt($this->data["x"]);
|
|
||||||
$this->raw .= Utils::writeInt($this->data["y"]);
|
|
||||||
$this->raw .= Utils::writeInt($this->data["z"]);
|
|
||||||
$this->raw .= Utils::writeInt($this->data["face"]);
|
|
||||||
$this->raw .= Utils::writeInt($this->data["eid"]);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case MC_SET_ENTITY_DATA:
|
|
||||||
if($this->c === false){
|
|
||||||
$this->data["eid"] = Utils::readInt($this->get(4));
|
|
||||||
$this->data["metadata"] = Utils::readMetadata($this->get(true));
|
|
||||||
}else{
|
|
||||||
$this->raw .= Utils::writeInt($this->data["eid"]);
|
|
||||||
$this->raw .= Utils::writeMetadata($this->data["metadata"]);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case MC_SET_ENTITY_MOTION:
|
|
||||||
if($this->c === false){
|
|
||||||
$this->data["eid"] = Utils::readInt($this->get(4));
|
|
||||||
$this->data["speedX"] = Utils::readShort($this->get(2));
|
|
||||||
$this->data["speedY"] = Utils::readShort($this->get(2));
|
|
||||||
$this->data["speedZ"] = Utils::readShort($this->get(2));
|
|
||||||
}else{
|
|
||||||
$this->raw .= Utils::writeInt($this->data["eid"]);
|
|
||||||
$this->raw .= Utils::writeShort($this->data["speedX"]);
|
|
||||||
$this->raw .= Utils::writeShort($this->data["speedY"]);
|
|
||||||
$this->raw .= Utils::writeShort($this->data["speedZ"]);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case MC_HURT_ARMOR:
|
|
||||||
if($this->c === false){
|
|
||||||
$this->data["health"] = Utils::readByte($this->get(1));
|
|
||||||
}else{
|
|
||||||
$this->raw .= Utils::writeByte($this->data["health"]);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case MC_SET_HEALTH:
|
|
||||||
if($this->c === false){
|
|
||||||
$this->data["health"] = Utils::readByte($this->get(1));
|
|
||||||
}else{
|
|
||||||
$this->raw .= Utils::writeByte($this->data["health"]);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case MC_SET_SPAWN_POSITION:
|
|
||||||
if($this->c === false){
|
|
||||||
$this->data["x"] = Utils::readInt($this->get(4));
|
|
||||||
$this->data["z"] = Utils::readInt($this->get(4));
|
|
||||||
$this->data["y"] = ord($this->get(1));
|
|
||||||
}else{
|
|
||||||
$this->raw .= Utils::writeInt($this->data["x"]);
|
|
||||||
$this->raw .= Utils::writeInt($this->data["z"]);
|
|
||||||
$this->raw .= chr($this->data["y"]);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case MC_ANIMATE:
|
|
||||||
if($this->c === false){
|
|
||||||
$this->data["action"] = Utils::readByte($this->get(1));
|
|
||||||
$this->data["eid"] = Utils::readInt($this->get(4));
|
|
||||||
}else{
|
|
||||||
$this->raw .= Utils::writeByte($this->data["action"]);
|
|
||||||
$this->raw .= Utils::writeInt($this->data["eid"]);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case MC_RESPAWN:
|
|
||||||
if($this->c === false){
|
|
||||||
$this->data["eid"] = Utils::readInt($this->get(4));
|
|
||||||
$this->data["x"] = Utils::readFloat($this->get(4));
|
|
||||||
$this->data["y"] = Utils::readFloat($this->get(4));
|
|
||||||
$this->data["z"] = Utils::readFloat($this->get(4));
|
|
||||||
}else{
|
|
||||||
$this->raw .= Utils::writeInt($this->data["eid"]);
|
|
||||||
$this->raw .= Utils::writeFloat($this->data["x"]);
|
|
||||||
$this->raw .= Utils::writeFloat($this->data["y"]);
|
|
||||||
$this->raw .= Utils::writeFloat($this->data["z"]);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case MC_SEND_INVENTORY:
|
|
||||||
if($this->c === false){
|
|
||||||
$this->data["eid"] = Utils::readInt($this->get(4));
|
|
||||||
$this->data["windowid"] = ord($this->get(1));
|
|
||||||
$this->data["count"] = Utils::readShort($this->get(2), false);
|
|
||||||
$this->data["slots"] = array();
|
|
||||||
for($s = 0; $s < $this->data["count"] and !$this->feof(); ++$s){
|
|
||||||
$this->data["slots"][$s] = Utils::readSlot($this);
|
|
||||||
}
|
|
||||||
if($this->data["windowid"] === 1){ //Armor is also sent
|
|
||||||
$this->data["armor"] = array(
|
|
||||||
Utils::readSlot($this),
|
|
||||||
Utils::readSlot($this),
|
|
||||||
Utils::readSlot($this),
|
|
||||||
Utils::readSlot($this)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}else{
|
|
||||||
$this->raw .= Utils::writeInt($this->data["eid"]);
|
|
||||||
$this->raw .= chr($this->data["windowid"]);
|
|
||||||
$this->raw .= Utils::writeShort(count($this->data["slots"]));
|
|
||||||
foreach($this->data["slots"] as $slot){
|
|
||||||
$this->raw .= Utils::writeSlot($slot);
|
|
||||||
}
|
|
||||||
if($this->data["windowid"] === 1 and isset($this->data["armor"])){
|
|
||||||
$this->raw .= Utils::writeSlot($this->data["armor"][0]);
|
|
||||||
$this->raw .= Utils::writeSlot($this->data["armor"][1]);
|
|
||||||
$this->raw .= Utils::writeSlot($this->data["armor"][2]);
|
|
||||||
$this->raw .= Utils::writeSlot($this->data["armor"][3]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case MC_DROP_ITEM:
|
|
||||||
if($this->c === false){
|
|
||||||
$this->data["eid"] = Utils::readInt($this->get(4));
|
|
||||||
$this->data["unknown1"] = ord($this->get(1));
|
|
||||||
$this->data["block"] = Utils::readShort($this->get(2), false);
|
|
||||||
$this->data["stack"] = ord($this->get(1));
|
|
||||||
$this->data["meta"] = Utils::readShort($this->get(2), false);
|
|
||||||
}else{
|
|
||||||
$this->raw .= Utils::writeInt($this->data["eid"]);
|
|
||||||
$this->raw .= chr($this->data["unknown1"]);
|
|
||||||
$this->raw .= Utils::writeShort($this->data["block"]);
|
|
||||||
$this->raw .= chr($this->data["stack"]);
|
|
||||||
$this->raw .= Utils::writeShort($this->data["meta"]);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case MC_CONTAINER_OPEN:
|
|
||||||
if($this->c === false){
|
|
||||||
$this->data["windowid"] = ord($this->get(1));
|
|
||||||
$this->data["type"] = ord($this->get(1));
|
|
||||||
$this->data["slots"] = ord($this->get(1));
|
|
||||||
|
|
||||||
//$this->data["title"] = $this->get(Utils::readShort($this->get(2), false));
|
|
||||||
}else{
|
|
||||||
$this->raw .= chr($this->data["windowid"]);
|
|
||||||
$this->raw .= chr($this->data["type"]);
|
|
||||||
$this->raw .= chr($this->data["slots"]);
|
|
||||||
$this->raw .= Utils::writeInt($this->data["x"]);
|
|
||||||
$this->raw .= Utils::writeInt($this->data["y"]);
|
|
||||||
$this->raw .= Utils::writeInt($this->data["z"]);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case MC_CONTAINER_CLOSE:
|
|
||||||
if($this->c === false){
|
|
||||||
$this->data["windowid"] = ord($this->get(1));
|
|
||||||
}else{
|
|
||||||
$this->raw .= chr($this->data["windowid"]);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case MC_CONTAINER_SET_SLOT:
|
|
||||||
if($this->c === false){
|
|
||||||
$this->data["windowid"] = ord($this->get(1));
|
|
||||||
$this->data["slot"] = Utils::readShort($this->get(2), false);
|
|
||||||
$this->data["block"] = Utils::readShort($this->get(2), false);
|
|
||||||
$this->data["stack"] = ord($this->get(1));
|
|
||||||
$this->data["meta"] = Utils::readShort($this->get(2), false);
|
|
||||||
}else{
|
|
||||||
$this->raw .= chr($this->data["windowid"]);
|
|
||||||
$this->raw .= Utils::writeShort($this->data["slot"]);
|
|
||||||
$this->raw .= Utils::writeShort($this->data["block"]);
|
|
||||||
$this->raw .= chr($this->data["stack"]);
|
|
||||||
$this->raw .= Utils::writeShort($this->data["meta"]);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case MC_CONTAINER_SET_CONTENT:
|
|
||||||
if($this->c === false){
|
|
||||||
$this->data["windowid"] = ord($this->get(1));
|
|
||||||
$this->data["count"] = Utils::readShort($this->get(2), false);
|
|
||||||
$this->data["slots"] = array();
|
|
||||||
for($s = 0; $s < $this->data["count"] and !$this->feof(); ++$s){
|
|
||||||
$this->data["slots"][$s] = Utils::readSlot($this);
|
|
||||||
}
|
|
||||||
if($this->data["windowid"] == 0){
|
|
||||||
$slots = min(9, Utils::readShort($this->get(2), false));
|
|
||||||
$this->data["hotbar"] = array();
|
|
||||||
if($slots > 0){
|
|
||||||
for($s = 0; $s < $slots; ++$s){
|
|
||||||
$this->data["hotbar"][$s] = Utils::readInt($this->get(4));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}else{
|
|
||||||
$this->raw .= chr($this->data["windowid"]);
|
|
||||||
$this->raw .= Utils::writeShort(count($this->data["slots"]));
|
|
||||||
foreach($this->data["slots"] as $slot){
|
|
||||||
$this->raw .= Utils::writeSlot($slot);
|
|
||||||
}
|
|
||||||
if($this->data["windowid"] == 0 and isset($this->data["hotbar"])){
|
|
||||||
if(count($this->data["hotbar"]) > 0){
|
|
||||||
$this->raw .= Utils::writeShort(count($this->data["hotbar"]));
|
|
||||||
foreach($this->data["hotbar"] as $slot){
|
|
||||||
$this->raw .= Utils::writeInt($slot);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case MC_CONTAINER_SET_DATA:
|
|
||||||
if($this->c === false){
|
|
||||||
$this->data["windowid"] = ord($this->get(1));
|
|
||||||
$this->data["property"] = Utils::readShort($this->get(2));
|
|
||||||
$this->data["value"] = Utils::readShort($this->get(2));
|
|
||||||
}else{
|
|
||||||
$this->raw .= chr($this->data["windowid"]);
|
|
||||||
$this->raw .= Utils::writeShort($this->data["property"]);
|
|
||||||
$this->raw .= Utils::writeShort($this->data["value"]);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case MC_CLIENT_MESSAGE:
|
|
||||||
if($this->c === false){
|
|
||||||
$this->data["message"] = $this->get(Utils::readShort($this->get(2), false));
|
|
||||||
}else{
|
|
||||||
$this->raw .= Utils::writeShort(strlen($this->data["message"])).$this->data["message"];
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case MC_ADVENTURE_SETTINGS:
|
|
||||||
if($this->c === false){
|
|
||||||
$this->data["flags"] = Utils::readInt($this->get(4));
|
|
||||||
}else{
|
|
||||||
$this->raw .= Utils::writeInt($this->data["flags"]);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case MC_ENTITY_DATA:
|
|
||||||
if($this->c === false){
|
|
||||||
$this->data["x"] = Utils::readShort($this->get(2));
|
|
||||||
$this->data["y"] = ord($this->get(1));
|
|
||||||
$this->data["z"] = Utils::readShort($this->get(2));
|
|
||||||
$this->data["namedtag"] = $this->get(true);
|
|
||||||
}else{
|
|
||||||
$this->raw .= Utils::writeShort($this->data["x"]);
|
|
||||||
$this->raw .= chr($this->data["y"]);
|
|
||||||
$this->raw .= Utils::writeShort($this->data["z"]);
|
|
||||||
$this->raw .= $this->data["namedtag"];
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
if($this->c === false){
|
|
||||||
console("[DEBUG] Received unknown Data Packet ID 0x".dechex($pid), true, true, 2);
|
|
||||||
}else{
|
|
||||||
console("[DEBUG] Sent unknown Data Packet ID 0x".dechex($pid), true, true, 2);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,115 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* ____ _ _ __ __ _ __ __ ____
|
|
||||||
* | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
|
|
||||||
* | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
|
|
||||||
* | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
|
|
||||||
* |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU Lesser General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* @author PocketMine Team
|
|
||||||
* @link http://www.pocketmine.net/
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
class DataPacket extends stdClass{
|
|
||||||
public $id, $raw;
|
|
||||||
private $encoded = false;
|
|
||||||
private $decoded = false;
|
|
||||||
private $offset;
|
|
||||||
|
|
||||||
public function encode(){
|
|
||||||
|
|
||||||
$this->decoded = true;
|
|
||||||
$this->encoded = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
private function get($len){
|
|
||||||
if($len <= 0){
|
|
||||||
return "";
|
|
||||||
}
|
|
||||||
if($len === true){
|
|
||||||
return substr($this->raw, $this->offset);
|
|
||||||
}
|
|
||||||
$this->offset += $len;
|
|
||||||
return substr($this->raw, $this->offset - $len, $len);
|
|
||||||
}
|
|
||||||
|
|
||||||
private function getLong($unsigned = false){
|
|
||||||
return Utils::readLong($this->get(8), $unsigned);
|
|
||||||
}
|
|
||||||
|
|
||||||
private function getInt($unsigned = false){
|
|
||||||
return Utils::readInt($this->get(4), $unsigned);
|
|
||||||
}
|
|
||||||
|
|
||||||
private function getShort($unsigned = false){
|
|
||||||
return Utils::readShort($this->get(2), $unsigned);
|
|
||||||
}
|
|
||||||
|
|
||||||
private function getTriad(){
|
|
||||||
return Utils::readTriad($this->get(3));
|
|
||||||
}
|
|
||||||
|
|
||||||
private function getLTriad(){
|
|
||||||
return Utils::readTriad(strrev($this->get(3)));
|
|
||||||
}
|
|
||||||
|
|
||||||
private function getByte(){
|
|
||||||
return ord($this->get(1));
|
|
||||||
}
|
|
||||||
|
|
||||||
private function getDataArray($len = 10){
|
|
||||||
$data = array();
|
|
||||||
for($i = 1; $i <= $len and !$this->feof(); ++$i){
|
|
||||||
$data[] = $this->get($this->getTriad());
|
|
||||||
}
|
|
||||||
return $data;
|
|
||||||
}
|
|
||||||
|
|
||||||
private function feof(){
|
|
||||||
return !isset($this->raw{$this->offset});
|
|
||||||
}
|
|
||||||
|
|
||||||
public function decode(){
|
|
||||||
if(!isset($this->raw{0})){
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
$this->offset = 0;
|
|
||||||
switch($this->id){
|
|
||||||
case MC_PING:
|
|
||||||
$this->timestamp = $this->getLong();
|
|
||||||
break;
|
|
||||||
case MC_PONG:
|
|
||||||
$this->originalTimestamp = $this->getLong();
|
|
||||||
$this->timestamp = $this->getLong();
|
|
||||||
break;
|
|
||||||
case MC_CLIENT_CONNECT:
|
|
||||||
$this->clientID = $this->getLong();
|
|
||||||
$this->session = $this->getLong();
|
|
||||||
$this->unknown0 = $this->get(1);
|
|
||||||
break;
|
|
||||||
case MC_CLIENT_HANDSHAKE:
|
|
||||||
$this->cookie = $this->get(4);
|
|
||||||
$this->security = $this->get(1);
|
|
||||||
$this->port = $this->getShort(true);
|
|
||||||
$this->dataArray0 = $this->get($this->getByte());
|
|
||||||
$this->dataArray = $this->getDataArray(9);
|
|
||||||
$this->timestamp = $this->get(2);
|
|
||||||
$this->session2 = $this->getLong();
|
|
||||||
$this->session = $this->getLong();
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
$this->encoded = true;
|
|
||||||
$this->decoded = true;
|
|
||||||
}
|
|
||||||
}
|
|
@ -20,75 +20,141 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
define("CURRENT_PROTOCOL", 14);
|
class ProtocolInfo{
|
||||||
|
|
||||||
define("MC_PING", 0x00);
|
const CURRENT_PROTOCOL = 14;
|
||||||
|
|
||||||
define("MC_PONG", 0x03);
|
|
||||||
|
|
||||||
define("MC_CLIENT_CONNECT", 0x09);
|
|
||||||
define("MC_SERVER_HANDSHAKE", 0x10);
|
|
||||||
|
|
||||||
define("MC_CLIENT_HANDSHAKE", 0x13);
|
|
||||||
|
|
||||||
define("MC_SERVER_FULL", 0x14);
|
|
||||||
define("MC_DISCONNECT", 0x15);
|
|
||||||
|
|
||||||
define("MC_BANNED", 0x17);
|
|
||||||
|
|
||||||
|
|
||||||
define("MC_LOGIN", 0x82);
|
|
||||||
define("MC_LOGIN_STATUS", 0x83);
|
|
||||||
define("MC_READY", 0x84);
|
|
||||||
define("MC_CHAT", 0x85);
|
|
||||||
define("MC_SET_TIME", 0x86);
|
|
||||||
define("MC_START_GAME", 0x87);
|
|
||||||
define("MC_ADD_MOB", 0x88);
|
|
||||||
define("MC_ADD_PLAYER", 0x89);
|
|
||||||
define("MC_REMOVE_PLAYER", 0x8a);
|
|
||||||
|
|
||||||
define("MC_ADD_ENTITY", 0x8c);
|
const PING_PACKET = 0x00;
|
||||||
define("MC_REMOVE_ENTITY", 0x8d);
|
|
||||||
define("MC_ADD_ITEM_ENTITY", 0x8e);
|
|
||||||
define("MC_TAKE_ITEM_ENTITY", 0x8f);
|
|
||||||
define("MC_MOVE_ENTITY", 0x90);
|
|
||||||
|
|
||||||
define("MC_MOVE_ENTITY_POSROT", 0x93);
|
const PONG_PACKET = 0x03;
|
||||||
define("MC_ROTATE_HEAD", 0x94);
|
|
||||||
define("MC_MOVE_PLAYER", 0x95);
|
|
||||||
define("MC_PLACE_BLOCK", 0x96);
|
|
||||||
define("MC_REMOVE_BLOCK", 0x97);
|
|
||||||
define("MC_UPDATE_BLOCK", 0x98);
|
|
||||||
define("MC_ADD_PAINTING", 0x99);
|
|
||||||
define("MC_EXPLOSION", 0x9a);
|
|
||||||
define("MC_LEVEL_EVENT", 0x9b);
|
|
||||||
define("MC_TILE_EVENT", 0x9c);
|
|
||||||
define("MC_ENTITY_EVENT", 0x9d);
|
|
||||||
define("MC_REQUEST_CHUNK", 0x9e);
|
|
||||||
define("MC_CHUNK_DATA", 0x9f);
|
|
||||||
define("MC_PLAYER_EQUIPMENT", 0xa0);
|
|
||||||
define("MC_PLAYER_ARMOR_EQUIPMENT", 0xa1);
|
|
||||||
define("MC_INTERACT", 0xa2);
|
|
||||||
define("MC_USE_ITEM", 0xa3);
|
|
||||||
define("MC_PLAYER_ACTION", 0xa4);
|
|
||||||
|
|
||||||
define("MC_HURT_ARMOR", 0xa6);
|
const CLIENT_CONNECT_PACKET = 0x09;
|
||||||
define("MC_SET_ENTITY_DATA", 0xa7);
|
const SERVER_HANDSHAKE_PACKET = 0x10;
|
||||||
define("MC_SET_ENTITY_MOTION", 0xa8);
|
|
||||||
//define("MC_SET_ENTITY_LINK", 0xa9);
|
const CLIENT_HANDSHAKE_PACKET = 0x13;
|
||||||
define("MC_SET_HEALTH", 0xaa);
|
//const SERVER_FULL_PACKET = 0x14;
|
||||||
define("MC_SET_SPAWN_POSITION", 0xab);
|
const DISCONNECT_PACKET = 0x15;
|
||||||
define("MC_ANIMATE", 0xac);
|
|
||||||
define("MC_RESPAWN", 0xad);
|
//const BANNED_PACKET = 0x17;
|
||||||
define("MC_SEND_INVENTORY", 0xae);
|
|
||||||
define("MC_DROP_ITEM", 0xaf);
|
|
||||||
define("MC_CONTAINER_OPEN", 0xb0);
|
const LOGIN_PACKET = 0x82;
|
||||||
define("MC_CONTAINER_CLOSE", 0xb1);
|
const LOGIN_STATUS_PACKET = 0x83;
|
||||||
define("MC_CONTAINER_SET_SLOT", 0xb2);
|
const READY_PACKET = 0x84;
|
||||||
define("MC_CONTAINER_SET_DATA", 0xb3);
|
const MESSAGE_PACKET = 0x85;
|
||||||
define("MC_CONTAINER_SET_CONTENT", 0xb4);
|
const SET_TIME_PACKET = 0x86;
|
||||||
//define("MC_CONTAINER_ACK", 0xb5);
|
const START_GAME_PACKET = 0x87;
|
||||||
define("MC_CLIENT_MESSAGE", 0xb6);
|
const ADD_MOB_PACKET = 0x88;
|
||||||
define("MC_ADVENTURE_SETTINGS", 0xb7);
|
const ADD_PLAYER_PACKET = 0x89;
|
||||||
define("MC_ENTITY_DATA", 0xb8);
|
const REMOVE_PLAYER_PACKET = 0x8a;
|
||||||
//define("MC_PLAYER_INPUT", 0xb9);
|
|
||||||
|
const ADD_ENTITY_PACKET = 0x8c;
|
||||||
|
const REMOVE_ENTITY_PACKET = 0x8d;
|
||||||
|
const ADD_ITEM_ENTITY_PACKET = 0x8e;
|
||||||
|
const TAKE_ITEM_ENTITY_PACKET = 0x8f;
|
||||||
|
const MOVE_ENTITY_PACKET = 0x90;
|
||||||
|
|
||||||
|
const MOVE_ENTITY_PACKET_POSROT = 0x93;
|
||||||
|
const ROTATE_HEAD_PACKET = 0x94;
|
||||||
|
const MOVE_PLAYER_PACKET = 0x95;
|
||||||
|
//const PLACE_BLOCK_PACKET = 0x96;
|
||||||
|
const REMOVE_BLOCK_PACKET = 0x97;
|
||||||
|
const UPDATE_BLOCK_PACKET = 0x98;
|
||||||
|
const ADD_PAINTING_PACKET = 0x99;
|
||||||
|
const EXPLOSION_PACKET = 0x9a;
|
||||||
|
const LEVEL_EVENT_PACKET = 0x9b;
|
||||||
|
const TILE_EVENT_PACKET = 0x9c;
|
||||||
|
const ENTITY_EVENT_PACKET = 0x9d;
|
||||||
|
const REQUEST_CHUNK_PACKET = 0x9e;
|
||||||
|
const CHUNK_DATA_PACKET = 0x9f;
|
||||||
|
const PLAYER_EQUIPMENT_PACKET = 0xa0;
|
||||||
|
const PLAYER_ARMOR_EQUIPMENT_PACKET = 0xa1;
|
||||||
|
const INTERACT_PACKET = 0xa2;
|
||||||
|
const USE_ITEM_PACKET = 0xa3;
|
||||||
|
const PLAYER_ACTION_PACKET = 0xa4;
|
||||||
|
|
||||||
|
const HURT_ARMOR_PACKET = 0xa6;
|
||||||
|
const SET_ENTITY_DATA_PACKET = 0xa7;
|
||||||
|
const SET_ENTITY_MOTION_PACKET = 0xa8;
|
||||||
|
//const SET_ENTITY_LINK_PACKET = 0xa9;
|
||||||
|
const SET_HEALTH_PACKET = 0xaa;
|
||||||
|
const SET_SPAWN_POSITION_PACKET = 0xab;
|
||||||
|
const ANIMATE_PACKET = 0xac;
|
||||||
|
const RESPAWN_PACKET = 0xad;
|
||||||
|
const SEND_INVENTORY_PACKET = 0xae;
|
||||||
|
const DROP_ITEM_PACKET = 0xaf;
|
||||||
|
const CONTAINER_OPEN_PACKET = 0xb0;
|
||||||
|
const CONTAINER_CLOSE_PACKET = 0xb1;
|
||||||
|
const CONTAINER_SET_SLOT_PACKET = 0xb2;
|
||||||
|
const CONTAINER_SET_DATA_PACKET = 0xb3;
|
||||||
|
const CONTAINER_SET_CONTENT_PACKET = 0xb4;
|
||||||
|
//const CONTAINER_ACK_PACKET = 0xb5;
|
||||||
|
const CHAT_PACKET = 0xb6;
|
||||||
|
const ADVENTURE_SETTINGS_PACKET = 0xb7;
|
||||||
|
const ENTITY_DATA_PACKET = 0xb8;
|
||||||
|
//const PLAYER_INPUT_PACKET = 0xb9;
|
||||||
|
|
||||||
|
public static $packets = array(
|
||||||
|
-1 => "UnknownPacket",
|
||||||
|
ProtocolInfo::PING_PACKET => "PingPacket",
|
||||||
|
ProtocolInfo::PONG_PACKET => "PongPacket",
|
||||||
|
ProtocolInfo::CLIENT_CONNECT_PACKET => "ClientConnectPacket",
|
||||||
|
ProtocolInfo::SERVER_HANDSHAKE_PACKET => "ServerHandshakePacket",
|
||||||
|
ProtocolInfo::DISCONNECT_PACKET => "DisconnectPacket",
|
||||||
|
ProtocolInfo::LOGIN_PACKET => "LoginPacket",
|
||||||
|
ProtocolInfo::LOGIN_STATUS_PACKET => "LoginStatusPacket",
|
||||||
|
ProtocolInfo::READY_PACKET => "ReadyPacket",
|
||||||
|
ProtocolInfo::MESSAGE_PACKET => "MessagePacket",
|
||||||
|
ProtocolInfo::SET_TIME_PACKET => "SetTimePacket",
|
||||||
|
ProtocolInfo::START_GAME_PACKET => "StartGamePacket",
|
||||||
|
ProtocolInfo::ADD_MOB_PACKET => "AddMobPacket",
|
||||||
|
ProtocolInfo::ADD_PLAYER_PACKET => "AddPlayerPacket",
|
||||||
|
ProtocolInfo::REMOVE_PLAYER_PACKET => "RemovePlayerPacket",
|
||||||
|
ProtocolInfo::ADD_ENTITY_PACKET => "AddEntityPacket",
|
||||||
|
ProtocolInfo::REMOVE_ENTITY_PACKET => "RemoveEntityPacket",
|
||||||
|
ProtocolInfo::ADD_ITEM_ENTITY_PACKET => "AddItemEntityPacket",
|
||||||
|
ProtocolInfo::TAKE_ITEM_ENTITY_PACKET => "TakeItemEntityPacket",
|
||||||
|
ProtocolInfo::MOVE_ENTITY_PACKET => "MoveEntityPacket",
|
||||||
|
ProtocolInfo::MOVE_ENTITY_PACKET_POSROT => "MoveEntityPacket_PosRot",
|
||||||
|
ProtocolInfo::ROTATE_HEAD_PACKET => "RotateHeadPacket",
|
||||||
|
ProtocolInfo::MOVE_PLAYER_PACKET => "MovePlayerPacket",
|
||||||
|
ProtocolInfo::REMOVE_BLOCK_PACKET => "RemoveBlockPacket",
|
||||||
|
ProtocolInfo::UPDATE_BLOCK_PACKET => "UpdateBlockPacket",
|
||||||
|
ProtocolInfo::ADD_PAINTING_PACKET => "AddPaintingPacket",
|
||||||
|
ProtocolInfo::EXPLOSION_PACKET => "ExplosionPacket",
|
||||||
|
ProtocolInfo::LEVEL_EVENT_PACKET => "LevelEventPacket",
|
||||||
|
ProtocolInfo::TILE_EVENT_PACKET => "TileEventPacket",
|
||||||
|
ProtocolInfo::ENTITY_EVENT_PACKET => "EntityEventPacket",
|
||||||
|
ProtocolInfo::REQUEST_CHUNK_PACKET => "RequestChunkPacket",
|
||||||
|
ProtocolInfo::CHUNK_DATA_PACKET => "ChunkDataPacket",
|
||||||
|
ProtocolInfo::PLAYER_EQUIPMENT_PACKET => "PlayerEquipmentPacket",
|
||||||
|
ProtocolInfo::PLAYER_ARMOR_EQUIPMENT_PACKET => "PlayerArmorEquipmentPacket",
|
||||||
|
ProtocolInfo::INTERACT_PACKET => "InteractPacket",
|
||||||
|
ProtocolInfo::USE_ITEM_PACKET => "UseItemPacket",
|
||||||
|
ProtocolInfo::PLAYER_ACTION_PACKET => "PlayerActionPacket",
|
||||||
|
ProtocolInfo::HURT_ARMOR_PACKET => "HurtArmorPacket",
|
||||||
|
ProtocolInfo::SET_ENTITY_DATA_PACKET => "SetEntityDataPacket",
|
||||||
|
ProtocolInfo::SET_ENTITY_MOTION_PACKET => "SetEntityMotionPacket",
|
||||||
|
ProtocolInfo::SET_HEALTH_PACKET => "SetHealthPacket",
|
||||||
|
ProtocolInfo::SET_SPAWN_POSITION_PACKET => "SetSpawnPositionPacket",
|
||||||
|
ProtocolInfo::ANIMATE_PACKET => "AnimatePacket",
|
||||||
|
ProtocolInfo::RESPAWN_PACKET => "RespawnPacket",
|
||||||
|
ProtocolInfo::SEND_INVENTORY_PACKET => "SendInventoryPacket",
|
||||||
|
ProtocolInfo::DROP_ITEM_PACKET => "DropItemPacket",
|
||||||
|
ProtocolInfo::CONTAINER_OPEN_PACKET => "ContainerOpenPacket",
|
||||||
|
ProtocolInfo::CONTAINER_CLOSE_PACKET => "ContainerClosePacket",
|
||||||
|
ProtocolInfo::CONTAINER_SET_SLOT_PACKET => "ContainerSetSlotPacket",
|
||||||
|
ProtocolInfo::CONTAINER_SET_DATA_PACKET => "ContainerSetDataPacket",
|
||||||
|
ProtocolInfo::CONTAINER_SET_CONTENT_PACKET => "ContainerSetContentPacket",
|
||||||
|
ProtocolInfo::CHAT_PACKET => "ChatPacket",
|
||||||
|
ProtocolInfo::ADVENTURE_SETTINGS_PACKET => "AdventureSettingsPacket",
|
||||||
|
ProtocolInfo::ENTITY_DATA_PACKET => "EntityDataPacket",
|
||||||
|
);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/***REM_START***/
|
||||||
|
require_once(FILE_PATH . "src/network/raknet/RakNetDataPacket.php");
|
||||||
|
/***REM_END***/
|
56
src/network/protocol/packet/AddEntityPacket.php
Normal file
56
src/network/protocol/packet/AddEntityPacket.php
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* ____ _ _ __ __ _ __ __ ____
|
||||||
|
* | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
|
||||||
|
* | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
|
||||||
|
* | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
|
||||||
|
* |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Lesser General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* @author PocketMine Team
|
||||||
|
* @link http://www.pocketmine.net/
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
class AddEntityPacket extends RakNetDataPacket{
|
||||||
|
public $eid;
|
||||||
|
public $type;
|
||||||
|
public $x;
|
||||||
|
public $y;
|
||||||
|
public $z;
|
||||||
|
public $did;
|
||||||
|
public $speedX;
|
||||||
|
public $speedY;
|
||||||
|
public $speedZ;
|
||||||
|
|
||||||
|
public function pid(){
|
||||||
|
return ProtocolInfo::ADD_ENTITY_PACKET;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function decode(){
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public function encode(){
|
||||||
|
$this->reset();
|
||||||
|
$this->putInt($this->eid);
|
||||||
|
$this->putInt($this->type);
|
||||||
|
$this->putFloat($this->x);
|
||||||
|
$this->putFloat($this->y);
|
||||||
|
$this->putFloat($this->z);
|
||||||
|
$this->putInt($this->did);
|
||||||
|
if($this->did > 0){
|
||||||
|
$this->putShort($this->speedX);
|
||||||
|
$this->putShort($this->speedY);
|
||||||
|
$this->putShort($this->speedZ);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
52
src/network/protocol/packet/AddItemEntityPacket.php
Normal file
52
src/network/protocol/packet/AddItemEntityPacket.php
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* ____ _ _ __ __ _ __ __ ____
|
||||||
|
* | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
|
||||||
|
* | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
|
||||||
|
* | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
|
||||||
|
* |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Lesser General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* @author PocketMine Team
|
||||||
|
* @link http://www.pocketmine.net/
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
class AddItemEntityPacket extends RakNetDataPacket{
|
||||||
|
public $eid;
|
||||||
|
public $item;
|
||||||
|
public $x;
|
||||||
|
public $y;
|
||||||
|
public $z;
|
||||||
|
public $yaw;
|
||||||
|
public $pitch;
|
||||||
|
public $roll;
|
||||||
|
|
||||||
|
public function pid(){
|
||||||
|
return ProtocolInfo::ADD_ITEM_ENTITY_PACKET;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function decode(){
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public function encode(){
|
||||||
|
$this->reset();
|
||||||
|
$this->putInt($this->eid);
|
||||||
|
$this->putSlot($this->item);
|
||||||
|
$this->putFloat($this->x);
|
||||||
|
$this->putFloat($this->y);
|
||||||
|
$this->putFloat($this->z);
|
||||||
|
$this->putByte($this->yaw);
|
||||||
|
$this->putByte($this->pitch);
|
||||||
|
$this->putByte($this->roll);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
52
src/network/protocol/packet/AddMobPacket.php
Normal file
52
src/network/protocol/packet/AddMobPacket.php
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* ____ _ _ __ __ _ __ __ ____
|
||||||
|
* | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
|
||||||
|
* | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
|
||||||
|
* | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
|
||||||
|
* |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Lesser General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* @author PocketMine Team
|
||||||
|
* @link http://www.pocketmine.net/
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
class AddMobPacket extends RakNetDataPacket{
|
||||||
|
public $eid;
|
||||||
|
public $type;
|
||||||
|
public $x;
|
||||||
|
public $y;
|
||||||
|
public $z;
|
||||||
|
public $pitch;
|
||||||
|
public $yaw;
|
||||||
|
public $metadata;
|
||||||
|
|
||||||
|
public function pid(){
|
||||||
|
return ProtocolInfo::ADD_MOB_PACKET;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function decode(){
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public function encode(){
|
||||||
|
$this->reset();
|
||||||
|
$this->putInt($this->eid);
|
||||||
|
$this->putInt($this->type);
|
||||||
|
$this->putFloat($this->x);
|
||||||
|
$this->putFloat($this->y);
|
||||||
|
$this->putFloat($this->z);
|
||||||
|
$this->putByte($this->yaw);
|
||||||
|
$this->putByte($this->pitch);
|
||||||
|
$this->put(Utils::writeMetadata($this->metadata));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
48
src/network/protocol/packet/AddPaintingPacket.php
Normal file
48
src/network/protocol/packet/AddPaintingPacket.php
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* ____ _ _ __ __ _ __ __ ____
|
||||||
|
* | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
|
||||||
|
* | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
|
||||||
|
* | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
|
||||||
|
* |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Lesser General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* @author PocketMine Team
|
||||||
|
* @link http://www.pocketmine.net/
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
class AddPaintingPacket extends RakNetDataPacket{
|
||||||
|
public $eid;
|
||||||
|
public $x;
|
||||||
|
public $y;
|
||||||
|
public $z;
|
||||||
|
public $direction;
|
||||||
|
public $title;
|
||||||
|
|
||||||
|
public function pid(){
|
||||||
|
return ProtocolInfo::ADD_PAINTING_PACKET;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function decode(){
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public function encode(){
|
||||||
|
$this->reset();
|
||||||
|
$this->putInt($this->eid);
|
||||||
|
$this->putInt($this->x);
|
||||||
|
$this->putInt($this->y);
|
||||||
|
$this->putInt($this->z);
|
||||||
|
$this->putInt($this->direction);
|
||||||
|
$this->putString($this->title);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
58
src/network/protocol/packet/AddPlayerPacket.php
Normal file
58
src/network/protocol/packet/AddPlayerPacket.php
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* ____ _ _ __ __ _ __ __ ____
|
||||||
|
* | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
|
||||||
|
* | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
|
||||||
|
* | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
|
||||||
|
* |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Lesser General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* @author PocketMine Team
|
||||||
|
* @link http://www.pocketmine.net/
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
class AddPlayerPacket extends RakNetDataPacket{
|
||||||
|
public $clientID;
|
||||||
|
public $username;
|
||||||
|
public $eid;
|
||||||
|
public $x;
|
||||||
|
public $y;
|
||||||
|
public $z;
|
||||||
|
public $pitch;
|
||||||
|
public $yaw;
|
||||||
|
public $unknown1;
|
||||||
|
public $unknown2;
|
||||||
|
public $metadata;
|
||||||
|
|
||||||
|
public function pid(){
|
||||||
|
return ProtocolInfo::ADD_PLAYER_PACKET;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function decode(){
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public function encode(){
|
||||||
|
$this->reset();
|
||||||
|
$this->putLong($this->clientID);
|
||||||
|
$this->putString($this->username);
|
||||||
|
$this->putInt($this->eid);
|
||||||
|
$this->putFloat($this->x);
|
||||||
|
$this->putFloat($this->y);
|
||||||
|
$this->putFloat($this->z);
|
||||||
|
$this->putByte($this->yaw);
|
||||||
|
$this->putByte($this->pitch);
|
||||||
|
$this->putShort($this->unknown1);
|
||||||
|
$this->putShort($this->unknown2);
|
||||||
|
$this->put(Utils::writeMetadata($this->metadata));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
37
src/network/protocol/packet/AdventureSettingsPacket.php
Normal file
37
src/network/protocol/packet/AdventureSettingsPacket.php
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* ____ _ _ __ __ _ __ __ ____
|
||||||
|
* | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
|
||||||
|
* | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
|
||||||
|
* | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
|
||||||
|
* |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Lesser General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* @author PocketMine Team
|
||||||
|
* @link http://www.pocketmine.net/
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
class AdventureSettingsPacket extends RakNetDataPacket{
|
||||||
|
public $flags;
|
||||||
|
|
||||||
|
public function pid(){
|
||||||
|
return ProtocolInfo::ADVENTURE_SETTINGS_PACKET;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function decode(){
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public function encode(){
|
||||||
|
$this->putInt($this->flags);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
41
src/network/protocol/packet/AnimatePacket.php
Normal file
41
src/network/protocol/packet/AnimatePacket.php
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* ____ _ _ __ __ _ __ __ ____
|
||||||
|
* | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
|
||||||
|
* | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
|
||||||
|
* | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
|
||||||
|
* |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Lesser General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* @author PocketMine Team
|
||||||
|
* @link http://www.pocketmine.net/
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
class AnimatePacket extends RakNetDataPacket{
|
||||||
|
public $action;
|
||||||
|
public $eid;
|
||||||
|
|
||||||
|
public function pid(){
|
||||||
|
return ProtocolInfo::ANIMATE_PACKET;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function decode(){
|
||||||
|
$this->action = $this->getByte();
|
||||||
|
$this->eid = $this->getInt();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function encode(){
|
||||||
|
$this->reset();
|
||||||
|
$this->putByte($this->action);
|
||||||
|
$this->putInt($this->eid);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
37
src/network/protocol/packet/ChatPacket.php
Normal file
37
src/network/protocol/packet/ChatPacket.php
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* ____ _ _ __ __ _ __ __ ____
|
||||||
|
* | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
|
||||||
|
* | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
|
||||||
|
* | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
|
||||||
|
* |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Lesser General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* @author PocketMine Team
|
||||||
|
* @link http://www.pocketmine.net/
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
class ChatPacket extends RakNetDataPacket{
|
||||||
|
public $message;
|
||||||
|
|
||||||
|
public function pid(){
|
||||||
|
return ProtocolInfo::CHAT_PACKET;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function decode(){
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public function encode(){
|
||||||
|
$this->putString($this->message);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
42
src/network/protocol/packet/ChunkDataPacket.php
Normal file
42
src/network/protocol/packet/ChunkDataPacket.php
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* ____ _ _ __ __ _ __ __ ____
|
||||||
|
* | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
|
||||||
|
* | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
|
||||||
|
* | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
|
||||||
|
* |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Lesser General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* @author PocketMine Team
|
||||||
|
* @link http://www.pocketmine.net/
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
class ChunkDataPacket extends RakNetDataPacket{
|
||||||
|
public $x;
|
||||||
|
public $z;
|
||||||
|
public $data;
|
||||||
|
|
||||||
|
public function pid(){
|
||||||
|
return ProtocolInfo::CHUNK_DATA_PACKET;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function decode(){
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public function encode(){
|
||||||
|
$this->reset();
|
||||||
|
$this->putInt($this->x);
|
||||||
|
$this->putInt($this->z);
|
||||||
|
$this->put($this->data);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
41
src/network/protocol/packet/ClientConnectPacket.php
Normal file
41
src/network/protocol/packet/ClientConnectPacket.php
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* ____ _ _ __ __ _ __ __ ____
|
||||||
|
* | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
|
||||||
|
* | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
|
||||||
|
* | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
|
||||||
|
* |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Lesser General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* @author PocketMine Team
|
||||||
|
* @link http://www.pocketmine.net/
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
class ClientConnectPacket extends RakNetDataPacket{
|
||||||
|
public $clientID;
|
||||||
|
public $session;
|
||||||
|
public $unknown1;
|
||||||
|
|
||||||
|
public function pid(){
|
||||||
|
return ProtocolInfo::CLIENT_CONNECT_PACKET;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function decode(){
|
||||||
|
$this->clientID = $this->getLong();
|
||||||
|
$this->session = $this->getLong();
|
||||||
|
$this->unknown1 = $this->get(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function encode(){
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
51
src/network/protocol/packet/ClientHandshakePacket.php
Normal file
51
src/network/protocol/packet/ClientHandshakePacket.php
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* ____ _ _ __ __ _ __ __ ____
|
||||||
|
* | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
|
||||||
|
* | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
|
||||||
|
* | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
|
||||||
|
* |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Lesser General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* @author PocketMine Team
|
||||||
|
* @link http://www.pocketmine.net/
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
class ClientHandshakePacket extends RakNetDataPacket{
|
||||||
|
public $cookie;
|
||||||
|
public $security;
|
||||||
|
public $port;
|
||||||
|
public $dataArray0;
|
||||||
|
public $dataArray;
|
||||||
|
public $timespamp;
|
||||||
|
public $session2;
|
||||||
|
public $session;
|
||||||
|
|
||||||
|
public function pid(){
|
||||||
|
return ProtocolInfo::CLIENT_HANDSHAKE_PACKET;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function decode(){
|
||||||
|
$this->cookie = $this->get(4);
|
||||||
|
$this->security = $this->get(1);
|
||||||
|
$this->port = $this->getShort(true);
|
||||||
|
$this->dataArray0 = $this->get($this->getByte());
|
||||||
|
$this->dataArray = $this->getDataArray(9);
|
||||||
|
$this->timespamp = $this->get(2);
|
||||||
|
$this->session2 = $this->getLong();
|
||||||
|
$this->session = $this->getLong();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function encode(){
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
38
src/network/protocol/packet/ContainerClosePacket.php
Normal file
38
src/network/protocol/packet/ContainerClosePacket.php
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* ____ _ _ __ __ _ __ __ ____
|
||||||
|
* | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
|
||||||
|
* | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
|
||||||
|
* | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
|
||||||
|
* |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Lesser General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* @author PocketMine Team
|
||||||
|
* @link http://www.pocketmine.net/
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
class ContainerClosePacket extends RakNetDataPacket{
|
||||||
|
public $windowid;
|
||||||
|
|
||||||
|
public function pid(){
|
||||||
|
return ProtocolInfo::CONTAINER_CLOSE_PACKET;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function decode(){
|
||||||
|
$this->windowid = $this->getInt();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function encode(){
|
||||||
|
$this->reset();
|
||||||
|
$this->putByte($this->windowid);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
48
src/network/protocol/packet/ContainerOpenPacket.php
Normal file
48
src/network/protocol/packet/ContainerOpenPacket.php
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* ____ _ _ __ __ _ __ __ ____
|
||||||
|
* | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
|
||||||
|
* | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
|
||||||
|
* | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
|
||||||
|
* |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Lesser General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* @author PocketMine Team
|
||||||
|
* @link http://www.pocketmine.net/
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
class ContainerOpenPacket extends RakNetDataPacket{
|
||||||
|
public $windowid;
|
||||||
|
public $type;
|
||||||
|
public $slots;
|
||||||
|
public $x;
|
||||||
|
public $y;
|
||||||
|
public $z;
|
||||||
|
|
||||||
|
public function pid(){
|
||||||
|
return ProtocolInfo::CONTAINER_OPEN_PACKET;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function decode(){
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public function encode(){
|
||||||
|
$this->reset();
|
||||||
|
$this->putByte($this->windowid);
|
||||||
|
$this->putByte($this->type);
|
||||||
|
$this->putByte($this->slots);
|
||||||
|
$this->putInt($this->x);
|
||||||
|
$this->putInt($this->y);
|
||||||
|
$this->putInt($this->z);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
59
src/network/protocol/packet/ContainerSetContentPacket.php
Normal file
59
src/network/protocol/packet/ContainerSetContentPacket.php
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* ____ _ _ __ __ _ __ __ ____
|
||||||
|
* | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
|
||||||
|
* | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
|
||||||
|
* | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
|
||||||
|
* |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Lesser General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* @author PocketMine Team
|
||||||
|
* @link http://www.pocketmine.net/
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
class ContainerSetContentPacket extends RakNetDataPacket{
|
||||||
|
public $windowid;
|
||||||
|
public $slots = array();
|
||||||
|
public $hotbar = array();
|
||||||
|
|
||||||
|
public function pid(){
|
||||||
|
return ProtocolInfo::CONTAINER_SET_CONTENT_PACKET;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function decode(){
|
||||||
|
$this->windowid = $this->getByte();
|
||||||
|
$count = $this->getShort();
|
||||||
|
for($s = 0; $s < $count and !$this->feof(); ++$s){
|
||||||
|
$this->slots[$s] = $this->getSlot();
|
||||||
|
}
|
||||||
|
if($this->windowid === 0){
|
||||||
|
$count = $this->getShort();
|
||||||
|
for($s = 0; $s < $count and !$this->feof(); ++$s){
|
||||||
|
$this->hotbar[$s] = $this->getInt();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function encode(){
|
||||||
|
$this->putByte($this->windowid);
|
||||||
|
$this->putShort(count($this->slots));
|
||||||
|
foreach($this->slots as $slot){
|
||||||
|
$this->putSlot($item);
|
||||||
|
}
|
||||||
|
if($this->windowid === 0 and count($this->hotbar) > 0){
|
||||||
|
$this->putShort(count($this->hotbar));
|
||||||
|
foreach($this->hotbar as $slot){
|
||||||
|
$this->putInt($slot);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
41
src/network/protocol/packet/ContainerSetDataPacket.php
Normal file
41
src/network/protocol/packet/ContainerSetDataPacket.php
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* ____ _ _ __ __ _ __ __ ____
|
||||||
|
* | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
|
||||||
|
* | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
|
||||||
|
* | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
|
||||||
|
* |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Lesser General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* @author PocketMine Team
|
||||||
|
* @link http://www.pocketmine.net/
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
class ContainerSetDataPacket extends RakNetDataPacket{
|
||||||
|
public $windowid;
|
||||||
|
public $property;
|
||||||
|
public $value;
|
||||||
|
|
||||||
|
public function pid(){
|
||||||
|
return ProtocolInfo::CONTAINER_SET_DATA_PACKET;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function decode(){
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public function encode(){
|
||||||
|
$this->putByte($this->windowid);
|
||||||
|
$this->putShort($this->property);
|
||||||
|
$this->putShort($this->value);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
43
src/network/protocol/packet/ContainerSetSlotPacket.php
Normal file
43
src/network/protocol/packet/ContainerSetSlotPacket.php
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* ____ _ _ __ __ _ __ __ ____
|
||||||
|
* | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
|
||||||
|
* | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
|
||||||
|
* | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
|
||||||
|
* |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Lesser General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* @author PocketMine Team
|
||||||
|
* @link http://www.pocketmine.net/
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
class ContainerSetSlotPacket extends RakNetDataPacket{
|
||||||
|
public $windowid;
|
||||||
|
public $slot;
|
||||||
|
public $item;
|
||||||
|
|
||||||
|
public function pid(){
|
||||||
|
return ProtocolInfo::CONTAINER_SET_SLOT_PACKET;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function decode(){
|
||||||
|
$this->windowid = $this->getByte();
|
||||||
|
$this->slot = $this->getShort();
|
||||||
|
$this->item = $this->getSlot();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function encode(){
|
||||||
|
$this->putByte($this->windowid);
|
||||||
|
$this->putShort($this->slot);
|
||||||
|
$this->putSlot($this->item);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
35
src/network/protocol/packet/DisconnectPacket.php
Normal file
35
src/network/protocol/packet/DisconnectPacket.php
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* ____ _ _ __ __ _ __ __ ____
|
||||||
|
* | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
|
||||||
|
* | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
|
||||||
|
* | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
|
||||||
|
* |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Lesser General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* @author PocketMine Team
|
||||||
|
* @link http://www.pocketmine.net/
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
class DisconnectPacket extends RakNetDataPacket{
|
||||||
|
public function pid(){
|
||||||
|
return ProtocolInfo::DISCONNECT_PACKET;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function decode(){
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public function encode(){
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
41
src/network/protocol/packet/DropItemPacket.php
Normal file
41
src/network/protocol/packet/DropItemPacket.php
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* ____ _ _ __ __ _ __ __ ____
|
||||||
|
* | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
|
||||||
|
* | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
|
||||||
|
* | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
|
||||||
|
* |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Lesser General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* @author PocketMine Team
|
||||||
|
* @link http://www.pocketmine.net/
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
class DropItemPacket extends RakNetDataPacket{
|
||||||
|
public $eid;
|
||||||
|
public $unknown;
|
||||||
|
public $item;
|
||||||
|
|
||||||
|
public function pid(){
|
||||||
|
return ProtocolInfo::DROP_ITEM_PACKET;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function decode(){
|
||||||
|
$this->eid = $this->getInt();
|
||||||
|
$this->unknown = $this->getByte();
|
||||||
|
$this->item = $this->getSlot();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function encode(){
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
46
src/network/protocol/packet/EntityDataPacket.php
Normal file
46
src/network/protocol/packet/EntityDataPacket.php
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* ____ _ _ __ __ _ __ __ ____
|
||||||
|
* | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
|
||||||
|
* | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
|
||||||
|
* | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
|
||||||
|
* |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Lesser General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* @author PocketMine Team
|
||||||
|
* @link http://www.pocketmine.net/
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
class EntityDataPacket extends RakNetDataPacket{
|
||||||
|
public $x;
|
||||||
|
public $y;
|
||||||
|
public $z;
|
||||||
|
public $namedtag;
|
||||||
|
|
||||||
|
public function pid(){
|
||||||
|
return ProtocolInfo::ENTITY_DATA_PACKET;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function decode(){
|
||||||
|
$this->x = $this->getShort();
|
||||||
|
$this->y = $this->getByte();
|
||||||
|
$this->z = $this->getShort();
|
||||||
|
$this->namedtag = $this->get(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function encode(){
|
||||||
|
$this->putShort($this->x);
|
||||||
|
$this->putByte($this->y);
|
||||||
|
$this->putShort($this->z);
|
||||||
|
$this->put($this->namedtag);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
41
src/network/protocol/packet/EntityEventPacket.php
Normal file
41
src/network/protocol/packet/EntityEventPacket.php
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* ____ _ _ __ __ _ __ __ ____
|
||||||
|
* | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
|
||||||
|
* | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
|
||||||
|
* | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
|
||||||
|
* |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Lesser General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* @author PocketMine Team
|
||||||
|
* @link http://www.pocketmine.net/
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
class EntityEventPacket extends RakNetDataPacket{
|
||||||
|
public $eid;
|
||||||
|
public $event;
|
||||||
|
|
||||||
|
public function pid(){
|
||||||
|
return ProtocolInfo::ENTITY_EVENT_PACKET;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function decode(){
|
||||||
|
$this->eid = $this->getInt();
|
||||||
|
$this->event = $this->getByte();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function encode(){
|
||||||
|
$this->reset();
|
||||||
|
$this->putInt($this->eid);
|
||||||
|
$this->putByte($this->event);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
53
src/network/protocol/packet/ExplosionPacket.php
Normal file
53
src/network/protocol/packet/ExplosionPacket.php
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* ____ _ _ __ __ _ __ __ ____
|
||||||
|
* | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
|
||||||
|
* | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
|
||||||
|
* | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
|
||||||
|
* |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Lesser General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* @author PocketMine Team
|
||||||
|
* @link http://www.pocketmine.net/
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
class ExplosionPacket extends RakNetDataPacket{
|
||||||
|
public $x;
|
||||||
|
public $y;
|
||||||
|
public $z;
|
||||||
|
public $radius;
|
||||||
|
public $records;
|
||||||
|
|
||||||
|
public function pid(){
|
||||||
|
return ProtocolInfo::EXPLOSION_PACKET;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function decode(){
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public function encode(){
|
||||||
|
$this->reset();
|
||||||
|
$this->putFloat($this->x);
|
||||||
|
$this->putFloat($this->y);
|
||||||
|
$this->putFloat($this->z);
|
||||||
|
$this->putFloat($this->radius);
|
||||||
|
$this->putInt(@count($this->records));
|
||||||
|
if(@count($this->records) > 0){
|
||||||
|
foreach($this->records as $record){
|
||||||
|
$this->putByte($record->x);
|
||||||
|
$this->putByte($record->y);
|
||||||
|
$this->putByte($record->z);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
38
src/network/protocol/packet/HurtArmorPacket.php
Normal file
38
src/network/protocol/packet/HurtArmorPacket.php
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* ____ _ _ __ __ _ __ __ ____
|
||||||
|
* | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
|
||||||
|
* | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
|
||||||
|
* | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
|
||||||
|
* |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Lesser General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* @author PocketMine Team
|
||||||
|
* @link http://www.pocketmine.net/
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
class HurtArmorPacket extends RakNetDataPacket{
|
||||||
|
public $health;
|
||||||
|
|
||||||
|
public function pid(){
|
||||||
|
return ProtocolInfo::HURT_ARMOR_PACKET;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function decode(){
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public function encode(){
|
||||||
|
$this->reset();
|
||||||
|
$this->putByte($this->health);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
44
src/network/protocol/packet/InteractPacket.php
Normal file
44
src/network/protocol/packet/InteractPacket.php
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* ____ _ _ __ __ _ __ __ ____
|
||||||
|
* | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
|
||||||
|
* | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
|
||||||
|
* | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
|
||||||
|
* |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Lesser General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* @author PocketMine Team
|
||||||
|
* @link http://www.pocketmine.net/
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
class InteractPacket extends RakNetDataPacket{
|
||||||
|
public $action;
|
||||||
|
public $eid;
|
||||||
|
public $target;
|
||||||
|
|
||||||
|
public function pid(){
|
||||||
|
return ProtocolInfo::INTERACT_PACKET;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function decode(){
|
||||||
|
$this->action = $this->getByte();
|
||||||
|
$this->eid = $this->getInt();
|
||||||
|
$this->target = $this->getInt();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function encode(){
|
||||||
|
$this->reset();
|
||||||
|
$this->putByte($this->action);
|
||||||
|
$this->putInt($this->eid);
|
||||||
|
$this->putInt($this->target);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
46
src/network/protocol/packet/LevelEventPacket.php
Normal file
46
src/network/protocol/packet/LevelEventPacket.php
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* ____ _ _ __ __ _ __ __ ____
|
||||||
|
* | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
|
||||||
|
* | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
|
||||||
|
* | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
|
||||||
|
* |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Lesser General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* @author PocketMine Team
|
||||||
|
* @link http://www.pocketmine.net/
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
class LevelEventPacket extends RakNetDataPacket{
|
||||||
|
public $evid;
|
||||||
|
public $x;
|
||||||
|
public $y;
|
||||||
|
public $z;
|
||||||
|
public $data;
|
||||||
|
|
||||||
|
public function pid(){
|
||||||
|
return ProtocolInfo::LEVEL_EVENT_PACKET;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function decode(){
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public function encode(){
|
||||||
|
$this->reset();
|
||||||
|
$this->putShort($this->evid);
|
||||||
|
$this->putShort($this->x);
|
||||||
|
$this->putShort($this->y);
|
||||||
|
$this->putShort($this->z);
|
||||||
|
$this->putInt($this->data);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
45
src/network/protocol/packet/LoginPacket.php
Normal file
45
src/network/protocol/packet/LoginPacket.php
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* ____ _ _ __ __ _ __ __ ____
|
||||||
|
* | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
|
||||||
|
* | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
|
||||||
|
* | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
|
||||||
|
* |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Lesser General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* @author PocketMine Team
|
||||||
|
* @link http://www.pocketmine.net/
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
class LoginPacket extends RakNetDataPacket{
|
||||||
|
public $username;
|
||||||
|
public $protocol1;
|
||||||
|
public $protocol2;
|
||||||
|
public $clientId;
|
||||||
|
public $loginData;
|
||||||
|
|
||||||
|
public function pid(){
|
||||||
|
return ProtocolInfo::LOGIN_PACKET;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function decode(){
|
||||||
|
$this->username = $this->getString();
|
||||||
|
$this->protocol1 = $this->getInt();
|
||||||
|
$this->protocol2 = $this->getInt();
|
||||||
|
$this->clientId = $this->getInt();
|
||||||
|
$this->loginData = $this->getString();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function encode(){
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
38
src/network/protocol/packet/LoginStatusPacket.php
Normal file
38
src/network/protocol/packet/LoginStatusPacket.php
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* ____ _ _ __ __ _ __ __ ____
|
||||||
|
* | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
|
||||||
|
* | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
|
||||||
|
* | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
|
||||||
|
* |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Lesser General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* @author PocketMine Team
|
||||||
|
* @link http://www.pocketmine.net/
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
class LoginStatusPacket extends RakNetDataPacket{
|
||||||
|
public $status;
|
||||||
|
|
||||||
|
public function pid(){
|
||||||
|
return ProtocolInfo::LOGIN_STATUS_PACKET;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function decode(){
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public function encode(){
|
||||||
|
$this->reset();
|
||||||
|
$this->putInt($this->status);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
41
src/network/protocol/packet/MessagePacket.php
Normal file
41
src/network/protocol/packet/MessagePacket.php
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* ____ _ _ __ __ _ __ __ ____
|
||||||
|
* | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
|
||||||
|
* | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
|
||||||
|
* | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
|
||||||
|
* |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Lesser General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* @author PocketMine Team
|
||||||
|
* @link http://www.pocketmine.net/
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
class MessagePacket extends RakNetDataPacket{
|
||||||
|
public $source;
|
||||||
|
public $message;
|
||||||
|
|
||||||
|
public function pid(){
|
||||||
|
return ProtocolInfo::MESSAGE_PACKET;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function decode(){
|
||||||
|
$this->source = $this->getString();
|
||||||
|
$this->message = $this->getString();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function encode(){
|
||||||
|
$this->reset();
|
||||||
|
$this->putString($this->source);
|
||||||
|
$this->putString($this->message);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
36
src/network/protocol/packet/MoveEntityPacket.php
Normal file
36
src/network/protocol/packet/MoveEntityPacket.php
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* ____ _ _ __ __ _ __ __ ____
|
||||||
|
* | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
|
||||||
|
* | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
|
||||||
|
* | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
|
||||||
|
* |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Lesser General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* @author PocketMine Team
|
||||||
|
* @link http://www.pocketmine.net/
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
class MoveEntityPacket extends RakNetDataPacket{
|
||||||
|
|
||||||
|
public function pid(){
|
||||||
|
return ProtocolInfo::MOVE_ENTITY_PACKET;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function decode(){
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public function encode(){
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
48
src/network/protocol/packet/MoveEntityPacket_PosRot.php
Normal file
48
src/network/protocol/packet/MoveEntityPacket_PosRot.php
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* ____ _ _ __ __ _ __ __ ____
|
||||||
|
* | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
|
||||||
|
* | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
|
||||||
|
* | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
|
||||||
|
* |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Lesser General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* @author PocketMine Team
|
||||||
|
* @link http://www.pocketmine.net/
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
class MoveEntityPacket_PosRot extends RakNetDataPacket{
|
||||||
|
public $eid;
|
||||||
|
public $x;
|
||||||
|
public $y;
|
||||||
|
public $z;
|
||||||
|
public $yaw;
|
||||||
|
public $pitch;
|
||||||
|
|
||||||
|
public function pid(){
|
||||||
|
return ProtocolInfo::MOVE_ENTITY_PACKET_POSROT;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function decode(){
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public function encode(){
|
||||||
|
$this->reset();
|
||||||
|
$this->putInt($this->eid);
|
||||||
|
$this->putFloat($this->x);
|
||||||
|
$this->putFloat($this->y);
|
||||||
|
$this->putFloat($this->z);
|
||||||
|
$this->putFloat($this->yaw);
|
||||||
|
$this->putFloat($this->pitch);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
56
src/network/protocol/packet/MovePlayerPacket.php
Normal file
56
src/network/protocol/packet/MovePlayerPacket.php
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* ____ _ _ __ __ _ __ __ ____
|
||||||
|
* | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
|
||||||
|
* | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
|
||||||
|
* | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
|
||||||
|
* |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Lesser General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* @author PocketMine Team
|
||||||
|
* @link http://www.pocketmine.net/
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
class MovePlayerPacket extends RakNetDataPacket{
|
||||||
|
public $eid;
|
||||||
|
public $x;
|
||||||
|
public $y;
|
||||||
|
public $z;
|
||||||
|
public $yaw;
|
||||||
|
public $pitch;
|
||||||
|
public $bodyYaw;
|
||||||
|
|
||||||
|
public function pid(){
|
||||||
|
return ProtocolInfo::MOVE_PLAYER_PACKET;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function decode(){
|
||||||
|
$this->eid = $this->getInt();
|
||||||
|
$this->x = $this->getFloat();
|
||||||
|
$this->y = $this->getFloat();
|
||||||
|
$this->z = $this->getFloat();
|
||||||
|
$this->yaw = $this->getFloat();
|
||||||
|
$this->pitch = $this->getFloat();
|
||||||
|
$this->bodyYaw = $this->getFloat();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function encode(){
|
||||||
|
$this->reset();
|
||||||
|
$this->putInt($this->eid);
|
||||||
|
$this->putFloat($this->x);
|
||||||
|
$this->putFloat($this->y);
|
||||||
|
$this->putFloat($this->z);
|
||||||
|
$this->putFloat($this->yaw);
|
||||||
|
$this->putFloat($this->pitch);
|
||||||
|
$this->putFloat($this->bodyYaw);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
38
src/network/protocol/packet/PingPacket.php
Normal file
38
src/network/protocol/packet/PingPacket.php
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* ____ _ _ __ __ _ __ __ ____
|
||||||
|
* | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
|
||||||
|
* | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
|
||||||
|
* | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
|
||||||
|
* |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Lesser General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* @author PocketMine Team
|
||||||
|
* @link http://www.pocketmine.net/
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
class PingPacket extends RakNetDataPacket{
|
||||||
|
public $time = 0;
|
||||||
|
|
||||||
|
public function pid(){
|
||||||
|
return ProtocolInfo::PING_PACKET;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function decode(){
|
||||||
|
$this->time = $this->getLong();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function encode(){
|
||||||
|
$this->reset();
|
||||||
|
$this->putLong($this->time);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
47
src/network/protocol/packet/PlayerActionPacket.php
Normal file
47
src/network/protocol/packet/PlayerActionPacket.php
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* ____ _ _ __ __ _ __ __ ____
|
||||||
|
* | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
|
||||||
|
* | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
|
||||||
|
* | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
|
||||||
|
* |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Lesser General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* @author PocketMine Team
|
||||||
|
* @link http://www.pocketmine.net/
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
class PlayerActionPacket extends RakNetDataPacket{
|
||||||
|
public $action;
|
||||||
|
public $x;
|
||||||
|
public $y;
|
||||||
|
public $z;
|
||||||
|
public $face;
|
||||||
|
public $eid;
|
||||||
|
|
||||||
|
public function pid(){
|
||||||
|
return ProtocolInfo::PLAYER_ACTION_PACKET;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function decode(){
|
||||||
|
$this->action = $this->getInt();
|
||||||
|
$this->x = $this->getInt();
|
||||||
|
$this->y = $this->getInt();
|
||||||
|
$this->z = $this->getInt();
|
||||||
|
$this->face = $this->getInt();
|
||||||
|
$this->eid = $this->getInt();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function encode(){
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
47
src/network/protocol/packet/PlayerArmorEquipmentPacket.php
Normal file
47
src/network/protocol/packet/PlayerArmorEquipmentPacket.php
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* ____ _ _ __ __ _ __ __ ____
|
||||||
|
* | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
|
||||||
|
* | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
|
||||||
|
* | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
|
||||||
|
* |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Lesser General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* @author PocketMine Team
|
||||||
|
* @link http://www.pocketmine.net/
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
class PlayerArmorEquipmentPacket extends RakNetDataPacket{
|
||||||
|
public $eid;
|
||||||
|
public $slots = array();
|
||||||
|
|
||||||
|
public function pid(){
|
||||||
|
return ProtocolInfo::PLAYER_ARMOR_EQUIPMENT_PACKET;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function decode(){
|
||||||
|
$this->eid = $this->getInt();
|
||||||
|
$this->slots[0] = $this->getByte();
|
||||||
|
$this->slots[1] = $this->getByte();
|
||||||
|
$this->slots[2] = $this->getByte();
|
||||||
|
$this->slots[3] = $this->getByte();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function encode(){
|
||||||
|
$this->reset();
|
||||||
|
$this->putInt($this->eid);
|
||||||
|
$this->putByte($this->slots[0]);
|
||||||
|
$this->putByte($this->slots[1]);
|
||||||
|
$this->putByte($this->slots[2]);
|
||||||
|
$this->putByte($this->slots[3]);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
46
src/network/protocol/packet/PlayerEquipmentPacket.php
Normal file
46
src/network/protocol/packet/PlayerEquipmentPacket.php
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* ____ _ _ __ __ _ __ __ ____
|
||||||
|
* | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
|
||||||
|
* | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
|
||||||
|
* | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
|
||||||
|
* |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Lesser General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* @author PocketMine Team
|
||||||
|
* @link http://www.pocketmine.net/
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
class PlayerEquipmentPacket extends RakNetDataPacket{
|
||||||
|
public $eid;
|
||||||
|
public $item;
|
||||||
|
public $meta;
|
||||||
|
public $slot;
|
||||||
|
|
||||||
|
public function pid(){
|
||||||
|
return ProtocolInfo::PLAYER_EQUIPMENT_PACKET;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function decode(){
|
||||||
|
$this->eid = $this->getInt();
|
||||||
|
$this->item = $this->getShort();
|
||||||
|
$this->meta = $this->getShort();
|
||||||
|
$this->slot = $this->getByte();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function encode(){
|
||||||
|
$this->reset();
|
||||||
|
$this->putInt($this->eid);
|
||||||
|
$this->putShort($this->meta);
|
||||||
|
$this->putByte($this->slot);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
41
src/network/protocol/packet/PongPacket.php
Normal file
41
src/network/protocol/packet/PongPacket.php
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* ____ _ _ __ __ _ __ __ ____
|
||||||
|
* | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
|
||||||
|
* | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
|
||||||
|
* | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
|
||||||
|
* |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Lesser General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* @author PocketMine Team
|
||||||
|
* @link http://www.pocketmine.net/
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
class PongPacket extends RakNetDataPacket{
|
||||||
|
public $time = 0;
|
||||||
|
public $ptime = 0;
|
||||||
|
|
||||||
|
public function pid(){
|
||||||
|
return ProtocolInfo::PONG_PACKET;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function decode(){
|
||||||
|
$this->ptime = $this->getLong();
|
||||||
|
$this->time = $this->getLong();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function encode(){
|
||||||
|
$this->reset();
|
||||||
|
$this->putLong($this->ptime);
|
||||||
|
$this->putLong($this->time);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
37
src/network/protocol/packet/ReadyPacket.php
Normal file
37
src/network/protocol/packet/ReadyPacket.php
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* ____ _ _ __ __ _ __ __ ____
|
||||||
|
* | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
|
||||||
|
* | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
|
||||||
|
* | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
|
||||||
|
* |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Lesser General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* @author PocketMine Team
|
||||||
|
* @link http://www.pocketmine.net/
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
class ReadyPacket extends RakNetDataPacket{
|
||||||
|
public $status;
|
||||||
|
|
||||||
|
public function pid(){
|
||||||
|
return ProtocolInfo::READY_PACKET;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function decode(){
|
||||||
|
$this->status = $this->getByte();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function encode(){
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
43
src/network/protocol/packet/RemoveBlockPacket.php
Normal file
43
src/network/protocol/packet/RemoveBlockPacket.php
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* ____ _ _ __ __ _ __ __ ____
|
||||||
|
* | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
|
||||||
|
* | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
|
||||||
|
* | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
|
||||||
|
* |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Lesser General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* @author PocketMine Team
|
||||||
|
* @link http://www.pocketmine.net/
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
class RemoveBlockPacket extends RakNetDataPacket{
|
||||||
|
public $eid;
|
||||||
|
public $x;
|
||||||
|
public $y;
|
||||||
|
public $z;
|
||||||
|
|
||||||
|
public function pid(){
|
||||||
|
return ProtocolInfo::REMOVE_BLOCK_PACKET;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function decode(){
|
||||||
|
$this->eid = $this->getInt();
|
||||||
|
$this->x = $this->getInt();
|
||||||
|
$this->y = $this->getInt();
|
||||||
|
$this->z = $this->getInt();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function encode(){
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
38
src/network/protocol/packet/RemoveEntityPacket.php
Normal file
38
src/network/protocol/packet/RemoveEntityPacket.php
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* ____ _ _ __ __ _ __ __ ____
|
||||||
|
* | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
|
||||||
|
* | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
|
||||||
|
* | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
|
||||||
|
* |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Lesser General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* @author PocketMine Team
|
||||||
|
* @link http://www.pocketmine.net/
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
class RemoveEntityPacket extends RakNetDataPacket{
|
||||||
|
public $eid;
|
||||||
|
|
||||||
|
public function pid(){
|
||||||
|
return ProtocolInfo::REMOVE_ENTITY_PACKET;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function decode(){
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public function encode(){
|
||||||
|
$this->reset();
|
||||||
|
$this->putInt($this->eid);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
40
src/network/protocol/packet/RemovePlayerPacket.php
Normal file
40
src/network/protocol/packet/RemovePlayerPacket.php
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* ____ _ _ __ __ _ __ __ ____
|
||||||
|
* | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
|
||||||
|
* | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
|
||||||
|
* | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
|
||||||
|
* |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Lesser General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* @author PocketMine Team
|
||||||
|
* @link http://www.pocketmine.net/
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
class RemovePlayerPacket extends RakNetDataPacket{
|
||||||
|
public $eid;
|
||||||
|
public $clientID;
|
||||||
|
|
||||||
|
public function pid(){
|
||||||
|
return ProtocolInfo::REMOVE_PLAYER_PACKET;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function decode(){
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public function encode(){
|
||||||
|
$this->reset();
|
||||||
|
$this->putInt($this->eid);
|
||||||
|
$this->putLong($this->clientID);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
39
src/network/protocol/packet/RequestChunkPacket.php
Normal file
39
src/network/protocol/packet/RequestChunkPacket.php
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* ____ _ _ __ __ _ __ __ ____
|
||||||
|
* | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
|
||||||
|
* | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
|
||||||
|
* | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
|
||||||
|
* |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Lesser General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* @author PocketMine Team
|
||||||
|
* @link http://www.pocketmine.net/
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
class RequestChunkPacket extends RakNetDataPacket{
|
||||||
|
public $x;
|
||||||
|
public $z;
|
||||||
|
|
||||||
|
public function pid(){
|
||||||
|
return ProtocolInfo::REQUEST_CHUNK_PACKET;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function decode(){
|
||||||
|
$this->x = $this->getInt();
|
||||||
|
$this->z = $this->getInt();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function encode(){
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
47
src/network/protocol/packet/RespawnPacket.php
Normal file
47
src/network/protocol/packet/RespawnPacket.php
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* ____ _ _ __ __ _ __ __ ____
|
||||||
|
* | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
|
||||||
|
* | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
|
||||||
|
* | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
|
||||||
|
* |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Lesser General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* @author PocketMine Team
|
||||||
|
* @link http://www.pocketmine.net/
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
class RespawnPacket extends RakNetDataPacket{
|
||||||
|
public $eid;
|
||||||
|
public $x;
|
||||||
|
public $y;
|
||||||
|
public $z;
|
||||||
|
|
||||||
|
public function pid(){
|
||||||
|
return ProtocolInfo::RESPAWN_PACKET;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function decode(){
|
||||||
|
$this->eid = $this->getInt();
|
||||||
|
$this->x = $this->getFloat();
|
||||||
|
$this->y = $this->getFloat();
|
||||||
|
$this->z = $this->getFloat();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function encode(){
|
||||||
|
$this->reset();
|
||||||
|
$this->putInt($this->eid);
|
||||||
|
$this->putFloat($this->x);
|
||||||
|
$this->putFloat($this->y);
|
||||||
|
$this->putFloat($this->z);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
40
src/network/protocol/packet/RotateHeadPacket.php
Normal file
40
src/network/protocol/packet/RotateHeadPacket.php
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* ____ _ _ __ __ _ __ __ ____
|
||||||
|
* | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
|
||||||
|
* | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
|
||||||
|
* | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
|
||||||
|
* |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Lesser General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* @author PocketMine Team
|
||||||
|
* @link http://www.pocketmine.net/
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
class RotateHeadPacket extends RakNetDataPacket{
|
||||||
|
public $eid;
|
||||||
|
public $yaw;
|
||||||
|
|
||||||
|
public function pid(){
|
||||||
|
return ProtocolInfo::ROTATE_HEAD_PACKET;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function decode(){
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public function encode(){
|
||||||
|
$this->reset();
|
||||||
|
$this->putInt($this->eid);
|
||||||
|
$this->putByte($this->yaw);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
61
src/network/protocol/packet/SendInventoryPacket.php
Normal file
61
src/network/protocol/packet/SendInventoryPacket.php
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* ____ _ _ __ __ _ __ __ ____
|
||||||
|
* | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
|
||||||
|
* | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
|
||||||
|
* | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
|
||||||
|
* |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Lesser General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* @author PocketMine Team
|
||||||
|
* @link http://www.pocketmine.net/
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
class SendInventoryPacket extends RakNetDataPacket{
|
||||||
|
public $eid;
|
||||||
|
public $windowid;
|
||||||
|
public $slots = array();
|
||||||
|
public $armor = array();
|
||||||
|
|
||||||
|
public function pid(){
|
||||||
|
return ProtocolInfo::SEND_INVENTORY_PACKET;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function decode(){
|
||||||
|
$this->eid = $this->getInt();
|
||||||
|
$this->windowid = $this->getByte();
|
||||||
|
$count = $this->getShort();
|
||||||
|
for($s = 0; $s < $count and !$this->feof(); ++$s){
|
||||||
|
$this->slots[$s] = $this->getSlot();
|
||||||
|
}
|
||||||
|
if($this->windowid === 1){ //Armir is sent
|
||||||
|
for($s = 0; $s < 4; ++$s){
|
||||||
|
$this->armor[$s] = $this->getSlot();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function encode(){
|
||||||
|
$this->reset();
|
||||||
|
$this->putInt($this->eid);
|
||||||
|
$this->putByte($this->windowid);
|
||||||
|
$this->putShort(count($this->slots));
|
||||||
|
foreach($this->slots as $slot){
|
||||||
|
$this->putSlot($slot);
|
||||||
|
}
|
||||||
|
if($this->windowid === 1 and count($this->armor) === 4){
|
||||||
|
for($s = 0; $s < 4; ++$s){
|
||||||
|
$this->putSlot($this->armor[$s]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
57
src/network/protocol/packet/ServerHandshakePacket.php
Normal file
57
src/network/protocol/packet/ServerHandshakePacket.php
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* ____ _ _ __ __ _ __ __ ____
|
||||||
|
* | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
|
||||||
|
* | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
|
||||||
|
* | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
|
||||||
|
* |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Lesser General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* @author PocketMine Team
|
||||||
|
* @link http://www.pocketmine.net/
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
class ServerHandshakePacket extends RakNetDataPacket{
|
||||||
|
public $port;
|
||||||
|
public $session;
|
||||||
|
public $session2;
|
||||||
|
|
||||||
|
public function pid(){
|
||||||
|
return ProtocolInfo::SERVER_HANDSHAKE_PACKET;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function decode(){
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public function encode(){
|
||||||
|
$this->reset();
|
||||||
|
$this->put("\x04\x3f\x57\xfe"); //cookie
|
||||||
|
$this->put("\xcd"); //Security flags
|
||||||
|
$this->putShort($this->port);
|
||||||
|
$this->putDataArray(array(
|
||||||
|
"\xf5\xff\xff\xf5",
|
||||||
|
"\xff\xff\xff\xff",
|
||||||
|
"\xff\xff\xff\xff",
|
||||||
|
"\xff\xff\xff\xff",
|
||||||
|
"\xff\xff\xff\xff",
|
||||||
|
"\xff\xff\xff\xff",
|
||||||
|
"\xff\xff\xff\xff",
|
||||||
|
"\xff\xff\xff\xff",
|
||||||
|
"\xff\xff\xff\xff",
|
||||||
|
"\xff\xff\xff\xff",
|
||||||
|
));
|
||||||
|
$this->put("\x00\x00");
|
||||||
|
$this->putLong($this->session);
|
||||||
|
$this->putLong($this->session2);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
40
src/network/protocol/packet/SetEntityDataPacket.php
Normal file
40
src/network/protocol/packet/SetEntityDataPacket.php
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* ____ _ _ __ __ _ __ __ ____
|
||||||
|
* | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
|
||||||
|
* | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
|
||||||
|
* | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
|
||||||
|
* |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Lesser General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* @author PocketMine Team
|
||||||
|
* @link http://www.pocketmine.net/
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
class SetEntityDataPacket extends RakNetDataPacket{
|
||||||
|
public $eid;
|
||||||
|
public $metadata;
|
||||||
|
|
||||||
|
public function pid(){
|
||||||
|
return ProtocolInfo::SET_ENTITY_DATA_PACKET;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function decode(){
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public function encode(){
|
||||||
|
$this->reset();
|
||||||
|
$this->putInt($this->eid);
|
||||||
|
$this->put(Utils::writeMetadata($this->metadata));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
44
src/network/protocol/packet/SetEntityMotionPacket.php
Normal file
44
src/network/protocol/packet/SetEntityMotionPacket.php
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* ____ _ _ __ __ _ __ __ ____
|
||||||
|
* | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
|
||||||
|
* | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
|
||||||
|
* | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
|
||||||
|
* |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Lesser General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* @author PocketMine Team
|
||||||
|
* @link http://www.pocketmine.net/
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
class SetEntityMotionPacket extends RakNetDataPacket{
|
||||||
|
public $eid;
|
||||||
|
public $speedX;
|
||||||
|
public $speedY;
|
||||||
|
public $speedZ;
|
||||||
|
|
||||||
|
public function pid(){
|
||||||
|
return ProtocolInfo::SET_ENTITY_MOTION_PACKET;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function decode(){
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public function encode(){
|
||||||
|
$this->reset();
|
||||||
|
$this->putInt($this->eid);
|
||||||
|
$this->putShort($this->speedX);
|
||||||
|
$this->putShort($this->speedY);
|
||||||
|
$this->putShort($this->speedZ);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
38
src/network/protocol/packet/SetHealthPacket.php
Normal file
38
src/network/protocol/packet/SetHealthPacket.php
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* ____ _ _ __ __ _ __ __ ____
|
||||||
|
* | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
|
||||||
|
* | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
|
||||||
|
* | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
|
||||||
|
* |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Lesser General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* @author PocketMine Team
|
||||||
|
* @link http://www.pocketmine.net/
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
class SetHealthPacket extends RakNetDataPacket{
|
||||||
|
public $health;
|
||||||
|
|
||||||
|
public function pid(){
|
||||||
|
return ProtocolInfo::SET_HEALTH_PACKET;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function decode(){
|
||||||
|
$this->health = $this->getByte();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function encode(){
|
||||||
|
$this->reset();
|
||||||
|
$this->putByte($this->health);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
41
src/network/protocol/packet/SetSpawnPositionPacket.php
Normal file
41
src/network/protocol/packet/SetSpawnPositionPacket.php
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* ____ _ _ __ __ _ __ __ ____
|
||||||
|
* | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
|
||||||
|
* | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
|
||||||
|
* | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
|
||||||
|
* |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Lesser General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* @author PocketMine Team
|
||||||
|
* @link http://www.pocketmine.net/
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
class SetSpawnPositionPacket extends RakNetDataPacket{
|
||||||
|
public $x;
|
||||||
|
public $z;
|
||||||
|
public $y;
|
||||||
|
|
||||||
|
public function pid(){
|
||||||
|
return ProtocolInfo::SET_SPAWN_POSITION_PACKET;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function decode(){
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public function encode(){
|
||||||
|
$this->putInt($this->x);
|
||||||
|
$this->putInt($this->z);
|
||||||
|
$this->putByte($this->y);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
40
src/network/protocol/packet/SetTimePacket.php
Normal file
40
src/network/protocol/packet/SetTimePacket.php
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* ____ _ _ __ __ _ __ __ ____
|
||||||
|
* | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
|
||||||
|
* | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
|
||||||
|
* | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
|
||||||
|
* |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Lesser General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* @author PocketMine Team
|
||||||
|
* @link http://www.pocketmine.net/
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
class SetTimePacket extends RakNetDataPacket{
|
||||||
|
public $time;
|
||||||
|
public $started = true;
|
||||||
|
|
||||||
|
public function pid(){
|
||||||
|
return ProtocolInfo::SET_TIME_PACKET;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function decode(){
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public function encode(){
|
||||||
|
$this->reset();
|
||||||
|
$this->putInt($this->time);
|
||||||
|
$this->putByte($this->started == true ? 0x80:0x00);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
50
src/network/protocol/packet/StartGamePacket.php
Normal file
50
src/network/protocol/packet/StartGamePacket.php
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* ____ _ _ __ __ _ __ __ ____
|
||||||
|
* | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
|
||||||
|
* | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
|
||||||
|
* | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
|
||||||
|
* |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Lesser General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* @author PocketMine Team
|
||||||
|
* @link http://www.pocketmine.net/
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
class StartGamePacket extends RakNetDataPacket{
|
||||||
|
public $seed;
|
||||||
|
public $generator;
|
||||||
|
public $gamemode;
|
||||||
|
public $eid;
|
||||||
|
public $x;
|
||||||
|
public $y;
|
||||||
|
public $z;
|
||||||
|
|
||||||
|
public function pid(){
|
||||||
|
return ProtocolInfo::START_GAME_PACKET;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function decode(){
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public function encode(){
|
||||||
|
$this->reset();
|
||||||
|
$this->putInt($this->seed);
|
||||||
|
$this->putInt($this->generator);
|
||||||
|
$this->putInt($this->gamemode);
|
||||||
|
$this->putInt($this->eid);
|
||||||
|
$this->putFloat($this->x);
|
||||||
|
$this->putFloat($this->y);
|
||||||
|
$this->putFloat($this->z);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
40
src/network/protocol/packet/TakeItemEntity.php
Normal file
40
src/network/protocol/packet/TakeItemEntity.php
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* ____ _ _ __ __ _ __ __ ____
|
||||||
|
* | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
|
||||||
|
* | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
|
||||||
|
* | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
|
||||||
|
* |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Lesser General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* @author PocketMine Team
|
||||||
|
* @link http://www.pocketmine.net/
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
class TakeItemEntityPacket extends RakNetDataPacket{
|
||||||
|
public $target;
|
||||||
|
public $eid;
|
||||||
|
|
||||||
|
public function pid(){
|
||||||
|
return ProtocolInfo::TAKE_ITEM_ENTITY_PACKET;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function decode(){
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public function encode(){
|
||||||
|
$this->reset();
|
||||||
|
$this->putInt($this->target);
|
||||||
|
$this->putInt($this->eid);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
46
src/network/protocol/packet/TileEventPacket.php
Normal file
46
src/network/protocol/packet/TileEventPacket.php
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* ____ _ _ __ __ _ __ __ ____
|
||||||
|
* | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
|
||||||
|
* | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
|
||||||
|
* | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
|
||||||
|
* |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Lesser General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* @author PocketMine Team
|
||||||
|
* @link http://www.pocketmine.net/
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
class TileEventPacket extends RakNetDataPacket{
|
||||||
|
public $x;
|
||||||
|
public $y;
|
||||||
|
public $z;
|
||||||
|
public $case1;
|
||||||
|
public $case2;
|
||||||
|
|
||||||
|
public function pid(){
|
||||||
|
return ProtocolInfo::TILE_EVENT_PACKET;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function decode(){
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public function encode(){
|
||||||
|
$this->reset();
|
||||||
|
$this->putInt($this->x);
|
||||||
|
$this->putInt($this->y);
|
||||||
|
$this->putInt($this->z);
|
||||||
|
$this->putInt($this->case1);
|
||||||
|
$this->putInt($this->case2);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
37
src/network/protocol/packet/UnknownPacket.php
Normal file
37
src/network/protocol/packet/UnknownPacket.php
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* ____ _ _ __ __ _ __ __ ____
|
||||||
|
* | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
|
||||||
|
* | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
|
||||||
|
* | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
|
||||||
|
* |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Lesser General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* @author PocketMine Team
|
||||||
|
* @link http://www.pocketmine.net/
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
class UnknownPacket extends RakNetDataPacket{
|
||||||
|
public $packetID = -1;
|
||||||
|
|
||||||
|
public function pid(){
|
||||||
|
return $this->packetID;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function decode(){
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public function encode(){
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
45
src/network/protocol/packet/UpdateBlockPacket.php
Normal file
45
src/network/protocol/packet/UpdateBlockPacket.php
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* ____ _ _ __ __ _ __ __ ____
|
||||||
|
* | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
|
||||||
|
* | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
|
||||||
|
* | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
|
||||||
|
* |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Lesser General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* @author PocketMine Team
|
||||||
|
* @link http://www.pocketmine.net/
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
class UpdateBlockPacket extends RakNetDataPacket{
|
||||||
|
public $x;
|
||||||
|
public $z;
|
||||||
|
public $y;
|
||||||
|
public $block;
|
||||||
|
public $meta;
|
||||||
|
|
||||||
|
public function pid(){
|
||||||
|
return ProtocolInfo::UPDATE_BLOCK_PACKET;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function decode(){
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public function encode(){
|
||||||
|
$this->putInt($this->x);
|
||||||
|
$this->putInt($this->z);
|
||||||
|
$this->putByte($this->y);
|
||||||
|
$this->putByte($this->block);
|
||||||
|
$this->putByte($this->meta);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
61
src/network/protocol/packet/UseItemPacket.php
Normal file
61
src/network/protocol/packet/UseItemPacket.php
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* ____ _ _ __ __ _ __ __ ____
|
||||||
|
* | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
|
||||||
|
* | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
|
||||||
|
* | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
|
||||||
|
* |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Lesser General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* @author PocketMine Team
|
||||||
|
* @link http://www.pocketmine.net/
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
class UseItemPacket extends RakNetDataPacket{
|
||||||
|
public $x;
|
||||||
|
public $y;
|
||||||
|
public $z;
|
||||||
|
public $face;
|
||||||
|
public $item;
|
||||||
|
public $meta;
|
||||||
|
public $eid;
|
||||||
|
public $fx;
|
||||||
|
public $fy;
|
||||||
|
public $fz;
|
||||||
|
public $posX;
|
||||||
|
public $posY;
|
||||||
|
public $posZ;
|
||||||
|
|
||||||
|
public function pid(){
|
||||||
|
return ProtocolInfo::USE_ITEM_PACKET;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function decode(){
|
||||||
|
$this->x = $this->getInt();
|
||||||
|
$this->y = $this->getInt();
|
||||||
|
$this->z = $this->getInt();
|
||||||
|
$this->face = $this->getInt();
|
||||||
|
$this->item = $this->getShort();
|
||||||
|
$this->meta = $this->getShort();
|
||||||
|
$this->eid = $this->getInt();
|
||||||
|
$this->fx = $this->getFloat();
|
||||||
|
$this->fy = $this->getFloat();
|
||||||
|
$this->fz = $this->getFloat();
|
||||||
|
$this->posX = $this->getFloat();
|
||||||
|
$this->posY = $this->getFloat();
|
||||||
|
$this->posZ = $this->getFloat();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function encode(){
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -1,343 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* ____ _ _ __ __ _ __ __ ____
|
|
||||||
* | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
|
|
||||||
* | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
|
|
||||||
* | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
|
|
||||||
* |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU Lesser General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* @author PocketMine Team
|
|
||||||
* @link http://www.pocketmine.net/
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
class Packet{
|
|
||||||
private $struct;
|
|
||||||
protected $pid, $packet;
|
|
||||||
public $data, $raw;
|
|
||||||
|
|
||||||
function __construct($pid, $struct, $data = ""){
|
|
||||||
$this->pid = $pid;
|
|
||||||
$this->offset = 1;
|
|
||||||
$this->raw = $data;
|
|
||||||
$this->data = array();
|
|
||||||
if($data === ""){
|
|
||||||
$this->addRaw(chr($pid));
|
|
||||||
}
|
|
||||||
$this->struct = $struct;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function create($raw = false){
|
|
||||||
foreach($this->struct as $field => $type){
|
|
||||||
if(!isset($this->data[$field])){
|
|
||||||
$this->data[$field] = "";
|
|
||||||
}
|
|
||||||
if($raw === true){
|
|
||||||
$this->addRaw($this->data[$field]);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
switch($type){
|
|
||||||
case "special1":
|
|
||||||
switch($this->pid){
|
|
||||||
case 0x99:
|
|
||||||
if($this->data[0] >= 2){
|
|
||||||
$this->addRaw(Utils::writeShort($this->data[1]["id"]));
|
|
||||||
$this->addRaw(Utils::writeShort($this->data[1]["index"]));
|
|
||||||
if($this->data[0] === 2){
|
|
||||||
$this->addRaw(Utils::writeShort($this->data[1]["count"]));
|
|
||||||
$this->addRaw(Utils::writeShort(strlen($this->data[1]["data"])).$this->data[1]["data"]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 0xc0:
|
|
||||||
case 0xa0:
|
|
||||||
$payload = "";
|
|
||||||
$records = 0;
|
|
||||||
$pointer = 0;
|
|
||||||
sort($this->data[$field], SORT_NUMERIC);
|
|
||||||
$max = count($this->data[$field]);
|
|
||||||
while($pointer < $max){
|
|
||||||
$type = true;
|
|
||||||
$curr = $start = $this->data[$field][$pointer];
|
|
||||||
for($i = $start + 1; $i < $max; ++$i){
|
|
||||||
$n = $this->data[$field][$i];
|
|
||||||
if(($n - $curr) === 1){
|
|
||||||
$curr = $end = $n;
|
|
||||||
$type = false;
|
|
||||||
$pointer = $i + 1;
|
|
||||||
}else{
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
++$pointer;
|
|
||||||
if($type === false){
|
|
||||||
$payload .= Utils::writeBool(false);
|
|
||||||
$payload .= strrev(Utils::writeTriad($start));
|
|
||||||
$payload .= strrev(Utils::writeTriad($end));
|
|
||||||
}else{
|
|
||||||
$payload .= Utils::writeBool(true);
|
|
||||||
$payload .= strrev(Utils::writeTriad($start));
|
|
||||||
}
|
|
||||||
++$records;
|
|
||||||
}
|
|
||||||
$this->addRaw(Utils::writeShort($records) . $payload);
|
|
||||||
break;
|
|
||||||
case 0x05:
|
|
||||||
$this->addRaw($this->data[$field]);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case "customData":
|
|
||||||
$this->addRaw(chr($this->data[1]));
|
|
||||||
if($this->data[2]["id"] === false){
|
|
||||||
$this->addRaw($this->data[2]["raw"]);
|
|
||||||
}else{
|
|
||||||
switch($this->data[1]){
|
|
||||||
case 0x40:
|
|
||||||
$reply = new CustomPacketHandler($this->data[2]["id"], "", $this->data[2], true);
|
|
||||||
$this->addRaw(Utils::writeShort((strlen($reply->raw) + 1) << 3));
|
|
||||||
$this->addRaw(strrev(Utils::writeTriad($this->data[2]["count"])));
|
|
||||||
$this->addRaw(chr($this->data[2]["id"]));
|
|
||||||
$this->addRaw($reply->raw);
|
|
||||||
break;
|
|
||||||
case 0x00:
|
|
||||||
$raw = new CustomPacketHandler($this->data[2]["id"], "", $this->data[2], true);
|
|
||||||
$raw = $raw->raw;
|
|
||||||
$this->addRaw(Utils::writeShort((strlen($raw) + 1) << 3));
|
|
||||||
$this->addRaw(chr($this->data[2]["id"]));
|
|
||||||
$this->addRaw($raw);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
|
||||||
case "magic":
|
|
||||||
$this->addRaw(RAKNET_MAGIC);
|
|
||||||
break;
|
|
||||||
case "float":
|
|
||||||
$this->addRaw(Utils::writeFloat($this->data[$field]));
|
|
||||||
break;
|
|
||||||
case "triad":
|
|
||||||
$this->addRaw(Utils::writeTriad($this->data[$field]));
|
|
||||||
break;
|
|
||||||
case "itriad":
|
|
||||||
$this->addRaw(strrev(Utils::writeTriad($this->data[$field])));
|
|
||||||
break;
|
|
||||||
case "int":
|
|
||||||
$this->addRaw(Utils::writeInt($this->data[$field]));
|
|
||||||
break;
|
|
||||||
case "double":
|
|
||||||
$this->addRaw(Utils::writeDouble($this->data[$field]));
|
|
||||||
break;
|
|
||||||
case "long":
|
|
||||||
$this->addRaw(Utils::writeLong($this->data[$field]));
|
|
||||||
break;
|
|
||||||
case "bool":
|
|
||||||
case "boolean":
|
|
||||||
$this->addRaw(Utils::writeBool($this->data[$field]));
|
|
||||||
break;
|
|
||||||
case "ubyte":
|
|
||||||
case "byte":
|
|
||||||
$this->addRaw(Utils::writeByte($this->data[$field]));
|
|
||||||
break;
|
|
||||||
case "short":
|
|
||||||
$this->addRaw(Utils::writeShort($this->data[$field]));
|
|
||||||
break;
|
|
||||||
case "string":
|
|
||||||
$this->addRaw(Utils::writeShort(strlen($this->data[$field])));
|
|
||||||
$this->addRaw($this->data[$field]);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
$this->addRaw(Utils::writeByte($this->data[$field]));
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private function get($len = true){
|
|
||||||
if($len === true){
|
|
||||||
$data = substr($this->raw, $this->offset);
|
|
||||||
$this->offset = strlen($this->raw);
|
|
||||||
return $data;
|
|
||||||
}
|
|
||||||
$data = substr($this->raw, $this->offset, $len);
|
|
||||||
$this->offset += $len;
|
|
||||||
return $data;
|
|
||||||
}
|
|
||||||
|
|
||||||
private function feof(){
|
|
||||||
return !isset($this->raw{$this->offset});
|
|
||||||
}
|
|
||||||
|
|
||||||
protected function addRaw($str){
|
|
||||||
$this->raw .= $str;
|
|
||||||
return $str;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function parse(){
|
|
||||||
foreach($this->struct as $field => $type){
|
|
||||||
switch($type){
|
|
||||||
case "special1":
|
|
||||||
switch($this->pid){
|
|
||||||
case 0x07:
|
|
||||||
$this->data[] = $this->get(5);
|
|
||||||
break;
|
|
||||||
case 0x99:
|
|
||||||
if($this->data[0] >= 2){ //
|
|
||||||
$messageID = Utils::readShort($this->get(2), false);
|
|
||||||
$messageIndex = Utils::readShort($this->get(2), false);
|
|
||||||
$this->data[1] = array("id" => $messageID, "index" => $messageIndex);
|
|
||||||
if($this->data[0] === 2){
|
|
||||||
$this->data[1]["count"] = Utils::readShort($this->get(2), false);
|
|
||||||
$dataLength = Utils::readShort($this->get(2), false);
|
|
||||||
$this->data[1]["data"] = $this->get($dataLength);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 0xc0:
|
|
||||||
case 0xa0:
|
|
||||||
$cnt = Utils::readShort($this->get(2), false);
|
|
||||||
$this->data[$field] = array();
|
|
||||||
for($i = 0; $i < $cnt and !$this->feof(); ++$i){
|
|
||||||
if(Utils::readBool($this->get(1)) === false){
|
|
||||||
$start = Utils::readTriad(strrev($this->get(3)));
|
|
||||||
$end = min(Utils::readTriad(strrev($this->get(3))), $start + 4096);
|
|
||||||
for($c = $start; $c <= $end; ++$c){
|
|
||||||
$this->data[$field][] = $c;
|
|
||||||
}
|
|
||||||
}else{
|
|
||||||
$this->data[$field][] = Utils::readTriad(strrev($this->get(3)));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 0x05:
|
|
||||||
$this->data[] = $this->get(true);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case "customData":
|
|
||||||
$raw = $this->get(true);
|
|
||||||
$len = strlen($raw);
|
|
||||||
$offset = 0;
|
|
||||||
$this->data["packets"] = array();
|
|
||||||
while($len > $offset){
|
|
||||||
$pid = ord($raw{$offset});
|
|
||||||
++$offset;
|
|
||||||
$reliability = ($pid & 0b11100000) >> 5;
|
|
||||||
$hasSplit = ($pid & 0b00010000) >> 4;
|
|
||||||
$length = Utils::readShort(substr($raw, $offset, 2), false);
|
|
||||||
$offset += 2;
|
|
||||||
if($reliability === 2
|
|
||||||
or $reliability === 3
|
|
||||||
or $reliability === 4
|
|
||||||
or $reliability === 6
|
|
||||||
or $reliability === 7){
|
|
||||||
$messageIndex = Utils::readTriad(strrev(substr($raw, $offset, 3)));
|
|
||||||
$offset += 3;
|
|
||||||
}else{
|
|
||||||
$messageIndex = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if($reliability === 1
|
|
||||||
or $reliability === 3
|
|
||||||
or $reliability === 4
|
|
||||||
or $reliability === 7){
|
|
||||||
$orderIndex = Utils::readTriad(strrev(substr($raw, $offset, 3)));
|
|
||||||
$offset += 3;
|
|
||||||
$orderChannel = ord($raw{$offset}); //5 bits, 32 values
|
|
||||||
++$offset;
|
|
||||||
}else{
|
|
||||||
$orderIndex = 0;
|
|
||||||
$orderChannel = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if($hasSplit === 1){
|
|
||||||
$splitCount = Utils::readInt(substr($raw, $offset, 4));
|
|
||||||
$offset += 4;
|
|
||||||
$splitID = Utils::readShort(substr($raw, $offset, 2));
|
|
||||||
$offset += 2;
|
|
||||||
$splitIndex = Utils::readInt(substr($raw, $offset, 4));
|
|
||||||
$offset += 4;
|
|
||||||
//error! no split packets allowed!
|
|
||||||
break;
|
|
||||||
}else{
|
|
||||||
$splitCount = 0;
|
|
||||||
$splitID = 0;
|
|
||||||
$splitIndex = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if($length == 0
|
|
||||||
or $orderChannel >= 32
|
|
||||||
or ($hasSplit === 1 and $splitIndex >= $splitCount)){
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
$ln = ceil($length / 8);
|
|
||||||
$id = ord($raw{$offset});
|
|
||||||
++$offset;
|
|
||||||
$pak = substr($raw, $offset, $ln - 1);
|
|
||||||
$offset += $ln - 1;
|
|
||||||
$pk = new CustomPacketHandler($id, $pak);
|
|
||||||
$pk->data["length"] = $ln;
|
|
||||||
$pk->data["id"] = $id;
|
|
||||||
$pk->data["counter"] = $messageIndex;
|
|
||||||
$pk->data["packetName"] = $pk->name;
|
|
||||||
$this->data["packets"][] = array($pid, $pk->data, $pak);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case "magic":
|
|
||||||
$this->data[] = $this->get(16);
|
|
||||||
break;
|
|
||||||
case "triad":
|
|
||||||
$this->data[] = Utils::readTriad($this->get(3));
|
|
||||||
break;
|
|
||||||
case "itriad":
|
|
||||||
$this->data[] = Utils::readTriad(strrev($this->get(3)));
|
|
||||||
break;
|
|
||||||
case "int":
|
|
||||||
$this->data[] = Utils::readInt($this->get(4));
|
|
||||||
break;
|
|
||||||
case "string":
|
|
||||||
$this->data[] = $this->get(Utils::readShort($this->get(2)));
|
|
||||||
break;
|
|
||||||
case "long":
|
|
||||||
$this->data[] = Utils::readLong($this->get(8));
|
|
||||||
break;
|
|
||||||
case "byte":
|
|
||||||
$this->data[] = Utils::readByte($this->get(1));
|
|
||||||
break;
|
|
||||||
case "ubyte":
|
|
||||||
$this->data[] = ord($this->get(1));
|
|
||||||
break;
|
|
||||||
case "float":
|
|
||||||
$this->data[] = Utils::readFloat($this->get(4));
|
|
||||||
break;
|
|
||||||
case "double":
|
|
||||||
$this->data[] = Utils::readDouble($this->get(8));
|
|
||||||
break;
|
|
||||||
case "ushort":
|
|
||||||
$this->data[] = Utils::readShort($this->get(2), false);
|
|
||||||
break;
|
|
||||||
case "short":
|
|
||||||
$this->data[] = Utils::readShort($this->get(2));
|
|
||||||
break;
|
|
||||||
case "bool":
|
|
||||||
case "boolean":
|
|
||||||
$this->data[] = Utils::readBool($this->get(1));
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
161
src/network/raknet/RakNetDataPacket.php
Normal file
161
src/network/raknet/RakNetDataPacket.php
Normal file
@ -0,0 +1,161 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* ____ _ _ __ __ _ __ __ ____
|
||||||
|
* | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
|
||||||
|
* | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
|
||||||
|
* | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
|
||||||
|
* |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Lesser General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* @author PocketMine Team
|
||||||
|
* @link http://www.pocketmine.net/
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
abstract class RakNetDataPacket extends stdClass{
|
||||||
|
private $offset = 0;
|
||||||
|
private $buffer = b"";
|
||||||
|
|
||||||
|
public $reliability = 0;
|
||||||
|
public $hasSplit = false;
|
||||||
|
public $messageIndex;
|
||||||
|
public $orderIndex;
|
||||||
|
public $orderChannel;
|
||||||
|
public $splitCount;
|
||||||
|
public $splitID;
|
||||||
|
public $splitIndex;
|
||||||
|
|
||||||
|
|
||||||
|
abstract public function pid();
|
||||||
|
|
||||||
|
abstract public function encode();
|
||||||
|
|
||||||
|
abstract public function decode();
|
||||||
|
|
||||||
|
protected function reset(){
|
||||||
|
$this->setBuffer();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setBuffer($buffer = ""){
|
||||||
|
$this->buffer = $buffer;
|
||||||
|
$this->offset = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getBuffer(){
|
||||||
|
return $this->buffer;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function get($len){
|
||||||
|
if($len <= 0){
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
if($len === true){
|
||||||
|
return substr($this->buffer, $this->offset);
|
||||||
|
}
|
||||||
|
$this->offset += $len;
|
||||||
|
return substr($this->buffer, $this->offset - $len, $len);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function put($str){
|
||||||
|
$this->buffer .= $str;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function getLong($unsigned = false){
|
||||||
|
return Utils::readLong($this->get(8), $unsigned);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function putLong($v){
|
||||||
|
$this->buffer .= Utils::writeLong($v);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function getInt($unsigned = false){
|
||||||
|
return Utils::readInt($this->get(4), $unsigned);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function putInt($v){
|
||||||
|
$this->buffer .= Utils::writeInt($v);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function getShort($unsigned = false){
|
||||||
|
return Utils::readShort($this->get(2), $unsigned);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function putShort($v){
|
||||||
|
$this->buffer .= Utils::writeShort($v);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function getTriad(){
|
||||||
|
return Utils::readTriad($this->get(3));
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function putTriad($v){
|
||||||
|
$this->buffer .= Utils::putTriad($v);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function getLTriad(){
|
||||||
|
return Utils::readTriad(strrev($this->get(3)));
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function putLTriad($v){
|
||||||
|
$this->buffer .= strrev(Utils::putTriad($v));
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function getByte(){
|
||||||
|
return ord($this->get(1));
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function putByte($v){
|
||||||
|
$this->buffer .= chr($v);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function getDataArray($len = 10){
|
||||||
|
$data = array();
|
||||||
|
for($i = 1; $i <= $len and !$this->feof(); ++$i){
|
||||||
|
$data[] = $this->get($this->getTriad());
|
||||||
|
}
|
||||||
|
return $data;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function putDataArray(array $data = array()){
|
||||||
|
foreach($data as $v){
|
||||||
|
$this->putTriad(strlen($v));
|
||||||
|
$this->put($v);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function getSlot(){
|
||||||
|
$id = $this->getShort();
|
||||||
|
$cnt = $this->getByte();
|
||||||
|
return BlockAPI::getItem(
|
||||||
|
$id,
|
||||||
|
$this->getShort(),
|
||||||
|
$cnt
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function putSlot(Item $item){
|
||||||
|
$this->putShort($item->getID());
|
||||||
|
$this->putByte($item->count);
|
||||||
|
$this->putShort($item->getMetadata());
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function getString(){
|
||||||
|
return $this->get($this->getShort(true));
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function putString($v){
|
||||||
|
$this->putShort(strlen($v));
|
||||||
|
$this->put($v);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function feof(){
|
||||||
|
return !isset($this->buffer{$this->offset});
|
||||||
|
}
|
||||||
|
}
|
@ -92,162 +92,3 @@ class RakNetInfo{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class Protocol{
|
|
||||||
public static $raknet = array(
|
|
||||||
0x01 => array(
|
|
||||||
"long", //Ping ID
|
|
||||||
"magic",
|
|
||||||
),
|
|
||||||
0x02 => array(
|
|
||||||
"long", //Ping ID
|
|
||||||
"magic",
|
|
||||||
),
|
|
||||||
|
|
||||||
0x05 => array(
|
|
||||||
"magic",
|
|
||||||
"byte", //Protocol Version
|
|
||||||
"special1", //MTU Size Null Lenght
|
|
||||||
),
|
|
||||||
|
|
||||||
0x06 => array(
|
|
||||||
"magic",
|
|
||||||
"long", //Server GUID
|
|
||||||
"byte", //Server Security
|
|
||||||
"short", //MTU Size
|
|
||||||
),
|
|
||||||
|
|
||||||
0x07 => array(
|
|
||||||
"magic",
|
|
||||||
"special1", //Security Cookie
|
|
||||||
"short", //Server UDP Port
|
|
||||||
"short", //MTU Size
|
|
||||||
"long", //Client GUID
|
|
||||||
),
|
|
||||||
|
|
||||||
0x08 => array(
|
|
||||||
"magic",
|
|
||||||
"long", //Server GUID
|
|
||||||
"short", //Client UDP Port
|
|
||||||
"short", //MTU Size
|
|
||||||
"byte", //Security
|
|
||||||
),
|
|
||||||
|
|
||||||
0x1a => array(
|
|
||||||
"byte", //Server Version
|
|
||||||
"magic",
|
|
||||||
"long", //Server GUID
|
|
||||||
),
|
|
||||||
|
|
||||||
0x1c => array(
|
|
||||||
"long", //Ping ID
|
|
||||||
"long", //Server GUID
|
|
||||||
"magic",
|
|
||||||
"string", //Data
|
|
||||||
),
|
|
||||||
|
|
||||||
0x1d => array(
|
|
||||||
"long", //Ping ID
|
|
||||||
"long", //Server GUID
|
|
||||||
"magic",
|
|
||||||
"string", //Data
|
|
||||||
),
|
|
||||||
|
|
||||||
0x80 => array(
|
|
||||||
"itriad",
|
|
||||||
"customData",
|
|
||||||
),
|
|
||||||
|
|
||||||
|
|
||||||
0x81 => array(
|
|
||||||
"itriad",
|
|
||||||
"customData",
|
|
||||||
),
|
|
||||||
|
|
||||||
0x82 => array(
|
|
||||||
"itriad",
|
|
||||||
"customData",
|
|
||||||
),
|
|
||||||
|
|
||||||
0x83 => array(
|
|
||||||
"itriad",
|
|
||||||
"customData",
|
|
||||||
),
|
|
||||||
|
|
||||||
0x84 => array(
|
|
||||||
"itriad",
|
|
||||||
"customData",
|
|
||||||
),
|
|
||||||
|
|
||||||
0x85 => array(
|
|
||||||
"itriad",
|
|
||||||
"customData",
|
|
||||||
),
|
|
||||||
|
|
||||||
0x86 => array(
|
|
||||||
"itriad",
|
|
||||||
"customData",
|
|
||||||
),
|
|
||||||
|
|
||||||
0x87 => array(
|
|
||||||
"itriad",
|
|
||||||
"customData",
|
|
||||||
),
|
|
||||||
|
|
||||||
0x88 => array(
|
|
||||||
"itriad",
|
|
||||||
"customData",
|
|
||||||
),
|
|
||||||
|
|
||||||
0x89 => array(
|
|
||||||
"itriad",
|
|
||||||
"customData",
|
|
||||||
),
|
|
||||||
|
|
||||||
0x8a => array(
|
|
||||||
"itriad",
|
|
||||||
"customData",
|
|
||||||
),
|
|
||||||
|
|
||||||
0x8b => array(
|
|
||||||
"itriad",
|
|
||||||
"customData",
|
|
||||||
),
|
|
||||||
|
|
||||||
0x8c => array(
|
|
||||||
"itriad",
|
|
||||||
"customData",
|
|
||||||
),
|
|
||||||
|
|
||||||
0x8d => array(
|
|
||||||
"itriad",
|
|
||||||
"customData",
|
|
||||||
),
|
|
||||||
|
|
||||||
0x8e => array(
|
|
||||||
"itriad",
|
|
||||||
"customData",
|
|
||||||
),
|
|
||||||
|
|
||||||
0x8f => array(
|
|
||||||
"itriad",
|
|
||||||
"ubyte",
|
|
||||||
"customData",
|
|
||||||
),
|
|
||||||
|
|
||||||
0x99 => array(
|
|
||||||
"byte",
|
|
||||||
"special1",
|
|
||||||
),
|
|
||||||
|
|
||||||
0xa0 => array(
|
|
||||||
"special1",
|
|
||||||
),
|
|
||||||
|
|
||||||
0xc0 => array(
|
|
||||||
"special1",
|
|
||||||
),
|
|
||||||
|
|
||||||
);
|
|
||||||
|
|
||||||
}
|
|
@ -20,7 +20,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
class RakNetParser{
|
class RakNetParser{
|
||||||
|
private $id = -1;
|
||||||
private $buffer;
|
private $buffer;
|
||||||
private $offset;
|
private $offset;
|
||||||
private $packet;
|
private $packet;
|
||||||
@ -29,12 +29,17 @@ class RakNetParser{
|
|||||||
$this->buffer = $buffer;
|
$this->buffer = $buffer;
|
||||||
$this->offset = 0;
|
$this->offset = 0;
|
||||||
if(strlen($this->buffer) > 0){
|
if(strlen($this->buffer) > 0){
|
||||||
$this->parse(ord($this->get(1)));
|
$this->id = ord($this->get(1));
|
||||||
|
$this->parse();
|
||||||
}else{
|
}else{
|
||||||
$this->packet = false;
|
$this->packet = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function pid(){
|
||||||
|
return (int) $this->pid;
|
||||||
|
}
|
||||||
|
|
||||||
private function get($len){
|
private function get($len){
|
||||||
if($len <= 0){
|
if($len <= 0){
|
||||||
return "";
|
return "";
|
||||||
@ -71,43 +76,43 @@ class RakNetParser{
|
|||||||
return !isset($this->buffer{$this->offset});
|
return !isset($this->buffer{$this->offset});
|
||||||
}
|
}
|
||||||
|
|
||||||
private function parse($packetID){
|
private function parse(){
|
||||||
$this->packet = new RakNetPacket($packetID);
|
$this->packet = new RakNetPacket($this->pid());
|
||||||
$this->packet->length = strlen($this->buffer);
|
$this->packet->length = strlen($this->buffer);
|
||||||
switch($packetID){
|
switch($this->pid()){
|
||||||
case RAKNET_UNCONNECTED_PING:
|
case RakNetInfo::UNCONNECTED_PING:
|
||||||
case RAKNET_UNCONNECTED_PING_OPEN_CONNECTIONS:
|
case RakNetInfo::UNCONNECTED_PING_OPEN_CONNECTIONS:
|
||||||
$this->packet->pingID = $this->getLong();
|
$this->packet->pingID = $this->getLong();
|
||||||
$this->offset += 16; //Magic
|
$this->offset += 16; //Magic
|
||||||
break;
|
break;
|
||||||
case RAKNET_OPEN_CONNECTION_REQUEST_1:
|
case RakNetInfo::OPEN_CONNECTION_REQUEST_1:
|
||||||
$this->offset += 16; //Magic
|
$this->offset += 16; //Magic
|
||||||
$this->packet->structure = $this->getByte();
|
$this->packet->structure = $this->getByte();
|
||||||
$this->packet->MTU = strlen($this->get(true));
|
$this->packet->MTU = strlen($this->get(true));
|
||||||
break;
|
break;
|
||||||
case RAKNET_OPEN_CONNECTION_REQUEST_2:
|
case RakNetInfo::OPEN_CONNECTION_REQUEST_2:
|
||||||
$this->offset += 16; //Magic
|
$this->offset += 16; //Magic
|
||||||
$this->packet->security = $this->get(5);
|
$this->packet->security = $this->get(5);
|
||||||
$this->packet->port = $this->getShort(false);
|
$this->packet->port = $this->getShort(false);
|
||||||
$this->packet->MTU = $this->getShort(false);
|
$this->packet->MTU = $this->getShort(false);
|
||||||
$this->packet->clientGUID = $this->getLong();
|
$this->packet->clientGUID = $this->getLong();
|
||||||
break;
|
break;
|
||||||
case RAKNET_DATA_PACKET_0:
|
case RakNetInfo::DATA_PACKET_0:
|
||||||
case RAKNET_DATA_PACKET_1:
|
case RakNetInfo::DATA_PACKET_1:
|
||||||
case RAKNET_DATA_PACKET_2:
|
case RakNetInfo::DATA_PACKET_2:
|
||||||
case RAKNET_DATA_PACKET_3:
|
case RakNetInfo::DATA_PACKET_3:
|
||||||
case RAKNET_DATA_PACKET_4:
|
case RakNetInfo::DATA_PACKET_4:
|
||||||
case RAKNET_DATA_PACKET_5:
|
case RakNetInfo::DATA_PACKET_5:
|
||||||
case RAKNET_DATA_PACKET_6:
|
case RakNetInfo::DATA_PACKET_6:
|
||||||
case RAKNET_DATA_PACKET_7:
|
case RakNetInfo::DATA_PACKET_7:
|
||||||
case RAKNET_DATA_PACKET_8:
|
case RakNetInfo::DATA_PACKET_8:
|
||||||
case RAKNET_DATA_PACKET_9:
|
case RakNetInfo::DATA_PACKET_9:
|
||||||
case RAKNET_DATA_PACKET_A:
|
case RakNetInfo::DATA_PACKET_A:
|
||||||
case RAKNET_DATA_PACKET_B:
|
case RakNetInfo::DATA_PACKET_B:
|
||||||
case RAKNET_DATA_PACKET_C:
|
case RakNetInfo::DATA_PACKET_C:
|
||||||
case RAKNET_DATA_PACKET_D:
|
case RakNetInfo::DATA_PACKET_D:
|
||||||
case RAKNET_DATA_PACKET_E:
|
case RakNetInfo::DATA_PACKET_E:
|
||||||
case RAKNET_DATA_PACKET_F:
|
case RakNetInfo::DATA_PACKET_F:
|
||||||
$this->seqNumber = $this->getLTriad();
|
$this->seqNumber = $this->getLTriad();
|
||||||
$this->data = array();
|
$this->data = array();
|
||||||
while(!$this->feof()){
|
while(!$this->feof()){
|
||||||
@ -121,52 +126,65 @@ class RakNetParser{
|
|||||||
}
|
}
|
||||||
|
|
||||||
private function parseDataPacket(){
|
private function parseDataPacket(){
|
||||||
$data = new DataPacket;
|
$packetFlags = $this->getByte();
|
||||||
$data->pid = $this->getByte();
|
$reliability = ($packetFlags & 0b11100000) >> 5;
|
||||||
$data->reliability = ($data->pid & 0b11100000) >> 5;
|
$hasSplit = ($packetFlags & 0b00010000) > 0;
|
||||||
$data->hasSplit = ($data->pid & 0b00010000) > 0;
|
$length = (int) ceil($this->getShort() / 8);
|
||||||
$data->length = (int) ceil($this->getShort() / 8);
|
if($reliability === 2
|
||||||
if($data->reliability === 2
|
or $reliability === 3
|
||||||
or $data->reliability === 3
|
or $reliability === 4
|
||||||
or $data->reliability === 4
|
or $reliability === 6
|
||||||
or $data->reliability === 6
|
or $reliability === 7){
|
||||||
or $data->reliability === 7){
|
$messageIndex = $this->getLTriad();
|
||||||
$data->messageIndex = $this->getLTriad();
|
|
||||||
}else{
|
}else{
|
||||||
$data->messageIndex = 0;
|
$messageIndex = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if($reliability === 1
|
if($reliability === 1
|
||||||
or $reliability === 3
|
or $reliability === 3
|
||||||
or $reliability === 4
|
or $reliability === 4
|
||||||
or $reliability === 7){
|
or $reliability === 7){
|
||||||
$data->orderIndex = $this->getLTriad();
|
$orderIndex = $this->getLTriad();
|
||||||
$data->orderChannel = $this->getByte();
|
$orderChannel = $this->getByte();
|
||||||
}else{
|
}else{
|
||||||
$data->orderIndex = 0;
|
$orderIndex = 0;
|
||||||
$data->orderChannel = 0;
|
$orderChannel = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if($data->hasSplit == true){
|
if($hasSplit == true){
|
||||||
$data->splitCount = $this->getInt();
|
$splitCount = $this->getInt();
|
||||||
$data->splitID = $this->getShort();
|
$splitID = $this->getShort();
|
||||||
$data->splitIndex = $this->getInt();
|
$splitIndex = $this->getInt();
|
||||||
//error! no split packets allowed!
|
//error! no split packets allowed!
|
||||||
return false;
|
return false;
|
||||||
}else{
|
}else{
|
||||||
$data->splitCount = 0;
|
$splitCount = 0;
|
||||||
$data->splitID = 0;
|
$splitID = 0;
|
||||||
$data->splitIndex = 0;
|
$splitIndex = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if($data->length <= 0
|
if($length <= 0
|
||||||
or $this->orderChannel >= 32
|
or $orderChannel >= 32
|
||||||
or ($hasSplit === 1 and $splitIndex >= $splitCount)){
|
or ($hasSplit === 1 and $splitIndex >= $splitCount)){
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
$data->id = $this->getByte();
|
$pid = $this->getByte();
|
||||||
$data->raw = $this->get($len - 1);
|
if(isset(ProtocolInfo::$packets[$pid])){
|
||||||
|
$data = new ProtocolInfo::$packets[$pid];
|
||||||
|
}else{
|
||||||
|
$data = new UnknownPacket();
|
||||||
|
$data->packetID = $pid;
|
||||||
|
}
|
||||||
|
$data->reliability = $reliability;
|
||||||
|
$data->hasSplit = $hasSplit == true;
|
||||||
|
$data->messageIndex = $messageIndex;
|
||||||
|
$data->orderIndex = $orderIndex;
|
||||||
|
$data->orderChannel = $orderChannel;
|
||||||
|
$data->splitCount = $splitCount;
|
||||||
|
$data->splitID = $splitID;
|
||||||
|
$data->splitIndex = $splitIndex;
|
||||||
|
$data->setBuffer($this->get($length - 1));
|
||||||
return $data;
|
return $data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user