PageRenderTime 50ms CodeModel.GetById 23ms RepoModel.GetById 1ms app.codeStats 0ms

/CrateKeys/src/CrateKeys/Main.php

https://gitlab.com/Skull3x/Pocketmine-MP-Plugins
PHP | 279 lines | 243 code | 24 blank | 12 comment | 24 complexity | 3c48588ec017b594057031a37f36cc5e MD5 | raw file
  1. <?php
  2. /**
  3. * RandomDropper Copyright (C) 2015 CDFalcon
  4. *
  5. * This program is free software: you can redistribute it and/or modify
  6. * it under the terms of the GNU Lesser General Public License as published by
  7. * the Free Software Foundation, either version 3 of the License, or
  8. * (at your option) any later version.
  9. *
  10. * @author CDFalcon
  11. * @version 0.1.0
  12. * @link https://github.com/CDFalcon/Pocketmine-MP-Plugins
  13. */
  14. namespace CrateKeys;
  15. use pocketmine\event\Listener;
  16. use pocketmine\level\Level;
  17. use pocketmine\plugin\PluginBase;
  18. use pocketmine\utils\Config;
  19. use pocketmine\level\Position;
  20. use pocketmine\event\player\PlayerInteractEvent;
  21. use pocketmine\block\Block;
  22. use pocketmine\item\Item;
  23. use pocketmine\inventory;
  24. use pocketmine\inventory\PlayerInventory;
  25. use pocketmine\inventory\BaseInventory;
  26. use pocketmine\utils\TextFormat;
  27. use pocketmine\nbt\tag\Compound;
  28. class Main extends PluginBase implements Listener {
  29. private $item = [];
  30. private $tag = TextFormat::BLUE."[RandomDropper] ".TextFormat::WHITE;
  31. private $setup;
  32. public function onEnable(){
  33. $dataResources = $this->getDataFolder()."/Config/";
  34. if(!file_exists($this->getDataFolder()))
  35. @mkdir($this->getDataFolder(), 0755, true);
  36. if(!file_exists($dataResources))
  37. @mkdir($dataResources, 0755, true);
  38. $this->setup = new Config($dataResources. "config.yml", Config::YAML, [
  39. "item1" => ["1"],
  40. "item2" => ["1"],
  41. "item3" => ["1"],
  42. "item4" => ["1"],
  43. "item5" => ["1"],
  44. "item6" => ["1"],
  45. "item7" => ["1"],
  46. "item8" => ["1"],
  47. "item9" => ["1"],
  48. "item10" => ["1"]]);
  49. $this->setup->save();
  50. foreach($this->setup->get("item1") as $id){
  51. $e = explode(":", $id);
  52. $id = $e[0];
  53. $damage = 0;
  54. if(count($e) > 1){
  55. $damage = $e[1];
  56. }
  57. $this->item[] = ["id" => $id, "damage" => $damage];
  58. }
  59. foreach($this->setup->get("item2") as $id){
  60. $e = explode(":", $id);
  61. $id = $e[0];
  62. $damage = 0;
  63. if(count($e) > 1){
  64. $damage = $e[1];
  65. }
  66. $this->item[] = ["id" => $id, "damage" => $damage];
  67. }
  68. foreach($this->setup->get("item3") as $id){
  69. $e = explode(":", $id);
  70. $id = $e[0];
  71. $damage = 0;
  72. if(count($e) > 1){
  73. $damage = $e[1];
  74. }
  75. $this->item[] = ["id" => $id, "damage" => $damage];
  76. }
  77. foreach($this->setup->get("item4") as $id){
  78. $e = explode(":", $id);
  79. $id = $e[0];
  80. $damage = 0;
  81. if(count($e) > 1){
  82. $damage = $e[1];
  83. }
  84. $this->item[] = ["id" => $id, "damage" => $damage];
  85. }
  86. foreach($this->setup->get("item5") as $id){
  87. $e = explode(":", $id);
  88. $id = $e[0];
  89. $damage = 0;
  90. if(count($e) > 1){
  91. $damage = $e[1];
  92. }
  93. $this->item[] = ["id" => $id, "damage" => $damage];
  94. }
  95. foreach($this->setup->get("item6") as $id){
  96. $e = explode(":", $id);
  97. $id = $e[0];
  98. $damage = 0;
  99. if(count($e) > 1){
  100. $damage = $e[1];
  101. }
  102. $this->item[] = ["id" => $id, "damage" => $damage];
  103. }
  104. foreach($this->setup->get("item7") as $id){
  105. $e = explode(":", $id);
  106. $id = $e[0];
  107. $damage = 0;
  108. if(count($e) > 1){
  109. $damage = $e[1];
  110. }
  111. $this->item[] = ["id" => $id, "damage" => $damage];
  112. }
  113. foreach($this->setup->get("item8") as $id){
  114. $e = explode(":", $id);
  115. $id = $e[0];
  116. $damage = 0;
  117. if(count($e) > 1){
  118. $damage = $e[1];
  119. }
  120. $this->item[] = ["id" => $id, "damage" => $damage];
  121. }
  122. foreach($this->setup->get("item9") as $id){
  123. $e = explode(":", $id);
  124. $id = $e[0];
  125. $damage = 0;
  126. if(count($e) > 1){
  127. $damage = $e[1];
  128. }
  129. $this->item[] = ["id" => $id, "damage" => $damage];
  130. }
  131. foreach($this->setup->get("item10") as $id){
  132. $e = explode(":", $id);
  133. $id = $e[0];
  134. $damage = 0;
  135. if(count($e) > 1){
  136. $damage = $e[1];
  137. }
  138. $this->item[] = ["id" => $id, "damage" => $damage];
  139. }
  140. $this->getServer()->getPluginManager()->registerEvents($this, $this);
  141. }
  142. public function onTouch(PlayerInteractEvent $event){
  143. $block = $event->getBlock();
  144. $player = $event->getPlayer();
  145. $inventory = $player->getInventory();
  146. if($block->getId() === Block::CHEST){
  147. if($inventory->contains(new \pocketmine\item\Emerald(0,1))) {
  148. $event->setCancelled();
  149. switch(mt_rand(1, 10)){
  150. case 1:
  151. if(count($this->item) > 0){
  152. $r = mt_rand(0, count($this->item)-1);
  153. $item = $this->item[$r];
  154. $player->getLevel()->dropItem($block, new Item($item["id"], $item["damage"], 1));
  155. $player->sendMessage("Used CrateKey");
  156. $inventory->removeItem(new \pocketmine\item\Emerald(0,1));
  157. break;
  158. }
  159. break;
  160. case 2:
  161. if(count($this->item) > 0){
  162. $r = mt_rand(0, count($this->item)-1);
  163. $item = $this->item[$r];
  164. $player->getLevel()->dropItem($block, new Item($item["id"], $item["damage"], 1));
  165. $player->sendMessage("Used CrateKey");
  166. $inventory->removeItem(new \pocketmine\item\Emerald(0,1));
  167. break;
  168. }
  169. break;
  170. case 3:
  171. if(count($this->item) > 0){
  172. $r = mt_rand(0, count($this->item)-1);
  173. $item = $this->item[$r];
  174. $player->getLevel()->dropItem($block, new Item($item["id"], $item["damage"], 1));
  175. $player->sendMessage("Used CrateKey");
  176. $inventory->removeItem(new \pocketmine\item\Emerald(0,1));
  177. break;
  178. }
  179. break;
  180. case 4:
  181. if(count($this->item) > 0){
  182. $r = mt_rand(0, count($this->item)-1);
  183. $item = $this->item[$r];
  184. $player->getLevel()->dropItem($block, new Item($item["id"], $item["damage"], 1));
  185. $player->sendMessage("Used CrateKey");
  186. $inventory->removeItem(new \pocketmine\item\Emerald(0,1));
  187. break;
  188. }
  189. break;
  190. case 5:
  191. if(count($this->item) > 0){
  192. $r = mt_rand(0, count($this->item)-1);
  193. $item = $this->item[$r];
  194. $player->getLevel()->dropItem($block, new Item($item["id"], $item["damage"], 1));
  195. $player->sendMessage("Used CrateKey");
  196. $inventory->removeItem(new \pocketmine\item\Emerald(0,1));
  197. break;
  198. }
  199. break;
  200. case 6:
  201. if(count($this->item) > 0){
  202. $r = mt_rand(0, count($this->item)-1);
  203. $item = $this->item[$r];
  204. $player->getLevel()->dropItem($block, new Item($item["id"], $item["damage"], 1));
  205. $player->sendMessage("Used CrateKey");
  206. $inventory->removeItem(new \pocketmine\item\Emerald(0,1));
  207. break;
  208. }
  209. break;
  210. case 7:
  211. if(count($this->item) > 0){
  212. $r = mt_rand(0, count($this->item)-1);
  213. $item = $this->item[$r];
  214. $player->getLevel()->dropItem($block, new Item($item["id"], $item["damage"], 1));
  215. $player->sendMessage("Used CrateKey");
  216. $inventory->removeItem(new \pocketmine\item\Emerald(0,1));
  217. break;
  218. }
  219. break;
  220. case 8:
  221. if(count($this->item) > 0){
  222. $r = mt_rand(0, count($this->item)-1);
  223. $item = $this->item[$r];
  224. $player->getLevel()->dropItem($block, new Item($item["id"], $item["damage"], 1));
  225. $player->sendMessage("Used CrateKey");
  226. $inventory->removeItem(new \pocketmine\item\Emerald(0,1));
  227. break;
  228. }
  229. break;
  230. case 9:
  231. if(count($this->item) > 0){
  232. $r = mt_rand(0, count($this->item)-1);
  233. $item = $this->item[$r];
  234. $player->getLevel()->dropItem($block, new Item($item["id"], $item["damage"], 1));
  235. $player->sendMessage("Used CrateKey");
  236. $inventory->removeItem(new \pocketmine\item\Emerald(0,1));
  237. break;
  238. }
  239. break;
  240. case 10:
  241. if(count($this->item) > 0){
  242. $r = mt_rand(0, count($this->item)-1);
  243. $item = $this->item[$r];
  244. $player->getLevel()->dropItem($block, new Item($item["id"], $item["damage"], 1));
  245. $player->sendMessage("Used CrateKey");
  246. $inventory->removeItem(new \pocketmine\item\Emerald(0,1));
  247. break;
  248. }
  249. break;
  250. }
  251. }
  252. $player->getLevel()->save();
  253. }
  254. }
  255. }