First step to namespaces

This commit is contained in:
Shoghi Cervantes
2014-03-05 23:43:16 +01:00
parent 23b8fc32ff
commit 5ea31b57ce
406 changed files with 3418 additions and 3597 deletions

View File

@@ -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();

View File

@@ -19,7 +19,10 @@
*
*/
class Packet extends stdClass{
namespace PocketMine\Network;
use PocketMine;
class Packet extends \stdClass{
public $ip;
public $port;
public $buffer;

View File

@@ -19,7 +19,8 @@
*
*/
namespace PocketMine\Network;
use PocketMine;
class UDPSocket{
public $connected, $sock, $server, $port;

View File

@@ -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(){

View File

@@ -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***/
}

View File

@@ -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(){

View File

@@ -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(){

View File

@@ -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));
}
}

View File

@@ -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(){

View File

@@ -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));
}
}

View File

@@ -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(){

View File

@@ -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(){

View File

@@ -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(){

View File

@@ -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(){

View File

@@ -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(){

View File

@@ -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(){

View File

@@ -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(){

View File

@@ -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(){

View File

@@ -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(){

View File

@@ -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(){

View File

@@ -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(){

View File

@@ -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(){

View File

@@ -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(){

View File

@@ -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(){

View File

@@ -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(){

View File

@@ -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(){

View File

@@ -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(){

View File

@@ -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(){

View File

@@ -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(){

View File

@@ -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(){

View File

@@ -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(){

View File

@@ -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(){

View File

@@ -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(){

View File

@@ -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(){

View File

@@ -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(){

View File

@@ -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(){

View File

@@ -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(){

View File

@@ -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(){

View File

@@ -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(){

View File

@@ -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(){

View File

@@ -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(){

View File

@@ -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(){

View File

@@ -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(){

View File

@@ -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(){

View File

@@ -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(){

View File

@@ -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(){

View File

@@ -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(){

View File

@@ -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(){

View File

@@ -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(){

View File

@@ -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));
}
}

View File

@@ -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(){

View File

@@ -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(){

View File

@@ -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(){

View File

@@ -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(){

View File

@@ -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(){

View File

@@ -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(){

View File

@@ -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(){

View File

@@ -19,7 +19,10 @@
*
*/
class UnknownPacket extends RakNetDataPacket{
namespace PocketMine\Network\Protocol;
use PocketMine;
class UnknownPacket extends DataPacket{
public $packetID = -1;
public function pid(){

View File

@@ -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(){

View File

@@ -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(){

View File

@@ -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);

View File

@@ -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;
}
}

View File

@@ -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;

View File

@@ -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
View 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();
}
}
}
}
}

View File

@@ -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;
}

View 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;
}

View 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;
}