Allow parameterizing ResourcePackManager to session handler

this will open the way (in the future) for custom managers to be used, instead of a global thing.
This commit is contained in:
Dylan K. Taylor 2018-07-20 20:08:12 +01:00
parent 30c044f028
commit 59f6821c29
2 changed files with 14 additions and 18 deletions

View File

@ -157,7 +157,7 @@ class NetworkSession{
$pk->status = PlayStatusPacket::LOGIN_SUCCESS; $pk->status = PlayStatusPacket::LOGIN_SUCCESS;
$this->sendDataPacket($pk); $this->sendDataPacket($pk);
$this->setHandler(new ResourcePacksSessionHandler($this->server, $this->player, $this)); $this->setHandler(new ResourcePacksSessionHandler($this->player, $this, $this->server->getResourcePackManager()));
} }
public function onResourcePacksDone() : void{ public function onResourcePacksDone() : void{

View File

@ -32,7 +32,7 @@ use pocketmine\network\mcpe\protocol\ResourcePacksInfoPacket;
use pocketmine\network\mcpe\protocol\ResourcePackStackPacket; use pocketmine\network\mcpe\protocol\ResourcePackStackPacket;
use pocketmine\Player; use pocketmine\Player;
use pocketmine\resourcepacks\ResourcePack; use pocketmine\resourcepacks\ResourcePack;
use pocketmine\Server; use pocketmine\resourcepacks\ResourcePackManager;
/** /**
* Handler used for the resource packs sequence phase of the session. This handler takes care of downloading resource * Handler used for the resource packs sequence phase of the session. This handler takes care of downloading resource
@ -40,24 +40,23 @@ use pocketmine\Server;
*/ */
class ResourcePacksSessionHandler extends SessionHandler{ class ResourcePacksSessionHandler extends SessionHandler{
/** @var Server */
private $server;
/** @var Player */ /** @var Player */
private $player; private $player;
/** @var NetworkSession */ /** @var NetworkSession */
private $session; private $session;
/** @var ResourcePackManager */
private $resourcePackManager;
public function __construct(Server $server, Player $player, NetworkSession $session){ public function __construct(Player $player, NetworkSession $session, ResourcePackManager $resourcePackManager){
$this->server = $server;
$this->player = $player; $this->player = $player;
$this->session = $session; $this->session = $session;
$this->resourcePackManager = $resourcePackManager;
} }
public function setUp() : void{ public function setUp() : void{
$pk = new ResourcePacksInfoPacket(); $pk = new ResourcePacksInfoPacket();
$manager = $this->server->getResourcePackManager(); $pk->resourcePackEntries = $this->resourcePackManager->getResourceStack();
$pk->resourcePackEntries = $manager->getResourceStack(); $pk->mustAccept = $this->resourcePackManager->resourcePacksRequired();
$pk->mustAccept = $manager->resourcePacksRequired();
$this->session->sendDataPacket($pk); $this->session->sendDataPacket($pk);
} }
@ -68,13 +67,12 @@ class ResourcePacksSessionHandler extends SessionHandler{
$this->player->close("", "You must accept resource packs to join this server.", true); $this->player->close("", "You must accept resource packs to join this server.", true);
break; break;
case ResourcePackClientResponsePacket::STATUS_SEND_PACKS: case ResourcePackClientResponsePacket::STATUS_SEND_PACKS:
$manager = $this->server->getResourcePackManager();
foreach($packet->packIds as $uuid){ foreach($packet->packIds as $uuid){
$pack = $manager->getPackById($uuid); $pack = $this->resourcePackManager->getPackById($uuid);
if(!($pack instanceof ResourcePack)){ if(!($pack instanceof ResourcePack)){
//Client requested a resource pack but we don't have it available on the server //Client requested a resource pack but we don't have it available on the server
$this->player->close("", "disconnectionScreen.resourcePack", true); $this->player->close("", "disconnectionScreen.resourcePack", true);
$this->server->getLogger()->debug("Got a resource pack request for unknown pack with UUID " . $uuid . ", available packs: " . implode(", ", $manager->getPackIdList())); $this->player->getServer()->getLogger()->debug("Got a resource pack request for unknown pack with UUID " . $uuid . ", available packs: " . implode(", ", $this->resourcePackManager->getPackIdList()));
return false; return false;
} }
@ -91,9 +89,8 @@ class ResourcePacksSessionHandler extends SessionHandler{
break; break;
case ResourcePackClientResponsePacket::STATUS_HAVE_ALL_PACKS: case ResourcePackClientResponsePacket::STATUS_HAVE_ALL_PACKS:
$pk = new ResourcePackStackPacket(); $pk = new ResourcePackStackPacket();
$manager = $this->server->getResourcePackManager(); $pk->resourcePackStack = $this->resourcePackManager->getResourceStack();
$pk->resourcePackStack = $manager->getResourceStack(); $pk->mustAccept = $this->resourcePackManager->resourcePacksRequired();
$pk->mustAccept = $manager->resourcePacksRequired();
$this->session->sendDataPacket($pk); $this->session->sendDataPacket($pk);
break; break;
case ResourcePackClientResponsePacket::STATUS_COMPLETED: case ResourcePackClientResponsePacket::STATUS_COMPLETED:
@ -107,11 +104,10 @@ class ResourcePacksSessionHandler extends SessionHandler{
} }
public function handleResourcePackChunkRequest(ResourcePackChunkRequestPacket $packet) : bool{ public function handleResourcePackChunkRequest(ResourcePackChunkRequestPacket $packet) : bool{
$manager = $this->server->getResourcePackManager(); $pack = $this->resourcePackManager->getPackById($packet->packId);
$pack = $manager->getPackById($packet->packId);
if(!($pack instanceof ResourcePack)){ if(!($pack instanceof ResourcePack)){
$this->player->close("", "disconnectionScreen.resourcePack", true); $this->player->close("", "disconnectionScreen.resourcePack", true);
$this->server->getLogger()->debug("Got a resource pack chunk request for unknown pack with UUID " . $packet->packId . ", available packs: " . implode(", ", $manager->getPackIdList())); $this->player->getServer()->getLogger()->debug("Got a resource pack chunk request for unknown pack with UUID " . $packet->packId . ", available packs: " . implode(", ", $this->resourcePackManager->getPackIdList()));
return false; return false;
} }