Move persona skin hack to legacyskinadapter

This commit is contained in:
Stephen 2019-11-20 21:52:49 -05:00
parent be9c413a9e
commit c8d0cb315b
2 changed files with 9 additions and 14 deletions

View File

@ -146,6 +146,7 @@ use pocketmine\network\mcpe\protocol\types\CommandParameter;
use pocketmine\network\mcpe\protocol\types\ContainerIds;
use pocketmine\network\mcpe\protocol\types\DimensionIds;
use pocketmine\network\mcpe\protocol\types\PlayerPermissions;
use pocketmine\network\mcpe\protocol\types\SkinAdapterSingleton;
use pocketmine\network\mcpe\protocol\types\SkinAnimation;
use pocketmine\network\mcpe\protocol\types\SkinData;
use pocketmine\network\mcpe\protocol\types\SkinImage;
@ -1922,7 +1923,8 @@ class Player extends Human implements CommandSender, ChunkLoader, IPlayer{
foreach($packet->clientData["AnimatedImageData"] as $animation){
$animations[] = new SkinAnimation(new SkinImage($animation["ImageHeight"], $animation["ImageWidth"], $animation["Image"]), $animation["Type"], $animation["Frames"]);
}
new SkinData(
$skinData = new SkinData(
$packet->clientData["SkinId"],
base64_decode($packet->clientData["SkinResourcePatch"] ?? ""),
new SkinImage($packet->clientData["SkinImageHeight"], $packet->clientData["SkinImageWidth"], base64_decode($packet->clientData["SkinData"])),
@ -1936,18 +1938,7 @@ class Player extends Human implements CommandSender, ChunkLoader, IPlayer{
$packet->clientData["CapeId"] ?? ""
);
$skinData = base64_decode($packet->clientData["SkinData"]);
if((bool) $packet->clientData["PersonaSkin"]){
$skinData = str_repeat(random_bytes(3) . "\xff", 2048);
}
$skin = new Skin(
$packet->clientData["SkinId"],
$skinData,
base64_decode($packet->clientData["CapeData"] ?? ""),
base64_decode($packet->clientData["SkinResourcePatch"] ?? ""),
base64_decode($packet->clientData["SkinGeometryData"] ?? "")
);
$skin = SkinAdapterSingleton::get()->fromSkinData($skinData);
if(!$skin->isValid()){
$this->close("", "disconnectionScreen.invalidSkin");

View File

@ -32,6 +32,10 @@ class LegacySkinAdapter implements SkinAdapter{
}
public function fromSkinData(SkinData $data) : Skin{
return new Skin($data->skinId, $data->skinImage->getData(), $data->capeImage->getData(), $data->resourcePatch, $data->geometryData);
$skinData = $data->skinImage->getData();
if($data->persona){
$skinData = str_repeat(random_bytes(3) . "\xff", 2048);
}
return new Skin($data->skinId, $skinData, $data->capeImage->getData(), $data->resourcePatch, $data->geometryData);
}
}