Advertisement
Guest User

Untitled

a guest
Jul 23rd, 2018
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 82.01 KB | None | 0 0
  1. <?php
  2.  
  3. namespace ByBezge;
  4.  
  5. use pocketmine\block\Block;
  6. use pocketmine\Command\Command;
  7. use pocketmine\Command\CommandSender;
  8. use pocketmine\entity\Entity;
  9. use pocketmine\entity\Villager;
  10. use pocketmine\event\block\BlockBreakEvent;
  11. use pocketmine\event\block\BlockPlaceEvent;
  12. use pocketmine\event\entity\EntityDamageByEntityEvent;
  13. use pocketmine\event\entity\EntityDamageEvent;
  14. use pocketmine\event\inventory\InventoryCloseEvent;
  15. use pocketmine\event\inventory\InventoryPickupItemEvent;
  16. use pocketmine\event\inventory\InventoryTransactionEvent;
  17. use pocketmine\event\Listener;
  18. use pocketmine\event\player\PlayerChatEvent;
  19. use pocketmine\event\player\PlayerDeathEvent;
  20. use pocketmine\event\player\PlayerDropItemEvent;
  21. use pocketmine\event\player\PlayerInteractEvent;
  22. use pocketmine\event\player\PlayerItemHeldEvent;
  23. use pocketmine\event\player\PlayerJoinEvent;
  24. use pocketmine\event\player\PlayerMoveEvent;
  25. use pocketmine\event\player\PlayerRespawnEvent;
  26. use pocketmine\inventory\ChestInventory;
  27. use pocketmine\item\Item;
  28. use pocketmine\level\format\FullChunk;
  29. use pocketmine\level\Level;
  30. use pocketmine\level\Position;
  31. use pocketmine\math\Vector3;
  32. use pocketmine\nbt\NBT;
  33. use pocketmine\nbt\tag\ByteTag;
  34. use pocketmine\nbt\tag\CompoundTag;
  35. use pocketmine\nbt\tag\DoubleTag;
  36. use pocketmine\nbt\tag\FloatTag;
  37. use pocketmine\nbt\tag\IntTag;
  38. use pocketmine\nbt\tag\ListTag;
  39. use pocketmine\nbt\tag\ShortTag;
  40. use pocketmine\nbt\tag\StringTag;
  41. use pocketmine\Player;
  42. use pocketmine\plugin\PluginBase;
  43. use pocketmine\scheduler\PluginTask;
  44. use pocketmine\tile\Chest;
  45. use pocketmine\tile\Sign;
  46. use pocketmine\tile\Tile;
  47. use pocketmine\utils\Config;
  48. use pocketmine\utils\TextFormat;
  49.  
  50. class Bedwars extends PluginBase implements Listener {
  51.  
  52. public $prefix = TextFormat::GRAY."[".TextFormat::DARK_AQUA."Bedwars".TextFormat::GRAY."]".TextFormat::WHITE." ";
  53. public $registerSign = false;
  54. public $registerSignWHO = "";
  55. public $registerSignArena = "Arena1";
  56. public $registerBed = false;
  57. public $registerBedWHO = "";
  58. public $registerBedArena = "Arena1";
  59. public $registerBedTeam = "WHITE";
  60. public $mode = 0;
  61. public $arena = "Arena1";
  62. public $lasthit = array();
  63. public $pickup = array();
  64. public $isShopping = array();
  65. public $breakableblocks = array();
  66.  
  67. public function onEnable(){
  68.  
  69. //Entity::registerEntity(Villager::class, true);
  70.  
  71. $this->getServer()->getPluginManager()->registerEvents($this, $this);
  72. $this->getLogger()->info($this->prefix.TextFormat::GREEN."Plugin wurde Erfolgreich Aktiviert!");
  73. @mkdir($this->getDataFolder());
  74. @mkdir($this->getDataFolder()."Arenas");
  75. @mkdir($this->getDataFolder()."Maps");
  76.  
  77. $files = scandir($this->getDataFolder()."Arenas");
  78. foreach($files as $filename){
  79. if($filename != "." && $filename != ".."){
  80. $filename = str_replace(".yml", "", $filename);
  81.  
  82. $this->resetArena($filename);
  83.  
  84. $levels = $this->getArenaWorlds($filename);
  85. foreach($levels as $levelname){
  86. $level = $this->getServer()->getLevelByName($levelname);
  87. if($level instanceof Level){
  88. $this->getServer()->unloadLevel($level);
  89. }
  90. $this->copymap($this->getDataFolder() . "Maps/" . $levelname, $this->getServer()->getDataPath() . "worlds/" . $levelname);
  91. $this->getServer()->loadLevel($levelname);
  92. }
  93.  
  94. $this->getServer()->loadLevel($this->getWarteLobby($filename));
  95. }
  96. }
  97. $cfg = new Config($this->getDataFolder()."config.yml", Config::YAML);
  98. if(empty($cfg->get("LobbyTimer"))){
  99. $cfg->set("LobbyTimer", 61);
  100. $cfg->save();
  101. }
  102. if(empty($cfg->get("GameTimer"))){
  103. $cfg->set("GameTimer", 30*60 +1);
  104. $cfg->save();
  105. }
  106. if(empty($cfg->get("EndTimer"))){
  107. $cfg->set("EndTimer", 16);
  108. $cfg->save();
  109. }
  110. if(empty($cfg->get("BreakableBlocks"))){
  111. $cfg->set("BreakableBlocks", array(Item::SANDSTONE, Item::CHEST));
  112. $cfg->save();
  113. }
  114. $this->breakableblocks = $cfg->get("BreakableBlocks");
  115. $shop = new Config($this->getDataFolder()."shop.yml", Config::YAML);
  116.  
  117. if ($shop->get("Shop") == null) {
  118. $shop->set("Shop", array(
  119. Item::WOODEN_SWORD,
  120. array(
  121. array(
  122. Item::STICK, 1, 384, 8
  123. ),
  124. array(
  125. Item::WOODEN_SWORD, 1, 384, 12
  126. ),
  127. array(
  128. Item::STONE_SWORD, 1, 384, 20
  129. ),
  130. array(
  131. Item::IRON_SWORD, 1, 384, 40
  132. )
  133. ),
  134. Item::SANDSTONE,
  135. array(
  136. array(
  137. Item::SANDSTONE, 4, 384, 1
  138. ),
  139. array(
  140. Item::GLASS, 6, 384, 1
  141. )
  142. ),
  143. Item::LEATHER_TUNIC,
  144. array(
  145. array(
  146. Item::LEATHER_CAP, 1, 384, 2
  147. ),
  148. array(
  149. Item::LEATHER_PANTS, 1, 384, 4
  150. ),
  151. array(
  152. Item::LEATHER_BOOTS, 1, 384, 2
  153. ),
  154. array(
  155. Item::LEATHER_TUNIC, 1, 384, 8
  156. ),
  157. array(
  158. Item::CHAIN_CHESTPLATE, 1, 384, 20
  159. )
  160. )
  161. )
  162. );
  163. $shop->save();
  164. }
  165.  
  166.  
  167. $this->getServer()->getScheduler()->scheduleRepeatingTask(new BWRefreshSigns($this), 20);
  168. $this->getServer()->getScheduler()->scheduleRepeatingTask(new BWGameSender($this), 20);
  169.  
  170. }
  171. ############################################################################################################
  172. ############################################################################################################
  173. ############################################################################################################
  174. ################################# ===[EIGENE FUNKTIONEN]=== #########################################
  175. ############################################################################################################
  176. ############################################################################################################
  177. ############################################################################################################
  178. public function copymap($src, $dst) {
  179. $dir = opendir($src);
  180. @mkdir($dst);
  181. while (false !== ( $file = readdir($dir))) {
  182. if (( $file != '.' ) && ( $file != '..' )) {
  183. if (is_dir($src . '/' . $file)) {
  184. $this->copymap($src . '/' . $file, $dst . '/' . $file);
  185. } else {
  186. copy($src . '/' . $file, $dst . '/' . $file);
  187. }
  188. }
  189. }
  190. closedir($dir);
  191. }
  192. public function getTeams($arena){
  193. $config = new Config($this->getDataFolder()."Arenas/".$arena.".yml", Config::YAML);
  194. $array = array();
  195. foreach($this->getAllTeams() as $team){
  196. if(!empty($config->getNested("Spawn.".$team))){
  197. $array[] = $team;
  198. }
  199. }
  200.  
  201. return $array;
  202. }
  203. public function getPlayers($arena){
  204. $config = new Config($this->getDataFolder()."Arenas/".$arena.".yml", Config::YAML);
  205.  
  206. $playersXXX = $config->get("Players");
  207.  
  208. $players = array();
  209.  
  210. foreach ($playersXXX as $x){
  211. if($x != "steve steve"){
  212. $players[] = $x;
  213. }
  214. }
  215.  
  216. return $players;
  217. }
  218. public function getTeam($pn){
  219.  
  220. $pn = str_replace("§", "", $pn);
  221. $pn = str_replace(TextFormat::ESCAPE, "", $pn);
  222. $color = $pn{0};
  223. return $this->convertColorToTeam($color);
  224. }
  225. public function getAvailableTeams($arena){
  226. $teams = $this->getTeams($arena);
  227. $config = new Config($this->getDataFolder()."Arenas/".$arena.".yml", Config::YAML);
  228.  
  229. $players = $this->getPlayers($arena);
  230.  
  231. $availableTeams = array();
  232.  
  233. $ppt = (int) $config->get("PlayersPerTeam");
  234.  
  235. $teamcount = 0;
  236. foreach($teams as $team){
  237.  
  238. foreach($players as $pn){
  239. $p = $this->getServer()->getPlayerExact($pn);
  240. if($p != null){
  241. $pnn = $p->getNameTag();
  242. if($this->getTeam($pnn) === $team){
  243. $teamcount++;
  244. }
  245. }
  246. }
  247. if($teamcount < $ppt){
  248. $availableTeams[] = $team;
  249. }
  250. $teamcount = 0;
  251. }
  252.  
  253. $array = array();
  254. $teamcount = 0;
  255. $teamcount2 = 0;
  256. foreach($availableTeams as $team){
  257.  
  258. if(count($array) == 0){
  259. $array[] = $team;
  260. } else {
  261. foreach($players as $pn){
  262. $p = $this->getServer()->getPlayerExact($pn);
  263. if($p != null){
  264. $pnn = $p->getNameTag();
  265. if($this->getTeam($pnn) === $team){
  266. $teamcount++;
  267. }
  268. }
  269. }
  270. foreach($players as $pn){
  271. $p = $this->getServer()->getPlayerExact($pn);
  272. if($p != null){
  273. $pnn = $p->getNameTag();
  274. if($this->getTeam($pnn) === $array[0]){
  275. $teamcount2++;
  276. }
  277. }
  278. }
  279. if($teamcount >= $teamcount2){
  280. //hinten anhängen
  281. array_push($array, $team);
  282. } else {
  283. array_unshift($array, $team);
  284. }
  285. $teamcount = 0;
  286. $teamcount2 = 0;
  287. }
  288.  
  289. }
  290.  
  291. return $array;
  292. }
  293. public function getAvailableTeam($arena){
  294.  
  295. $teams = $this->getAvailableTeams($arena);
  296. if(isset($teams[0])){
  297. return $teams[0];
  298. } else {
  299. return "WHITE";
  300. }
  301. }
  302. public function getAliveTeams($arena){
  303. $alive = array();
  304.  
  305. $teams = $this->getTeams($arena);
  306. $players = $this->getPlayers($arena);
  307.  
  308. $teamcount = 0;
  309. foreach($teams as $team){
  310. foreach($players as $pn){
  311. $p = $this->getServer()->getPlayerExact($pn);
  312. if($p != null) {
  313. $pnn = $p->getNameTag();
  314. if ($this->getTeam($pnn) == $team) {
  315. $teamcount++;
  316. }
  317. }
  318. }
  319. if($teamcount != 0){
  320. $alive[] = $team;
  321. }
  322. $teamcount = 0;
  323. }
  324.  
  325. return $alive;
  326. }
  327. public function convertColorToTeam($color){
  328.  
  329. if($color == "9")return "BLUE";
  330. if($color == "c")return "RED";
  331. if($color == "a")return "GREEN";
  332. if($color == "e")return "YELLOW";
  333. if($color == "5")return "PURPLE";
  334. if($color == "0")return "BLACK";
  335. if($color == "7")return "GRAY";
  336. if($color == "b")return "AQUA";
  337.  
  338. return "WHITE";
  339. }
  340. public function convertTeamToColor($team){
  341.  
  342. if($team == "BLUE")return "9";
  343. if($team == "RED")return "c";
  344. if($team == "GREEN")return "a";
  345. if($team == "YELLOW")return "e";
  346. if($team == "PURPLE")return "5";
  347. if($team == "BLACK")return "0";
  348. if($team == "GRAY")return "7";
  349. if($team == "AQUA")return "b";
  350.  
  351. return "f";
  352. }
  353. public function getTeamColor($team){
  354.  
  355. if($team == "BLUE")return TextFormat::BLUE;
  356. if($team == "RED")return TextFormat::RED;
  357. if($team == "GREEN")return TextFormat::GREEN;
  358. if($team == "YELLOW")return TextFormat::YELLOW;
  359. if($team == "PURPLE")return TextFormat::DARK_PURPLE;
  360. if($team == "BLACK")return TextFormat::BLACK;
  361. if($team == "GRAY")return TextFormat::GRAY;
  362. if($team == "AQUA")return TextFormat::AQUA;
  363.  
  364. return TextFormat::WHITE;
  365. }
  366. public function resetArena($arena, $mapreset = false){
  367. $config = new Config($this->getDataFolder()."Arenas/".$arena.".yml", Config::YAML);
  368.  
  369. $cfg = new Config($this->getDataFolder()."config.yml", Config::YAML);
  370.  
  371. if($mapreset === true){
  372. $this->resetMaps($arena);
  373. }
  374.  
  375. $config->set("LobbyTimer", $cfg->get("LobbyTimer"));
  376. $config->set("GameTimer", $cfg->get("GameTimer"));
  377. $config->set("EndTimer", $cfg->get("EndTimer"));
  378. $config->set("Status", "Lobby");
  379. $config->set("Players", array("steve steve"));
  380. $config->save();
  381. foreach($this->getTeams($arena) as $team){
  382. $config->setNested("Bed.".$team.".Alive", true);
  383. $config->save();
  384. }
  385.  
  386. $this->getLogger()->info(TextFormat::GREEN."Arena ".TextFormat::AQUA.$arena.TextFormat::GREEN." wurde Erfolgreich geladen!");
  387. }
  388. public function createArena($arena, $teams, $ppt){
  389. $config = new Config($this->getDataFolder()."Arenas/".$arena.".yml", Config::YAML);
  390.  
  391. $cfg = new Config($this->getDataFolder()."config.yml", Config::YAML);
  392.  
  393. $config->set("LobbyTimer", $cfg->get("LobbyTimer"));
  394. $config->set("GameTimer", $cfg->get("GameTimer"));
  395. $config->set("EndTimer", $cfg->get("EndTimer"));
  396. $config->set("Status", "Lobby");
  397. $config->set("Players", array("steve steve"));
  398. $config->set("Teams", $teams);
  399. $config->set("PlayersPerTeam", $ppt);
  400. $config->save();
  401.  
  402. $this->getLogger()->info(TextFormat::GREEN."Arena ".TextFormat::AQUA.$arena.TextFormat::GREEN." wurde Erfolgreich erstellt!");
  403. }
  404. public function resetMaps($arena){
  405. $levels = $this->getArenaWorlds($arena);
  406. foreach($levels as $levelname){
  407. $level = $this->getServer()->getLevelByName($levelname);
  408. if($level instanceof Level){
  409. $this->getServer()->unloadLevel($level);
  410. }
  411. $this->copymap($this->getDataFolder() . "Maps/" . $levelname, $this->getServer()->getDataPath() . "worlds/" . $levelname);
  412. $this->getServer()->loadLevel($levelname);
  413. }
  414. }
  415. public function saveMaps($arena){
  416. $levels = $this->getArenaWorlds($arena);
  417. foreach($levels as $levelname){
  418. $level = $this->getServer()->getLevelByName($levelname);
  419. $this->copymap($this->getServer()->getDataPath() . "worlds/" . $levelname, $this->getDataFolder() . "Maps/" . $levelname);
  420. }
  421. }
  422. public function getFigthWorld($arena){
  423. $level = "noWorld";
  424. $config = new Config($this->getDataFolder()."Arenas/".$arena.".yml", Config::YAML);
  425.  
  426. foreach($this->getTeams($arena) as $team){
  427. $level = $config->getNested("Spawn.".$team.".Welt");
  428. }
  429.  
  430. return $level;
  431. }
  432. public function getWarteLobby($arena){
  433. $levels = array();
  434. $config = new Config($this->getDataFolder()."Arenas/".$arena.".yml", Config::YAML);
  435. return $config->getNested("Spawn.Lobby.Welt");
  436. }
  437. public function getArenaWorlds($arena){
  438. $levels = array();
  439. $config = new Config($this->getDataFolder()."Arenas/".$arena.".yml", Config::YAML);
  440.  
  441. foreach($this->getAllTeams() as $team){
  442. if(!empty($config->getNested("Spawn.".$team.".Welt"))){
  443. $newlevel = $config->getNested("Spawn.".$team.".Welt");
  444. if(!in_array($newlevel, $levels)){
  445. $levels[] = $newlevel;
  446. }
  447. }
  448. }
  449.  
  450. return $levels;
  451. }
  452. public function setSpawn($arena, $team, Player $p){
  453. $config = new Config($this->getDataFolder()."Arenas/".$arena.".yml", Config::YAML);
  454.  
  455. $config->setNested("Spawn.".$team.".Welt", $p->getLevel()->getName());
  456. $config->setNested("Spawn.".$team.".X", $p->getX());
  457. $config->setNested("Spawn.".$team.".Y", $p->getY());
  458. $config->setNested("Spawn.".$team.".Z", $p->getZ());
  459. $config->setNested("Spawn.".$team.".Yaw", $p->getYaw());
  460. $config->setNested("Spawn.".$team.".Pitch", $p->getPitch());
  461. $config->save();
  462. }
  463. public function setLobby($arena, Player $p){
  464. $config = new Config($this->getDataFolder()."Arenas/".$arena.".yml", Config::YAML);
  465.  
  466. $config->setNested("Spawn.Lobby.Welt", $p->getLevel()->getName());
  467. $config->setNested("Spawn.Lobby.X", $p->getX());
  468. $config->setNested("Spawn.Lobby.Y", $p->getY());
  469. $config->setNested("Spawn.Lobby.Z", $p->getZ());
  470. $config->setNested("Spawn.Lobby.Yaw", $p->getYaw());
  471. $config->setNested("Spawn.Lobby.Pitch", $p->getPitch());
  472. $config->save();
  473. }
  474. public function arenaExists($arena){
  475. $files = scandir($this->getDataFolder()."Arenas");
  476. foreach($files as $filename){
  477. if($filename != "." && $filename != ".."){
  478. $filename = str_replace(".yml", "", $filename);
  479.  
  480. if($filename == $arena){
  481. return true;
  482. }
  483. }
  484. }
  485. return false;
  486. }
  487. public function TeleportToWaitingLobby($arena, Player $p){
  488.  
  489. $p->setHealth(20);
  490. $p->setFood(20);
  491. $p->setGamemode(0);
  492. $p->getInventory()->clearAll();
  493. $p->setExpLevel(0);
  494.  
  495. $config = new Config($this->getDataFolder()."Arenas/".$arena.".yml", Config::YAML);
  496.  
  497. $welt = $config->getNested("Spawn.Lobby.Welt");
  498. $x = $config->getNested("Spawn.Lobby.X");
  499. $y = $config->getNested("Spawn.Lobby.Y");
  500. $z = $config->getNested("Spawn.Lobby.Z");
  501. $yaw = $config->getNested("Spawn.Lobby.Yaw");
  502. $pitch = $config->getNested("Spawn.Lobby.Pitch");
  503.  
  504. $p->teleport($this->getServer()->getLevelByName($welt)->getSafeSpawn(), 0, 0);
  505. $p->teleport(new Vector3($x, $y, $z), $yaw, $pitch);
  506. }
  507. public function getAllTeams(){
  508. $teams = array(
  509. "BLUE",//1
  510. "RED",//2
  511. "GREEN",//3
  512. "YELLOW",//4
  513.  
  514. "PURPLE",//5
  515. "BLACK",//6
  516. "GRAY",//7
  517. "AQUA"//8
  518. );
  519. return $teams;
  520. }
  521. public function Debug($debug){
  522. $this->getLogger()->info($debug);
  523. }
  524. public function addPlayerToArena($arena, $name){
  525.  
  526. $config = new Config($this->getDataFolder()."Arenas/".$arena.".yml", Config::YAML);
  527.  
  528. $players = $this->getPlayers($arena);
  529.  
  530. $players[] = $name;
  531.  
  532. $config->set("Players", $players);
  533. $config->save();
  534. //$this->getLogger()->info("Spieler: ".$name." , wurde in arena -> ".$arena." geschickt");
  535. }
  536. public function removePlayerFromArena($arena, $name){
  537. $config = new Config($this->getDataFolder()."Arenas/".$arena.".yml", Config::YAML);
  538.  
  539. $playersXXX = $this->getPlayers($arena);
  540.  
  541. $players = array();
  542. foreach ($playersXXX as $pn){
  543. if($pn != $name){
  544. $players[] = $pn;
  545. }
  546. }
  547.  
  548. $config->set("Players", $players);
  549. $config->save();
  550. }
  551. public function getArena(Player $p){
  552. $files = scandir($this->getDataFolder()."Arenas");
  553. foreach($files as $filename){
  554. if($filename != "." && $filename != ".."){
  555. $arena = str_replace(".yml", "", $filename);
  556.  
  557. $config = new Config($this->getDataFolder()."Arenas/".$arena.".yml", Config::YAML);
  558. if(in_array($p->getName(), $config->get("Players"))){
  559. return $arena;
  560. }
  561. }
  562. }
  563. return "-";
  564. }
  565. public function inArena(Player $p){
  566. $files = scandir($this->getDataFolder()."Arenas");
  567. foreach($files as $filename){
  568. if($filename != "." && $filename != ".."){
  569. $arena = str_replace(".yml", "", $filename);
  570.  
  571. $config = new Config($this->getDataFolder()."Arenas/".$arena.".yml", Config::YAML);
  572. if(in_array($p->getName(), $config->get("Players"))){
  573. return true;
  574. }
  575. }
  576. }
  577. return false;
  578. }
  579. public function TeleportToTeamSpawn(Player $p, $team, $arena){
  580. $p->setHealth(20);
  581. $p->setFood(20);
  582. $p->setGamemode(0);
  583. $p->getInventory()->clearAll();
  584. $p->setExpLevel(0);
  585.  
  586. $config = new Config($this->getDataFolder()."Arenas/".$arena.".yml", Config::YAML);
  587.  
  588. $welt = $config->getNested("Spawn.".$team.".Welt");
  589. $x = $config->getNested("Spawn.".$team.".X");
  590. $y = $config->getNested("Spawn.".$team.".Y");
  591. $z = $config->getNested("Spawn.".$team.".Z");
  592. $yaw = $config->getNested("Spawn.".$team.".Yaw");
  593. $pitch = $config->getNested("Spawn.".$team.".Pitch");
  594.  
  595. if($p->getLevel() != $this->getServer()->getLevelByName($welt)){
  596. $p->teleport($this->getServer()->getLevelByName($welt)->getSafeSpawn(), 0, 0);
  597. }
  598. $p->teleport(new Vector3($x, $y, $z), $yaw, $pitch);
  599. }
  600. public function getTeamByBlockDamage($damage){
  601. if($damage == 10){
  602. return "PURPLE";
  603. }
  604. if($damage == 9){
  605. return "AQUA";
  606. }
  607. if($damage == 4){
  608. return "YELLOW";
  609. }
  610. if($damage == 5){
  611. return "GREEN";
  612. }
  613. if($damage == 11){
  614. return "BLUE";
  615. }
  616. if($damage == 14){
  617. return "RED";
  618. }
  619. if($damage == 15){
  620. return "BLACK";
  621. }
  622. if($damage == 7){
  623. return "GRAY";
  624. }
  625. return "WHITE";
  626. }
  627. public function openShop(Player $player){
  628.  
  629. $chestBlock = new \pocketmine\block\Chest();
  630. $player->getLevel()->setBlock(new Vector3($player->getX(), $player->getY() - 4, $player->getZ()), $chestBlock, true, true);
  631.  
  632. $nbt = new CompoundTag("", [
  633. new ListTag("Items", []),
  634. new StringTag("id", Tile::CHEST),
  635. new IntTag("x", $player->getX()),
  636. new IntTag("y", $player->getY() - 4),
  637. new IntTag("z", $player->getZ())
  638. ]);
  639. $nbt->Items->setTagType(NBT::TAG_Compound);
  640. $tile = Tile::createTile("Chest", $player->getLevel()->getChunk($player->getX() >> 4, $player->getZ() >> 4), $nbt);
  641. if($tile instanceof Chest) {
  642.  
  643. $config = new Config($this->getDataFolder() . "shop.yml", Config::YAML);
  644. $all = $config->get("Shop");
  645.  
  646. $tile->getInventory()->clearAll();
  647. for ($i = 0; $i < count($all); $i+=2) {
  648. $slot = $i / 2;
  649. $tile->getInventory()->setItem($slot, Item::get($all[$i], 0, 1));
  650. }
  651. $tile->getInventory()->setItem($tile->getInventory()->getSize()-1, Item::get(Item::WOOL, 14, 1));
  652. $player->addWindow($tile->getInventory());
  653. }
  654. }
  655. public function createVillager($x, $y, $z, Level $level){
  656. $x += 0.5;
  657. $z += 0.5;
  658.  
  659. $nbt = new CompoundTag;
  660. $nbt->Pos = new ListTag("Pos", [
  661. new DoubleTag("", $x),
  662. new DoubleTag("", $y),
  663. new DoubleTag("", $z)
  664. ]);
  665.  
  666. $nbt->Rotation = new ListTag("Rotation", [
  667. new FloatTag("", 0),
  668. new FloatTag("", 0)
  669. ]);
  670.  
  671. $nbt->Health = new ShortTag("Health", 10);
  672. $nbt->CustomName = new StringTag("CustomName", TextFormat::GOLD."SHOP");
  673. $nbt->CustomNameVisible = new ByteTag("CustomNameVisible", 1);
  674.  
  675. $level->loadChunk($x >> 4, $z >> 4);
  676.  
  677. $villager = Entity::createEntity("Villager", $level->getChunk($x >> 4, $y >> 4), $nbt);
  678. $villager->spawnToAll();
  679. }
  680. public function getWoolDamageByTeam($team){
  681. if($team == "BLUE"){
  682. return 11;
  683. }
  684. if($team == "RED"){
  685. return 14;
  686. }
  687. if($team == "GREEN"){
  688. return 5;
  689. }
  690. if($team == "YELLOW"){
  691. return 4;
  692. }
  693. if($team == "AQUA"){
  694. return 9;
  695. }
  696. if($team == "BLACK"){
  697. return 15;
  698. }
  699. if($team == "PURPLE"){
  700. return 10;
  701. }
  702. if($team == "GRAY"){
  703. return 7;
  704. }
  705. return 0;
  706. }
  707. public function setTeamSelectionItems(Player $player, $arena){
  708. $player->getInventory()->clearAll();
  709.  
  710. $player->setNameTag($player->getName());
  711.  
  712. $teams = $this->getTeams($arena);
  713.  
  714. foreach($teams as $team){
  715. $teamwool = $this->getWoolDamageByTeam($team);
  716. $player->getInventory()->addItem(Item::get(Item::WOOL, $teamwool, 1));
  717. }
  718. }
  719. public function getArenaStatus($arena){
  720. $config = new Config($this->getDataFolder()."Arenas/".$arena.".yml", Config::YAML);
  721. $status = $config->get("Status");
  722.  
  723. return $status;
  724. }
  725. public function sendIngameScoreboard(Player $p, $arena){
  726. $config = new Config($this->getDataFolder()."Arenas/".$arena.".yml", Config::YAML);
  727. $popup = TextFormat::GRAY." [".TextFormat::GOLD."TeamsAlive".TextFormat::GRAY."]\n";
  728. $teams = $this->getTeams($arena);
  729.  
  730. $teamscount = 0;
  731. if(count($teams) >= 4){
  732. foreach($teams as $team) {
  733. if($teamscount == 4){
  734. $popup = $popup."\n";
  735. }
  736. if (in_array($team, $this->getAliveTeams($arena))) {
  737. $popup = $popup . " " . $this->getTeamColor($team) . $team . TextFormat::GRAY . " [" . TextFormat::GREEN . "+" . TextFormat::GRAY . "]";
  738. } else {
  739. $popup = $popup . " " . $this->getTeamColor($team) . $team . TextFormat::GRAY . " [" . TextFormat::RED . "-" . TextFormat::GRAY . "]";
  740. }
  741.  
  742. $teamscount++;
  743. }
  744.  
  745. } else {
  746. foreach($teams as $team) {
  747. if (in_array($team, $this->getAliveTeams($arena))) {
  748. $popup = $popup . " " . $this->getTeamColor($team) . $team . TextFormat::GRAY . " [" . TextFormat::GREEN . "x" . TextFormat::GRAY . "]";
  749. } else {
  750. $popup = $popup . " " . $this->getTeamColor($team) . $team . TextFormat::GRAY . " [" . TextFormat::RED . "x" . TextFormat::GRAY . "]";
  751. }
  752. }
  753. }
  754. $p->sendPopup($popup);
  755. }
  756. ############################################################################################################
  757. ############################################################################################################
  758. ############################################################################################################
  759. ################################### ===[EVENTS]=== ##################################################
  760. ############################################################################################################
  761. ############################################################################################################
  762. ############################################################################################################
  763.  
  764. public function onTransaction(InventoryTransactionEvent $event)
  765. {
  766. $trans = $event->getTransaction()->getTransactions();
  767. $inv = $event->getTransaction()->getInventories();
  768.  
  769. $player = null;
  770. $chestBlock = null;
  771.  
  772. foreach ($trans as $t) {
  773. foreach ($inv as $inventory) {
  774. $chest = $inventory->getHolder();
  775.  
  776. if ($chest instanceof Chest) {
  777. $chestBlock = $chest->getBlock();
  778. $transaction = $t;
  779. }
  780. if ($chest instanceof Player) {
  781. $player = $chest;
  782. }
  783. }
  784. }
  785. if ($player != null && $chestBlock != null && isset($transaction)) {
  786.  
  787. if($this->inArena($player)) {
  788.  
  789. $config = new Config($this->getDataFolder() . "shop.yml", Config::YAML);
  790. $all = $config->get("Shop");
  791.  
  792. /*
  793. if(in_array($transaction->getTargetItem()->getId(), $all)){
  794. $this->isShopping[$player->getName()] = "ja";
  795. }
  796. */
  797.  
  798. $arena = $this->getArena($player);
  799.  
  800. $chestTile = $player->getLevel()->getTile($chestBlock);
  801. if ($chestTile instanceof Chest) {
  802. $TargetItemID = $transaction->getTargetItem()->getId();
  803. $TargetItemDamage = $transaction->getTargetItem()->getDamage();
  804. $TargetItem = $transaction->getTargetItem();
  805. $inventoryTrans = $chestTile->getInventory();
  806.  
  807.  
  808. if($this->isShopping[$player->getName()] != "ja") {
  809. $zahl = 0;
  810. for ($i = 0; $i < count($all); $i += 2) {
  811. if ($TargetItemID == $all[$i]) {
  812. $zahl++;
  813. }
  814. }
  815. if($zahl == count($all)){
  816. $this->isShopping[$player->getName()] = "ja";
  817. }
  818. }
  819. if($this->isShopping[$player->getName()] != "ja") {
  820. $secondslot = $inventoryTrans->getItem(1)->getId();
  821. if ($secondslot == 384) {
  822. $this->isShopping[$player->getName()] = "ja";
  823. }
  824. }
  825.  
  826. if($this->isShopping[$player->getName()] == "ja"){
  827. if ($TargetItemID == Item::WOOL && $TargetItemDamage == 14) {
  828. $event->setCancelled(true);
  829. $config = new Config($this->getDataFolder() . "shop.yml", Config::YAML);
  830. $all = $config->get("Shop");
  831. $chestTile->getInventory()->clearAll();
  832. for ($i = 0; $i < count($all); $i = $i + 2) {
  833. $slot = $i / 2;
  834. $chestTile->getInventory()->setItem($slot, Item::get($all[$i], 0, 1));
  835. }
  836. }
  837.  
  838. $TransactionSlot = 0;
  839. for ($i = 0; $i < $inventoryTrans->getSize(); $i++) {
  840. if ($inventoryTrans->getItem($i)->getId() == $TargetItemID) {
  841. $TransactionSlot = $i;
  842. break;
  843. }
  844. }
  845. $secondslot = $inventoryTrans->getItem(1)->getId();
  846. if ($TransactionSlot % 2 != 0 && $secondslot == 384) {
  847. $event->setCancelled(true);
  848. }
  849. if ($TargetItemID == 384) {
  850. $event->setCancelled(true);
  851. }
  852. if ($TransactionSlot % 2 == 0 && ($secondslot == 384)) {
  853. $Kosten = $inventoryTrans->getItem($TransactionSlot + 1)->getCount();
  854.  
  855. $yourmoney = $player->getExpLevel();
  856.  
  857. if ($yourmoney >= $Kosten) {
  858. $money = $yourmoney - $Kosten;
  859. $player->setExpLevel($money);
  860. $player->getInventory()->addItem(Item::get($inventoryTrans->getItem($TransactionSlot)->getId(), $inventoryTrans->getItem($TransactionSlot)->getDamage(), $inventoryTrans->getItem($TransactionSlot)->getCount()));
  861. }
  862. $event->setCancelled(true);
  863. }
  864. if ($secondslot != 384) {
  865. $event->setCancelled(true);
  866. $config = new Config($this->getDataFolder() . "shop.yml", Config::YAML);
  867. $all = $config->get("Shop");
  868. for ($i = 0; $i < count($all); $i += 2) {
  869. if ($TargetItemID == $all[$i]) {
  870. $chestTile->getInventory()->clearAll();
  871. $suball = $all[$i + 1];
  872. $slot = 0;
  873. for ($j = 0; $j < count($suball); $j++) {
  874. $chestTile->getInventory()->setItem($slot, Item::get($suball[$j][0], 0, $suball[$j][1]));
  875. $slot++;
  876. $chestTile->getInventory()->setItem($slot, Item::get($suball[$j][2], 0, $suball[$j][3]));
  877. $slot++;
  878. }
  879. break;
  880. }
  881. }
  882. $chestTile->getInventory()->setItem($chestTile->getInventory()->getSize() - 1, Item::get(Item::WOOL, 14, 1));
  883. }
  884. }
  885. }
  886. }
  887. }
  888. }
  889. public function onItemDrop(PlayerDropItemEvent $event){
  890. $player = $event->getPlayer();
  891. $name = $player->getName();
  892. $item = $event->getItem();
  893.  
  894. if($item->getId() == Item::WOOL){
  895. if($this->inArena($player)){
  896. $arena = $this->getArena($player);
  897. $team = $this->getTeamByBlockDamage($item->getDamage());
  898. $event->setCancelled();
  899.  
  900. if($this->getArenaStatus($arena) == "Lobby") {
  901. if($team != $this->getTeam($player->getNameTag())){
  902. if (in_array($team, $this->getAvailableTeams($arena))) {
  903. $player->setNameTag($this->getTeamColor($team) . $name);
  904. $player->sendMessage($this->prefix . "Du bist nun in Team " . TextFormat::GOLD . $team);
  905. $player->getInventory()->removeItem($item);
  906. $player->getInventory()->addItem($item);
  907. } else {
  908. $player->sendMessage($this->prefix . "Das Team " . TextFormat::GOLD . $team . TextFormat::WHITE . " ist schon voll!");
  909. $player->getInventory()->removeItem($item);
  910. $player->getInventory()->addItem($item);
  911. }
  912. } else {
  913. $player->sendMessage($this->prefix . "Du bist bereits in Team " . TextFormat::GOLD . $team);
  914. $player->getInventory()->removeItem($item);
  915. $player->getInventory()->addItem($item);
  916. }
  917. }
  918. }
  919. }
  920. }
  921. public function onChat(PlayerChatEvent $event){
  922. $player = $event->getPlayer();
  923. $name = $player->getName();
  924.  
  925. if($this->inArena($player)) {
  926. $arena = $this->getArena($player);
  927. $config = new Config($this->getDataFolder()."Arenas/".$arena.".yml", Config::YAML);
  928. $team = $this->getTeam($player->getNameTag());
  929. $players = $this->getPlayers($arena);
  930. $status = $config->get("Status");
  931. $msg = $event->getMessage();
  932. $words = explode(" ", $msg);
  933.  
  934. if($status == "Lobby"){
  935. $event->setCancelled();
  936. foreach($players as $pn){
  937. $p = $this->getServer()->getPlayerExact($pn);
  938. if($p != null){
  939. $p->sendMessage($name." >> ".$msg);
  940. }
  941. }
  942. } else {
  943. if ($words[0] === "@a" or $words[0] === "@all") {
  944. array_shift($words);
  945. $msg = implode(" ", $words);
  946. $event->setCancelled();
  947. foreach ($players as $pn) {
  948. $p = $this->getServer()->getPlayerExact($pn);
  949. if ($p != null) {
  950. $p->sendMessage(TextFormat::GRAY . "[" . TextFormat::GREEN . "ALL" . TextFormat::GRAY . "] " . $player->getNameTag() . TextFormat::GRAY . " >> " . TextFormat::WHITE . $msg);
  951. }
  952. }
  953. } else {
  954. $event->setCancelled();
  955. foreach ($players as $pn) {
  956. $p = $this->getServer()->getPlayerExact($pn);
  957. if ($p != null) {
  958. if ($this->getTeam($p->getNameTag()) == $this->getTeam($player->getNameTag())) {
  959. //teamchat
  960. $p->sendMessage(TextFormat::GRAY . "[" . $this->getTeamColor($this->getTeam($player->getNameTag())) . "Team" . TextFormat::GRAY . "] " . $player->getNameTag() . TextFormat::GRAY . " >> " . TextFormat::WHITE . $msg);
  961. }
  962. }
  963. }
  964. }
  965. }
  966. }
  967. }
  968. public function onInvClose(InventoryCloseEvent $event){
  969. $inventory = $event->getInventory();
  970. if ($inventory instanceof ChestInventory) {
  971. $config = new Config($this->getDataFolder() . "shop.yml", Config::YAML);
  972. $all = $config->get("Shop");
  973. $realChest = $inventory->getHolder();
  974. $first = $all[0];
  975. $second = $all[2];
  976. if (($inventory->getItem(0)->getId() == $first && $inventory->getItem(1)->getId() == $second) || $inventory->getItem(1)->getId() == 384) {
  977. $event->getPlayer()->getLevel()->setBlock(new Vector3($realChest->getX(), $realChest->getY(), $realChest->getZ()), Block::get(Block::AIR));
  978. $this->isShopping[$event->getPlayer()->getName()] = "nein";
  979. }
  980. }
  981. }
  982. public function onJoin(PlayerJoinEvent $event){
  983. $player = $event->getPlayer();
  984. $this->lasthit[$player->getName()] = "no";
  985. $this->isShopping[$player->getName()] = "nein";
  986. $player->setNameTag($player->getName());
  987. }
  988. public function onRespawn(PlayerRespawnEvent $event){
  989. $player = $event->getPlayer();
  990. $name = $player->getName();
  991.  
  992. if($this->inArena($player)){
  993. $arena = $this->getArena($player);
  994.  
  995. $config = new Config($this->getDataFolder()."Arenas/".$arena.".yml", Config::YAML);
  996. $team = $this->getTeam($player->getNameTag());
  997.  
  998. if($config->getNested("Bed.".$team.".Alive") == true){
  999.  
  1000. $welt = $config->getNested("Spawn.".$team.".Welt");
  1001. $x = $config->getNested("Spawn.".$team.".X");
  1002. $y = $config->getNested("Spawn.".$team.".Y");
  1003. $z = $config->getNested("Spawn.".$team.".Z");
  1004.  
  1005. $level = $this->getServer()->getLevelByName($welt);
  1006.  
  1007. $event->setRespawnPosition(new Position($x, $y, $z, $level));
  1008. } else {
  1009. $event->setRespawnPosition($this->getServer()->getDefaultLevel()->getSafeSpawn());
  1010. $player->sendMessage($this->prefix.TextFormat::RED."Dein Bett wurde zerstört, du kannst nicht mehr respawnen!");
  1011. $this->removePlayerFromArena($arena, $name);
  1012. $this->lasthit[$player->getName()] = "no";
  1013. $player->setNameTag($player->getName());
  1014. }
  1015.  
  1016. }
  1017. }
  1018. public function onPickup(InventoryPickupItemEvent $event){
  1019. $player = $event->getInventory()->getHolder();
  1020.  
  1021. if($player instanceof Player){
  1022. if($this->inArena($player)){
  1023.  
  1024. if(!in_array($event->getItem()->getId(), $this->pickup)) {
  1025. if ($event->getItem()->getItem()->getId() == Item::BRICK) {
  1026.  
  1027. $event->setCancelled();
  1028.  
  1029. $player->getLevel()->removeEntity($event->getItem());
  1030. $this->pickup[] = $event->getItem()->getId();
  1031. $player->setExpLevel($player->getExpLevel() + 1);
  1032. $player->sendTip(TextFormat::GOLD . "+" . TextFormat::GREEN . "1 Level!");
  1033. }
  1034.  
  1035. if ($event->getItem()->getItem()->getId() == Item::IRON_INGOT) {
  1036. $event->setCancelled();
  1037. $player->getLevel()->removeEntity($event->getItem());
  1038. $this->pickup[] = $event->getItem()->getId();
  1039. $player->setExpLevel($player->getExpLevel() + 10);
  1040. $player->sendTip(TextFormat::GOLD . "+" . TextFormat::GREEN . "10 Level!");
  1041. }
  1042.  
  1043. if ($event->getItem()->getItem()->getId() == Item::GOLD_INGOT) {
  1044. $event->setCancelled();
  1045. $player->getLevel()->removeEntity($event->getItem());
  1046. $this->pickup[] = $event->getItem()->getId();
  1047. $player->setExpLevel($player->getExpLevel() + 20);
  1048. $player->sendTip(TextFormat::GOLD . "+" . TextFormat::GREEN . "20 Level!");
  1049. }
  1050. }
  1051. }
  1052. }
  1053. }
  1054. public function onDeath(PlayerDeathEvent $event){
  1055. $player = $event->getEntity();
  1056. if($player instanceof Player){
  1057. if($this->inArena($player)){
  1058. $event->setDeathMessage("");
  1059. $arena = $this->getArena($player);
  1060. $cause = $player->getLastDamageCause();
  1061. $players = $this->getPlayers($arena);
  1062.  
  1063. if ($cause instanceof EntityDamageByEntityEvent) {
  1064. $killer = $cause->getDamager();
  1065. $event->setDrops(array());
  1066. if ($killer instanceof Player) {
  1067. foreach ($players as $pn) {
  1068. $p = $this->getServer()->getPlayerExact($pn);
  1069. if($p != null) {
  1070. $p->sendMessage($this->prefix . $killer->getNameTag() . TextFormat::GRAY. " hat " . $player->getNameTag() . TextFormat::GRAY . " getötet!");
  1071. }
  1072. }
  1073. } else {
  1074. foreach ($players as $pn) {
  1075. $p = $this->getServer()->getPlayerExact($pn);
  1076. if($p != null) {
  1077. $p->sendMessage($this->prefix . $player->getNameTag() . TextFormat::GRAY . " ist gestorben!");
  1078. }
  1079. }
  1080. }
  1081. } else {
  1082. $event->setDrops(array());
  1083. foreach ($players as $pn) {
  1084. $p = $this->getServer()->getPlayerExact($pn);
  1085. if($p != null) {
  1086.  
  1087. if($this->lasthit[$player->getName()] != "no"){
  1088. $p2 = $this->getServer()->getPlayerExact($this->lasthit[$player->getName()]);
  1089. if($p2 != null){
  1090. $p->sendMessage($this->prefix . $p2->getNameTag() . TextFormat::WHITE. " hat " . $player->getNameTag() . TextFormat::WHITE . " getötet!");
  1091. $this->lasthit[$player->getName()] = "no";
  1092. } else {
  1093. $p->sendMessage($this->prefix . $player->getNameTag() . TextFormat::GRAY . " ist gestorben!");
  1094. }
  1095. } else {
  1096. $p->sendMessage($this->prefix . $player->getNameTag() . TextFormat::GRAY . " ist gestorben!");
  1097. }
  1098. }
  1099. }
  1100. }
  1101. }
  1102. }
  1103. }
  1104.  
  1105. public function onHit(EntityDamageEvent $event){
  1106. $player = $event->getEntity();
  1107.  
  1108. if (!$player instanceof Player) {
  1109. if ($event instanceof EntityDamageByEntityEvent) {
  1110. $damager = $event->getDamager();
  1111. if($damager instanceof Player) {
  1112. if($this->inArena($damager)) {
  1113. $event->setCancelled();
  1114. $this->isShopping[$damager->getName()] = "ja";
  1115. $this->openShop($damager);
  1116. }
  1117. }
  1118. }
  1119. } else {
  1120. if($this->inArena($player)) {
  1121. $arena = $this->getArena($player);
  1122.  
  1123. $config = new Config($this->getDataFolder()."Arenas/".$arena.".yml", Config::YAML);
  1124.  
  1125. if($config->get("Status") == "Lobby"){
  1126. $event->setCancelled();
  1127. }
  1128. }
  1129. if ($event instanceof EntityDamageByEntityEvent) {
  1130. $damager = $event->getDamager();
  1131. if($damager instanceof Player){
  1132. if($this->inArena($player)) {
  1133. $arena = $this->getArena($player);
  1134.  
  1135. $config = new Config($this->getDataFolder()."Arenas/".$arena.".yml", Config::YAML);
  1136.  
  1137. if($config->get("Status") == "Lobby"){
  1138. $event->setCancelled();
  1139. } else {
  1140. if($this->getTeam($damager->getNameTag()) == $this->getTeam($player->getNameTag())){
  1141. $event->setCancelled();
  1142. $damager->sendMessage($this->prefix.TextFormat::RED."Dieser Spieler ist in deinem Team!");
  1143. } else {
  1144. $this->lasthit[$player->getName()] = $damager->getName();
  1145. }
  1146. }
  1147. }
  1148. }
  1149. }
  1150. }
  1151. }
  1152. public function onMove(PlayerMoveEvent $event){
  1153. $player = $event->getPlayer();
  1154. if($this->inArena($player)){
  1155. $arena = $this->getArena($player);
  1156. $cause = $player->getLastDamageCause();
  1157. $players = $this->getPlayers($arena);
  1158.  
  1159. if($player->getY() <= 4){
  1160. $player->setHealth(0);
  1161. }
  1162.  
  1163. }
  1164. }
  1165.  
  1166.  
  1167. public function onPlace(BlockPlaceEvent $event){
  1168. $player = $event->getPlayer();
  1169. $name = $player->getName();
  1170. $block = $event->getBlock();
  1171. if($this->inArena($player)) {
  1172.  
  1173. $arena = $this->getArena($player);
  1174.  
  1175. $config = new Config($this->getDataFolder() . "Arenas/" . $arena . ".yml", Config::YAML);
  1176.  
  1177. if($config->get("Status") == "Lobby"){
  1178. $event->setCancelled();
  1179.  
  1180. if($block->getId() == Block::WOOL){
  1181. $item = Item::get($block->getId(), $block->getDamage(), 1);
  1182.  
  1183. $arena = $this->getArena($player);
  1184. $team = $this->getTeamByBlockDamage($block->getDamage());
  1185. $event->setCancelled();
  1186. if($team != $this->getTeam($player->getNameTag())){
  1187. if (in_array($team, $this->getAvailableTeams($arena))) {
  1188. $player->setNameTag($this->getTeamColor($team) . $name);
  1189. $player->sendMessage($this->prefix . "Du bist nun in Team " . TextFormat::GOLD . $team);
  1190.  
  1191. $player->getInventory()->removeItem($item);
  1192. $player->getInventory()->addItem($item);
  1193. } else {
  1194. $player->sendMessage($this->prefix . "Das Team " . TextFormat::GOLD . $team . TextFormat::WHITE . " ist schon voll!");
  1195. $player->getInventory()->removeItem($item);
  1196. $player->getInventory()->addItem($item);
  1197. }
  1198. } else {
  1199. $player->sendMessage($this->prefix . "Du bist bereits in Team " . TextFormat::GOLD . $team);
  1200. $player->getInventory()->removeItem($item);
  1201. $player->getInventory()->addItem($item);
  1202. }
  1203. }
  1204. } else {
  1205. if (!in_array($block->getId(), $this->breakableblocks)) {
  1206. $event->setCancelled();
  1207. }
  1208. }
  1209. }
  1210. }
  1211. public function onBreak(BlockBreakEvent $event){
  1212. $player = $event->getPlayer();
  1213. $name = $player->getName();
  1214.  
  1215. $block = $event->getBlock();
  1216. $block2 = $player->getLevel()->getBlock(new Vector3($block->getX(), $block->getY() - 1, $block->getZ()), false);
  1217.  
  1218. if($this->inArena($player)) {
  1219.  
  1220. $arena = $this->getArena($player);
  1221.  
  1222. $config = new Config($this->getDataFolder() . "Arenas/" . $arena . ".yml", Config::YAML);
  1223.  
  1224. $team = $this->getTeamByBlockDamage($block2->getDamage());
  1225.  
  1226. if($config->get("Status") != "Lobby"){
  1227.  
  1228. if($block->getId() == Block::BED_BLOCK) {
  1229.  
  1230. if ($team != $this->getTeam($player->getNameTag())) {
  1231. $config->setNested("Bed." . $team . ".Alive", false);
  1232. $config->save();
  1233. $event->setDrops(array());
  1234.  
  1235. $player->sendMessage($this->prefix . "Du hast das Bett von Team " . $team . " zerstört!");
  1236.  
  1237. foreach ($this->getPlayers($arena) as $pn) {
  1238. $p = $this->getServer()->getPlayerExact($pn);
  1239. if ($p != null) {
  1240. if ($team == $this->getTeam($p->getNameTag())) {
  1241. $p->sendMessage($this->prefix . TextFormat::RED . "Das Bett von deinem Team wurde zerstört!");
  1242. } else {
  1243. $p->sendMessage($this->prefix . "Das Bett von Team " . TextFormat::GOLD . $team . TextFormat::WHITE . " wurde zerstört!");
  1244. }
  1245.  
  1246. }
  1247. }
  1248. } else {
  1249. $player->sendMessage($this->prefix . "Du kannst dein eigenes Bett nicht zerstören!");
  1250. $event->setCancelled();
  1251. }
  1252. }
  1253. elseif(!in_array($block->getId(), $this->breakableblocks)){
  1254. $event->setCancelled();
  1255. }
  1256. } else {
  1257. $event->setCancelled();
  1258. }
  1259.  
  1260.  
  1261.  
  1262. }
  1263. }
  1264. public function onInteract(PlayerInteractEvent $event){
  1265. $player = $event->getPlayer();
  1266. $name = $player->getName();
  1267. $block = $event->getBlock();
  1268. $tile = $player->getLevel()->getTile($block);
  1269.  
  1270. if($this->registerBed == true && $this->registerBedWHO == $name){
  1271.  
  1272. $arena = $this->registerBedArena;
  1273. $team = $this->registerBedTeam;
  1274.  
  1275. $this->registerBed = false;
  1276.  
  1277. $config = new Config($this->getDataFolder()."Arenas/".$arena.".yml", Config::YAML);
  1278.  
  1279. $config->setNested("Bed.".$team.".Welt", $block->getLevel()->getName());
  1280. $config->setNested("Bed.".$team.".X", $block->getX());
  1281. $config->setNested("Bed.".$team.".Y", $block->getY());
  1282. $config->setNested("Bed.".$team.".Z", $block->getZ());
  1283. $config->setNested("Bed.".$team.".Alive", true);
  1284.  
  1285. $config->save();
  1286.  
  1287. $player->sendMessage(TextFormat::GREEN . "Du hast Erfolgreich das Bett von Team " . TextFormat::AQUA . $team . TextFormat::GREEN . " für die Arena " . TextFormat::AQUA . $arena . TextFormat::GREEN . " registriert!");
  1288. $player->sendMessage(TextFormat::GREEN . "Setup -> /bw help");
  1289. }
  1290.  
  1291. if($tile instanceof Sign){
  1292. $text = $tile->getText();
  1293.  
  1294.  
  1295. if($this->registerSign == true && $this->registerSignWHO == $name){
  1296.  
  1297. $arena = $this->registerSignArena;
  1298.  
  1299. $config = new Config($this->getDataFolder()."Arenas/".$arena.".yml", Config::YAML);
  1300.  
  1301. $teams = (int) $config->get("Teams");
  1302. $ppt = (int) $config->get("PlayersPerTeam");
  1303.  
  1304. $maxplayers = $teams * $ppt;
  1305.  
  1306.  
  1307. $tile->setText($this->prefix, $arena." ".$teams."x".$ppt, TextFormat::GREEN."Loading...", TextFormat::YELLOW."0 / ".$maxplayers);
  1308. $this->registerSign = false;
  1309.  
  1310. $player->sendMessage(TextFormat::GREEN . "Du hast Erfolgreich das Schild für die Arena " . TextFormat::AQUA . $arena . TextFormat::GREEN . " registriert!");
  1311. $player->sendMessage(TextFormat::GREEN . "Setup -> /bw help");
  1312. }
  1313. elseif($text[0] == $this->prefix){
  1314.  
  1315. if($text[2] == TextFormat::GREEN."Betreten"){
  1316.  
  1317. $arena = substr($text[1], 0, -4);
  1318. $config = new Config($this->getDataFolder()."Arenas/".$arena.".yml", Config::YAML);
  1319. $status = $config->get("Status");
  1320. $maxplayers = $config->get("PlayersPerTeam") * $config->get("Teams");
  1321. $players = count($config->get("Players"));
  1322.  
  1323. if($status == "Lobby"){
  1324. if($players < $maxplayers) {
  1325. $this->TeleportToWaitingLobby($arena, $player);
  1326. $this->setTeamSelectionItems($player, $arena);
  1327. $this->addPlayerToArena($arena, $name);
  1328. } else {
  1329. $player->sendMessage($this->prefix . TextFormat::RED . "Du kannst dieses Match nicht betreten!");
  1330. }
  1331. } else {
  1332. $player->sendMessage($this->prefix.TextFormat::RED."Du kannst dieses Match nicht betreten!");
  1333. }
  1334. } else {
  1335. $player->sendMessage($this->prefix.TextFormat::RED."Du kannst dieses Match nicht betreten!");
  1336. }
  1337.  
  1338. }
  1339. }
  1340. }
  1341.  
  1342. public function onCommand(CommandSender $sender, Command $cmd, $label, array $args):bool{
  1343.  
  1344. $name = $sender->getName();
  1345. if($cmd->getName() == "Start" && $sender->hasPermission("bw.forcestart")){
  1346. if($sender instanceof Player){
  1347. if($this->inArena($sender)){
  1348. $arena = $this->getArena($sender);
  1349.  
  1350. $config = new Config($this->getDataFolder()."Arenas/".$arena.".yml", Config::YAML);
  1351.  
  1352. $config->set("LobbyTimer", 5);
  1353. $config->save();
  1354. } else {
  1355. $sender->sendMessage(TextFormat::RED."Du bist nicht in einer Arena!");
  1356. }
  1357. }
  1358. }
  1359. if($cmd->getName() == "Bedwars" && $sender->isOP()){
  1360. if(!empty($args[0])){
  1361. if(strtolower($args[0]) == "help" && $sender->isOP()){
  1362. $sender->sendMessage(TextFormat::GRAY."===============");
  1363. $sender->sendMessage(TextFormat::GRAY."-> ".TextFormat::DARK_AQUA."/bw help ".TextFormat::GRAY."[".TextFormat::RED."Zeigt alle Bedwars Commands an".TextFormat::GRAY."]");
  1364. $sender->sendMessage(TextFormat::GRAY."-> ".TextFormat::DARK_AQUA."/bw regsign <Arena> ".TextFormat::GRAY."[".TextFormat::RED."Registriert ein Arenen Schild".TextFormat::GRAY."]");
  1365. $sender->sendMessage(TextFormat::GRAY."-> ".TextFormat::DARK_AQUA."/bw savemaps <Arena> ".TextFormat::GRAY."[".TextFormat::RED."Sichert alle Welten einer Arena".TextFormat::GRAY."]");
  1366. $sender->sendMessage(TextFormat::GRAY."-> ".TextFormat::DARK_AQUA."/bw addarena <ArenaName> <Teams> <SpielerProTeam> ".TextFormat::GRAY."[".TextFormat::RED."Fügt eine neue Arena hinzu".TextFormat::GRAY."]");
  1367. $sender->sendMessage(TextFormat::GRAY."-> ".TextFormat::DARK_AQUA."/bw setlobby <Arena>".TextFormat::GRAY."[".TextFormat::RED."setzt die Arena Lobby".TextFormat::GRAY."]");
  1368. $sender->sendMessage(TextFormat::GRAY."-> ".TextFormat::DARK_AQUA."/bw setspawn <Arena> <Team>".TextFormat::GRAY."[".TextFormat::RED."setzt die Team Spawns".TextFormat::GRAY."]");
  1369. $sender->sendMessage(TextFormat::GRAY."-> ".TextFormat::DARK_AQUA."/bw setbed <Arena> <Team>".TextFormat::GRAY."[".TextFormat::RED."setzt die Team Betten".TextFormat::GRAY."]");
  1370. $sender->sendMessage(TextFormat::GRAY."===============");
  1371. }
  1372. elseif(strtolower($args[0]) == "regsign" && $sender->isOP()){
  1373. if(!empty($args[1])) {
  1374. $arena = $args[1];
  1375. if($this->arenaExists($arena)) {
  1376. $this->registerSign = true;
  1377. $this->registerSignWHO = $name;
  1378. $this->registerSignArena = $arena;
  1379. $sender->sendMessage(TextFormat::GREEN . "Tippe nun ein Schild an!");
  1380. } else {
  1381. $sender->sendMessage(TextFormat::RED."Arena existiert nicht!");
  1382. }
  1383. } else {
  1384. $sender->sendMessage(TextFormat::RED."/bw regsign <ArenaName>");
  1385. }
  1386. }
  1387. elseif(strtolower($args[0]) == "savemaps" && $sender->isOP()){
  1388. if(!empty($args[1])) {
  1389. $arena = $args[1];
  1390. if($this->arenaExists($arena)) {
  1391. $this->saveMaps($arena);
  1392. $sender->sendMessage(TextFormat::GREEN . "Du hast Erfolgreich die Maps der Arena " . TextFormat::AQUA . $arena . TextFormat::GREEN . " gesichert!");
  1393. } else {
  1394. $sender->sendMessage(TextFormat::RED."Arena existiert nicht!");
  1395. }
  1396. } else {
  1397. $sender->sendMessage(TextFormat::RED."/bw savemaps <ArenaName>");
  1398. }
  1399. }
  1400. elseif(strtolower($args[0]) == "addarena" && $sender->isOP()){
  1401. if(!empty($args[1]) && !empty($args[2]) && !empty($args[3])) {
  1402. $arena = $args[1];
  1403. $teams = (int)$args[2];
  1404. $ppt = (int)$args[3]; //ppt = PlayersPerTeam
  1405.  
  1406. if($teams <= 8){
  1407. $this->createArena($arena, $teams, $ppt);
  1408. $this->arena = $arena;
  1409. $sender->sendMessage(TextFormat::GREEN . "Du hast Erfolgreich die Arena " . TextFormat::AQUA . $arena . TextFormat::GREEN . " erstellt!");
  1410. $sender->sendMessage(TextFormat::GREEN . "Setup -> /bw help");
  1411. } else {
  1412. $sender->sendMessage(TextFormat::RED."Du kannst maximal 8 Teams setzen!");
  1413. }
  1414. } else {
  1415. $sender->sendMessage(TextFormat::RED."/bw addarena <ArenaName> <Teams> <SpielerProTeam>");
  1416. }
  1417. }
  1418. elseif(strtolower($args[0]) == "setlobby" && $sender->isOP()){
  1419. if(!empty($args[1])) {
  1420. $arena = $args[1];
  1421. if($this->arenaExists($arena)) {
  1422.  
  1423. $this->setLobby($arena, $sender);
  1424.  
  1425. $sender->sendMessage(TextFormat::GREEN . "Du hast Erfolgreich die Lobby für die Arena " . TextFormat::AQUA . $arena . TextFormat::GREEN . " gesetzt!");
  1426. $sender->sendMessage(TextFormat::GREEN . "Setup -> /bw help");
  1427.  
  1428. } else {
  1429. $sender->sendMessage(TextFormat::RED."Arena existiert nicht!");
  1430. }
  1431. } else {
  1432. $sender->sendMessage(TextFormat::RED."/bw setlobby <ArenaName>");
  1433. }
  1434. }
  1435. elseif(strtolower($args[0]) == "setbed" && $sender->isOP()){
  1436. if(!empty($args[1]) && !empty($args[2])) {
  1437. $arena = $args[1];
  1438. $team = $args[2];
  1439. if($this->arenaExists($arena)) {
  1440. if (in_array($team, $this->getAllTeams())) {
  1441.  
  1442. $this->registerBed = true;
  1443. $this->registerBedWHO = $name;
  1444. $this->registerBedArena = $arena;
  1445. $this->registerBedTeam = $team;
  1446. $sender->sendMessage(TextFormat::GREEN . "Tippe nun ein Bett an! bitte Tippe die untere Hälfte an da es sonst zu bugs kommen kann!");
  1447.  
  1448. $this->resetArena($arena);
  1449. } else {
  1450. $alleteams = implode(" ", $this->getAllTeams());
  1451.  
  1452. $sender->sendMessage(TextFormat::RED . "Das Team " . TextFormat::GOLD . $team . TextFormat::RED . " existiert nicht!");
  1453. $sender->sendMessage(TextFormat::RED . "Teams: " . $alleteams);
  1454. }
  1455. } else {
  1456. $sender->sendMessage(TextFormat::RED."Arena existiert nicht!");
  1457. }
  1458. } else {
  1459. $sender->sendMessage(TextFormat::RED."/bw setbed <ArenaName> <Team>");
  1460. }
  1461. }
  1462. elseif(strtolower($args[0]) == "setspawn" && $sender->isOP()){
  1463. if(!empty($args[1]) && !empty($args[2])) {
  1464. $arena = $args[1];
  1465. $team = $args[2];
  1466. if($this->arenaExists($arena)) {
  1467. if (in_array($team, $this->getAllTeams())) {
  1468.  
  1469. $this->setSpawn($arena, $team, $sender);
  1470.  
  1471. $sender->sendMessage(TextFormat::GREEN . "Du hast Erfolgreich den Spawn des Teams ".TextFormat::AQUA . $team . TextFormat::GREEN." für die Arena " . TextFormat::AQUA . $arena . TextFormat::GREEN . " gesetzt!");
  1472. $sender->sendMessage(TextFormat::GREEN . "Setup -> /bw help");
  1473.  
  1474. $this->resetArena($arena);
  1475. } else {
  1476. $alleteams = implode(" ", $this->getAllTeams());
  1477.  
  1478. $sender->sendMessage(TextFormat::RED . "Das Team " . TextFormat::GOLD . $team . TextFormat::RED . " existiert nicht!");
  1479. $sender->sendMessage(TextFormat::RED . "Teams: " . $alleteams);
  1480. }
  1481. } else {
  1482. $sender->sendMessage(TextFormat::RED."Arena existiert nicht!");
  1483. }
  1484. } else {
  1485. $sender->sendMessage(TextFormat::RED."/bw setspawn <ArenaName> <Team>");
  1486. }
  1487. }
  1488. elseif(strtolower($args[0]) == "test" && $sender->isOP()){
  1489. $this->createVillager($sender->getX(), $sender->getY(), $sender->getZ(), $sender->getLevel());
  1490. } else {
  1491. $this->getServer()->dispatchCommand($sender, "bw help");
  1492. }
  1493. } else {
  1494. $this->getServer()->dispatchCommand($sender, "bw help");
  1495. }
  1496. }
  1497. return true;
  1498. }
  1499. }
  1500.  
  1501. class RefreshSigns implements PluginTask {
  1502.  
  1503. public $prefix = "Bedwars";
  1504. public $plugin;
  1505.  
  1506. public function __construct(Bedwars $plugin) {
  1507. $this->plugin = $plugin;
  1508. $this->prefix = $this->plugin->prefix;
  1509. parent::__construct($plugin);
  1510. }
  1511.  
  1512. public function onRun($tick) {
  1513. $levels = $this->plugin->getServer()->getDefaultLevel();
  1514. $tiles = $levels->getTiles();
  1515. foreach ($tiles as $t) {
  1516. if ($t instanceof Sign) {
  1517. $text = $t->getText();
  1518. if ($text[0] == $this->prefix) {
  1519. $arena = substr($text[1], 0, -4);
  1520. $config = new Config($this->plugin->getDataFolder()."Arenas/".$arena.".yml", Config::YAML);
  1521. $players = $this->plugin->getPlayers($arena);
  1522. $status = $config->get("Status");
  1523.  
  1524. $welt = $this->plugin->getArenaWorlds($arena)[0];
  1525. $level = $this->plugin->getServer()->getLevelByName($welt);
  1526.  
  1527. $arenasign = $text[1];
  1528.  
  1529. $teams = (int) $config->get("Teams");
  1530. $ppt = (int) $config->get("PlayersPerTeam");
  1531.  
  1532. $maxplayers = $teams * $ppt;
  1533. $ingame = TextFormat::GREEN."Betreten";
  1534.  
  1535. if ($status != "Lobby") {
  1536. $ingame = TextFormat::RED . "Ingame";
  1537. }
  1538. if (count($players) >= $maxplayers) {
  1539. $ingame = TextFormat::RED . "Voll";
  1540. }
  1541. if ($status == "Ende") {
  1542. $ingame = TextFormat::RED . "Restart";
  1543. }
  1544. $t->setText($this->prefix, $arenasign, $ingame, TextFormat::WHITE . (count($players)) . TextFormat::GRAY . " / ". TextFormat::RED . $maxplayers);
  1545. }
  1546. }
  1547. }
  1548. }
  1549. }
  1550. class GameSender implements PluginTask {
  1551.  
  1552. public $prefix = "Bedwars";
  1553. public $plugin;
  1554.  
  1555. $event->getPlayer()->teleportWorld $arena/
  1556. getPlayer()->send->($filename)
  1557.  
  1558. public function __construct(Bedwars $plugin) {
  1559. $this->plugin = $plugin;
  1560. $this->prefix = $plugin->prefix;
  1561. parent::__construct($plugin);
  1562. }
  1563.  
  1564. public function onRun($tick) {
  1565.  
  1566. $files = scandir($this->plugin->getDataFolder()."Arenas");
  1567. foreach($files as $filename){
  1568. if($filename != "." && $filename != ".."){
  1569. $arena = str_replace(".yml", "", $filename);
  1570. $config = new Config($this->plugin->getDataFolder()."Arenas/".$arena.".yml", Config::YAML);
  1571. $cfg = new Config($this->plugin->getDataFolder()."config.yml", Config::YAML);
  1572. $players = $this->plugin->getPlayers($arena);
  1573. $status = $config->get("Status");
  1574. $teams = (int) $config->get("Teams");
  1575. $ppt = (int) $config->get("PlayersPerTeam");
  1576. $lobbytimer = (int) $config->get("LobbyTimer");
  1577. $gametimer = (int) $config->get("GameTimer");
  1578. $endtimer = (int) $config->get("EndTimer");
  1579. $maxplayers = (int) $teams * $ppt;
  1580. $welt = $this->plugin->getFigthWorld($arena);
  1581. $level = $this->plugin->getServer()->getLevelByName($welt);
  1582.  
  1583. $aliveTeams = $this->plugin->getAliveTeams($arena);
  1584.  
  1585. $minplayers = $ppt +1;
  1586.  
  1587. /*
  1588. if((Time() % 20) == 0){
  1589. $this->plugin->Debug(TextFormat::GREEN."== Players Array ==");
  1590. var_dump($players);
  1591. $this->plugin->Debug(TextFormat::GREEN."== Players Array ==");
  1592. }
  1593. */
  1594. if($status == "Lobby"){
  1595.  
  1596. if(count($players) < $minplayers){
  1597.  
  1598. if((Time() % 10) == 0){
  1599. $config->set("LobbyTimer", $cfg->get("LobbyTimer"));
  1600. $config->set("GameTimer", $cfg->get("GameTimer"));
  1601. $config->set("EndTimer", $cfg->get("EndTimer"));
  1602. $config->set("Status", "Lobby");
  1603. $config->save();
  1604. }
  1605.  
  1606.  
  1607. foreach($players as $pn){
  1608. $p = $this->plugin->getServer()->getPlayerExact($pn);
  1609. if($p != null) {
  1610. $p->sendPopup(TextFormat::RED . "Warte auf ".TextFormat::GOLD.$minplayers.TextFormat::RED." Teilnehmer");
  1611. } else {
  1612. $this->plugin->removePlayerFromArena($arena, $pn);
  1613. }
  1614. }
  1615.  
  1616. if((Time() % 20) == 0){
  1617. foreach($players as $pn){
  1618. $p = $this->plugin->getServer()->getPlayerExact($pn);
  1619. if($p != null) {
  1620. $p->sendMessage(TextFormat::GOLD . $minplayers . TextFormat::RED ." Weiterer Spieler fehlen");
  1621. } else {
  1622. $this->plugin->removePlayerFromArena($arena, $pn);
  1623. }
  1624. }
  1625. }
  1626. } else {
  1627.  
  1628. $lobbytimer--;
  1629. $config->set("LobbyTimer", $lobbytimer);
  1630. $config->save();
  1631.  
  1632. if($lobbytimer == 60 ||
  1633. $lobbytimer == 45 ||
  1634. $lobbytimer == 30 ||
  1635. $lobbytimer == 20 ||
  1636. $lobbytimer == 10
  1637. ){
  1638. foreach($players as $pn){
  1639. $p = $this->plugin->getServer()->getPlayerExact($pn);
  1640. if($p != null){
  1641. $p->sendMessage($this->prefix."Runde startet in ".$lobbytimer." Sekunden!");
  1642. }
  1643. }
  1644. }
  1645. if($lobbytimer >= 1 && $lobbytimer <= 5){
  1646. foreach($players as $pn){
  1647. $p = $this->plugin->getServer()->getPlayerExact($pn);
  1648. if($p != null){
  1649. $p->sendPopup(TextFormat::YELLOW."Noch ".TextFormat::RED.$lobbytimer);
  1650. } else {
  1651. $this->plugin->removePlayerFromArena($arena, $pn);
  1652. }
  1653. }
  1654. }
  1655. if($lobbytimer == 0){
  1656. foreach($players as $pn){
  1657. $p = $this->plugin->getServer()->getPlayerExact($pn);
  1658. if($p != null){
  1659. if($p->getNameTag() == $p->getName()) {
  1660. $AT = $this->plugin->getAvailableTeam($arena);
  1661.  
  1662. $p->setNameTag($this->plugin->getTeamColor($AT) . $pn);
  1663. }
  1664. $this->plugin->TeleportToTeamSpawn($p, $this->plugin->getTeam($p->getNameTag()), $arena);
  1665. } else {
  1666. $this->plugin->removePlayerFromArena($arena, $pn);
  1667. }
  1668. }
  1669. /*
  1670. $tiles = $level->getTiles();
  1671. foreach ($tiles as $tile) {
  1672. if ($tile instanceof Sign) {
  1673. $text = $tile->getText();
  1674. if ($text[0] == "SHOP" || $text[1] == "SHOP" || $text[2] == "SHOP" || $text[3] == "SHOP") {
  1675. //spawn Villager for Shop
  1676. $this->plugin->createVillager($tile->getX(), $tile->getY(), $tile->getZ(), $tile->getLevel());
  1677. $tile->getLevel()->setBlock(new Vector3($tile->getX(), $tile->getY(), $tile->getZ()), Block::get(Block::AIR));
  1678. }
  1679. }
  1680. }
  1681. */
  1682.  
  1683. $config->set("Status", "Ingame");
  1684. $config->save();
  1685. }
  1686. }
  1687.  
  1688. }
  1689. elseif ($status == "Ingame"){
  1690. if(count($aliveTeams) <= 1){
  1691. if(count($aliveTeams) == 1){
  1692. $winnerteam = $aliveTeams[0];
  1693. $this->plugin->getServer()->broadcastMessage($this->prefix."Team ".TextFormat::GOLD.$winnerteam.TextFormat::WHITE." hat Die Bedwars Runde in Arena ".TextFormat::GOLD.$arena.TextFormat::WHITE." Gewonnen!");
  1694. }
  1695. $config->set("Status", "Ende");
  1696. $config->save();
  1697. } else {
  1698.  
  1699. if ((Time() % 1) == 0) {
  1700. $tiles = $level->getTiles();
  1701. foreach ($tiles as $tile) {
  1702. if ($tile instanceof Sign) {
  1703. $text = $tile->getText();
  1704. if (strtolower($text[0]) == "bronze" || strtolower($text[1]) == "bronze" || strtolower($text[2]) == "bronze" || strtolower($text[3]) == "bronze") {
  1705. $loc = new Vector3($tile->getX() + 0.5, $tile->getY() + 2, $tile->getZ() + 0.5);
  1706. $needDrop = false;
  1707. foreach ($players as $pn) {
  1708. $p = $this->plugin->getServer()->getPlayerExact($pn);
  1709. if($p != null){
  1710. $dis = $loc->distance($p);
  1711. if ($dis <= 10) {
  1712. $needDrop = true;
  1713. }
  1714. }
  1715. }
  1716. if ($needDrop === true) {
  1717. $level->dropItem(new Vector3($tile->getX() + 0.5, $tile->getY() + 2, $tile->getZ() + 0.5), Item::get(Item::BRICK, 0, 1));
  1718. $level->dropItem(new Vector3($tile->getX() + 0.5, $tile->getY() + 2, $tile->getZ() + 0.5), Item::get(Item::BRICK, 0, 1));
  1719. }
  1720. }
  1721. }
  1722. }
  1723. }
  1724. if ((Time() % 8) == 0) {
  1725. $tiles = $level->getTiles();
  1726. foreach ($tiles as $tile) {
  1727. if ($tile instanceof Sign) {
  1728. $text = $tile->getText();
  1729. if (strtolower($text[0]) == "eisen" || strtolower($text[1]) == "eisen" || strtolower($text[2]) == "eisen" || strtolower($text[3]) == "eisen") {
  1730. $level->dropItem(new Vector3($tile->getX() + 0.5, $tile->getY() + 2, $tile->getZ() + 0.5), Item::get(Item::IRON_INGOT, 0, 1));
  1731. }
  1732. }
  1733. }
  1734. }
  1735. if ((Time() % 30) == 0) {
  1736. $tiles = $level->getTiles();
  1737. foreach ($tiles as $tile) {
  1738. if ($tile instanceof Sign) {
  1739. $text = $tile->getText();
  1740. if (strtolower($text[0]) == "gold" || strtolower($text[1]) == "gold" || strtolower($text[2]) == "gold" || strtolower($text[3]) == "gold") {
  1741. $level->dropItem(new Vector3($tile->getX() + 0.5, $tile->getY() + 2, $tile->getZ() + 0.5), Item::get(Item::GOLD_INGOT, 0, 1));
  1742. }
  1743. }
  1744. }
  1745. }
  1746.  
  1747.  
  1748. foreach($players as $pn){
  1749. $p = $this->plugin->getServer()->getPlayerExact($pn);
  1750. if($p != null){
  1751. $this->plugin->sendIngameScoreboard($p, $arena);
  1752. } else {
  1753. $this->plugin->removePlayerFromArena($arena, $pn);
  1754. }
  1755. }
  1756.  
  1757. $gametimer--;
  1758. $config->set("GameTimer", $gametimer);
  1759. $config->save();
  1760.  
  1761. if($gametimer==900||$gametimer==600|| $gametimer==300|| $gametimer==240 || $gametimer==180){
  1762. foreach($players as $pn){
  1763. $p = $this->plugin->getServer()->getPlayerExact($pn);
  1764. if($p != null){
  1765. $p->sendMessage($this->plugin->prefix.$gametimer/60 . " Minuten übrig");
  1766. } else {
  1767. $this->plugin->removePlayerFromArena($arena, $pn);
  1768. }
  1769. }
  1770. }
  1771. elseif($gametimer == 2||$gametimer == 3|| $gametimer==4||$gametimer==5||$gametimer==15||$gametimer==30||$gametimer==60){
  1772. foreach($players as $pn){
  1773. $p = $this->plugin->getServer()->getPlayerExact($pn);
  1774. if($p != null){
  1775. $p->sendMessage($this->plugin->prefix.$gametimer . " sekunden übrig");
  1776. } else {
  1777. $this->plugin->removePlayerFromArena($arena, $pn);
  1778. }
  1779. }
  1780. }
  1781. elseif($gametimer == 1){
  1782. foreach($players as $pn){
  1783. $p = $this->plugin->getServer()->getPlayerExact($pn);
  1784. if($p != null){
  1785. $p->sendMessage($this->plugin->prefix."1 sekunde übrig");
  1786. } else {
  1787. $this->plugin->removePlayerFromArena($arena, $pn);
  1788. }
  1789. }
  1790. }
  1791. elseif($gametimer==0){
  1792. foreach($players as $pn){
  1793. $p = $this->plugin->getServer()->getPlayerExact($pn);
  1794. if($p != null){
  1795. $p->sendMessage($this->plugin->prefix."Deathmatch startet!");
  1796.  
  1797. $p->sendMessage($this->plugin->prefix."Es gab keinen Gewinner!");
  1798. $config->set($arena."Status", "Ende");
  1799. $config->save();
  1800. } else {
  1801. $this->plugin->removePlayerFromArena($arena, $pn);
  1802. }
  1803. }
  1804. }
  1805. }
  1806. }
  1807. elseif($status == "Ende"){
  1808.  
  1809. if($endtimer >= 0){
  1810. $endtimer--;
  1811. $config->set("EndTimer", $endtimer);
  1812. $config->save();
  1813.  
  1814. if($endtimer == 15 ||
  1815. $endtimer == 10 ||
  1816. $endtimer == 5 ||
  1817. $endtimer == 4 ||
  1818. $endtimer == 3 ||
  1819. $endtimer == 2 ||
  1820. $endtimer == 1){
  1821.  
  1822. foreach($players as $pn){
  1823. $p = $this->plugin->getServer()->getPlayerExact($pn);
  1824. if($p != null){
  1825. $p->sendMessage($this->plugin->prefix."Arena restartet in ".$endtimer." Sekunden !");
  1826. } else {
  1827. $this->plugin->removePlayerFromArena($arena, $pn);
  1828. }
  1829. }
  1830. }
  1831. if($endtimer == 0){
  1832. foreach ($players as $pn) {
  1833. $p = $this->plugin->getServer()->getPlayerExact($pn);
  1834. if($p != null){
  1835. $p->teleport($this->plugin->getServer()->getDefaultLevel()->getSafeSpawn());
  1836. $p->setFood(20);
  1837. $p->setHealth(20);
  1838. $p->getInventory()->clearAll();
  1839. $p->removeAllEffects();
  1840. $p->setExpLevel(0);
  1841. $p->setNameTag($p->getName());
  1842. }
  1843. }
  1844. $this->plugin->resetArena($arena, true);
  1845. }
  1846. }
  1847. }
  1848. }
  1849. }
  1850. }
  1851.  
  1852. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement