@@ -40,8 +40,6 @@ public class HungerGame extends AbstractGame {
4040
4141 private final GameBorder border ;
4242
43- @ Getter
44- private final Set <GameUser > gameUsers = new HashSet <>();
4543
4644 private final Set <Team > aliveTeams = new HashSet <>();
4745
@@ -64,12 +62,12 @@ public HungerGame() {
6462 }
6563
6664 public void join (GameUser user ) {
67- gameUsers . add (user );
65+ super . join (user );
6866 bossBar .addPlayer (user );
6967 }
7068
7169 public void leave (GameUser user ) {
72- gameUsers . remove (user );
70+ super . leave (user );
7371 bossBar .removePlayer (user );
7472 }
7573
@@ -78,16 +76,14 @@ public void startGame(Player player) {
7876 final WorldBorder border = player .getWorld ().getWorldBorder ();
7977 final Location start = border .getCenter ().clone ().add (border .getSize () / 2 , 130 , border .getSize () / 2 );
8078
81- getGameUsers ( ).forEach (user -> {
79+ getPlayers ( GameUser . class ).forEach (user -> {
8280 // プレイヤーが所属しているチームを生存しているチームとして登録
8381 // チームに所属していなかったら観戦者とする
8482 getUserTeam (user ).ifPresentOrElse (aliveTeams ::add , () -> deadPlayers .add (user .getUsername ()));
8583
86- Bukkit .getScheduler ().runTask (HungerGames .getInstance (), () -> {
87- user .getPlayer ().getInventory ().clear ();
88- user .getPlayer ().teleport (start );
89- user .getPlayer ().setGameMode (GameMode .SPECTATOR );
90- });
84+ user .getPlayer ().getInventory ().clear ();
85+ user .getPlayer ().teleport (start );
86+ user .getPlayer ().setGameMode (GameMode .SPECTATOR );
9187 });
9288 nextPhase ();
9389 spawnEnderDragon (player );
@@ -113,17 +109,16 @@ public void spawnEnderDragon(Player player) {
113109 CitizensNPC dragon = new CitizensNPC (UUID .randomUUID (), 1 , "" , EntityControllers .createForType (EntityType .ENDER_DRAGON ), CitizensAPI .getNPCRegistry ());
114110 dragon .spawn (player .getLocation ());
115111 dragon .addTrait (dragonTrait );
116-
117112 if (dragon .isSpawned ()) {
118- getGameUsers ().stream ().filter (onlineUser -> !deadPlayers .contains (onlineUser .getUsername ())).forEach (onlineUser -> dragon .getEntity ().addPassenger (onlineUser .getPlayer ()));
113+ getPlayers ().stream ().filter (onlineUser -> !deadPlayers .contains (onlineUser .getUsername ())).forEach (onlineUser -> dragon .getEntity ().addPassenger (onlineUser .getPlayer ()));
119114 task .cancel ();
120115 }
121116 }, 0 , 20 );
122117
123118 }
124119
125120 public void dismountWithTeam (GameUser user ) {
126- Bukkit . getScheduler (). runTask ( HungerGames . getInstance (), () -> getTeamUsers (user ).stream ().filter (user1 -> user1 != user ).forEach (user1 -> user .getPlayer ().addPassenger (user1 .getPlayer () )));
121+ getTeamUsers (user ).stream ().filter (user1 -> user1 != user ).forEach (user1 -> user .getPlayer ().addPassenger (user1 .getPlayer ()));
127122 }
128123
129124 public void onDeath (GameUser user ) {
@@ -143,11 +138,9 @@ public void onDeath(GameUser user) {
143138 records .addKill (GameUserManager .getGameUser (user .getPlayer ().getKiller ()));
144139 }
145140
146- Bukkit .getScheduler ().runTask (HungerGames .getInstance (), () -> {
147- deathChest .generateChest (user );
148- user .getPlayer ().setGameMode (GameMode .SPECTATOR );
149- user .getPlayer ().getWorld ().strikeLightningEffect (user .getPlayer ().getLocation ());
150- });
141+ deathChest .generateChest (user );
142+ user .getPlayer ().setGameMode (GameMode .SPECTATOR );
143+ user .getPlayer ().getWorld ().strikeLightningEffect (user .getPlayer ().getLocation ());
151144
152145 // 生存チーム数が2チーム以下になったら勝利
153146 if (aliveTeams .size () < 2 ) {
@@ -174,10 +167,9 @@ public void endGame() {
174167
175168 // todo
176169 private void showResult () {
177-
178170 final List <Map .Entry <UUID , Integer >> list = new ArrayList <>(records .getRank ().entrySet ());
179171
180- list .stream ().limit (10 ).forEach (entry -> {
172+ list .stream ().sorted ( Map . Entry . comparingByValue ()). limit (10 ).forEach (entry -> {
181173 final UUID uuid = entry .getKey ();
182174 final OfflinePlayer player = Bukkit .getOfflinePlayer (uuid );
183175 final String playerName = player != null ? player .getName () : "No name" ;
@@ -200,7 +192,7 @@ public void reset() {
200192 }
201193
202194 public void sendMessageSpectators (GameUser user , String message ) {
203- getGameUsers ( ).forEach (onlineUser -> {
195+ getPlayers ( GameUser . class ).forEach (onlineUser -> {
204196 if (isSpectator (onlineUser )) onlineUser .sendMessage (new MineDown (String .format ("[観戦者] %s: %s" , user .getUsername (), message )));
205197 });
206198 }
@@ -255,7 +247,7 @@ private Optional<Team> getUserTeam(GameUser user) {
255247 return Optional .ofNullable (team );
256248 }
257249
258- private Set <GameUser > getTeamUsers (GameUser user ) {
250+ public Set <GameUser > getTeamUsers (GameUser user ) {
259251 final Team team = scoreboard .getEntryTeam (user .getUsername ());
260252 if (team == null ) return new HashSet <>();
261253 return team .getEntries ().stream ().map (Bukkit ::getPlayer ).filter (Objects ::nonNull ).map (GameUserManager ::getGameUser ).collect (Collectors .toSet ());
0 commit comments