@@ -77,6 +77,14 @@ public void leave(GameUser user) {
7777 bossBar .removePlayer (user );
7878 }
7979
80+ public boolean checkPlayerSize () {
81+ final boolean canStart = getPlayers ().size () <= 20 ;
82+ if (canStart ) {
83+ startCountDown ();
84+ }
85+ return canStart ;
86+ }
87+
8088
8189 public void createTeams (int count ) {
8290 int teamSize = Math .max (Math .round (getPlayers ().size () / count ), 1 );
@@ -106,6 +114,35 @@ public void teleportStartLocation(Player player) {
106114 player .teleport (start );
107115 }
108116
117+ public void startCountDown () {
118+
119+ }
120+
121+ public void startGame () {
122+ if (getPhase () instanceof WaitingPhase ) {
123+ final WorldBorder border = Bukkit .getWorld ("" ).getWorldBorder ();
124+ final Location start = border .getCenter ().clone ().add ((border .getSize () / 2 ) - 2 , 130 , (border .getSize () / 2 ) - 2 );
125+
126+ Bukkit .getScheduler ().runTask (BattleRoyale .getInstance (), () -> {
127+ getPlayers (GameUser .class ).forEach (user -> {
128+ // プレイヤーが所属しているチームを生存しているチームとして登録
129+ // チームに所属していなかったら観戦者とする
130+ getUserTeam (user ).ifPresentOrElse (aliveTeams ::add , () -> deadPlayers .add (user .getUsername ()));
131+ user .clearEffectAndHeal ();
132+
133+ user .getPlayer ().getInventory ().clear ();
134+ user .getPlayer ().teleport (start );
135+ user .getPlayer ().setGameMode (GameMode .SPECTATOR );
136+
137+ // 10秒のクールダウン
138+ user .getPlayer ().setCooldown (Material .COMMAND_BLOCK , 10 * 20 );
139+ });
140+ nextPhase ();
141+ spawnEnderDragon (border .getWorld ());
142+ });
143+ }
144+ }
145+
109146 public void startGame (Player player , GameType type , boolean modifier ) {
110147 if (getPhase () instanceof WaitingPhase ) {
111148 final WorldBorder border = player .getWorld ().getWorldBorder ();
@@ -133,7 +170,7 @@ public void startGame(Player player, GameType type, boolean modifier) {
133170 user .getPlayer ().setCooldown (Material .COMMAND_BLOCK , 10 * 20 );
134171 });
135172 nextPhase ();
136- spawnEnderDragon (player );
173+ spawnEnderDragon (player . getWorld () );
137174 });
138175 }
139176 }
@@ -144,8 +181,7 @@ public void startBorder() {
144181 sound (Sound .ENTITY_WITHER_SPAWN );
145182 }
146183
147- public void spawnEnderDragon (Player player ) {
148- final World world = player .getWorld ();
184+ public void spawnEnderDragon (World world ) {
149185 final WorldBorder border = world .getWorldBorder ();
150186 final Location start = border .getCenter ().clone ().add (border .getSize () / 2 , 130 , border .getSize () / 2 );
151187 final Location end = border .getCenter ().clone ().subtract (border .getSize () / 2 , -130 , border .getSize () / 2 );
@@ -155,7 +191,7 @@ public void spawnEnderDragon(Player player) {
155191 dragonTrait = new DragonTrait (border );
156192 Bukkit .getScheduler ().runTaskTimer (BattleRoyale .getInstance (), task -> {
157193 CitizensNPC dragon = new CitizensNPC (UUID .randomUUID (), 1 , "" , EntityControllers .createForType (EntityType .ENDER_DRAGON ), CitizensAPI .getNPCRegistry ());
158- dragon .spawn (player . getLocation () );
194+ dragon .spawn (start );
159195 dragon .addTrait (dragonTrait );
160196 if (dragon .isSpawned ()) {
161197 getPlayers ().stream ().filter (onlineUser -> !deadPlayers .contains (onlineUser .getUsername ())).forEach (onlineUser -> dragon .getEntity ().addPassenger (onlineUser .getPlayer ()));
@@ -205,6 +241,9 @@ public void wonGame() {
205241 broadcast (new MineDown (String .format ("%sのチームが勝利しました" , team .getDisplayName ())));
206242 team .getEntries ().forEach (s -> broadcast (new MineDown ("&6" + team .getDisplayName ())));
207243 title (String .format ("%sの勝利" , team .getDisplayName ()), "" );
244+
245+
246+ // todo: ここにfireworkの処理を実装させる
208247 });
209248 endGame ();
210249 }
@@ -213,7 +252,8 @@ public void wonGame() {
213252 public void endGame () {
214253 showResult ();
215254 sound (Sound .UI_TOAST_CHALLENGE_COMPLETE );
216- reset ();
255+ // 20秒後にリセット
256+ Bukkit .getScheduler ().runTaskLater (BattleRoyale .getInstance (), () -> reset (), 20 * 20 );
217257 }
218258
219259 // todo
0 commit comments