GameManager/src/Ad5001/GameManager/Game.php

180 lines
4.3 KiB
PHP
Raw Normal View History

2016-07-28 06:39:24 +00:00
<?php
namespace Ad5001\GameManager;
use pocketmine\Server;
use pocketmine\Player;
use pocketmine\block\Block;
use pocketmine\utils\Config;
2016-08-01 10:29:14 +00:00
use pocketmine\level\Level;
2016-07-28 06:39:24 +00:00
use Ad5001\GameManager\Main;
abstract class Game {
protected $name;
protected $level;
2016-07-31 07:27:54 +00:00
protected $server;
2016-07-28 06:39:24 +00:00
public function __construct(string $name, Level $level) {
$this->server = $level->getServer();
$this->level = $level;
$this->name = $name;
2016-08-01 10:29:14 +00:00
$this->main = $this->server->getPluginManager()->getPlugin("GameManager");
2016-07-31 07:27:54 +00:00
$this->gm = $this->main->getGameManager();
2016-07-31 19:46:09 +00:00
$this->gm->backup($level);
2016-07-28 06:39:24 +00:00
}
public function getPlugin() {
return $this->main;
}
public function getLevel() {
2016-08-03 17:02:12 +00:00
return $this->level;
2016-07-28 06:39:24 +00:00
}
2016-07-31 07:27:54 +00:00
public function isStarted() {
return isset($this->gm->getStartedGames()[$this->level->getName()]);
2016-07-28 06:39:24 +00:00
}
2016-07-31 19:46:09 +00:00
abstract public function onGameStart();
2016-07-28 06:39:24 +00:00
2016-07-31 19:46:09 +00:00
abstract public function onGameStop();
2016-07-28 07:31:52 +00:00
2016-07-31 19:46:09 +00:00
public function stop() {
$this->gm->stopGame($this->level);
2016-07-28 07:31:52 +00:00
return true;
}
2016-07-28 06:39:24 +00:00
2016-08-02 07:25:31 +00:00
public function start() {
$this->gm->stopGame($this->level);
return true;
}
2016-07-31 19:46:09 +00:00
public function onJoin(Player $player) {
if($this->getLevel()->getPlayers() >= $this->getMinPlayers() and !$this->isStarted()) {
$this->gm->startGame($this->getLevel());
}
2016-08-01 10:29:14 +00:00
if($this->getLevel()->getPlayers() <= $this->getMaxPlayers() and !$this->isStarted()) {
2016-07-31 19:46:09 +00:00
$player->teleport($this->getServer()->getDefaultLevel()->getDefaultSpawn());
2016-08-03 17:02:12 +00:00
$player->sendMessage("Too many players already in the game !");
2016-07-31 19:46:09 +00:00
}
}
2016-07-28 06:39:24 +00:00
2016-07-31 19:46:09 +00:00
public function onQuit(Player $player) {
if($this->getLevel()->getPlayers() <= $this->getMinPlayers()) {
$this->gm->stopGame($this->getLevel());
}
}
2016-07-28 06:39:24 +00:00
2016-08-03 17:02:12 +00:00
public function getLogger() {
return $this->getPlugin()->getLogger();
}
2016-08-02 07:25:31 +00:00
public function onInteract(\pocketmine\event\player\PlayerInteractEvent $event) {}
public function onChat(\pocketmine\event\player\PlayerChatEvent $event) {}
public function onPlayerChat(\pocketmine\event\player\PlayerChatEvent $event) {}
public function onPlayerCommand(\pocketmine\event\player\PlayerCommandPreprocessEvent $event) {}
public function onDeath(\pocketmine\event\player\PlayerDeathEvent $event) {}
public function onPlayerDeath(\pocketmine\event\player\PlayerDeathEvent $event) {}
public function onPlayerDropItem(\pocketmine\event\player\PlayerDropItemEvent $event) {}
public function onDrop(\pocketmine\event\player\PlayerDropItemEvent $event) {}
public function onPlayerMove(\pocketmine\event\player\PlayerMoveEvent $event) {}
public function onMove(\pocketmine\event\player\PlayerMoveEvent $event) {}
public function onPlayerItemConsume(\pocketmine\event\player\PlayerItemConsumeEvent $event) {}
public function onItemConsume(\pocketmine\event\player\PlayerItemConsumeEvent $event) {}
public function onPlayerItemHeld(\pocketmine\event\player\PlayerItemHeldEvent $event) {}
public function onItemHeld(\pocketmine\event\player\PlayerItemHeldEvent $event) {}
public function onDataPacketReceive(\pocketmine\event\server\DataPacketReceiveEvent $event) {}
public function onDataPacketSend(\pocketmine\event\server\DataPacketSendEvent $event) {}
public function onServerCommand(\pocketmine\event\server\ServerCommandEvent $event) {}
2016-07-31 10:25:30 +00:00
2016-07-31 09:17:15 +00:00
public function onBlockBreak(\pocketmine\event\block\BlockBreakEvent $event) {}
2016-07-28 06:39:24 +00:00
2016-08-02 07:25:31 +00:00
public function onBreak(\pocketmine\event\block\BlockBreakEvent $event) {}
2016-08-03 09:22:06 +00:00
public function onBlockPlace(\pocketmine\event\block\BlockPlaceEvent $event) {}
2016-08-02 07:25:31 +00:00
2016-08-03 09:22:06 +00:00
public function onPlace(\pocketmine\event\block\BlockPlaceEvent $event) {}
2016-07-31 09:17:15 +00:00
public function onEntityDamage(\pocketmine\event\entity\EntityDamageEvent $event) {}
2016-07-28 06:39:24 +00:00
public function getConfig() {
return new Config($this->main->getDataFolder() . "games/$this->name");
}
public function saveDefaultConfig() {
2016-07-31 19:46:09 +00:00
@mkdir($this->main->getDataFolder() . "games/" . $this->name);
2016-07-31 09:17:15 +00:00
file_put_contents($this->main->getDataFolder() . "games/$this->name", "");
2016-07-28 06:39:24 +00:00
}
2016-07-31 19:46:09 +00:00
abstract public function getName() : string;
2016-07-28 06:39:24 +00:00
2016-07-31 19:46:09 +00:00
abstract public function getMinPlayers() : int;
2016-07-28 06:39:24 +00:00
2016-07-31 19:46:09 +00:00
abstract public function getMaxPlayers() : int;
2016-07-28 06:39:24 +00:00
2016-07-28 07:31:52 +00:00
public function getDataFolder() {
return $this->main->getDataFolder() . "games/$this->name";
}
2016-07-28 06:39:24 +00:00
}