Advertisement
Guest User

Untitled

a guest
Jun 19th, 2019
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.02 KB | None | 0 0
  1. <?php
  2.  
  3. declare(strict_types=1);
  4.  
  5. namespace AlexBrin\Parachute;
  6.  
  7. use pocketmine\entity\Skin;
  8. use pocketmine\event\Listener;
  9. use pocketmine\event\player\PlayerJoinEvent;
  10. use pocketmine\plugin\PluginBase;
  11.  
  12. class Parachute extends PluginBase implements Listener {
  13.  
  14. /**
  15. * @type string
  16. */
  17. private $skinData;
  18.  
  19. /**
  20. * @type string
  21. */
  22. private $geometryData;
  23.  
  24. protected function onEnable() {
  25. $f = $this->getDataFolder();
  26. if(!is_dir($f))
  27. @mkdir($f);
  28.  
  29. $this->saveResource('model.json');
  30. $this->saveResource('skydiver.png');
  31.  
  32. if(!file_exists($f . 'skin.data'))
  33. $this->prepareImage();
  34.  
  35. $this->skinData = file_get_contents($f . 'skin.data');
  36. $this->geometryData = file_get_contents($f . 'model.json');
  37.  
  38. $this->getServer()->getPluginManager()->registerEvents($this, $this);
  39. }
  40.  
  41. public function onPlayerJoin(PlayerJoinEvent $event) {
  42. $player = $event->getPlayer();
  43. $player->changeSkin(
  44. new Skin(
  45. 'Standard_Custom',
  46. $this->skinData,
  47. '',
  48. 'geometry.skydiver',
  49. $this->geometryData
  50. ), 'geometry.skydiver', $player->getSkin()->getGeometryName()
  51. );
  52. }
  53.  
  54. /**
  55. * Переводит изображение в понятный майнкрафту формат
  56. */
  57. private function prepareImage() {
  58. $skin = imagecreatefrompng($this->getDataFolder() . 'skydiver.png');
  59.  
  60. $skinData = "";
  61. for($y = 0, $h = imagesy($skin); $y < $h; $y++)
  62. for($x = 0, $w = imagesx($skin); $x < $w; $x++) {
  63. $rgb = imagecolorat($skin, $x, $y);
  64. $skinData .= chr(($rgb >> 16) & 0xFF)
  65. . chr(($rgb >> 8) & 0xFF)
  66. . chr($rgb & 0xFF)
  67. . chr(255);
  68. }
  69.  
  70. file_put_contents($this->getDataFolder() . 'skin.data', $skinData);
  71. }
  72.  
  73. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement