/** @var Player $player */ /** @var string $capeData */ $skin = $player->getSkin(); $player->setSkin(new Skin($skin->getSkinId(), $skin->getSkinData(), $capeData, $skin->getGeometryName(), $skin->getGeometryData()));
It must be string, not resource. Firstly convert .png to string with this function. You can use this on every gd operation. PHP: public function convertToString(string $file) : string{ assert(file_exists($file)); $image = imagecreatefrompng($file); $data = ''; for($y = 0, $height = imagesy($image); $y < $height; $y++){ for($x = 0, $width = imagesx($image); $x < $width; $x++){ $color = imagecolorat($image, $x, $y); $data .= pack("c", ($color >> 16) & 0xFF) . pack("c", ($color >> 8) & 0xFF) . pack("c", $color & 0xFF) . pack("c", 255 - (($color & 0x7F000000) >> 23)); } } imagedestroy($image); return $data;} After set player skin. PHP: $capeData = $this->convertToString($this->plugin->getDataFolder() . "cape.png");$skin = $player->getSkin();$player->setSkin(new Skin($skin->getSkinId(), $skin->getSkinData(), $capeData, $skin->getGeometryName(), $skin->getGeometryData()));$player->sendSkin();
I think you showed the wrong error line. You are indeed passing a string there. Check your line numbers again