Signed-off-by: Aaron Brock <TheMineBench@gmail.com>
This commit is contained in:
Aaron Brock 2015-07-10 02:46:12 -04:00
parent 4b800340d8
commit 31d6cbd7ce
5 changed files with 127 additions and 67 deletions

View File

@ -11,13 +11,15 @@ namespace mineplex\plugin\gameengine\game\components\countdown;
use mineplex\plugin\gameengine\arenas\Arena;
use mineplex\plugin\gameengine\arenas\events\ArenaEndEvent;
use mineplex\plugin\gameengine\game\components\gamestate\GameStateComponent;
use mineplex\plugin\gameengine\game\components\gamestate\events\GameStateChangeEvent;
use mineplex\plugin\gameengine\time\BenchSchedule;
use mineplex\plugin\gameengine\time\BenchTask;
use mineplex\plugin\gameengine\time\BenchTaskData;
use pocketmine\event\HandlerList;
use pocketmine\event\Listener;
use pocketmine\Server;
use mineplex\plugin\gameengine\game\components\gamestate\events\GameStateChangeEvent;
class GameStateCountdown implements Listener, BenchTask {
@ -69,17 +71,17 @@ class GameStateCountdown implements Listener, BenchTask {
public function run(BenchTaskData $data)
{
print "§$this->startGameState---"."\n";
//print "§$this->startGameState---"."\n";
$this->popup();
if ($this->count <= 0)
{
$this->gameStateComponent->setGameState($this->setGameState);
$data->end();
}
$this->popup();
$this->count--;
else
{
$this->count--;
}
}

View File

@ -0,0 +1,87 @@
<?php
/**
* Created by PhpStorm.
* User: Exerosis
* Date: 7/9/2015
* Time: 10:07 PM
*/
namespace mineplex\plugin\gameengine\game\components\feature\features;
use mineplex\plugin\gameengine\arenas\Arena;
use mineplex\plugin\gameengine\game\components\feature\ListenerFeature;
use mineplex\plugin\gameengine\game\components\spectate\SpectateComponent;
use pocketmine\entity\Effect;
use pocketmine\event\player\PlayerMoveEvent;
use pocketmine\Player;
class FreezePlayers extends ListenerFeature {
private $spectateComponent;
function __construct(Arena $arena, SpectateComponent $spectateComponent = null)
{
parent::__construct($arena);
$this->spectateComponent = $spectateComponent;
}
function onMove(PlayerMoveEvent $event)
{
if (!$this->hasPlayer($event->getPlayer()))
return;
if ($event->getFrom()->getFloorX() != $event->getTo()->getFloorX() || $event->getFrom()->getFloorZ() != $event->getTo()->getFloorZ())
$event->setCancelled();
}
public function enable()
{
parent::enable();
$effect = new Effect(Effect::SLOWNESS, "Waiting till game start...", 0, 0, 0, true);
$effect->setVisible(false)->setAmplifier(9)->setDuration(PHP_INT_MAX);
print "Player Count: " . count($this->getPlayers()) . "\n";
foreach ($this->getPlayers() as $player)
{
print "Adding effect! \n";
$player->addEffect($effect);
}
}
public function disable()
{
parent::disable();
print "Player Count: " . count($this->getPlayers()) . "\n";
foreach ($this->getPlayers() as $player)
{
print "Adding effect! \n";
$player->removeEffect(Effect::SLOWNESS);
}
}
/**
* @return Player[]
*/
private function getPlayers()
{
if ($this->spectateComponent !== null)
return $this->spectateComponent->getNonSpectators();
else
return $this->getArena()->getPlayers();
}
/**
* @param Player $player
* @return bool
*/
private function hasPlayer(Player $player)
{
if ($this->spectateComponent !== null)
return $this->spectateComponent->isNotSpectating($player);
else
return $this->getArena()->hasPlayer($player);
}
}

View File

@ -25,7 +25,7 @@ class NoDamage extends ListenerFeature {
{
if (!$this->getArena()->hasPlayer($event->getEntity()))
return;
Server::getInstance()->broadcastMessage("Stopped!");
//Server::getInstance()->broadcastMessage("Stopped!");
$event->setCancelled();
}
}

View File

@ -11,6 +11,7 @@ namespace mineplex\plugin\gameengine\game\games\sg;
use mineplex\plugin\gameengine\arenas\Arena;
use mineplex\plugin\gameengine\game\components\countdown\GameStateCountdown;
use mineplex\plugin\gameengine\game\components\feature\features\DeathSpectate;
use mineplex\plugin\gameengine\game\components\feature\features\FreezePlayers;
use mineplex\plugin\gameengine\game\components\feature\features\JoinSpectate;
use mineplex\plugin\gameengine\game\components\feature\features\NoBlockBreak;
use mineplex\plugin\gameengine\game\components\feature\features\NoBlockPlace;
@ -21,7 +22,10 @@ use mineplex\plugin\gameengine\game\components\feature\managers\GameStateFeature
use mineplex\plugin\gameengine\game\components\gamestate\GameState;
use mineplex\plugin\gameengine\game\components\gamestate\GameStateComponent;
use mineplex\plugin\gameengine\game\components\lobby\LobbyComponent;
use mineplex\plugin\gameengine\game\components\spawn\SimpleSpawnComponent;
use mineplex\plugin\gameengine\game\components\spawn\SpawnAt;
use mineplex\plugin\gameengine\game\components\spectate\GameModeSpectateComponent;
use mineplex\plugin\gameengine\game\components\world\WorldComponent;
use mineplex\plugin\gameengine\game\Game;
use mineplex\plugin\gameengine\game\components\countdown\LobbyCountdown;
use mineplex\plugin\gameengine\game\components\feature\Feature;
@ -34,7 +38,11 @@ class SurvivalGames implements Game {
$spectateComponent = new GameModeSpectateComponent($arena);
//Init features
$worldComponent = new WorldComponent($arena);
new LobbyComponent($arena);
//Features start----
$noDamage = new NoDamage($arena);
$joinSpectate = new JoinSpectate($arena, $spectateComponent);
@ -43,10 +51,7 @@ class SurvivalGames implements Game {
/** @var Feature[][] $features */
$features = array(
//Just here cause I'm not using LobbyComponent atm
//GameState::LOBBY => array( $stopEveryThing, $noDamage, ),
GameState::PRE_GAME => array( $stopEveryThing, $noDamage, $joinSpectate),
GameState::PRE_GAME => array( $stopEveryThing, $noDamage, $joinSpectate, new FreezePlayers($arena, $spectateComponent)),
GameState::GAME => array( $stopEveryThing, $joinSpectate , new DeathSpectate($arena, $spectateComponent)),
@ -54,15 +59,18 @@ class SurvivalGames implements Game {
);
new LobbyComponent($arena);
new GameStateFeatureManager($arena, $features);
//Features end---
new LobbyCountdown( $arena, $gameStateComponent, null, GameState::LOBBY, GameState::PRE_GAME, 10, 2);
new SpawnAt($arena, new SimpleSpawnComponent($arena, $worldComponent), [GameState::PRE_GAME]);
new LobbyCountdown( $arena, $gameStateComponent, $worldComponent, GameState::LOBBY, GameState::PRE_GAME, 10, 2);
//new GameStateCountdown($arena, $gameStateComponent, 5, GameState::LOBBY, GameState::PRE_GAME);
new GameStateCountdown($arena, $gameStateComponent, 5, GameState::PRE_GAME, GameState::GAME);
new GameStateCountdown($arena, $gameStateComponent, 20, GameState::PRE_GAME, GameState::GAME);
//new GameStateCountdown($arena, $gameStateComponent, 5, GameState::GAME, GameState::POST_GAME);
new LMSVictoryType( $arena, $spectateComponent, $gameStateComponent);

View File

@ -20,65 +20,28 @@ use pocketmine\network\protocol\UpdateBlockPacket;
class UtilTeleport {
public static function teleport(Player $player, Position $pos)
{
public static function teleport(Player $player, Position $position) {
$player->noDamageTicks = 20;
$current = $player->getPosition();
//$player->teleport($pos);
//
// This CRAZY HACK is to remove Tile entities that seem to linger
// whenever you teleport!
//
$current = $player->getLevel();
if ($current->getName() != $pos->getLevel()) {
foreach ($pos->getLevel()->getTiles() as $tile)
{
if ($current->getLevel() != $position->getLevel()) {
$player->noDamageTicks = 20;
foreach ($current->getLevel()->getTiles() as $tile) {
$pk = new UpdateBlockPacket();
$pk->x = $tile->x;
$pk->y = $tile->y;
$pk->z = $tile->z;
$pk->block = $tile->getBlock();
$pk->meta = $tile->metadata;
Packet
$pk->block = 0;
$pk->meta = 0;
$player->dataPacket($pk);
}
/*
foreach ($current->getTiles() as $tile) {
$pk = new UpdateBlockPacket();
$thereTile = $pos->getLevel()->getTile(new Vector3($tile->x, $tile->y, $tile->z));
$pk->x = $tile->x;
$pk->y = $tile->y;
$pk->z = $tile->z;
if ($thereTile !== null)
{
print "There tile is not null!";
$pk->block = $thereTile->getBlock();
$pk->meta = $thereTile->metadata;
}
else
{
print "null!";
$pk->block = 0;
$pk->meta = 0;
}
$player->dataPacket($pk);
}
*/
}
//$player->sendChunk()
$player->teleport($pos);
$player->teleport($position); // Start the teleport
return true;
}
}