From b54f256feaee6ea81cf643072e0e2087e8ea9d11 Mon Sep 17 00:00:00 2001 From: "Dylan K. Taylor" Date: Sun, 1 Oct 2017 16:49:56 +0100 Subject: [PATCH] Added a hack to cut down on excess skin geometry bloat there are further ways this can be debloated, but non-pretty-printing it cuts the size down by ~70-80%. --- src/pocketmine/Player.php | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/pocketmine/Player.php b/src/pocketmine/Player.php index d25f62f96..d5b32caf5 100644 --- a/src/pocketmine/Player.php +++ b/src/pocketmine/Player.php @@ -2018,12 +2018,23 @@ class Player extends Human implements CommandSender, ChunkLoader, IPlayer{ return true; } + /* Mojang, some stupid reason, send every single model for every single skin in the selected skin-pack. + * Not only that, they are pretty-printed. This decode/encode is to get rid of the pretty-print, which cuts down + * significantly on the amount of wasted bytes. + * TODO: find out what model crap can be safely dropped from the packet (unless it gets fixed first) + */ + + $geometryJsonEncoded = base64_decode($packet->clientData["SkinGeometry"] ?? ""); + if($geometryJsonEncoded !== ""){ + $geometryJsonEncoded = json_encode(json_decode($geometryJsonEncoded)); + } + $skin = new Skin( $packet->clientData["SkinId"], base64_decode($packet->clientData["SkinData"] ?? ""), base64_decode($packet->clientData["CapeData"] ?? ""), $packet->clientData["SkinGeometryName"], - base64_decode($packet->clientData["SkinGeometry"] ?? "") + $geometryJsonEncoded ); if(!$skin->isValid()){