1515use pocketmine \Server ;
1616use pocketmine \utils \TextFormat ;
1717use VectorNetworkProject \TheMix \game \corepvp \blue \BlueTeamManager ;
18+ use VectorNetworkProject \TheMix \game \corepvp \PhaseManager ;
1819use VectorNetworkProject \TheMix \game \corepvp \red \RedTeamManager ;
1920use VectorNetworkProject \TheMix \game \DefaultConfig ;
2021use VectorNetworkProject \TheMix \game \event \game \BreakCoreEvent ;
2122use VectorNetworkProject \TheMix \game \event \game \GameWinEvent ;
23+ use VectorNetworkProject \TheMix \game \event \game \PhaseTimeUpdateEvent ;
24+ use VectorNetworkProject \TheMix \game \event \game \PhaseUpdateEvent ;
2225use VectorNetworkProject \TheMix \game \event \player \PlayerStreakEvent ;
2326use VectorNetworkProject \TheMix \lib \sound \LevelSounds ;
2427use VectorNetworkProject \TheMix \task \ResetGameTask ;
@@ -29,6 +32,9 @@ class GameEventListener implements Listener
2932 /** @var bool $finish */
3033 private static $ finish = false ;
3134
35+ /** @var bool $break */
36+ private $ break = false ;
37+
3238 /**
3339 * @param BreakCoreEvent $event
3440 *
@@ -45,6 +51,12 @@ public function onBreakCore(BreakCoreEvent $event)
4551 }
4652 switch ($ event ->getTeam ()) {
4753 case BreakCoreEvent::RED :
54+ if (!$ this ->isBreak ()) {
55+ $ event ->setCancelled ();
56+ $ event ->getPlayer ()->sendMessage ('§6WAR TIME §fになるまでコアは破壊出来ません。HAHAHA ' );
57+
58+ return ;
59+ }
4860 Server::getInstance ()->broadcastMessage ("§l§cRED§rのコアが§b {$ player ->getName ()}§rによって攻撃を受けています。 " );
4961 foreach (Server::getInstance ()->getOnlinePlayers () as $ player ) {
5062 LevelSounds::NotePiano ($ player );
@@ -55,6 +67,12 @@ public function onBreakCore(BreakCoreEvent $event)
5567 }
5668 break ;
5769 case BreakCoreEvent::BLUE :
70+ if (!$ this ->isBreak ()) {
71+ $ event ->setCancelled ();
72+ $ event ->getPlayer ()->sendMessage ('§6WAR TIME §fになるまでコアは破壊出来ません。HAHAHA ' );
73+
74+ return ;
75+ }
5876 Server::getInstance ()->broadcastMessage ("§l§bBLUR§rのコアが§c {$ player ->getName ()}§rによって攻撃を受けています。 " );
5977 foreach (Server::getInstance ()->getOnlinePlayers () as $ player ) {
6078 LevelSounds::NotePiano ($ player );
@@ -96,7 +114,7 @@ public function onStreak(PlayerStreakEvent $event)
96114 /**
97115 * @param GameWinEvent $event
98116 */
99- public function event (GameWinEvent $ event )
117+ public function onGameWin (GameWinEvent $ event )
100118 {
101119 if (DefaultConfig::isDev ()) {
102120 $ event ->setCancelled ();
@@ -123,10 +141,50 @@ public function event(GameWinEvent $event)
123141 TheMix::getInstance ()->getScheduler ()->scheduleDelayedTask (new ResetGameTask (), 30 * 20 );
124142 Server::getInstance ()->broadcastTitle ('§l§f===< §6決着 §f>=== ' , '§aWin:§l ' .$ event ->getType () === GameWinEvent::WIN_RED ? '§cRED ' : '§bBLUE ' , 20 , 5 * 20 , 20 );
125143 Server::getInstance ()->broadcastMessage ('===< END GAME >=== ' );
126- Server::getInstance ()->broadcastMessage ('§l§eGG! TheMix v0.0.8 -BETA ' );
144+ Server::getInstance ()->broadcastMessage ('§l§eGG! TheMix v0.0.9 -BETA ' );
127145 Server::getInstance ()->broadcastMessage ('§lDiscordに参加して遊んだ感想や改善してほしい点などを書いて下さい! ' );
128146 Server::getInstance ()->broadcastMessage ('§lDiscord: https://discord.gg/EF2G5dh ' );
129- Server::getInstance ()->broadcastMessage ('§c30秒後プレイヤーの再接続とサーバー再起動を開始します。 ' );
147+ Server::getInstance ()->broadcastMessage ('§c30秒後ゲームをリセットします。 ' );
148+ }
149+
150+ /**
151+ * @param PhaseTimeUpdateEvent $event
152+ *
153+ * @throws \ReflectionException
154+ */
155+ public function onPhaseTimeUpdate (PhaseTimeUpdateEvent $ event )
156+ {
157+ if (RedTeamManager::getListCount () < 1 || BlueTeamManager::getListCount () < 1 || PhaseManager::MAX_PHASE === $ event ->getPhase () || self ::isFinish ()) {
158+ Server::getInstance ()->broadcastPopup ("§l§cTIME: {$ event ->getTime ()} : Phase: {$ event ->getPhase ()}" );
159+ $ event ->setCancelled ();
160+
161+ return ;
162+ } elseif ($ event ->getTime () === 0 ) {
163+ PhaseManager::addPhase ();
164+ }
165+ Server::getInstance ()->broadcastPopup ("§l {$ event ->getTime ()} : Phase: {$ event ->getPhase ()}" );
166+ }
167+
168+ /**
169+ * @param PhaseUpdateEvent $event
170+ */
171+ public function onPhaseUpdate (PhaseUpdateEvent $ event )
172+ {
173+ if (RedTeamManager::getListCount () < 1 || BlueTeamManager::getListCount ()) {
174+ $ event ->setCancelled ();
175+
176+ return ;
177+ }
178+ switch ($ event ->getPhase ()) {
179+ case 2 :
180+ $ this ->setBreak (true );
181+ Server::getInstance ()->broadcastTitle ('§l§6WAR TIME ' , 'コアの破壊が可能になりました。 ' , 20 , 100 , 20 );
182+ break ;
183+ case 3 :
184+ BlockEventListener::setDiamond (true );
185+ Server::getInstance ()->broadcastTitle ('§l§cRUSH TIME ' , '攻め時だ!ダイヤを確保し敵陣へ乗り込め! ' , 20 , 100 , 20 );
186+ break ;
187+ }
130188 }
131189
132190 /**
@@ -144,4 +202,20 @@ public static function isFinish(): bool
144202 {
145203 return self ::$ finish ;
146204 }
205+
206+ /**
207+ * @return bool
208+ */
209+ private function isBreak (): bool
210+ {
211+ return $ this ->break ;
212+ }
213+
214+ /**
215+ * @param bool $break
216+ */
217+ private function setBreak (bool $ break ): void
218+ {
219+ $ this ->break = $ break ;
220+ }
147221}
0 commit comments