/src/xbeastmode/flagspiral/Loader.php

https://gitlab.com/Skull3x/FlagSpiral · PHP · 273 lines · 198 code · 10 blank · 65 comment · 18 complexity · 6db98b16c0268f185f228b46d2284553 MD5 · raw file

  1. <?php
  2. namespace xbeastmode\flagspiral;
  3. use pocketmine\level\particle\DustParticle;
  4. use pocketmine\level\Position;
  5. use pocketmine\math\Vector3;
  6. use pocketmine\plugin\PluginBase;
  7. class Loader extends PluginBase{
  8. /** @var array */
  9. private $cf;
  10. public function onEnable(){
  11. @mkdir($this->getDataFolder());
  12. @mkdir($this->getDataFolder()."custom/");
  13. $this->saveDefaultConfig();
  14. $this->cf = $this->getConfig()->getAll();
  15. $this->getServer()->getCommandMap()->register("fs", new FlagSpiralCmd($this));
  16. $fh = $this->getServer()->getScheduler()->scheduleRepeatingTask($ft = new FlagSpiralTask($this), 20*$this->cf["flag_time"]);
  17. $cfh = $this->getServer()->getScheduler()->scheduleRepeatingTask($cft = new CustomFlagSpiralTask($this), 20*$this->cf["custom_flag_time"]);
  18. $ft->setHandler($fh);
  19. $cft->setHandler($cfh);
  20. }
  21. /**
  22. * @param Position $pos
  23. * @param $radius
  24. * @param $name
  25. * @return bool
  26. */
  27. public function saveFlag(Position $pos, $radius, $name){
  28. if(!isset($this->cf[$name])){
  29. $pos = [$pos->x, $pos->y, $pos->z, $pos->level->getName()];
  30. $this->cf[$name] = ["radius" => $radius, "position" => "{$pos[0]}:{$pos[1]}:{$pos[2]}:{$pos[3]}", "flag" => "mexico"];
  31. $this->getConfig()->setAll($this->cf);
  32. $this->getConfig()->save();
  33. return true;
  34. }
  35. return false;
  36. }
  37. /**
  38. * @param Position $pos
  39. * @param $name
  40. * @return bool
  41. */
  42. public function changeFlagPos(Position $pos, $name){
  43. if(isset($this->cf[$name])){
  44. $pos = [$pos->x, $pos->y, $pos->z, $pos->level->getName()];
  45. $this->cf[$name]["position"] = "{$pos[0]}:{$pos[1]}:{$pos[2]}:{$pos[3]}";
  46. $this->getConfig()->setAll($this->cf);
  47. $this->getConfig()->save();
  48. return true;
  49. }
  50. return true;
  51. }
  52. /**
  53. * @param $name
  54. * @return bool
  55. */
  56. public function deleteFlag($name){
  57. if(isset($this->cf[$name])){
  58. unset($this->cf[$name]);
  59. $this->getConfig()->setAll($this->cf);
  60. $this->getConfig()->save();
  61. return true;
  62. }
  63. return false;
  64. }
  65. /**
  66. * @param Position $pos
  67. * @param $radius
  68. * @param $name
  69. * @param $creator
  70. * @param array $p1
  71. * @param array $p2
  72. * @param array $p3
  73. * @return bool
  74. */
  75. public function saveCustomFlag(Position $pos, $radius, $name, $creator, $p1, $p2, $p3){
  76. if(!file_exists($this->getDataFolder()."custom/$name.dat")) {
  77. $pos = [$pos->x, $pos->y, $pos->z, $pos->level->getName()];
  78. $p1 = explode("-", $p1);
  79. $p2 = explode("-", $p2);
  80. $p3 = explode("-", $p3);
  81. $defaults =
  82. ["name" => $name, "creator" => $creator, "radius" => (int)$radius, "position" => "{$pos[0]}:{$pos[1]}:{$pos[2]}:{$pos[3]}",
  83. "r" => [$p1[0], $p1[1], $p1[2]], "g" => [$p2[0], $p2[1], $p2[2]], "b" => [$p3[0], $p3[1], $p3[2]]];
  84. file_put_contents($this->getDataFolder() . "custom/$name.dat", serialize($defaults));
  85. return true;
  86. }
  87. return false;
  88. }
  89. /**
  90. * @param $name
  91. * @return bool
  92. */
  93. public function deleteCustomFlag($name){
  94. if(file_exists($this->getDataFolder()."custom/$name.dat")) {
  95. unlink($this->getDataFolder()."custom/$name.dat");
  96. return true;
  97. }
  98. return false;
  99. }
  100. /**
  101. * @return array
  102. */
  103. public function getCustomFlagData(){
  104. $data = [];
  105. $dir = glob($this->getDataFolder()."custom/*", GLOB_BRACE);
  106. foreach($dir as $d){
  107. $data[] = unserialize(file_get_contents($d));
  108. }
  109. return $data === null ? null : $data;
  110. }
  111. public function spawnCustomFlags(){
  112. $data = $this->getCustomFlagData();
  113. if($data !== null) {
  114. for ($i = 0; $i < count($data); ++$i) {
  115. $radius = $data[$i]["radius"];
  116. $pos = $data[$i]["position"];
  117. $pos = explode(":", $pos);
  118. $level = $this->getServer()->getLevelByName($pos[3]);
  119. $r = $data[$i]["r"];
  120. $g = $data[$i]["g"];
  121. $b = $data[$i]["b"];
  122. $this->spawnCustomFlag(new Position($pos[0], $pos[1], $pos[2], $level), $radius, $r, $g, $b);
  123. }
  124. }
  125. }
  126. /**
  127. * this logic is by xBeastMode, no code was stolen
  128. */
  129. public function spawnFlagSpiral(){
  130. foreach($this->cf as $name => $c) {
  131. if ($name === "flag_time" || $name == "custom_flag_time") continue;
  132. $radius = $this->cf[$name]["radius"];
  133. $p = explode(":", $this->cf[$name]["position"]);
  134. $spX = $p[0];
  135. $spY = $p[1];
  136. $spZ = $p[2];
  137. $spLvl = $p[3];
  138. $p = new Position($spX, $spY, $spZ, $this->getServer()->getLevelByName($spLvl));
  139. switch (strtolower($this->cf[$name]["flag"])) {
  140. case 'mexico':
  141. case 'italy':
  142. for ($i = 0; $i <= $radius * 25; $i += 0.10) {
  143. $x = $radius * cos($i);
  144. $z = $radius * sin($i);
  145. $p->getLevel()->addParticle(new DustParticle(new Vector3($p->x + $x, $p->y + $i * M_PI, $p->z + $z), 51, 102, 0));//DARK GREEN
  146. $p->getLevel()->addParticle(new DustParticle(new Vector3($p->x + $x, $p->y + $i * M_PI, $p->z + $z), 51, 102, 0));//DARK GREEN
  147. $p->getLevel()->addParticle(new DustParticle(new Vector3($p->x - $x, $p->y + $i * M_PI + 4, $p->z - $z), 255, 255, 255));//WHITE
  148. $p->getLevel()->addParticle(new DustParticle(new Vector3($p->x - $x, $p->y + $i * M_PI + 4, $p->z - $z), 255, 255, 255));//WHITE
  149. $p->getLevel()->addParticle(new DustParticle(new Vector3($p->x - $x, $p->y + $i * M_PI, $p->z - $z), 204, 0, 0));//RED
  150. $p->getLevel()->addParticle(new DustParticle(new Vector3($p->x - $x, $p->y + $i * M_PI, $p->z - $z), 204, 0, 0));//RED
  151. }
  152. break;
  153. case 'belgium':
  154. case 'germany':
  155. for ($i = 0; $i <= $radius * 25; $i += 0.10) {
  156. $x = $radius * cos($i);
  157. $z = $radius * sin($i);
  158. $p->getLevel()->addParticle(new DustParticle(new Vector3($p->x + $x, $p->y + $i * M_PI, $p->z + $z), 0, 0, 0));//BLACK
  159. $p->getLevel()->addParticle(new DustParticle(new Vector3($p->x + $x, $p->y + $i * M_PI, $p->z + $z), 0, 0, 0));//BLACK
  160. $p->getLevel()->addParticle(new DustParticle(new Vector3($p->x - $x, $p->y + $i * M_PI + 4, $p->z - $z), 255, 0, 0));//RED
  161. $p->getLevel()->addParticle(new DustParticle(new Vector3($p->x - $x, $p->y + $i * M_PI + 4, $p->z - $z), 255, 0, 0));//RED
  162. $p->getLevel()->addParticle(new DustParticle(new Vector3($p->x - $x, $p->y + $i * M_PI, $p->z - $z), 255, 255, 0));//RED
  163. $p->getLevel()->addParticle(new DustParticle(new Vector3($p->x - $x, $p->y + $i * M_PI, $p->z - $z), 255, 255, 0));//RED
  164. }
  165. break;
  166. case 'russia':
  167. for ($i = 0; $i <= $radius * 25; $i += 0.10) {
  168. $x = $radius * cos($i);
  169. $z = $radius * sin($i);
  170. $p->getLevel()->addParticle(new DustParticle(new Vector3($p->x + $x, $p->y + $i * M_PI, $p->z + $z), 255, 255, 255));//WHITE
  171. $p->getLevel()->addParticle(new DustParticle(new Vector3($p->x + $x, $p->y + $i * M_PI, $p->z + $z), 255, 255, 255));//WHITE
  172. $p->getLevel()->addParticle(new DustParticle(new Vector3($p->x - $x, $p->y + $i * M_PI + 4, $p->z - $z), 0, 0, 204));//BLUE
  173. $p->getLevel()->addParticle(new DustParticle(new Vector3($p->x - $x, $p->y + $i * M_PI + 4, $p->z - $z), 0, 0, 204));//BLUE
  174. $p->getLevel()->addParticle(new DustParticle(new Vector3($p->x - $x, $p->y + $i * M_PI, $p->z - $z), 255, 0, 0));//RED
  175. $p->getLevel()->addParticle(new DustParticle(new Vector3($p->x - $x, $p->y + $i * M_PI, $p->z - $z), 255, 0, 0));//RED
  176. }
  177. break;
  178. case 'uk':
  179. case 'britain':
  180. case 'france':
  181. for ($i = 0; $i <= $radius * 25; $i += 0.10) {
  182. $x = $radius * cos($i);
  183. $z = $radius * sin($i);
  184. $p->getLevel()->addParticle(new DustParticle(new Vector3($p->x + $x, $p->y + $i * M_PI, $p->z + $z), 0, 0, 204));//BLUE
  185. $p->getLevel()->addParticle(new DustParticle(new Vector3($p->x + $x, $p->y + $i * M_PI, $p->z + $z), 0, 0, 204));//BLUE
  186. $p->getLevel()->addParticle(new DustParticle(new Vector3($p->x - $x, $p->y + $i * M_PI + 4, $p->z - $z), 255, 255, 255));//WHITE
  187. $p->getLevel()->addParticle(new DustParticle(new Vector3($p->x - $x, $p->y + $i * M_PI + 4, $p->z - $z), 255, 255, 255));//WHITE
  188. $p->getLevel()->addParticle(new DustParticle(new Vector3($p->x - $x, $p->y + $i * M_PI, $p->z - $z), 204, 0, 0));//RED
  189. $p->getLevel()->addParticle(new DustParticle(new Vector3($p->x - $x, $p->y + $i * M_PI, $p->z - $z), 204, 0, 0));//RED
  190. }
  191. break;
  192. case 'usa':
  193. case 'america':
  194. for ($i = 0; $i <= $radius * 25; $i += 0.10) {
  195. $x = $radius * cos($i);
  196. $z = $radius * sin($i);
  197. $p->getLevel()->addParticle(new DustParticle(new Vector3($p->x + $x, $p->y + $i * M_PI, $p->z + $z), 0, 0, 204));//BLUE
  198. $p->getLevel()->addParticle(new DustParticle(new Vector3($p->x + $x, $p->y + $i * M_PI, $p->z + $z), 0, 0, 204));//BLUE
  199. $p->getLevel()->addParticle(new DustParticle(new Vector3($p->x - $x, $p->y + $i * M_PI + 4, $p->z - $z), 204, 0, 0));//RED
  200. $p->getLevel()->addParticle(new DustParticle(new Vector3($p->x - $x, $p->y + $i * M_PI + 4, $p->z - $z), 204, 0, 0));//RED
  201. $p->getLevel()->addParticle(new DustParticle(new Vector3($p->x - $x, $p->y + $i * M_PI, $p->z - $z), 255, 255, 255));//WHITE
  202. $p->getLevel()->addParticle(new DustParticle(new Vector3($p->x - $x, $p->y + $i * M_PI, $p->z - $z), 255, 255, 255));//WHITE
  203. }
  204. break;
  205. case 'canada':
  206. for ($i = 0; $i <= $radius * 25; $i += 0.10) {
  207. $x = $radius * cos($i);
  208. $z = $radius * sin($i);
  209. $p->getLevel()->addParticle(new DustParticle(new Vector3($p->x + $x, $p->y + $i * M_PI, $p->z + $z), 204, 0, 0));//RED
  210. $p->getLevel()->addParticle(new DustParticle(new Vector3($p->x + $x, $p->y + $i * M_PI, $p->z + $z), 204, 0, 0));//RED
  211. $p->getLevel()->addParticle(new DustParticle(new Vector3($p->x - $x, $p->y + $i * M_PI + 4, $p->z - $z), 255, 255, 255));//WHITE
  212. $p->getLevel()->addParticle(new DustParticle(new Vector3($p->x - $x, $p->y + $i * M_PI + 4, $p->z - $z), 255, 255, 255));//WHITE
  213. $p->getLevel()->addParticle(new DustParticle(new Vector3($p->x - $x, $p->y + $i * M_PI, $p->z - $z), 204, 0, 0));//RED
  214. $p->getLevel()->addParticle(new DustParticle(new Vector3($p->x - $x, $p->y + $i * M_PI, $p->z - $z), 204, 0, 0));//RED
  215. }
  216. break;
  217. case 'ireland':
  218. for ($i = 0; $i <= $radius * 25; $i += 0.10) {
  219. $x = $radius * cos($i);
  220. $z = $radius * sin($i);
  221. $p->getLevel()->addParticle(new DustParticle(new Vector3($p->x + $x, $p->y + $i * M_PI, $p->z + $z), 51, 102, 0));//DARK GREEN
  222. $p->getLevel()->addParticle(new DustParticle(new Vector3($p->x + $x, $p->y + $i * M_PI, $p->z + $z), 51, 102, 0));//DARK GREEN
  223. $p->getLevel()->addParticle(new DustParticle(new Vector3($p->x - $x, $p->y + $i * M_PI + 4, $p->z - $z), 255, 255, 255));//WHITE
  224. $p->getLevel()->addParticle(new DustParticle(new Vector3($p->x - $x, $p->y + $i * M_PI + 4, $p->z - $z), 255, 255, 255));//WHITE
  225. $p->getLevel()->addParticle(new DustParticle(new Vector3($p->x - $x, $p->y + $i * M_PI, $p->z - $z), 255, 153, 51));//ORANGE
  226. $p->getLevel()->addParticle(new DustParticle(new Vector3($p->x - $x, $p->y + $i * M_PI, $p->z - $z), 255, 153, 51));//ORANGE
  227. }
  228. break;
  229. case 'scotland':
  230. for ($i = 0; $i <= $radius * 25; $i += 0.10) {
  231. $x = $radius * cos($i);
  232. $z = $radius * sin($i);
  233. $p->getLevel()->addParticle(new DustParticle(new Vector3($p->x + $x, $p->y + $i * M_PI, $p->z + $z), 0, 0, 204));//BLUE
  234. $p->getLevel()->addParticle(new DustParticle(new Vector3($p->x + $x, $p->y + $i * M_PI, $p->z + $z), 0, 0, 204));//BLUE
  235. $p->getLevel()->addParticle(new DustParticle(new Vector3($p->x - $x, $p->y + $i * M_PI, $p->z - $z), 255, 255, 255));//WHITE
  236. $p->getLevel()->addParticle(new DustParticle(new Vector3($p->x - $x, $p->y + $i * M_PI, $p->z - $z), 255, 255, 255));//WHITE
  237. }
  238. break;
  239. }
  240. }
  241. }
  242. /**
  243. * @param Position $p
  244. * @param $radius
  245. * @param array $part1 -> [0] => RED, [1] => GREEN, [2] => BLUE
  246. * @param array $part2 -> [0] => RED, [1] => GREEN, [2] => BLUE
  247. * @param array $part3 -> [0] => RED, [1] => GREEN, [2] => BLUE
  248. */
  249. public function spawnCustomFlag(Position $p, $radius, array $part1 = [0,0,0], array $part2 = [0,0,0], array $part3 = [0,0,0]){
  250. for ($i = 0; $i <= $radius * 25; $i += 0.10) {
  251. $x = $radius * cos($i);
  252. $z = $radius * sin($i);
  253. $p->getLevel()->addParticle(new DustParticle(new Vector3($p->x + $x, $p->y + $i * M_PI, $p->z + $z), $part1[0], $part1[1], $part1[2]));//FIRST PART OF FLAG
  254. $p->getLevel()->addParticle(new DustParticle(new Vector3($p->x + $x, $p->y + $i * M_PI, $p->z + $z), $part1[0], $part1[1], $part1[2]));//FIRST PART OF FLAG
  255. $p->getLevel()->addParticle(new DustParticle(new Vector3($p->x - $x, $p->y + $i * M_PI + 4, $p->z - $z), $part2[0], $part2[1], $part2[2]));//SECOND PART OF FLAG
  256. $p->getLevel()->addParticle(new DustParticle(new Vector3($p->x - $x, $p->y + $i * M_PI + 4, $p->z - $z), $part2[0], $part2[1], $part2[2]));//SECOND PART OF FLAG
  257. $p->getLevel()->addParticle(new DustParticle(new Vector3($p->x - $x, $p->y + $i * M_PI, $p->z - $z), $part3[0], $part3[1], $part3[2]));//THIRD PART OF FLAG
  258. $p->getLevel()->addParticle(new DustParticle(new Vector3($p->x - $x, $p->y + $i * M_PI, $p->z - $z), $part3[0], $part3[1], $part3[2]));//THIRD PART OF FLAG
  259. }
  260. }
  261. }