Player: guard against repeated resource pack sequence

this can happen because of the client being super broken in 1.12
close #3036
This commit is contained in:
Dylan K. Taylor 2019-10-03 11:19:45 +01:00
parent 4e060bc13f
commit 562b47a1e5

View File

@ -261,6 +261,9 @@ class Player extends Human implements CommandSender, ChunkLoader, IPlayer{
/** @var bool */ /** @var bool */
public $loggedIn = false; public $loggedIn = false;
/** @var bool */
private $resourcePacksDone = false;
/** @var bool */ /** @var bool */
public $spawned = false; public $spawned = false;
@ -2056,6 +2059,9 @@ class Player extends Human implements CommandSender, ChunkLoader, IPlayer{
} }
public function handleResourcePackClientResponse(ResourcePackClientResponsePacket $packet) : bool{ public function handleResourcePackClientResponse(ResourcePackClientResponsePacket $packet) : bool{
if($this->resourcePacksDone){
return false;
}
switch($packet->status){ switch($packet->status){
case ResourcePackClientResponsePacket::STATUS_REFUSED: case ResourcePackClientResponsePacket::STATUS_REFUSED:
//TODO: add lang strings for this //TODO: add lang strings for this
@ -2097,6 +2103,7 @@ class Player extends Human implements CommandSender, ChunkLoader, IPlayer{
$this->dataPacket($pk); $this->dataPacket($pk);
break; break;
case ResourcePackClientResponsePacket::STATUS_COMPLETED: case ResourcePackClientResponsePacket::STATUS_COMPLETED:
$this->resourcePacksDone = true;
$this->completeLoginSequence(); $this->completeLoginSequence();
break; break;
default: default:
@ -3049,6 +3056,9 @@ class Player extends Human implements CommandSender, ChunkLoader, IPlayer{
} }
public function handleResourcePackChunkRequest(ResourcePackChunkRequestPacket $packet) : bool{ public function handleResourcePackChunkRequest(ResourcePackChunkRequestPacket $packet) : bool{
if($this->resourcePacksDone){
return false;
}
$manager = $this->server->getResourcePackManager(); $manager = $this->server->getResourcePackManager();
$pack = $manager->getPackById($packet->packId); $pack = $manager->getPackById($packet->packId);
if(!($pack instanceof ResourcePack)){ if(!($pack instanceof ResourcePack)){