New TextPacket, second part!

This commit is contained in:
Shoghi Cervantes 2015-03-19 20:27:51 +01:00
parent 2c59983672
commit 62ba36b474
No known key found for this signature in database
GPG Key ID: 78464DB0A7837F89
4 changed files with 56 additions and 22 deletions

View File

@ -95,7 +95,7 @@ use pocketmine\network\protocol\EntityEventPacket;
use pocketmine\network\protocol\FullChunkDataPacket; use pocketmine\network\protocol\FullChunkDataPacket;
use pocketmine\network\protocol\Info as ProtocolInfo; use pocketmine\network\protocol\Info as ProtocolInfo;
use pocketmine\network\protocol\PlayStatusPacket; use pocketmine\network\protocol\PlayStatusPacket;
use pocketmine\network\protocol\MessagePacket; use pocketmine\network\protocol\TextPacket;
use pocketmine\network\protocol\MoveEntityPacket; use pocketmine\network\protocol\MoveEntityPacket;
use pocketmine\network\protocol\MovePlayerPacket; use pocketmine\network\protocol\MovePlayerPacket;
use pocketmine\network\protocol\SetDifficultyPacket; use pocketmine\network\protocol\SetDifficultyPacket;
@ -2400,14 +2400,29 @@ class Player extends Human implements CommandSender, InventoryHolder, IPlayer{
$mes = explode("\n", $message); $mes = explode("\n", $message);
foreach($mes as $m){ foreach($mes as $m){
if($m !== ""){ if($m !== ""){
$pk = new MessagePacket(); $pk = new TextPacket();
$pk->source = ""; //Do not use this ;) $pk->type = TextPacket::TYPE_RAW;
$pk->message = $m; $pk->message = $m;
$this->dataPacket($pk); $this->dataPacket($pk);
} }
} }
} }
public function sendTranslation($message, array $parameters = []){
if($this->removeFormat !== false){
$message = TextFormat::clean($message);
foreach($parameters as $k => $v){
$parameters[$k] = TextFormat::clean($v);
}
}
$pk = new TextPacket();
$pk->type = TextPacket::TYPE_TRANSLATION;
$pk->message = $message;
$pk->parameters = $parameters;
$this->dataPacket($pk);
}
/** /**
* @param string $message Message to be broadcasted * @param string $message Message to be broadcasted
* @param string $reason Reason showed in console * @param string $reason Reason showed in console

View File

@ -24,8 +24,8 @@ namespace pocketmine\block;
use pocketmine\item\Item; use pocketmine\item\Item;
use pocketmine\level\Level; use pocketmine\level\Level;
use pocketmine\math\AxisAlignedBB; use pocketmine\math\AxisAlignedBB;
use pocketmine\network\protocol\ChatPacket;
use pocketmine\Player; use pocketmine\Player;
use pocketmine\utils\TextFormat;
class Bed extends Transparent{ class Bed extends Transparent{
@ -65,10 +65,7 @@ class Bed extends Transparent{
$isNight = ($time >= Level::TIME_NIGHT and $time < Level::TIME_SUNRISE); $isNight = ($time >= Level::TIME_NIGHT and $time < Level::TIME_SUNRISE);
if($player instanceof Player and !$isNight){ if($player instanceof Player and !$isNight){
$pk = new ChatPacket(); $player->sendMessage(TextFormat::GRAY . "You can only sleep at night");
$pk->message = "You can only sleep at night";
$player->dataPacket($pk);
return true; return true;
} }
@ -89,9 +86,7 @@ class Bed extends Transparent{
$b = $blockWest; $b = $blockWest;
}else{ }else{
if($player instanceof Player){ if($player instanceof Player){
$pk = new ChatPacket(); $player->sendMessage(TextFormat::GRAY . "This bed is incomplete");
$pk->message = "This bed is incomplete";
$player->dataPacket($pk);
} }
return true; return true;
@ -99,9 +94,7 @@ class Bed extends Transparent{
} }
if($player instanceof Player and $player->sleepOn($b) === false){ if($player instanceof Player and $player->sleepOn($b) === false){
$pk = new ChatPacket(); $player->sendMessage(TextFormat::GRAY . "This bed is occupied");
$pk->message = "This bed is occupied";
$player->dataPacket($pk);
} }
return true; return true;

View File

@ -32,7 +32,6 @@ use pocketmine\network\protocol\AddPaintingPacket;
use pocketmine\network\protocol\AddPlayerPacket; use pocketmine\network\protocol\AddPlayerPacket;
use pocketmine\network\protocol\AdventureSettingsPacket; use pocketmine\network\protocol\AdventureSettingsPacket;
use pocketmine\network\protocol\AnimatePacket; use pocketmine\network\protocol\AnimatePacket;
use pocketmine\network\protocol\ChatPacket;
use pocketmine\network\protocol\ContainerClosePacket; use pocketmine\network\protocol\ContainerClosePacket;
use pocketmine\network\protocol\ContainerOpenPacket; use pocketmine\network\protocol\ContainerOpenPacket;
use pocketmine\network\protocol\ContainerSetContentPacket; use pocketmine\network\protocol\ContainerSetContentPacket;
@ -50,7 +49,7 @@ use pocketmine\network\protocol\LevelEventPacket;
use pocketmine\network\protocol\DisconnectPacket; use pocketmine\network\protocol\DisconnectPacket;
use pocketmine\network\protocol\LoginPacket; use pocketmine\network\protocol\LoginPacket;
use pocketmine\network\protocol\PlayStatusPacket; use pocketmine\network\protocol\PlayStatusPacket;
use pocketmine\network\protocol\MessagePacket; use pocketmine\network\protocol\TextPacket;
use pocketmine\network\protocol\MoveEntityPacket; use pocketmine\network\protocol\MoveEntityPacket;
use pocketmine\network\protocol\MovePlayerPacket; use pocketmine\network\protocol\MovePlayerPacket;
use pocketmine\network\protocol\PlayerActionPacket; use pocketmine\network\protocol\PlayerActionPacket;
@ -302,7 +301,7 @@ class RakLibInterface implements ServerInstance, SourceInterface{
$this->registerPacket(ProtocolInfo::LOGIN_PACKET, LoginPacket::class); $this->registerPacket(ProtocolInfo::LOGIN_PACKET, LoginPacket::class);
$this->registerPacket(ProtocolInfo::PLAY_STATUS_PACKET, PlayStatusPacket::class); $this->registerPacket(ProtocolInfo::PLAY_STATUS_PACKET, PlayStatusPacket::class);
$this->registerPacket(ProtocolInfo::DISCONNECT_PACKET, DisconnectPacket::class); $this->registerPacket(ProtocolInfo::DISCONNECT_PACKET, DisconnectPacket::class);
$this->registerPacket(ProtocolInfo::MESSAGE_PACKET, MessagePacket::class); $this->registerPacket(ProtocolInfo::TEXT_PACKET, TextPacket::class);
$this->registerPacket(ProtocolInfo::SET_TIME_PACKET, SetTimePacket::class); $this->registerPacket(ProtocolInfo::SET_TIME_PACKET, SetTimePacket::class);
$this->registerPacket(ProtocolInfo::START_GAME_PACKET, StartGamePacket::class); $this->registerPacket(ProtocolInfo::START_GAME_PACKET, StartGamePacket::class);
$this->registerPacket(ProtocolInfo::ADD_MOB_PACKET, AddMobPacket::class); $this->registerPacket(ProtocolInfo::ADD_MOB_PACKET, AddMobPacket::class);
@ -340,7 +339,6 @@ class RakLibInterface implements ServerInstance, SourceInterface{
$this->registerPacket(ProtocolInfo::CONTAINER_SET_SLOT_PACKET, ContainerSetSlotPacket::class); $this->registerPacket(ProtocolInfo::CONTAINER_SET_SLOT_PACKET, ContainerSetSlotPacket::class);
$this->registerPacket(ProtocolInfo::CONTAINER_SET_DATA_PACKET, ContainerSetDataPacket::class); $this->registerPacket(ProtocolInfo::CONTAINER_SET_DATA_PACKET, ContainerSetDataPacket::class);
$this->registerPacket(ProtocolInfo::CONTAINER_SET_CONTENT_PACKET, ContainerSetContentPacket::class); $this->registerPacket(ProtocolInfo::CONTAINER_SET_CONTENT_PACKET, ContainerSetContentPacket::class);
$this->registerPacket(ProtocolInfo::CHAT_PACKET, ChatPacket::class);
$this->registerPacket(ProtocolInfo::ADVENTURE_SETTINGS_PACKET, AdventureSettingsPacket::class); $this->registerPacket(ProtocolInfo::ADVENTURE_SETTINGS_PACKET, AdventureSettingsPacket::class);
$this->registerPacket(ProtocolInfo::TILE_ENTITY_DATA_PACKET, TileEntityDataPacket::class); $this->registerPacket(ProtocolInfo::TILE_ENTITY_DATA_PACKET, TileEntityDataPacket::class);
$this->registerPacket(ProtocolInfo::SET_DIFFICULTY_PACKET, SetDifficultyPacket::class); $this->registerPacket(ProtocolInfo::SET_DIFFICULTY_PACKET, SetDifficultyPacket::class);

View File

@ -28,6 +28,10 @@ class TextPacket extends DataPacket{
public static $pool = []; public static $pool = [];
public static $next = 0; public static $next = 0;
const TYPE_RAW = 0;
const TYPE_CHAT = 1;
const TYPE_TRANSLATION = 2;
public $type; public $type;
public $source; public $source;
public $message; public $message;
@ -39,15 +43,39 @@ class TextPacket extends DataPacket{
public function decode(){ public function decode(){
$this->type = $this->getByte(); $this->type = $this->getByte();
switch($this->type){
case self::TYPE_CHAT:
$this->source = $this->getString(); $this->source = $this->getString();
case self::TYPE_RAW:
$this->message = $this->getString(); $this->message = $this->getString();
break;
case self::TYPE_TRANSLATION:
$this->message = $this->getString();
$count = $this->getByte();
for($i = 0; $i < $count; ++$count){
$this->parameters[] = $this->getString();
}
}
} }
public function encode(){ public function encode(){
$this->reset(); $this->reset();
$this->putByte($this->type); $this->putByte($this->type);
switch($this->type){
case self::TYPE_CHAT:
$this->putString($this->source); $this->putString($this->source);
case self::TYPE_RAW:
$this->putString($this->message); $this->putString($this->message);
break;
case self::TYPE_TRANSLATION:
$this->putString($this->message);
$this->putByte(count($this->parameters));
foreach($this->parameters as $p){
$this->putString($p);
}
}
} }
} }