mirror of
https://github.com/pmmp/PocketMine-MP.git
synced 2025-10-16 19:59:11 +00:00
First step to namespaces
This commit is contained in:
@@ -19,7 +19,10 @@
|
||||
*
|
||||
*/
|
||||
|
||||
class MinecraftInterface{
|
||||
namespace PocketMine\Network;
|
||||
use PocketMine;
|
||||
|
||||
class Handler{
|
||||
public $bandwidth;
|
||||
private $socket;
|
||||
private $packets;
|
||||
@@ -55,7 +58,7 @@ class MinecraftInterface{
|
||||
$packet->ip = $source;
|
||||
$packet->port = $port;
|
||||
$packet->decode();
|
||||
if(EventHandler::callEvent(new PacketReceiveEvent($packet)) === BaseEvent::DENY){
|
||||
if(EventHandler::callEvent(new PacketReceiveEvent($packet)) === Event::DENY){
|
||||
return false;
|
||||
}
|
||||
return $packet;
|
||||
@@ -64,7 +67,7 @@ class MinecraftInterface{
|
||||
$packet->ip = $source;
|
||||
$packet->port = $port;
|
||||
$packet->buffer =& $buffer;
|
||||
if(EventHandler::callEvent(new PacketReceiveEvent($packet)) === BaseEvent::DENY){
|
||||
if(EventHandler::callEvent(new PacketReceiveEvent($packet)) === Event::DENY){
|
||||
return false;
|
||||
}
|
||||
ServerAPI::request()->api->query->handle($packet);
|
||||
@@ -79,7 +82,7 @@ class MinecraftInterface{
|
||||
}
|
||||
|
||||
public function writePacket(Packet $packet){
|
||||
if(EventHandler::callEvent(new PacketSendEvent($packet)) === BaseEvent::DENY){
|
||||
if(EventHandler::callEvent(new PacketSendEvent($packet)) === Event::DENY){
|
||||
return 0;
|
||||
}elseif($packet instanceof RakNetPacket){
|
||||
$packet->encode();
|
@@ -19,7 +19,10 @@
|
||||
*
|
||||
*/
|
||||
|
||||
class Packet extends stdClass{
|
||||
namespace PocketMine\Network;
|
||||
use PocketMine;
|
||||
|
||||
class Packet extends \stdClass{
|
||||
public $ip;
|
||||
public $port;
|
||||
public $buffer;
|
||||
|
@@ -19,7 +19,8 @@
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
namespace PocketMine\Network;
|
||||
use PocketMine;
|
||||
|
||||
class UDPSocket{
|
||||
public $connected, $sock, $server, $port;
|
||||
|
@@ -19,7 +19,10 @@
|
||||
*
|
||||
*/
|
||||
|
||||
abstract class RakNetDataPacket extends stdClass{
|
||||
namespace PocketMine\Network\Protocol;
|
||||
use PocketMine;
|
||||
|
||||
abstract class DataPacket{
|
||||
private $offset = 0;
|
||||
public $buffer = b"";
|
||||
|
||||
@@ -72,52 +75,52 @@ abstract class RakNetDataPacket extends stdClass{
|
||||
}
|
||||
|
||||
protected function getLong($unsigned = false){
|
||||
return Utils::readLong($this->get(8), $unsigned);
|
||||
return Utils\Utils::readLong($this->get(8), $unsigned);
|
||||
}
|
||||
|
||||
protected function putLong($v){
|
||||
$this->buffer .= Utils::writeLong($v);
|
||||
$this->buffer .= Utils\Utils::writeLong($v);
|
||||
}
|
||||
|
||||
protected function getInt(){
|
||||
return Utils::readInt($this->get(4));
|
||||
return Utils\Utils::readInt($this->get(4));
|
||||
}
|
||||
|
||||
protected function putInt($v){
|
||||
$this->buffer .= Utils::writeInt($v);
|
||||
$this->buffer .= Utils\Utils::writeInt($v);
|
||||
}
|
||||
|
||||
protected function getShort($unsigned = false){
|
||||
return Utils::readShort($this->get(2), $unsigned);
|
||||
return Utils\Utils::readShort($this->get(2), $unsigned);
|
||||
}
|
||||
|
||||
protected function putShort($v){
|
||||
$this->buffer .= Utils::writeShort($v);
|
||||
$this->buffer .= Utils\Utils::writeShort($v);
|
||||
}
|
||||
|
||||
protected function getFloat(){
|
||||
return Utils::readFloat($this->get(4));
|
||||
return Utils\Utils::readFloat($this->get(4));
|
||||
}
|
||||
|
||||
protected function putFloat($v){
|
||||
$this->buffer .= Utils::writeFloat($v);
|
||||
$this->buffer .= Utils\Utils::writeFloat($v);
|
||||
}
|
||||
|
||||
protected function getTriad(){
|
||||
return Utils::readTriad($this->get(3));
|
||||
return Utils\Utils::readTriad($this->get(3));
|
||||
}
|
||||
|
||||
protected function putTriad($v){
|
||||
$this->buffer .= Utils::writeTriad($v);
|
||||
$this->buffer .= Utils\Utils::writeTriad($v);
|
||||
}
|
||||
|
||||
|
||||
protected function getLTriad(){
|
||||
return Utils::readTriad(strrev($this->get(3)));
|
||||
return Utils\Utils::readTriad(strrev($this->get(3)));
|
||||
}
|
||||
|
||||
protected function putLTriad($v){
|
||||
$this->buffer .= strrev(Utils::writeTriad($v));
|
||||
$this->buffer .= strrev(Utils\Utils::writeTriad($v));
|
||||
}
|
||||
|
||||
protected function getByte(){
|
@@ -19,8 +19,11 @@
|
||||
*
|
||||
*/
|
||||
|
||||
namespace PocketMine\Network\Protocol;
|
||||
use PocketMine;
|
||||
|
||||
abstract class ProtocolInfo{
|
||||
|
||||
abstract class Info{
|
||||
|
||||
const CURRENT_PROTOCOL = 14;
|
||||
|
||||
@@ -96,8 +99,4 @@ abstract class ProtocolInfo{
|
||||
const ENTITY_DATA_PACKET = 0xb8;
|
||||
//const PLAYER_INPUT_PACKET = 0xb9;
|
||||
|
||||
}
|
||||
|
||||
/***REM_START***/
|
||||
require_once(FILE_PATH . "src/network/raknet/RakNetDataPacket.php");
|
||||
/***REM_END***/
|
||||
}
|
@@ -19,7 +19,10 @@
|
||||
*
|
||||
*/
|
||||
|
||||
class AddEntityPacket extends RakNetDataPacket{
|
||||
namespace PocketMine\Network\Protocol;
|
||||
use PocketMine;
|
||||
|
||||
class AddEntityPacket extends DataPacket{
|
||||
public $eid;
|
||||
public $type;
|
||||
public $x;
|
||||
@@ -31,7 +34,7 @@ class AddEntityPacket extends RakNetDataPacket{
|
||||
public $speedZ;
|
||||
|
||||
public function pid(){
|
||||
return ProtocolInfo::ADD_ENTITY_PACKET;
|
||||
return Info::ADD_ENTITY_PACKET;
|
||||
}
|
||||
|
||||
public function decode(){
|
||||
|
@@ -19,7 +19,10 @@
|
||||
*
|
||||
*/
|
||||
|
||||
class AddItemEntityPacket extends RakNetDataPacket{
|
||||
namespace PocketMine\Network\Protocol;
|
||||
use PocketMine;
|
||||
|
||||
class AddItemEntityPacket extends DataPacket{
|
||||
public $eid;
|
||||
public $item;
|
||||
public $x;
|
||||
@@ -30,7 +33,7 @@ class AddItemEntityPacket extends RakNetDataPacket{
|
||||
public $roll;
|
||||
|
||||
public function pid(){
|
||||
return ProtocolInfo::ADD_ITEM_ENTITY_PACKET;
|
||||
return Info::ADD_ITEM_ENTITY_PACKET;
|
||||
}
|
||||
|
||||
public function decode(){
|
||||
|
@@ -19,7 +19,10 @@
|
||||
*
|
||||
*/
|
||||
|
||||
class AddMobPacket extends RakNetDataPacket{
|
||||
namespace PocketMine\Network\Protocol;
|
||||
use PocketMine;
|
||||
|
||||
class AddMobPacket extends DataPacket{
|
||||
public $eid;
|
||||
public $type;
|
||||
public $x;
|
||||
@@ -30,7 +33,7 @@ class AddMobPacket extends RakNetDataPacket{
|
||||
public $metadata;
|
||||
|
||||
public function pid(){
|
||||
return ProtocolInfo::ADD_MOB_PACKET;
|
||||
return Info::ADD_MOB_PACKET;
|
||||
}
|
||||
|
||||
public function decode(){
|
||||
@@ -46,7 +49,7 @@ class AddMobPacket extends RakNetDataPacket{
|
||||
$this->putFloat($this->z);
|
||||
$this->putByte($this->yaw);
|
||||
$this->putByte($this->pitch);
|
||||
$this->put(Utils::writeMetadata($this->metadata));
|
||||
$this->put(Utils\Utils::writeMetadata($this->metadata));
|
||||
}
|
||||
|
||||
}
|
@@ -19,7 +19,10 @@
|
||||
*
|
||||
*/
|
||||
|
||||
class AddPaintingPacket extends RakNetDataPacket{
|
||||
namespace PocketMine\Network\Protocol;
|
||||
use PocketMine;
|
||||
|
||||
class AddPaintingPacket extends DataPacket{
|
||||
public $eid;
|
||||
public $x;
|
||||
public $y;
|
||||
@@ -28,7 +31,7 @@ class AddPaintingPacket extends RakNetDataPacket{
|
||||
public $title;
|
||||
|
||||
public function pid(){
|
||||
return ProtocolInfo::ADD_PAINTING_PACKET;
|
||||
return Info::ADD_PAINTING_PACKET;
|
||||
}
|
||||
|
||||
public function decode(){
|
||||
|
@@ -19,7 +19,10 @@
|
||||
*
|
||||
*/
|
||||
|
||||
class AddPlayerPacket extends RakNetDataPacket{
|
||||
namespace PocketMine\Network\Protocol;
|
||||
use PocketMine;
|
||||
|
||||
class AddPlayerPacket extends DataPacket{
|
||||
public $clientID;
|
||||
public $username;
|
||||
public $eid;
|
||||
@@ -33,7 +36,7 @@ class AddPlayerPacket extends RakNetDataPacket{
|
||||
public $metadata;
|
||||
|
||||
public function pid(){
|
||||
return ProtocolInfo::ADD_PLAYER_PACKET;
|
||||
return Info::ADD_PLAYER_PACKET;
|
||||
}
|
||||
|
||||
public function decode(){
|
||||
@@ -52,7 +55,7 @@ class AddPlayerPacket extends RakNetDataPacket{
|
||||
$this->putByte($this->pitch);
|
||||
$this->putShort($this->unknown1);
|
||||
$this->putShort($this->unknown2);
|
||||
$this->put(Utils::writeMetadata($this->metadata));
|
||||
$this->put(Utils\Utils::writeMetadata($this->metadata));
|
||||
}
|
||||
|
||||
}
|
@@ -19,11 +19,14 @@
|
||||
*
|
||||
*/
|
||||
|
||||
class AdventureSettingsPacket extends RakNetDataPacket{
|
||||
namespace PocketMine\Network\Protocol;
|
||||
use PocketMine;
|
||||
|
||||
class AdventureSettingsPacket extends DataPacket{
|
||||
public $flags;
|
||||
|
||||
public function pid(){
|
||||
return ProtocolInfo::ADVENTURE_SETTINGS_PACKET;
|
||||
return Info::ADVENTURE_SETTINGS_PACKET;
|
||||
}
|
||||
|
||||
public function decode(){
|
||||
|
@@ -19,12 +19,15 @@
|
||||
*
|
||||
*/
|
||||
|
||||
class AnimatePacket extends RakNetDataPacket{
|
||||
namespace PocketMine\Network\Protocol;
|
||||
use PocketMine;
|
||||
|
||||
class AnimatePacket extends DataPacket{
|
||||
public $action;
|
||||
public $eid;
|
||||
|
||||
public function pid(){
|
||||
return ProtocolInfo::ANIMATE_PACKET;
|
||||
return Info::ANIMATE_PACKET;
|
||||
}
|
||||
|
||||
public function decode(){
|
||||
|
@@ -19,11 +19,14 @@
|
||||
*
|
||||
*/
|
||||
|
||||
class ChatPacket extends RakNetDataPacket{
|
||||
namespace PocketMine\Network\Protocol;
|
||||
use PocketMine;
|
||||
|
||||
class ChatPacket extends DataPacket{
|
||||
public $message;
|
||||
|
||||
public function pid(){
|
||||
return ProtocolInfo::CHAT_PACKET;
|
||||
return Info::CHAT_PACKET;
|
||||
}
|
||||
|
||||
public function decode(){
|
||||
|
@@ -19,13 +19,16 @@
|
||||
*
|
||||
*/
|
||||
|
||||
class ChunkDataPacket extends RakNetDataPacket{
|
||||
namespace PocketMine\Network\Protocol;
|
||||
use PocketMine;
|
||||
|
||||
class ChunkDataPacket extends DataPacket{
|
||||
public $chunkX;
|
||||
public $chunkZ;
|
||||
public $data;
|
||||
|
||||
public function pid(){
|
||||
return ProtocolInfo::CHUNK_DATA_PACKET;
|
||||
return Info::CHUNK_DATA_PACKET;
|
||||
}
|
||||
|
||||
public function decode(){
|
||||
|
@@ -19,13 +19,16 @@
|
||||
*
|
||||
*/
|
||||
|
||||
class ClientConnectPacket extends RakNetDataPacket{
|
||||
namespace PocketMine\Network\Protocol;
|
||||
use PocketMine;
|
||||
|
||||
class ClientConnectPacket extends DataPacket{
|
||||
public $clientID;
|
||||
public $session;
|
||||
public $unknown1;
|
||||
|
||||
public function pid(){
|
||||
return ProtocolInfo::CLIENT_CONNECT_PACKET;
|
||||
return Info::CLIENT_CONNECT_PACKET;
|
||||
}
|
||||
|
||||
public function decode(){
|
||||
|
@@ -19,7 +19,10 @@
|
||||
*
|
||||
*/
|
||||
|
||||
class ClientHandshakePacket extends RakNetDataPacket{
|
||||
namespace PocketMine\Network\Protocol;
|
||||
use PocketMine;
|
||||
|
||||
class ClientHandshakePacket extends DataPacket{
|
||||
public $cookie;
|
||||
public $security;
|
||||
public $port;
|
||||
@@ -30,7 +33,7 @@ class ClientHandshakePacket extends RakNetDataPacket{
|
||||
public $session;
|
||||
|
||||
public function pid(){
|
||||
return ProtocolInfo::CLIENT_HANDSHAKE_PACKET;
|
||||
return Info::CLIENT_HANDSHAKE_PACKET;
|
||||
}
|
||||
|
||||
public function decode(){
|
||||
|
@@ -19,11 +19,14 @@
|
||||
*
|
||||
*/
|
||||
|
||||
class ContainerClosePacket extends RakNetDataPacket{
|
||||
namespace PocketMine\Network\Protocol;
|
||||
use PocketMine;
|
||||
|
||||
class ContainerClosePacket extends DataPacket{
|
||||
public $windowid;
|
||||
|
||||
public function pid(){
|
||||
return ProtocolInfo::CONTAINER_CLOSE_PACKET;
|
||||
return Info::CONTAINER_CLOSE_PACKET;
|
||||
}
|
||||
|
||||
public function decode(){
|
||||
|
@@ -19,7 +19,10 @@
|
||||
*
|
||||
*/
|
||||
|
||||
class ContainerOpenPacket extends RakNetDataPacket{
|
||||
namespace PocketMine\Network\Protocol;
|
||||
use PocketMine;
|
||||
|
||||
class ContainerOpenPacket extends DataPacket{
|
||||
public $windowid;
|
||||
public $type;
|
||||
public $slots;
|
||||
@@ -28,7 +31,7 @@ class ContainerOpenPacket extends RakNetDataPacket{
|
||||
public $z;
|
||||
|
||||
public function pid(){
|
||||
return ProtocolInfo::CONTAINER_OPEN_PACKET;
|
||||
return Info::CONTAINER_OPEN_PACKET;
|
||||
}
|
||||
|
||||
public function decode(){
|
||||
|
@@ -19,13 +19,16 @@
|
||||
*
|
||||
*/
|
||||
|
||||
class ContainerSetContentPacket extends RakNetDataPacket{
|
||||
namespace PocketMine\Network\Protocol;
|
||||
use PocketMine;
|
||||
|
||||
class ContainerSetContentPacket extends DataPacket{
|
||||
public $windowid;
|
||||
public $slots = array();
|
||||
public $hotbar = array();
|
||||
|
||||
public function pid(){
|
||||
return ProtocolInfo::CONTAINER_SET_CONTENT_PACKET;
|
||||
return Info::CONTAINER_SET_CONTENT_PACKET;
|
||||
}
|
||||
|
||||
public function decode(){
|
||||
|
@@ -19,13 +19,16 @@
|
||||
*
|
||||
*/
|
||||
|
||||
class ContainerSetDataPacket extends RakNetDataPacket{
|
||||
namespace PocketMine\Network\Protocol;
|
||||
use PocketMine;
|
||||
|
||||
class ContainerSetDataPacket extends DataPacket{
|
||||
public $windowid;
|
||||
public $property;
|
||||
public $value;
|
||||
|
||||
public function pid(){
|
||||
return ProtocolInfo::CONTAINER_SET_DATA_PACKET;
|
||||
return Info::CONTAINER_SET_DATA_PACKET;
|
||||
}
|
||||
|
||||
public function decode(){
|
||||
|
@@ -19,13 +19,16 @@
|
||||
*
|
||||
*/
|
||||
|
||||
class ContainerSetSlotPacket extends RakNetDataPacket{
|
||||
namespace PocketMine\Network\Protocol;
|
||||
use PocketMine;
|
||||
|
||||
class ContainerSetSlotPacket extends DataPacket{
|
||||
public $windowid;
|
||||
public $slot;
|
||||
public $item;
|
||||
|
||||
public function pid(){
|
||||
return ProtocolInfo::CONTAINER_SET_SLOT_PACKET;
|
||||
return Info::CONTAINER_SET_SLOT_PACKET;
|
||||
}
|
||||
|
||||
public function decode(){
|
||||
|
@@ -19,9 +19,12 @@
|
||||
*
|
||||
*/
|
||||
|
||||
class DisconnectPacket extends RakNetDataPacket{
|
||||
namespace PocketMine\Network\Protocol;
|
||||
use PocketMine;
|
||||
|
||||
class DisconnectPacket extends DataPacket{
|
||||
public function pid(){
|
||||
return ProtocolInfo::DISCONNECT_PACKET;
|
||||
return Info::DISCONNECT_PACKET;
|
||||
}
|
||||
|
||||
public function decode(){
|
||||
|
@@ -19,13 +19,16 @@
|
||||
*
|
||||
*/
|
||||
|
||||
class DropItemPacket extends RakNetDataPacket{
|
||||
namespace PocketMine\Network\Protocol;
|
||||
use PocketMine;
|
||||
|
||||
class DropItemPacket extends DataPacket{
|
||||
public $eid;
|
||||
public $unknown;
|
||||
public $item;
|
||||
|
||||
public function pid(){
|
||||
return ProtocolInfo::DROP_ITEM_PACKET;
|
||||
return Info::DROP_ITEM_PACKET;
|
||||
}
|
||||
|
||||
public function decode(){
|
||||
|
@@ -19,14 +19,17 @@
|
||||
*
|
||||
*/
|
||||
|
||||
class EntityDataPacket extends RakNetDataPacket{
|
||||
namespace PocketMine\Network\Protocol;
|
||||
use PocketMine;
|
||||
|
||||
class EntityDataPacket extends DataPacket{
|
||||
public $x;
|
||||
public $y;
|
||||
public $z;
|
||||
public $namedtag;
|
||||
|
||||
public function pid(){
|
||||
return ProtocolInfo::ENTITY_DATA_PACKET;
|
||||
return Info::ENTITY_DATA_PACKET;
|
||||
}
|
||||
|
||||
public function decode(){
|
||||
|
@@ -19,12 +19,15 @@
|
||||
*
|
||||
*/
|
||||
|
||||
class EntityEventPacket extends RakNetDataPacket{
|
||||
namespace PocketMine\Network\Protocol;
|
||||
use PocketMine;
|
||||
|
||||
class EntityEventPacket extends DataPacket{
|
||||
public $eid;
|
||||
public $event;
|
||||
|
||||
public function pid(){
|
||||
return ProtocolInfo::ENTITY_EVENT_PACKET;
|
||||
return Info::ENTITY_EVENT_PACKET;
|
||||
}
|
||||
|
||||
public function decode(){
|
||||
|
@@ -19,7 +19,10 @@
|
||||
*
|
||||
*/
|
||||
|
||||
class ExplodePacket extends RakNetDataPacket{
|
||||
namespace PocketMine\Network\Protocol;
|
||||
use PocketMine;
|
||||
|
||||
class ExplodePacket extends DataPacket{
|
||||
public $x;
|
||||
public $y;
|
||||
public $z;
|
||||
@@ -27,7 +30,7 @@ class ExplodePacket extends RakNetDataPacket{
|
||||
public $records;
|
||||
|
||||
public function pid(){
|
||||
return ProtocolInfo::EXPLODE_PACKET;
|
||||
return Info::EXPLODE_PACKET;
|
||||
}
|
||||
|
||||
public function decode(){
|
||||
|
@@ -19,11 +19,14 @@
|
||||
*
|
||||
*/
|
||||
|
||||
class HurtArmorPacket extends RakNetDataPacket{
|
||||
namespace PocketMine\Network\Protocol;
|
||||
use PocketMine;
|
||||
|
||||
class HurtArmorPacket extends DataPacket{
|
||||
public $health;
|
||||
|
||||
public function pid(){
|
||||
return ProtocolInfo::HURT_ARMOR_PACKET;
|
||||
return Info::HURT_ARMOR_PACKET;
|
||||
}
|
||||
|
||||
public function decode(){
|
||||
|
@@ -19,13 +19,16 @@
|
||||
*
|
||||
*/
|
||||
|
||||
class InteractPacket extends RakNetDataPacket{
|
||||
namespace PocketMine\Network\Protocol;
|
||||
use PocketMine;
|
||||
|
||||
class InteractPacket extends DataPacket{
|
||||
public $action;
|
||||
public $eid;
|
||||
public $target;
|
||||
|
||||
public function pid(){
|
||||
return ProtocolInfo::INTERACT_PACKET;
|
||||
return Info::INTERACT_PACKET;
|
||||
}
|
||||
|
||||
public function decode(){
|
||||
|
@@ -19,7 +19,10 @@
|
||||
*
|
||||
*/
|
||||
|
||||
class LevelEventPacket extends RakNetDataPacket{
|
||||
namespace PocketMine\Network\Protocol;
|
||||
use PocketMine;
|
||||
|
||||
class LevelEventPacket extends DataPacket{
|
||||
public $evid;
|
||||
public $x;
|
||||
public $y;
|
||||
@@ -27,7 +30,7 @@ class LevelEventPacket extends RakNetDataPacket{
|
||||
public $data;
|
||||
|
||||
public function pid(){
|
||||
return ProtocolInfo::LEVEL_EVENT_PACKET;
|
||||
return Info::LEVEL_EVENT_PACKET;
|
||||
}
|
||||
|
||||
public function decode(){
|
||||
|
@@ -19,7 +19,10 @@
|
||||
*
|
||||
*/
|
||||
|
||||
class LoginPacket extends RakNetDataPacket{
|
||||
namespace PocketMine\Network\Protocol;
|
||||
use PocketMine;
|
||||
|
||||
class LoginPacket extends DataPacket{
|
||||
public $username;
|
||||
public $protocol1;
|
||||
public $protocol2;
|
||||
@@ -27,7 +30,7 @@ class LoginPacket extends RakNetDataPacket{
|
||||
public $loginData;
|
||||
|
||||
public function pid(){
|
||||
return ProtocolInfo::LOGIN_PACKET;
|
||||
return Info::LOGIN_PACKET;
|
||||
}
|
||||
|
||||
public function decode(){
|
||||
|
@@ -19,11 +19,14 @@
|
||||
*
|
||||
*/
|
||||
|
||||
class LoginStatusPacket extends RakNetDataPacket{
|
||||
namespace PocketMine\Network\Protocol;
|
||||
use PocketMine;
|
||||
|
||||
class LoginStatusPacket extends DataPacket{
|
||||
public $status;
|
||||
|
||||
public function pid(){
|
||||
return ProtocolInfo::LOGIN_STATUS_PACKET;
|
||||
return Info::LOGIN_STATUS_PACKET;
|
||||
}
|
||||
|
||||
public function decode(){
|
||||
|
@@ -19,12 +19,15 @@
|
||||
*
|
||||
*/
|
||||
|
||||
class MessagePacket extends RakNetDataPacket{
|
||||
namespace PocketMine\Network\Protocol;
|
||||
use PocketMine;
|
||||
|
||||
class MessagePacket extends DataPacket{
|
||||
public $source;
|
||||
public $message;
|
||||
|
||||
public function pid(){
|
||||
return ProtocolInfo::MESSAGE_PACKET;
|
||||
return Info::MESSAGE_PACKET;
|
||||
}
|
||||
|
||||
public function decode(){
|
||||
|
@@ -19,10 +19,13 @@
|
||||
*
|
||||
*/
|
||||
|
||||
class MoveEntityPacket extends RakNetDataPacket{
|
||||
namespace PocketMine\Network\Protocol;
|
||||
use PocketMine;
|
||||
|
||||
class MoveEntityPacket extends DataPacket{
|
||||
|
||||
public function pid(){
|
||||
return ProtocolInfo::MOVE_ENTITY_PACKET;
|
||||
return Info::MOVE_ENTITY_PACKET;
|
||||
}
|
||||
|
||||
public function decode(){
|
||||
|
@@ -19,7 +19,10 @@
|
||||
*
|
||||
*/
|
||||
|
||||
class MoveEntityPacket_PosRot extends RakNetDataPacket{
|
||||
namespace PocketMine\Network\Protocol;
|
||||
use PocketMine;
|
||||
|
||||
class MoveEntityPacket_PosRot extends DataPacket{
|
||||
public $eid;
|
||||
public $x;
|
||||
public $y;
|
||||
@@ -28,7 +31,7 @@ class MoveEntityPacket_PosRot extends RakNetDataPacket{
|
||||
public $pitch;
|
||||
|
||||
public function pid(){
|
||||
return ProtocolInfo::MOVE_ENTITY_PACKET_POSROT;
|
||||
return Info::MOVE_ENTITY_PACKET_POSROT;
|
||||
}
|
||||
|
||||
public function decode(){
|
||||
|
@@ -19,7 +19,10 @@
|
||||
*
|
||||
*/
|
||||
|
||||
class MovePlayerPacket extends RakNetDataPacket{
|
||||
namespace PocketMine\Network\Protocol;
|
||||
use PocketMine;
|
||||
|
||||
class MovePlayerPacket extends DataPacket{
|
||||
public $eid;
|
||||
public $x;
|
||||
public $y;
|
||||
@@ -29,7 +32,7 @@ class MovePlayerPacket extends RakNetDataPacket{
|
||||
public $bodyYaw;
|
||||
|
||||
public function pid(){
|
||||
return ProtocolInfo::MOVE_PLAYER_PACKET;
|
||||
return Info::MOVE_PLAYER_PACKET;
|
||||
}
|
||||
|
||||
public function decode(){
|
||||
|
@@ -19,11 +19,14 @@
|
||||
*
|
||||
*/
|
||||
|
||||
class PingPacket extends RakNetDataPacket{
|
||||
namespace PocketMine\Network\Protocol;
|
||||
use PocketMine;
|
||||
|
||||
class PingPacket extends DataPacket{
|
||||
public $time = 0;
|
||||
|
||||
public function pid(){
|
||||
return ProtocolInfo::PING_PACKET;
|
||||
return Info::PING_PACKET;
|
||||
}
|
||||
|
||||
public function decode(){
|
||||
|
@@ -19,7 +19,10 @@
|
||||
*
|
||||
*/
|
||||
|
||||
class PlayerActionPacket extends RakNetDataPacket{
|
||||
namespace PocketMine\Network\Protocol;
|
||||
use PocketMine;
|
||||
|
||||
class PlayerActionPacket extends DataPacket{
|
||||
public $action;
|
||||
public $x;
|
||||
public $y;
|
||||
@@ -28,7 +31,7 @@ class PlayerActionPacket extends RakNetDataPacket{
|
||||
public $eid;
|
||||
|
||||
public function pid(){
|
||||
return ProtocolInfo::PLAYER_ACTION_PACKET;
|
||||
return Info::PLAYER_ACTION_PACKET;
|
||||
}
|
||||
|
||||
public function decode(){
|
||||
|
@@ -19,12 +19,15 @@
|
||||
*
|
||||
*/
|
||||
|
||||
class PlayerArmorEquipmentPacket extends RakNetDataPacket{
|
||||
namespace PocketMine\Network\Protocol;
|
||||
use PocketMine;
|
||||
|
||||
class PlayerArmorEquipmentPacket extends DataPacket{
|
||||
public $eid;
|
||||
public $slots = array();
|
||||
|
||||
public function pid(){
|
||||
return ProtocolInfo::PLAYER_ARMOR_EQUIPMENT_PACKET;
|
||||
return Info::PLAYER_ARMOR_EQUIPMENT_PACKET;
|
||||
}
|
||||
|
||||
public function decode(){
|
||||
|
@@ -19,14 +19,17 @@
|
||||
*
|
||||
*/
|
||||
|
||||
class PlayerEquipmentPacket extends RakNetDataPacket{
|
||||
namespace PocketMine\Network\Protocol;
|
||||
use PocketMine;
|
||||
|
||||
class PlayerEquipmentPacket extends DataPacket{
|
||||
public $eid;
|
||||
public $item;
|
||||
public $meta;
|
||||
public $slot;
|
||||
|
||||
public function pid(){
|
||||
return ProtocolInfo::PLAYER_EQUIPMENT_PACKET;
|
||||
return Info::PLAYER_EQUIPMENT_PACKET;
|
||||
}
|
||||
|
||||
public function decode(){
|
||||
|
@@ -19,12 +19,15 @@
|
||||
*
|
||||
*/
|
||||
|
||||
class PongPacket extends RakNetDataPacket{
|
||||
namespace PocketMine\Network\Protocol;
|
||||
use PocketMine;
|
||||
|
||||
class PongPacket extends DataPacket{
|
||||
public $time = 0;
|
||||
public $ptime = 0;
|
||||
|
||||
public function pid(){
|
||||
return ProtocolInfo::PONG_PACKET;
|
||||
return Info::PONG_PACKET;
|
||||
}
|
||||
|
||||
public function decode(){
|
||||
|
@@ -19,11 +19,14 @@
|
||||
*
|
||||
*/
|
||||
|
||||
class ReadyPacket extends RakNetDataPacket{
|
||||
namespace PocketMine\Network\Protocol;
|
||||
use PocketMine;
|
||||
|
||||
class ReadyPacket extends DataPacket{
|
||||
public $status;
|
||||
|
||||
public function pid(){
|
||||
return ProtocolInfo::READY_PACKET;
|
||||
return Info::READY_PACKET;
|
||||
}
|
||||
|
||||
public function decode(){
|
||||
|
@@ -19,14 +19,17 @@
|
||||
*
|
||||
*/
|
||||
|
||||
class RemoveBlockPacket extends RakNetDataPacket{
|
||||
namespace PocketMine\Network\Protocol;
|
||||
use PocketMine;
|
||||
|
||||
class RemoveBlockPacket extends DataPacket{
|
||||
public $eid;
|
||||
public $x;
|
||||
public $y;
|
||||
public $z;
|
||||
|
||||
public function pid(){
|
||||
return ProtocolInfo::REMOVE_BLOCK_PACKET;
|
||||
return Info::REMOVE_BLOCK_PACKET;
|
||||
}
|
||||
|
||||
public function decode(){
|
||||
|
@@ -19,11 +19,14 @@
|
||||
*
|
||||
*/
|
||||
|
||||
class RemoveEntityPacket extends RakNetDataPacket{
|
||||
namespace PocketMine\Network\Protocol;
|
||||
use PocketMine;
|
||||
|
||||
class RemoveEntityPacket extends DataPacket{
|
||||
public $eid;
|
||||
|
||||
public function pid(){
|
||||
return ProtocolInfo::REMOVE_ENTITY_PACKET;
|
||||
return Info::REMOVE_ENTITY_PACKET;
|
||||
}
|
||||
|
||||
public function decode(){
|
||||
|
@@ -19,12 +19,15 @@
|
||||
*
|
||||
*/
|
||||
|
||||
class RemovePlayerPacket extends RakNetDataPacket{
|
||||
namespace PocketMine\Network\Protocol;
|
||||
use PocketMine;
|
||||
|
||||
class RemovePlayerPacket extends DataPacket{
|
||||
public $eid;
|
||||
public $clientID;
|
||||
|
||||
public function pid(){
|
||||
return ProtocolInfo::REMOVE_PLAYER_PACKET;
|
||||
return Info::REMOVE_PLAYER_PACKET;
|
||||
}
|
||||
|
||||
public function decode(){
|
||||
|
@@ -19,12 +19,15 @@
|
||||
*
|
||||
*/
|
||||
|
||||
class RequestChunkPacket extends RakNetDataPacket{
|
||||
namespace PocketMine\Network\Protocol;
|
||||
use PocketMine;
|
||||
|
||||
class RequestChunkPacket extends DataPacket{
|
||||
public $chunkX;
|
||||
public $chunkZ;
|
||||
|
||||
public function pid(){
|
||||
return ProtocolInfo::REQUEST_CHUNK_PACKET;
|
||||
return Info::REQUEST_CHUNK_PACKET;
|
||||
}
|
||||
|
||||
public function decode(){
|
||||
|
@@ -19,14 +19,17 @@
|
||||
*
|
||||
*/
|
||||
|
||||
class RespawnPacket extends RakNetDataPacket{
|
||||
namespace PocketMine\Network\Protocol;
|
||||
use PocketMine;
|
||||
|
||||
class RespawnPacket extends DataPacket{
|
||||
public $eid;
|
||||
public $x;
|
||||
public $y;
|
||||
public $z;
|
||||
|
||||
public function pid(){
|
||||
return ProtocolInfo::RESPAWN_PACKET;
|
||||
return Info::RESPAWN_PACKET;
|
||||
}
|
||||
|
||||
public function decode(){
|
||||
|
@@ -19,12 +19,15 @@
|
||||
*
|
||||
*/
|
||||
|
||||
class RotateHeadPacket extends RakNetDataPacket{
|
||||
namespace PocketMine\Network\Protocol;
|
||||
use PocketMine;
|
||||
|
||||
class RotateHeadPacket extends DataPacket{
|
||||
public $eid;
|
||||
public $yaw;
|
||||
|
||||
public function pid(){
|
||||
return ProtocolInfo::ROTATE_HEAD_PACKET;
|
||||
return Info::ROTATE_HEAD_PACKET;
|
||||
}
|
||||
|
||||
public function decode(){
|
||||
|
@@ -19,14 +19,17 @@
|
||||
*
|
||||
*/
|
||||
|
||||
class SendInventoryPacket extends RakNetDataPacket{
|
||||
namespace PocketMine\Network\Protocol;
|
||||
use PocketMine;
|
||||
|
||||
class SendInventoryPacket extends DataPacket{
|
||||
public $eid;
|
||||
public $windowid;
|
||||
public $slots = array();
|
||||
public $armor = array();
|
||||
|
||||
public function pid(){
|
||||
return ProtocolInfo::SEND_INVENTORY_PACKET;
|
||||
return Info::SEND_INVENTORY_PACKET;
|
||||
}
|
||||
|
||||
public function decode(){
|
||||
|
@@ -19,13 +19,16 @@
|
||||
*
|
||||
*/
|
||||
|
||||
class ServerHandshakePacket extends RakNetDataPacket{
|
||||
namespace PocketMine\Network\Protocol;
|
||||
use PocketMine;
|
||||
|
||||
class ServerHandshakePacket extends DataPacket{
|
||||
public $port;
|
||||
public $session;
|
||||
public $session2;
|
||||
|
||||
public function pid(){
|
||||
return ProtocolInfo::SERVER_HANDSHAKE_PACKET;
|
||||
return Info::SERVER_HANDSHAKE_PACKET;
|
||||
}
|
||||
|
||||
public function decode(){
|
||||
|
@@ -19,12 +19,15 @@
|
||||
*
|
||||
*/
|
||||
|
||||
class SetEntityDataPacket extends RakNetDataPacket{
|
||||
namespace PocketMine\Network\Protocol;
|
||||
use PocketMine;
|
||||
|
||||
class SetEntityDataPacket extends DataPacket{
|
||||
public $eid;
|
||||
public $metadata;
|
||||
|
||||
public function pid(){
|
||||
return ProtocolInfo::SET_ENTITY_DATA_PACKET;
|
||||
return Info::SET_ENTITY_DATA_PACKET;
|
||||
}
|
||||
|
||||
public function decode(){
|
||||
@@ -34,7 +37,7 @@ class SetEntityDataPacket extends RakNetDataPacket{
|
||||
public function encode(){
|
||||
$this->reset();
|
||||
$this->putInt($this->eid);
|
||||
$this->put(Utils::writeMetadata($this->metadata));
|
||||
$this->put(Utils\Utils::writeMetadata($this->metadata));
|
||||
}
|
||||
|
||||
}
|
@@ -19,14 +19,17 @@
|
||||
*
|
||||
*/
|
||||
|
||||
class SetEntityMotionPacket extends RakNetDataPacket{
|
||||
namespace PocketMine\Network\Protocol;
|
||||
use PocketMine;
|
||||
|
||||
class SetEntityMotionPacket extends DataPacket{
|
||||
public $eid;
|
||||
public $speedX;
|
||||
public $speedY;
|
||||
public $speedZ;
|
||||
|
||||
public function pid(){
|
||||
return ProtocolInfo::SET_ENTITY_MOTION_PACKET;
|
||||
return Info::SET_ENTITY_MOTION_PACKET;
|
||||
}
|
||||
|
||||
public function decode(){
|
||||
|
@@ -19,11 +19,14 @@
|
||||
*
|
||||
*/
|
||||
|
||||
class SetHealthPacket extends RakNetDataPacket{
|
||||
namespace PocketMine\Network\Protocol;
|
||||
use PocketMine;
|
||||
|
||||
class SetHealthPacket extends DataPacket{
|
||||
public $health;
|
||||
|
||||
public function pid(){
|
||||
return ProtocolInfo::SET_HEALTH_PACKET;
|
||||
return Info::SET_HEALTH_PACKET;
|
||||
}
|
||||
|
||||
public function decode(){
|
||||
|
@@ -19,13 +19,16 @@
|
||||
*
|
||||
*/
|
||||
|
||||
class SetSpawnPositionPacket extends RakNetDataPacket{
|
||||
namespace PocketMine\Network\Protocol;
|
||||
use PocketMine;
|
||||
|
||||
class SetSpawnPositionPacket extends DataPacket{
|
||||
public $x;
|
||||
public $z;
|
||||
public $y;
|
||||
|
||||
public function pid(){
|
||||
return ProtocolInfo::SET_SPAWN_POSITION_PACKET;
|
||||
return Info::SET_SPAWN_POSITION_PACKET;
|
||||
}
|
||||
|
||||
public function decode(){
|
||||
|
@@ -19,12 +19,15 @@
|
||||
*
|
||||
*/
|
||||
|
||||
class SetTimePacket extends RakNetDataPacket{
|
||||
namespace PocketMine\Network\Protocol;
|
||||
use PocketMine;
|
||||
|
||||
class SetTimePacket extends DataPacket{
|
||||
public $time;
|
||||
public $started = true;
|
||||
|
||||
public function pid(){
|
||||
return ProtocolInfo::SET_TIME_PACKET;
|
||||
return Info::SET_TIME_PACKET;
|
||||
}
|
||||
|
||||
public function decode(){
|
||||
|
@@ -19,7 +19,10 @@
|
||||
*
|
||||
*/
|
||||
|
||||
class StartGamePacket extends RakNetDataPacket{
|
||||
namespace PocketMine\Network\Protocol;
|
||||
use PocketMine;
|
||||
|
||||
class StartGamePacket extends DataPacket{
|
||||
public $seed;
|
||||
public $generator;
|
||||
public $gamemode;
|
||||
@@ -29,7 +32,7 @@ class StartGamePacket extends RakNetDataPacket{
|
||||
public $z;
|
||||
|
||||
public function pid(){
|
||||
return ProtocolInfo::START_GAME_PACKET;
|
||||
return Info::START_GAME_PACKET;
|
||||
}
|
||||
|
||||
public function decode(){
|
||||
|
@@ -19,12 +19,15 @@
|
||||
*
|
||||
*/
|
||||
|
||||
class TakeItemEntityPacket extends RakNetDataPacket{
|
||||
namespace PocketMine\Network\Protocol;
|
||||
use PocketMine;
|
||||
|
||||
class TakeItemEntityPacket extends DataPacket{
|
||||
public $target;
|
||||
public $eid;
|
||||
|
||||
public function pid(){
|
||||
return ProtocolInfo::TAKE_ITEM_ENTITY_PACKET;
|
||||
return Info::TAKE_ITEM_ENTITY_PACKET;
|
||||
}
|
||||
|
||||
public function decode(){
|
||||
|
@@ -19,7 +19,10 @@
|
||||
*
|
||||
*/
|
||||
|
||||
class TileEventPacket extends RakNetDataPacket{
|
||||
namespace PocketMine\Network\Protocol;
|
||||
use PocketMine;
|
||||
|
||||
class TileEventPacket extends DataPacket{
|
||||
public $x;
|
||||
public $y;
|
||||
public $z;
|
||||
@@ -27,7 +30,7 @@ class TileEventPacket extends RakNetDataPacket{
|
||||
public $case2;
|
||||
|
||||
public function pid(){
|
||||
return ProtocolInfo::TILE_EVENT_PACKET;
|
||||
return Info::TILE_EVENT_PACKET;
|
||||
}
|
||||
|
||||
public function decode(){
|
||||
|
@@ -19,7 +19,10 @@
|
||||
*
|
||||
*/
|
||||
|
||||
class UnknownPacket extends RakNetDataPacket{
|
||||
namespace PocketMine\Network\Protocol;
|
||||
use PocketMine;
|
||||
|
||||
class UnknownPacket extends DataPacket{
|
||||
public $packetID = -1;
|
||||
|
||||
public function pid(){
|
||||
|
@@ -19,7 +19,10 @@
|
||||
*
|
||||
*/
|
||||
|
||||
class UpdateBlockPacket extends RakNetDataPacket{
|
||||
namespace PocketMine\Network\Protocol;
|
||||
use PocketMine;
|
||||
|
||||
class UpdateBlockPacket extends DataPacket{
|
||||
public $x;
|
||||
public $z;
|
||||
public $y;
|
||||
@@ -27,7 +30,7 @@ class UpdateBlockPacket extends RakNetDataPacket{
|
||||
public $meta;
|
||||
|
||||
public function pid(){
|
||||
return ProtocolInfo::UPDATE_BLOCK_PACKET;
|
||||
return Info::UPDATE_BLOCK_PACKET;
|
||||
}
|
||||
|
||||
public function decode(){
|
||||
|
@@ -19,7 +19,10 @@
|
||||
*
|
||||
*/
|
||||
|
||||
class UseItemPacket extends RakNetDataPacket{
|
||||
namespace PocketMine\Network\Protocol;
|
||||
use PocketMine;
|
||||
|
||||
class UseItemPacket extends DataPacket{
|
||||
public $x;
|
||||
public $y;
|
||||
public $z;
|
||||
@@ -35,7 +38,7 @@ class UseItemPacket extends RakNetDataPacket{
|
||||
public $posZ;
|
||||
|
||||
public function pid(){
|
||||
return ProtocolInfo::USE_ITEM_PACKET;
|
||||
return Info::USE_ITEM_PACKET;
|
||||
}
|
||||
|
||||
public function decode(){
|
||||
|
@@ -19,6 +19,9 @@
|
||||
*
|
||||
*/
|
||||
|
||||
namespace PocketMine\Network\Query;
|
||||
use PocketMine;
|
||||
|
||||
/*
|
||||
Implementation of the UT3 Query Protocol (GameSpot)
|
||||
Source: http://wiki.unrealadmin.org/UT3_query_protocol
|
||||
@@ -51,7 +54,7 @@ class QueryHandler{
|
||||
|
||||
public function regenerateInfo(){
|
||||
$str = "";
|
||||
$plist = "PocketMine-MP ".MAJOR_VERSION;
|
||||
$plist = "PocketMine-MP ".VERSION;
|
||||
$pl = $this->server->api->plugin->getList();
|
||||
if(count($pl) > 0){
|
||||
$plist .= ":";
|
||||
@@ -65,8 +68,8 @@ class QueryHandler{
|
||||
"hostname" => $this->server->name,
|
||||
"gametype" => ($this->server->gamemode & 0x01) === 0 ? "SMP":"CMP",
|
||||
"game_id" => "MINECRAFTPE",
|
||||
"version" => CURRENT_MINECRAFT_VERSION,
|
||||
"server_engine" => "PocketMine-MP ".MAJOR_VERSION,
|
||||
"version" => MINECRAFT_VERSION,
|
||||
"server_engine" => "PocketMine-MP ".VERSION,
|
||||
"plugins" => $plist,
|
||||
"map" => $this->server->api->level->getDefault()->getName(),
|
||||
"numplayers" => count(Player::$list),
|
||||
@@ -91,11 +94,11 @@ class QueryHandler{
|
||||
|
||||
public function regenerateToken(){
|
||||
$this->lastToken = $this->token;
|
||||
$this->token = Utils::getRandomBytes(16, false);
|
||||
$this->token = Utils\Utils::getRandomBytes(16, false);
|
||||
}
|
||||
|
||||
public static function getTokenString($token, $salt){
|
||||
return Utils::readInt(substr(hash("sha512", $salt . ":". $token, true), 7, 4));
|
||||
return Utils\Utils::readInt(substr(hash("sha512", $salt . ":". $token, true), 7, 4));
|
||||
}
|
||||
|
||||
public function handle(QueryPacket $packet){
|
||||
@@ -112,7 +115,7 @@ class QueryHandler{
|
||||
$this->server->send($pk);
|
||||
break;
|
||||
case QueryPacket::STATISTICS: //Stat
|
||||
$token = Utils::readInt(substr($packet->payload, 0, 4));
|
||||
$token = Utils\Utils::readInt(substr($packet->payload, 0, 4));
|
||||
if($token !== self::getTokenString($this->token, $packet->ip) and $token !== self::getTokenString($this->lastToken, $packet->ip)){
|
||||
break;
|
||||
}
|
||||
@@ -127,7 +130,7 @@ class QueryHandler{
|
||||
}
|
||||
$pk->payload = $this->longData;
|
||||
}else{
|
||||
$pk->payload = $this->server->name."\x00".(($this->server->gamemode & 0x01) === 0 ? "SMP":"CMP")."\x00".$this->server->api->level->getDefault()->getName()."\x00".count(Player::$list)."\x00".$this->server->maxClients."\x00".Utils::writeLShort($this->server->api->getProperty("server-port")).$this->server->api->getProperty("server-ip", "0.0.0.0")."\x00";
|
||||
$pk->payload = $this->server->name."\x00".(($this->server->gamemode & 0x01) === 0 ? "SMP":"CMP")."\x00".$this->server->api->level->getDefault()->getName()."\x00".count(Player::$list)."\x00".$this->server->maxClients."\x00".Utils\Utils::writeLShort($this->server->api->getProperty("server-port")).$this->server->api->getProperty("server-ip", "0.0.0.0")."\x00";
|
||||
}
|
||||
$pk->encode();
|
||||
$this->server->send($pk);
|
||||
|
@@ -19,7 +19,10 @@
|
||||
*
|
||||
*/
|
||||
|
||||
class QueryPacket extends Packet{
|
||||
namespace PocketMine\Network\Query;
|
||||
use PocketMine;
|
||||
|
||||
class QueryPacket extends Network\Packet{
|
||||
const HANDSHAKE = 9;
|
||||
const STATISTICS = 0;
|
||||
|
||||
@@ -29,13 +32,13 @@ class QueryPacket extends Packet{
|
||||
|
||||
public function decode(){
|
||||
$this->packetType = ord($this->buffer{2});
|
||||
$this->sessionID = Utils::readInt(substr($this->buffer, 3, 4));
|
||||
$this->sessionID = Utils\Utils::readInt(substr($this->buffer, 3, 4));
|
||||
$this->payload = substr($this->buffer, 7);
|
||||
}
|
||||
|
||||
public function encode(){
|
||||
$this->buffer .= chr($this->packetType);
|
||||
$this->buffer .= Utils::writeInt($this->sessionID);
|
||||
$this->buffer .= Utils\Utils::writeInt($this->sessionID);
|
||||
$this->buffer .= $this->payload;
|
||||
}
|
||||
}
|
@@ -19,7 +19,10 @@
|
||||
*
|
||||
*/
|
||||
|
||||
abstract class RakNetInfo{
|
||||
namespace PocketMine\Network\RakNet;
|
||||
use PocketMine;
|
||||
|
||||
abstract class Info{
|
||||
const STRUCTURE = 5;
|
||||
const MAGIC = "\x00\xff\xff\x00\xfe\xfe\xfe\xfe\xfd\xfd\xfd\xfd\x12\x34\x56\x78";
|
||||
const UNCONNECTED_PING = 0x01;
|
||||
@@ -59,33 +62,33 @@ abstract class RakNetInfo{
|
||||
|
||||
public static function isValid($pid){
|
||||
switch((int) $pid){
|
||||
case RakNetInfo::UNCONNECTED_PING:
|
||||
case RakNetInfo::UNCONNECTED_PING_OPEN_CONNECTIONS:
|
||||
case RakNetInfo::OPEN_CONNECTION_REQUEST_1:
|
||||
case RakNetInfo::OPEN_CONNECTION_REPLY_1:
|
||||
case RakNetInfo::OPEN_CONNECTION_REQUEST_2:
|
||||
case RakNetInfo::OPEN_CONNECTION_REPLY_2:
|
||||
case RakNetInfo::INCOMPATIBLE_PROTOCOL_VERSION:
|
||||
case RakNetInfo::UNCONNECTED_PONG:
|
||||
case RakNetInfo::ADVERTISE_SYSTEM:
|
||||
case RakNetInfo::DATA_PACKET_0:
|
||||
case RakNetInfo::DATA_PACKET_1:
|
||||
case RakNetInfo::DATA_PACKET_2:
|
||||
case RakNetInfo::DATA_PACKET_3:
|
||||
case RakNetInfo::DATA_PACKET_4:
|
||||
case RakNetInfo::DATA_PACKET_5:
|
||||
case RakNetInfo::DATA_PACKET_6:
|
||||
case RakNetInfo::DATA_PACKET_7:
|
||||
case RakNetInfo::DATA_PACKET_8:
|
||||
case RakNetInfo::DATA_PACKET_9:
|
||||
case RakNetInfo::DATA_PACKET_A:
|
||||
case RakNetInfo::DATA_PACKET_B:
|
||||
case RakNetInfo::DATA_PACKET_C:
|
||||
case RakNetInfo::DATA_PACKET_D:
|
||||
case RakNetInfo::DATA_PACKET_E:
|
||||
case RakNetInfo::DATA_PACKET_F:
|
||||
case RakNetInfo::NACK:
|
||||
case RakNetInfo::ACK:
|
||||
case self::UNCONNECTED_PING:
|
||||
case self::UNCONNECTED_PING_OPEN_CONNECTIONS:
|
||||
case self::OPEN_CONNECTION_REQUEST_1:
|
||||
case self::OPEN_CONNECTION_REPLY_1:
|
||||
case self::OPEN_CONNECTION_REQUEST_2:
|
||||
case self::OPEN_CONNECTION_REPLY_2:
|
||||
case self::INCOMPATIBLE_PROTOCOL_VERSION:
|
||||
case self::UNCONNECTED_PONG:
|
||||
case self::ADVERTISE_SYSTEM:
|
||||
case self::DATA_PACKET_0:
|
||||
case self::DATA_PACKET_1:
|
||||
case self::DATA_PACKET_2:
|
||||
case self::DATA_PACKET_3:
|
||||
case self::DATA_PACKET_4:
|
||||
case self::DATA_PACKET_5:
|
||||
case self::DATA_PACKET_6:
|
||||
case self::DATA_PACKET_7:
|
||||
case self::DATA_PACKET_8:
|
||||
case self::DATA_PACKET_9:
|
||||
case self::DATA_PACKET_A:
|
||||
case self::DATA_PACKET_B:
|
||||
case self::DATA_PACKET_C:
|
||||
case self::DATA_PACKET_D:
|
||||
case self::DATA_PACKET_E:
|
||||
case self::DATA_PACKET_F:
|
||||
case self::NACK:
|
||||
case self::ACK:
|
||||
return true;
|
||||
default:
|
||||
return false;
|
@@ -19,7 +19,10 @@
|
||||
*
|
||||
*/
|
||||
|
||||
class RakNetPacket extends Packet{
|
||||
namespace PocketMine\Network\RakNet;
|
||||
use PocketMine;
|
||||
|
||||
class Packet extends Network\Packet{
|
||||
private $packetID;
|
||||
private $offset = 1;
|
||||
public $data = array();
|
||||
@@ -48,19 +51,19 @@ class RakNetPacket extends Packet{
|
||||
}
|
||||
|
||||
private function getLong($unsigned = false){
|
||||
return Utils::readLong($this->get(8), $unsigned);
|
||||
return Utils\Utils::readLong($this->get(8), $unsigned);
|
||||
}
|
||||
|
||||
private function getInt(){
|
||||
return Utils::readInt($this->get(4));
|
||||
return Utils\Utils::readInt($this->get(4));
|
||||
}
|
||||
|
||||
private function getShort($unsigned = false){
|
||||
return Utils::readShort($this->get(2), $unsigned);
|
||||
return Utils\Utils::readShort($this->get(2), $unsigned);
|
||||
}
|
||||
|
||||
private function getLTriad(){
|
||||
return Utils::readTriad(strrev($this->get(3)));
|
||||
return Utils\Utils::readTriad(strrev($this->get(3)));
|
||||
}
|
||||
|
||||
private function getByte(){
|
||||
@@ -74,47 +77,47 @@ class RakNetPacket extends Packet{
|
||||
public function decode(){
|
||||
$this->offset = 1;
|
||||
switch($this->packetID){
|
||||
case RakNetInfo::UNCONNECTED_PING:
|
||||
case RakNetInfo::UNCONNECTED_PING_OPEN_CONNECTIONS:
|
||||
case Info::UNCONNECTED_PING:
|
||||
case Info::UNCONNECTED_PING_OPEN_CONNECTIONS:
|
||||
$this->pingID = $this->getLong();
|
||||
$this->offset += 16; //Magic
|
||||
break;
|
||||
case RakNetInfo::OPEN_CONNECTION_REQUEST_1:
|
||||
case Info::OPEN_CONNECTION_REQUEST_1:
|
||||
$this->offset += 16; //Magic
|
||||
$this->structure = $this->getByte();
|
||||
$this->mtuSize = strlen($this->get(true));
|
||||
break;
|
||||
case RakNetInfo::OPEN_CONNECTION_REQUEST_2:
|
||||
case Info::OPEN_CONNECTION_REQUEST_2:
|
||||
$this->offset += 16; //Magic
|
||||
$this->security = $this->get(5);
|
||||
$this->clientPort = $this->getShort(false);
|
||||
$this->mtuSize = $this->getShort(false);
|
||||
$this->clientID = $this->getLong();
|
||||
break;
|
||||
case RakNetInfo::DATA_PACKET_0:
|
||||
case RakNetInfo::DATA_PACKET_1:
|
||||
case RakNetInfo::DATA_PACKET_2:
|
||||
case RakNetInfo::DATA_PACKET_3:
|
||||
case RakNetInfo::DATA_PACKET_4:
|
||||
case RakNetInfo::DATA_PACKET_5:
|
||||
case RakNetInfo::DATA_PACKET_6:
|
||||
case RakNetInfo::DATA_PACKET_7:
|
||||
case RakNetInfo::DATA_PACKET_8:
|
||||
case RakNetInfo::DATA_PACKET_9:
|
||||
case RakNetInfo::DATA_PACKET_A:
|
||||
case RakNetInfo::DATA_PACKET_B:
|
||||
case RakNetInfo::DATA_PACKET_C:
|
||||
case RakNetInfo::DATA_PACKET_D:
|
||||
case RakNetInfo::DATA_PACKET_E:
|
||||
case RakNetInfo::DATA_PACKET_F:
|
||||
case Info::DATA_PACKET_0:
|
||||
case Info::DATA_PACKET_1:
|
||||
case Info::DATA_PACKET_2:
|
||||
case Info::DATA_PACKET_3:
|
||||
case Info::DATA_PACKET_4:
|
||||
case Info::DATA_PACKET_5:
|
||||
case Info::DATA_PACKET_6:
|
||||
case Info::DATA_PACKET_7:
|
||||
case Info::DATA_PACKET_8:
|
||||
case Info::DATA_PACKET_9:
|
||||
case Info::DATA_PACKET_A:
|
||||
case Info::DATA_PACKET_B:
|
||||
case Info::DATA_PACKET_C:
|
||||
case Info::DATA_PACKET_D:
|
||||
case Info::DATA_PACKET_E:
|
||||
case Info::DATA_PACKET_F:
|
||||
$this->seqNumber = $this->getLTriad();
|
||||
$this->data = array();
|
||||
while(!$this->feof() and $this->parseDataPacket() !== false){
|
||||
|
||||
}
|
||||
break;
|
||||
case RakNetInfo::NACK:
|
||||
case RakNetInfo::ACK:
|
||||
case Info::NACK:
|
||||
case Info::ACK:
|
||||
$count = $this->getShort();
|
||||
$this->packets = array();
|
||||
for($i = 0; $i < $count and !$this->feof(); ++$i){
|
||||
@@ -184,163 +187,163 @@ class RakNetPacket extends Packet{
|
||||
return false;
|
||||
}
|
||||
switch($pid){
|
||||
case ProtocolInfo::PING_PACKET:
|
||||
case Network\Protocol\Info::PING_PACKET:
|
||||
$data = new PingPacket;
|
||||
break;
|
||||
case ProtocolInfo::PONG_PACKET:
|
||||
case Network\Protocol\Info::PONG_PACKET:
|
||||
$data = new PongPacket;
|
||||
break;
|
||||
case ProtocolInfo::CLIENT_CONNECT_PACKET:
|
||||
case Network\Protocol\Info::CLIENT_CONNECT_PACKET:
|
||||
$data = new ClientConnectPacket;
|
||||
break;
|
||||
case ProtocolInfo::SERVER_HANDSHAKE_PACKET:
|
||||
case Network\Protocol\Info::SERVER_HANDSHAKE_PACKET:
|
||||
$data = new ServerHandshakePacket;
|
||||
break;
|
||||
case ProtocolInfo::DISCONNECT_PACKET:
|
||||
case Network\Protocol\Info::DISCONNECT_PACKET:
|
||||
$data = new DisconnectPacket;
|
||||
break;
|
||||
case ProtocolInfo::LOGIN_PACKET:
|
||||
case Network\Protocol\Info::LOGIN_PACKET:
|
||||
$data = new LoginPacket;
|
||||
break;
|
||||
case ProtocolInfo::LOGIN_STATUS_PACKET:
|
||||
case Network\Protocol\Info::LOGIN_STATUS_PACKET:
|
||||
$data = new LoginStatusPacket;
|
||||
break;
|
||||
case ProtocolInfo::READY_PACKET:
|
||||
case Network\Protocol\Info::READY_PACKET:
|
||||
$data = new ReadyPacket;
|
||||
break;
|
||||
case ProtocolInfo::MESSAGE_PACKET:
|
||||
case Network\Protocol\Info::MESSAGE_PACKET:
|
||||
$data = new MessagePacket;
|
||||
break;
|
||||
case ProtocolInfo::SET_TIME_PACKET:
|
||||
case Network\Protocol\Info::SET_TIME_PACKET:
|
||||
$data = new SetTimePacket;
|
||||
break;
|
||||
case ProtocolInfo::START_GAME_PACKET:
|
||||
case Network\Protocol\Info::START_GAME_PACKET:
|
||||
$data = new StartGamePacket;
|
||||
break;
|
||||
case ProtocolInfo::ADD_MOB_PACKET:
|
||||
case Network\Protocol\Info::ADD_MOB_PACKET:
|
||||
$data = new AddMobPacket;
|
||||
break;
|
||||
case ProtocolInfo::ADD_PLAYER_PACKET:
|
||||
case Network\Protocol\Info::ADD_PLAYER_PACKET:
|
||||
$data = new AddPlayerPacket;
|
||||
break;
|
||||
case ProtocolInfo::REMOVE_PLAYER_PACKET:
|
||||
case Network\Protocol\Info::REMOVE_PLAYER_PACKET:
|
||||
$data = new RemovePlayerPacket;
|
||||
break;
|
||||
case ProtocolInfo::ADD_ENTITY_PACKET:
|
||||
case Network\Protocol\Info::ADD_ENTITY_PACKET:
|
||||
$data = new AddEntityPacket;
|
||||
break;
|
||||
case ProtocolInfo::REMOVE_ENTITY_PACKET:
|
||||
case Network\Protocol\Info::REMOVE_ENTITY_PACKET:
|
||||
$data = new RemoveEntityPacket;
|
||||
break;
|
||||
case ProtocolInfo::ADD_ITEM_ENTITY_PACKET:
|
||||
case Network\Protocol\Info::ADD_ITEM_ENTITY_PACKET:
|
||||
$data = new AddItemEntityPacket;
|
||||
break;
|
||||
case ProtocolInfo::TAKE_ITEM_ENTITY_PACKET:
|
||||
case Network\Protocol\Info::TAKE_ITEM_ENTITY_PACKET:
|
||||
$data = new TakeItemEntityPacket;
|
||||
break;
|
||||
case ProtocolInfo::MOVE_ENTITY_PACKET:
|
||||
case Network\Protocol\Info::MOVE_ENTITY_PACKET:
|
||||
$data = new MoveEntityPacket;
|
||||
break;
|
||||
case ProtocolInfo::MOVE_ENTITY_PACKET_POSROT:
|
||||
case Network\Protocol\Info::MOVE_ENTITY_PACKET_POSROT:
|
||||
$data = new MoveEntityPacket_PosRot;
|
||||
break;
|
||||
case ProtocolInfo::ROTATE_HEAD_PACKET:
|
||||
case Network\Protocol\Info::ROTATE_HEAD_PACKET:
|
||||
$data = new RotateHeadPacket;
|
||||
break;
|
||||
case ProtocolInfo::MOVE_PLAYER_PACKET:
|
||||
case Network\Protocol\Info::MOVE_PLAYER_PACKET:
|
||||
$data = new MovePlayerPacket;
|
||||
break;
|
||||
case ProtocolInfo::REMOVE_BLOCK_PACKET:
|
||||
case Network\Protocol\Info::REMOVE_BLOCK_PACKET:
|
||||
$data = new RemoveBlockPacket;
|
||||
break;
|
||||
case ProtocolInfo::UPDATE_BLOCK_PACKET:
|
||||
case Network\Protocol\Info::UPDATE_BLOCK_PACKET:
|
||||
$data = new UpdateBlockPacket;
|
||||
break;
|
||||
case ProtocolInfo::ADD_PAINTING_PACKET:
|
||||
case Network\Protocol\Info::ADD_PAINTING_PACKET:
|
||||
$data = new AddPaintingPacket;
|
||||
break;
|
||||
case ProtocolInfo::EXPLODE_PACKET:
|
||||
case Network\Protocol\Info::EXPLODE_PACKET:
|
||||
$data = new ExplodePacket;
|
||||
break;
|
||||
case ProtocolInfo::LEVEL_EVENT_PACKET:
|
||||
case Network\Protocol\Info::LEVEL_EVENT_PACKET:
|
||||
$data = new LevelEventPacket;
|
||||
break;
|
||||
case ProtocolInfo::TILE_EVENT_PACKET:
|
||||
case Network\Protocol\Info::TILE_EVENT_PACKET:
|
||||
$data = new TileEventPacket;
|
||||
break;
|
||||
case ProtocolInfo::ENTITY_EVENT_PACKET:
|
||||
case Network\Protocol\Info::ENTITY_EVENT_PACKET:
|
||||
$data = new EntityEventPacket;
|
||||
break;
|
||||
case ProtocolInfo::REQUEST_CHUNK_PACKET:
|
||||
case Network\Protocol\Info::REQUEST_CHUNK_PACKET:
|
||||
$data = new RequestChunkPacket;
|
||||
break;
|
||||
case ProtocolInfo::CHUNK_DATA_PACKET:
|
||||
case Network\Protocol\Info::CHUNK_DATA_PACKET:
|
||||
$data = new ChunkDataPacket;
|
||||
break;
|
||||
case ProtocolInfo::PLAYER_EQUIPMENT_PACKET:
|
||||
case Network\Protocol\Info::PLAYER_EQUIPMENT_PACKET:
|
||||
$data = new PlayerEquipmentPacket;
|
||||
break;
|
||||
case ProtocolInfo::PLAYER_ARMOR_EQUIPMENT_PACKET:
|
||||
case Network\Protocol\Info::PLAYER_ARMOR_EQUIPMENT_PACKET:
|
||||
$data = new PlayerArmorEquipmentPacket;
|
||||
break;
|
||||
case ProtocolInfo::INTERACT_PACKET:
|
||||
case Network\Protocol\Info::INTERACT_PACKET:
|
||||
$data = new InteractPacket;
|
||||
break;
|
||||
case ProtocolInfo::USE_ITEM_PACKET:
|
||||
case Network\Protocol\Info::USE_ITEM_PACKET:
|
||||
$data = new UseItemPacket;
|
||||
break;
|
||||
case ProtocolInfo::PLAYER_ACTION_PACKET:
|
||||
case Network\Protocol\Info::PLAYER_ACTION_PACKET:
|
||||
$data = new PlayerActionPacket;
|
||||
break;
|
||||
case ProtocolInfo::HURT_ARMOR_PACKET:
|
||||
case Network\Protocol\Info::HURT_ARMOR_PACKET:
|
||||
$data = new HurtArmorPacket;
|
||||
break;
|
||||
case ProtocolInfo::SET_ENTITY_DATA_PACKET:
|
||||
case Network\Protocol\Info::SET_ENTITY_DATA_PACKET:
|
||||
$data = new SetEntityDataPacket;
|
||||
break;
|
||||
case ProtocolInfo::SET_ENTITY_MOTION_PACKET:
|
||||
case Network\Protocol\Info::SET_ENTITY_MOTION_PACKET:
|
||||
$data = new SetEntityMotionPacket;
|
||||
break;
|
||||
case ProtocolInfo::SET_HEALTH_PACKET:
|
||||
case Network\Protocol\Info::SET_HEALTH_PACKET:
|
||||
$data = new SetHealthPacket;
|
||||
break;
|
||||
case ProtocolInfo::SET_SPAWN_POSITION_PACKET:
|
||||
case Network\Protocol\Info::SET_SPAWN_POSITION_PACKET:
|
||||
$data = new SetSpawnPositionPacket;
|
||||
break;
|
||||
case ProtocolInfo::ANIMATE_PACKET:
|
||||
case Network\Protocol\Info::ANIMATE_PACKET:
|
||||
$data = new AnimatePacket;
|
||||
break;
|
||||
case ProtocolInfo::RESPAWN_PACKET:
|
||||
case Network\Protocol\Info::RESPAWN_PACKET:
|
||||
$data = new RespawnPacket;
|
||||
break;
|
||||
case ProtocolInfo::SEND_INVENTORY_PACKET:
|
||||
case Network\Protocol\Info::SEND_INVENTORY_PACKET:
|
||||
$data = new SendInventoryPacket;
|
||||
break;
|
||||
case ProtocolInfo::DROP_ITEM_PACKET:
|
||||
case Network\Protocol\Info::DROP_ITEM_PACKET:
|
||||
$data = new DropItemPacket;
|
||||
break;
|
||||
case ProtocolInfo::CONTAINER_OPEN_PACKET:
|
||||
case Network\Protocol\Info::CONTAINER_OPEN_PACKET:
|
||||
$data = new ContainerOpenPacket;
|
||||
break;
|
||||
case ProtocolInfo::CONTAINER_CLOSE_PACKET:
|
||||
case Network\Protocol\Info::CONTAINER_CLOSE_PACKET:
|
||||
$data = new ContainerClosePacket;
|
||||
break;
|
||||
case ProtocolInfo::CONTAINER_SET_SLOT_PACKET:
|
||||
case Network\Protocol\Info::CONTAINER_SET_SLOT_PACKET:
|
||||
$data = new ContainerSetSlotPacket;
|
||||
break;
|
||||
case ProtocolInfo::CONTAINER_SET_DATA_PACKET:
|
||||
case Network\Protocol\Info::CONTAINER_SET_DATA_PACKET:
|
||||
$data = new ContainerSetDataPacket;
|
||||
break;
|
||||
case ProtocolInfo::CONTAINER_SET_CONTENT_PACKET:
|
||||
case Network\Protocol\Info::CONTAINER_SET_CONTENT_PACKET:
|
||||
$data = new ContainerSetContentPacket;
|
||||
break;
|
||||
case ProtocolInfo::CHAT_PACKET:
|
||||
case Network\Protocol\Info::CHAT_PACKET:
|
||||
$data = new ChatPacket;
|
||||
break;
|
||||
case ProtocolInfo::ADVENTURE_SETTINGS_PACKET:
|
||||
case Network\Protocol\Info::ADVENTURE_SETTINGS_PACKET:
|
||||
$data = new AdventureSettingsPacket;
|
||||
break;
|
||||
case ProtocolInfo::ENTITY_DATA_PACKET:
|
||||
case Network\Protocol\Info::ENTITY_DATA_PACKET:
|
||||
$data = new EntityDataPacket;
|
||||
break;
|
||||
default:
|
||||
@@ -369,54 +372,54 @@ class RakNetPacket extends Packet{
|
||||
$this->buffer = chr($this->packetID);
|
||||
|
||||
switch($this->packetID){
|
||||
case RakNetInfo::OPEN_CONNECTION_REPLY_1:
|
||||
$this->buffer .= RakNetInfo::MAGIC;
|
||||
case Info::OPEN_CONNECTION_REPLY_1:
|
||||
$this->buffer .= Info::MAGIC;
|
||||
$this->putLong($this->serverID);
|
||||
$this->putByte(0); //server security
|
||||
$this->putShort($this->mtuSize);
|
||||
break;
|
||||
case RakNetInfo::OPEN_CONNECTION_REPLY_2:
|
||||
$this->buffer .= RakNetInfo::MAGIC;
|
||||
case Info::OPEN_CONNECTION_REPLY_2:
|
||||
$this->buffer .= Info::MAGIC;
|
||||
$this->putLong($this->serverID);
|
||||
$this->putShort($this->serverPort);
|
||||
$this->putShort($this->mtuSize);
|
||||
$this->putByte(0); //Server security
|
||||
break;
|
||||
case RakNetInfo::INCOMPATIBLE_PROTOCOL_VERSION:
|
||||
$this->putByte(RakNetInfo::STRUCTURE);
|
||||
$this->buffer .= RakNetInfo::MAGIC;
|
||||
case Info::INCOMPATIBLE_PROTOCOL_VERSION:
|
||||
$this->putByte(Info::STRUCTURE);
|
||||
$this->buffer .= Info::MAGIC;
|
||||
$this->putLong($this->serverID);
|
||||
break;
|
||||
case RakNetInfo::UNCONNECTED_PONG:
|
||||
case RakNetInfo::ADVERTISE_SYSTEM:
|
||||
case Info::UNCONNECTED_PONG:
|
||||
case Info::ADVERTISE_SYSTEM:
|
||||
$this->putLong($this->pingID);
|
||||
$this->putLong($this->serverID);
|
||||
$this->buffer .= RakNetInfo::MAGIC;
|
||||
$this->buffer .= Info::MAGIC;
|
||||
$this->putString($this->serverType);
|
||||
break;
|
||||
case RakNetInfo::DATA_PACKET_0:
|
||||
case RakNetInfo::DATA_PACKET_1:
|
||||
case RakNetInfo::DATA_PACKET_2:
|
||||
case RakNetInfo::DATA_PACKET_3:
|
||||
case RakNetInfo::DATA_PACKET_4:
|
||||
case RakNetInfo::DATA_PACKET_5:
|
||||
case RakNetInfo::DATA_PACKET_6:
|
||||
case RakNetInfo::DATA_PACKET_7:
|
||||
case RakNetInfo::DATA_PACKET_8:
|
||||
case RakNetInfo::DATA_PACKET_9:
|
||||
case RakNetInfo::DATA_PACKET_A:
|
||||
case RakNetInfo::DATA_PACKET_B:
|
||||
case RakNetInfo::DATA_PACKET_C:
|
||||
case RakNetInfo::DATA_PACKET_D:
|
||||
case RakNetInfo::DATA_PACKET_E:
|
||||
case RakNetInfo::DATA_PACKET_F:
|
||||
case Info::DATA_PACKET_0:
|
||||
case Info::DATA_PACKET_1:
|
||||
case Info::DATA_PACKET_2:
|
||||
case Info::DATA_PACKET_3:
|
||||
case Info::DATA_PACKET_4:
|
||||
case Info::DATA_PACKET_5:
|
||||
case Info::DATA_PACKET_6:
|
||||
case Info::DATA_PACKET_7:
|
||||
case Info::DATA_PACKET_8:
|
||||
case Info::DATA_PACKET_9:
|
||||
case Info::DATA_PACKET_A:
|
||||
case Info::DATA_PACKET_B:
|
||||
case Info::DATA_PACKET_C:
|
||||
case Info::DATA_PACKET_D:
|
||||
case Info::DATA_PACKET_E:
|
||||
case Info::DATA_PACKET_F:
|
||||
$this->putLTriad($this->seqNumber);
|
||||
foreach($this->data as $pk){
|
||||
$this->encodeDataPacket($pk);
|
||||
}
|
||||
break;
|
||||
case RakNetInfo::NACK:
|
||||
case RakNetInfo::ACK:
|
||||
case Info::NACK:
|
||||
case Info::ACK:
|
||||
$payload = b"";
|
||||
$records = 0;
|
||||
$pointer = 0;
|
||||
@@ -439,11 +442,11 @@ class RakNetPacket extends Packet{
|
||||
++$pointer;
|
||||
if($type === false){
|
||||
$payload .= "\x00";
|
||||
$payload .= strrev(Utils::writeTriad($start));
|
||||
$payload .= strrev(Utils::writeTriad($end));
|
||||
$payload .= strrev(Utils\Utils::writeTriad($start));
|
||||
$payload .= strrev(Utils\Utils::writeTriad($end));
|
||||
}else{
|
||||
$payload .= Utils::writeBool(true);
|
||||
$payload .= strrev(Utils::writeTriad($start));
|
||||
$payload .= Utils\Utils::writeBool(true);
|
||||
$payload .= strrev(Utils\Utils::writeTriad($start));
|
||||
}
|
||||
++$records;
|
||||
}
|
||||
@@ -456,7 +459,7 @@ class RakNetPacket extends Packet{
|
||||
|
||||
}
|
||||
|
||||
private function encodeDataPacket(RakNetDataPacket $pk){
|
||||
private function encodeDataPacket(DataPacket $pk){
|
||||
$this->putByte(($pk->reliability << 5) | ($pk->hasSplit > 0 ? 0b00010000:0));
|
||||
$this->putShort(strlen($pk->buffer) << 3);
|
||||
if($pk->reliability === 2
|
||||
@@ -489,23 +492,23 @@ class RakNetPacket extends Packet{
|
||||
}
|
||||
|
||||
protected function putLong($v){
|
||||
$this->buffer .= Utils::writeLong($v);
|
||||
$this->buffer .= Utils\Utils::writeLong($v);
|
||||
}
|
||||
|
||||
protected function putInt($v){
|
||||
$this->buffer .= Utils::writeInt($v);
|
||||
$this->buffer .= Utils\Utils::writeInt($v);
|
||||
}
|
||||
|
||||
protected function putShort($v){
|
||||
$this->buffer .= Utils::writeShort($v);
|
||||
$this->buffer .= Utils\Utils::writeShort($v);
|
||||
}
|
||||
|
||||
protected function putTriad($v){
|
||||
$this->buffer .= Utils::writeTriad($v);
|
||||
$this->buffer .= Utils\Utils::writeTriad($v);
|
||||
}
|
||||
|
||||
protected function putLTriad($v){
|
||||
$this->buffer .= strrev(Utils::writeTriad($v));
|
||||
$this->buffer .= strrev(Utils\Utils::writeTriad($v));
|
||||
}
|
||||
|
||||
protected function putByte($v){
|
84
src/network/rcon/RCON.php
Normal file
84
src/network/rcon/RCON.php
Normal file
@@ -0,0 +1,84 @@
|
||||
<?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/
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
namespace PocketMine\Network\RCON;
|
||||
use PocketMine;
|
||||
|
||||
/*
|
||||
Implementation of the Source RCON Protocol to allow remote console commands
|
||||
Source: https://developer.valvesoftware.com/wiki/Source_RCON_Protocol
|
||||
*/
|
||||
|
||||
class RCON{
|
||||
private $socket, $password, $workers, $threads, $clientsPerThread;
|
||||
|
||||
public function __construct($password, $port = 19132, $interface = "0.0.0.0", $threads = 1, $clientsPerThread = 50){
|
||||
$this->workers = array();
|
||||
$this->password = (string) $password;
|
||||
console("[INFO] Starting remote control listener");
|
||||
if($this->password === ""){
|
||||
console("[ERROR] RCON can't be started: Empty password");
|
||||
return;
|
||||
}
|
||||
$this->threads = (int) max(1, $threads);
|
||||
$this->clientsPerThread = (int) max(1, $clientsPerThread);
|
||||
$this->socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
|
||||
if($this->socket === false or !socket_bind($this->socket, $interface, (int) $port) or !socket_listen($this->socket)){
|
||||
console("[ERROR] RCON can't be started: ".socket_strerror(socket_last_error()));
|
||||
return;
|
||||
}
|
||||
@socket_set_block($this->socket);
|
||||
for($n = 0; $n < $this->threads; ++$n){
|
||||
$this->workers[$n] = new RCONInstance($this->socket, $this->password, $this->clientsPerThread);
|
||||
}
|
||||
@socket_getsockname($this->socket, $addr, $port);
|
||||
console("[INFO] RCON running on $addr:$port");
|
||||
ServerAPI::request()->schedule(2, array($this, "check"), array(), true);
|
||||
}
|
||||
|
||||
public function stop(){
|
||||
for($n = 0; $n < $this->threads; ++$n){
|
||||
$this->workers[$n]->close();
|
||||
$this->workers[$n]->join();
|
||||
usleep(50000);
|
||||
$this->workers[$n]->kill();
|
||||
}
|
||||
@socket_close($this->socket);
|
||||
$this->threads = 0;
|
||||
}
|
||||
|
||||
public function check(){
|
||||
for($n = 0; $n < $this->threads; ++$n){
|
||||
if($this->workers[$n]->isTerminated() === true){
|
||||
$this->workers[$n] = new RCONInstance($this->socket, $this->password, $this->clientsPerThread);
|
||||
}elseif($this->workers[$n]->isWaiting()){
|
||||
if($this->workers[$n]->response !== ""){
|
||||
console($this->workers[$n]->response);
|
||||
$this->workers[$n]->notify();
|
||||
}else{
|
||||
$this->workers[$n]->response = ServerAPI::request()->api->console->run($this->workers[$n]->cmd, "rcon");
|
||||
$this->workers[$n]->notify();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@@ -19,68 +19,10 @@
|
||||
*
|
||||
*/
|
||||
|
||||
/*
|
||||
Implementation of the Source RCON Protocol to allow remote console commands
|
||||
Source: https://developer.valvesoftware.com/wiki/Source_RCON_Protocol
|
||||
*/
|
||||
namespace PocketMine\Network\RCON;
|
||||
use PocketMine;
|
||||
|
||||
class RCON{
|
||||
private $socket, $password, $workers, $threads, $clientsPerThread;
|
||||
|
||||
public function __construct($password, $port = 19132, $interface = "0.0.0.0", $threads = 1, $clientsPerThread = 50){
|
||||
$this->workers = array();
|
||||
$this->password = (string) $password;
|
||||
console("[INFO] Starting remote control listener");
|
||||
if($this->password === ""){
|
||||
console("[ERROR] RCON can't be started: Empty password");
|
||||
return;
|
||||
}
|
||||
$this->threads = (int) max(1, $threads);
|
||||
$this->clientsPerThread = (int) max(1, $clientsPerThread);
|
||||
$this->socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
|
||||
if($this->socket === false or !socket_bind($this->socket, $interface, (int) $port) or !socket_listen($this->socket)){
|
||||
console("[ERROR] RCON can't be started: ".socket_strerror(socket_last_error()));
|
||||
return;
|
||||
}
|
||||
@socket_set_block($this->socket);
|
||||
for($n = 0; $n < $this->threads; ++$n){
|
||||
$this->workers[$n] = new RCONInstance($this->socket, $this->password, $this->clientsPerThread);
|
||||
}
|
||||
@socket_getsockname($this->socket, $addr, $port);
|
||||
console("[INFO] RCON running on $addr:$port");
|
||||
ServerAPI::request()->schedule(2, array($this, "check"), array(), true);
|
||||
}
|
||||
|
||||
public function stop(){
|
||||
for($n = 0; $n < $this->threads; ++$n){
|
||||
$this->workers[$n]->close();
|
||||
$this->workers[$n]->join();
|
||||
usleep(50000);
|
||||
$this->workers[$n]->kill();
|
||||
}
|
||||
@socket_close($this->socket);
|
||||
$this->threads = 0;
|
||||
}
|
||||
|
||||
public function check(){
|
||||
for($n = 0; $n < $this->threads; ++$n){
|
||||
if($this->workers[$n]->isTerminated() === true){
|
||||
$this->workers[$n] = new RCONInstance($this->socket, $this->password, $this->clientsPerThread);
|
||||
}elseif($this->workers[$n]->isWaiting()){
|
||||
if($this->workers[$n]->response !== ""){
|
||||
console($this->workers[$n]->response);
|
||||
$this->workers[$n]->notify();
|
||||
}else{
|
||||
$this->workers[$n]->response = ServerAPI::request()->api->console->run($this->workers[$n]->cmd, "rcon");
|
||||
$this->workers[$n]->notify();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
class RCONInstance extends Thread{
|
||||
class RCONInstance extends \Thread{
|
||||
public $stop;
|
||||
public $cmd;
|
||||
public $response;
|
||||
@@ -104,11 +46,11 @@ class RCONInstance extends Thread{
|
||||
}
|
||||
|
||||
private function writePacket($client, $requestID, $packetType, $payload){
|
||||
$pk = Utils::writeLInt((int) $requestID)
|
||||
. Utils::writeLInt((int) $packetType)
|
||||
$pk = Utils\Utils::writeLInt((int) $requestID)
|
||||
. Utils\Utils::writeLInt((int) $packetType)
|
||||
. $payload
|
||||
. "\x00\x00"; //Terminate payload and packet
|
||||
return socket_write($client, Utils::writeLInt(strlen($pk)).$pk);
|
||||
return socket_write($client, Utils\Utils::writeLInt(strlen($pk)).$pk);
|
||||
}
|
||||
|
||||
private function readPacket($client, &$size, &$requestID, &$packetType, &$payload){
|
||||
@@ -122,12 +64,12 @@ class RCONInstance extends Thread{
|
||||
return false;
|
||||
}
|
||||
@socket_set_block($client);
|
||||
$size = Utils::readLInt($d);
|
||||
$size = Utils\Utils::readLInt($d);
|
||||
if($size < 0 or $size > 65535){
|
||||
return false;
|
||||
}
|
||||
$requestID = Utils::readLInt(socket_read($client, 4));
|
||||
$packetType = Utils::readLInt(socket_read($client, 4));
|
||||
$requestID = Utils\Utils::readLInt(socket_read($client, 4));
|
||||
$packetType = Utils\Utils::readLInt(socket_read($client, 4));
|
||||
$payload = rtrim(socket_read($client, $size + 2)); //Strip two null bytes
|
||||
return true;
|
||||
}
|
64
src/network/upnp/PortForward.php
Normal file
64
src/network/upnp/PortForward.php
Normal file
@@ -0,0 +1,64 @@
|
||||
<?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/
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
namespace PocketMine\Network\UPnP;
|
||||
use PocketMine;
|
||||
|
||||
function PortForward($port){
|
||||
if(Utils\Utils::$online === false){
|
||||
return false;
|
||||
}
|
||||
if(Utils\Utils::getOS() != "win" or !class_exists("COM")){
|
||||
return false;
|
||||
}
|
||||
$port = (int) $port;
|
||||
$myLocalIP = gethostbyname(trim(`hostname`));
|
||||
try{
|
||||
$com = new COM("HNetCfg.NATUPnP");
|
||||
if($com === false or !is_object($com->StaticPortMappingCollection)){
|
||||
return false;
|
||||
}
|
||||
$com->StaticPortMappingCollection->Add($port, "UDP", $port, $myLocalIP, true, "PocketMine-MP");
|
||||
}catch(Exception $e){
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
function RemovePortForward($port){
|
||||
if(Utils\Utils::$online === false){
|
||||
return false;
|
||||
}
|
||||
if(Utils\Utils::getOS() != "win" or !class_exists("COM")){
|
||||
return false;
|
||||
}
|
||||
$port = (int) $port;
|
||||
try{
|
||||
$com = new COM("HNetCfg.NATUPnP") or false;
|
||||
if($com === false or !is_object($com->StaticPortMappingCollection)){
|
||||
return false;
|
||||
}
|
||||
$com->StaticPortMappingCollection->Remove($port, "UDP");
|
||||
}catch(Exception $e){
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
43
src/network/upnp/RemovePortForward.php
Normal file
43
src/network/upnp/RemovePortForward.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/
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
namespace PocketMine\Network\UPnP;
|
||||
use PocketMine;
|
||||
|
||||
function RemovePortForward($port){
|
||||
if(Utils\Utils::$online === false){
|
||||
return false;
|
||||
}
|
||||
if(Utils\Utils::getOS() != "win" or !class_exists("COM")){
|
||||
return false;
|
||||
}
|
||||
$port = (int) $port;
|
||||
try{
|
||||
$com = new COM("HNetCfg.NATUPnP") or false;
|
||||
if($com === false or !is_object($com->StaticPortMappingCollection)){
|
||||
return false;
|
||||
}
|
||||
$com->StaticPortMappingCollection->Remove($port, "UDP");
|
||||
}catch(Exception $e){
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
Reference in New Issue
Block a user