Synchronize hotbar slots, removed RotateHeadPacket, improved MoveEntityPacket, FullChunkDataPacket

This commit is contained in:
Shoghi Cervantes 2015-03-24 16:26:46 +01:00
parent 4e934654ef
commit d1760d9bb8
10 changed files with 64 additions and 134 deletions

View File

@ -635,7 +635,7 @@ class Player extends Human implements CommandSender, InventoryHolder, IPlayer{
$this->level->requestChunk($X, $Z, $this, LevelProvider::ORDER_ZXY);
}
if(count($this->usedChunks) >= 16 and $this->spawned === false){
if(count($this->usedChunks) >= 8 and $this->spawned === false){
$spawned = 0;
foreach($this->usedChunks as $d){
if($d === true){
@ -643,7 +643,7 @@ class Player extends Human implements CommandSender, InventoryHolder, IPlayer{
}
}
if($spawned < 8){
if($spawned < 4){
return;
}
@ -1071,8 +1071,8 @@ class Player extends Human implements CommandSender, InventoryHolder, IPlayer{
$this->motionToSend[$entityId] = [$entityId, $x, $y, $z];
}
public function addEntityMovement($entityId, $x, $y, $z, $yaw, $pitch){
$this->moveToSend[$entityId] = [$entityId, $x, $y, $z, $yaw, $pitch];
public function addEntityMovement($entityId, $x, $y, $z, $yaw, $pitch, $headYaw = null){
$this->moveToSend[$entityId] = [$entityId, $x, $y, $z, $yaw, $headYaw === null ? $yaw : $headYaw, $pitch];
}
protected function processMovement($currentTick){
@ -1574,19 +1574,6 @@ class Player extends Human implements CommandSender, InventoryHolder, IPlayer{
$this->orderChunks();
$this->sendNextChunk();
break;
case ProtocolInfo::ROTATE_HEAD_PACKET:
if($this->spawned === false or $this->dead === true){
break;
}
$packet->yaw %= 360;
$packet->pitch %= 360;
if($packet->yaw < 0){
$packet->yaw += 360;
}
$this->setRotation($packet->yaw, $this->pitch);
break;
case ProtocolInfo::MOVE_PLAYER_PACKET:
$newPos = new Vector3($packet->x, $packet->y, $packet->z);
@ -1657,7 +1644,13 @@ class Player extends Human implements CommandSender, InventoryHolder, IPlayer{
break;
}
}else{
$this->inventory->setHeldItemSlot($packet->slot); //set Air
if($packet->selectedSlot >= 0 and $packet->selectedSlot < 9){
$this->inventory->setHeldItemIndex($packet->selectedSlot);
$this->inventory->setHeldItemSlot($packet->slot);
}else{
$this->inventory->sendContents($this);
break;
}
}
}elseif(!isset($item) or $slot === -1 or $item->getId() !== $packet->item or $item->getDamage() !== $packet->meta){ // packet error or not implemented
$this->inventory->sendContents($this);
@ -1670,7 +1663,13 @@ class Player extends Human implements CommandSender, InventoryHolder, IPlayer{
);
$this->inventory->setHeldItemIndex($packet->slot);
}else{
if($packet->selectedSlot >= 0 and $packet->selectedSlot < 9){
$this->inventory->setHeldItemIndex($packet->selectedSlot);
$this->inventory->setHeldItemSlot($slot);
}else{
$this->inventory->sendContents($this);
break;
}
}
$this->inventory->sendHeldItem($this->hasSpawned);
@ -1716,6 +1715,8 @@ class Player extends Human implements CommandSender, InventoryHolder, IPlayer{
$block = $target->getSide($packet->face);
$this->level->sendBlocks([$this], [$target, $block], UpdateBlockPacket::FLAG_ALL_PRIORITY);
$this->inventory->sendHeldItem($this);
break;
}elseif($packet->face === 0xff){
if($this->isCreative()){
@ -1894,6 +1895,8 @@ class Player extends Human implements CommandSender, InventoryHolder, IPlayer{
$this->level->sendBlocks([$this], [$target], UpdateBlockPacket::FLAG_ALL_PRIORITY);
$this->inventory->sendHeldItem($this);
if($tile instanceof Spawnable){
$tile->spawnTo($this);
}

View File

@ -766,24 +766,11 @@ abstract class Entity extends Location implements Metadatable{
$this->lastYaw = $this->yaw;
$this->lastPitch = $this->pitch;
if($this instanceof Human){
$pk = new MovePlayerPacket();
$pk->eid = $this->id;
$pk->x = $this->x;
$pk->y = $this->y;
$pk->z = $this->z;
$pk->yaw = $this->yaw;
$pk->pitch = $this->pitch;
$pk->bodyYaw = $this->yaw;
Server::broadcastPacket($this->hasSpawned, $pk);
}else{
foreach($this->hasSpawned as $player){
$player->addEntityMovement($this->id, $this->x, $this->y + $this->getEyeHeight(), $this->z, $this->yaw, $this->pitch);
$player->addEntityMovement($this->id, $this->x, $this->y + $this->getEyeHeight(), $this->z, $this->yaw, $this->pitch, $this->yaw);
}
}
}
if(($this->lastMotionX != $this->motionX or $this->lastMotionY != $this->motionY or $this->lastMotionZ != $this->motionZ)){
$this->lastMotionX = $this->motionX;
$this->lastMotionY = $this->motionY;
@ -1428,7 +1415,7 @@ abstract class Entity extends Location implements Metadatable{
$this->lastPitch = $this->pitch;
foreach($this->hasSpawned as $player){
$player->addEntityMovement($this->getId(), $this->x, $this->y, $this->z, $this->yaw, $this->pitch);
$player->addEntityMovement($this->getId(), $this->x, $this->y, $this->z, $this->yaw, $this->pitch, $this->yaw);
}
return true;

View File

@ -102,7 +102,7 @@ class ChunkRequestTask extends AsyncTask{
$biomeColors = pack("N*", ...$this->biomeColors);
$ordered = zlib_encode(Binary::writeLInt($this->chunkX) . Binary::writeLInt($this->chunkZ) . $orderedIds . $orderedData . $orderedSkyLight . $orderedLight . $this->biomeIds . $biomeColors . $this->tiles, ZLIB_ENCODING_DEFLATE, $this->compressionLevel);
$ordered = zlib_encode($orderedIds . $orderedData . $orderedSkyLight . $orderedLight . $this->biomeIds . $biomeColors . $this->tiles, ZLIB_ENCODING_DEFLATE, $this->compressionLevel);
$this->setResult($ordered);
}

View File

@ -149,7 +149,6 @@ class LevelDB extends BaseLevelProvider{
$biomeColors = pack("N*", ...$chunk->getBiomeColorArray());
$ordered = zlib_encode(
Binary::writeLInt($x) . Binary::writeLInt($z) .
$chunk->getBlockIdArray() .
$chunk->getBlockDataArray() .
$chunk->getBlockSkyLightArray() .

View File

@ -130,7 +130,6 @@ class McRegion extends BaseLevelProvider{
$biomeColors = pack("N*", ...$chunk->getBiomeColorArray());
$ordered = zlib_encode(
Binary::writeLInt($x) . Binary::writeLInt($z) .
$chunk->getBlockIdArray() .
$chunk->getBlockDataArray() .
$chunk->getBlockSkyLightArray() .

View File

@ -59,7 +59,6 @@ use pocketmine\network\protocol\RemoveBlockPacket;
use pocketmine\network\protocol\RemoveEntityPacket;
use pocketmine\network\protocol\RemovePlayerPacket;
use pocketmine\network\protocol\RespawnPacket;
use pocketmine\network\protocol\RotateHeadPacket;
use pocketmine\network\protocol\SetDifficultyPacket;
use pocketmine\network\protocol\SetEntityDataPacket;
use pocketmine\network\protocol\SetEntityMotionPacket;
@ -312,7 +311,6 @@ class RakLibInterface implements ServerInstance, SourceInterface{
$this->registerPacket(ProtocolInfo::ADD_ITEM_ENTITY_PACKET, AddItemEntityPacket::class);
$this->registerPacket(ProtocolInfo::TAKE_ITEM_ENTITY_PACKET, TakeItemEntityPacket::class);
$this->registerPacket(ProtocolInfo::MOVE_ENTITY_PACKET, MoveEntityPacket::class);
$this->registerPacket(ProtocolInfo::ROTATE_HEAD_PACKET, RotateHeadPacket::class);
$this->registerPacket(ProtocolInfo::MOVE_PLAYER_PACKET, MovePlayerPacket::class);
$this->registerPacket(ProtocolInfo::REMOVE_BLOCK_PACKET, RemoveBlockPacket::class);
$this->registerPacket(ProtocolInfo::UPDATE_BLOCK_PACKET, UpdateBlockPacket::class);

View File

@ -42,6 +42,8 @@ class FullChunkDataPacket extends DataPacket{
public function encode(){
$this->reset();
$this->putInt($this->chunkX);
$this->putInt($this->chunkZ);
$this->put($this->data);
}

View File

@ -52,45 +52,44 @@ interface Info{
const TAKE_ITEM_ENTITY_PACKET = 0x8e;
const MOVE_ENTITY_PACKET = 0x8f;
const ROTATE_HEAD_PACKET = 0x90;
const MOVE_PLAYER_PACKET = 0x91;
const MOVE_PLAYER_PACKET = 0x90;
const REMOVE_BLOCK_PACKET = 0x92;
const UPDATE_BLOCK_PACKET = 0x93;
const REMOVE_BLOCK_PACKET = 0x91;
const UPDATE_BLOCK_PACKET = 0x92;
const ADD_PAINTING_PACKET = 0x94;
const ADD_PAINTING_PACKET = 0x93;
const EXPLODE_PACKET = 0x95;
const EXPLODE_PACKET = 0x94;
const LEVEL_EVENT_PACKET = 0x96;
const TILE_EVENT_PACKET = 0x97;
const ENTITY_EVENT_PACKET = 0x98;
const MOB_EFFECT_PACKET = 0x99;
const LEVEL_EVENT_PACKET = 0x95;
const TILE_EVENT_PACKET = 0x96;
const ENTITY_EVENT_PACKET = 0x97;
const MOB_EFFECT_PACKET = 0x98;
const PLAYER_EQUIPMENT_PACKET = 0x9a;
const PLAYER_ARMOR_EQUIPMENT_PACKET = 0x9b;
const INTERACT_PACKET = 0x9c;
const USE_ITEM_PACKET = 0x9d;
const PLAYER_ACTION_PACKET = 0x9e;
const HURT_ARMOR_PACKET = 0x9f;
const SET_ENTITY_DATA_PACKET = 0xa0;
const SET_ENTITY_MOTION_PACKET = 0xa1;
//const SET_ENTITY_LINK_PACKET = 0xa2;
const SET_HEALTH_PACKET = 0xa3;
const SET_SPAWN_POSITION_PACKET = 0xa4;
const ANIMATE_PACKET = 0xa5;
const RESPAWN_PACKET = 0xa6;
const DROP_ITEM_PACKET = 0xa7;
const CONTAINER_OPEN_PACKET = 0xa8;
const CONTAINER_CLOSE_PACKET = 0xa9;
const CONTAINER_SET_SLOT_PACKET = 0xaa;
const CONTAINER_SET_DATA_PACKET = 0xab;
const CONTAINER_SET_CONTENT_PACKET = 0xac;
//const CONTAINER_ACK_PACKET = 0xad;
const ADVENTURE_SETTINGS_PACKET = 0xae;
const TILE_ENTITY_DATA_PACKET = 0xaf;
//const PLAYER_INPUT_PACKET = 0xb0;
const FULL_CHUNK_DATA_PACKET = 0xb1;
const SET_DIFFICULTY_PACKET = 0xb2;
const PLAYER_EQUIPMENT_PACKET = 0x99;
const PLAYER_ARMOR_EQUIPMENT_PACKET = 0x9a;
const INTERACT_PACKET = 0x9b;
const USE_ITEM_PACKET = 0x9c;
const PLAYER_ACTION_PACKET = 0x9d;
const HURT_ARMOR_PACKET = 0x9e;
const SET_ENTITY_DATA_PACKET = 0x9f;
const SET_ENTITY_MOTION_PACKET = 0xa0;
//const SET_ENTITY_LINK_PACKET = 0xa1;
const SET_HEALTH_PACKET = 0xa2;
const SET_SPAWN_POSITION_PACKET = 0xa3;
const ANIMATE_PACKET = 0xa4;
const RESPAWN_PACKET = 0xa5;
const DROP_ITEM_PACKET = 0xa6;
const CONTAINER_OPEN_PACKET = 0xa7;
const CONTAINER_CLOSE_PACKET = 0xa8;
const CONTAINER_SET_SLOT_PACKET = 0xa9;
const CONTAINER_SET_DATA_PACKET = 0xaa;
const CONTAINER_SET_CONTENT_PACKET = 0xab;
//const CONTAINER_ACK_PACKET = 0xac;
const ADVENTURE_SETTINGS_PACKET = 0xad;
const TILE_ENTITY_DATA_PACKET = 0xae;
//const PLAYER_INPUT_PACKET = 0xaf;
const FULL_CHUNK_DATA_PACKET = 0xb0;
const SET_DIFFICULTY_PACKET = 0xb1;
}

View File

@ -55,7 +55,8 @@ class MoveEntityPacket extends DataPacket{
$this->putFloat($d[2]); //y
$this->putFloat($d[3]); //z
$this->putFloat($d[4]); //yaw
$this->putFloat($d[5]); //pitch
$this->putFloat($d[5]); //headYaw
$this->putFloat($d[6]); //pitch
}
}

View File

@ -1,58 +0,0 @@
<?php
/*
*
* ____ _ _ __ __ _ __ __ ____
* | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
* | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
* | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
* |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* @author PocketMine Team
* @link http://www.pocketmine.net/
*
*
*/
namespace pocketmine\network\protocol;
#include <rules/DataPacket.h>
class RotateHeadPacket extends DataPacket{
public static $pool = [];
public static $next = 0;
// eid, yaw
/** @var array[] */
public $entities = [];
public function pid(){
return Info::ROTATE_HEAD_PACKET;
}
public function clean(){
$this->entities = [];
return parent::clean();
}
public function decode(){
}
public function encode(){
$this->reset();
$this->putInt(count($this->entities));
foreach($this->entities as $d){
$this->putLong($d[0]); //eid
$this->putFloat($d[1]);
}
}
}