Skip to content

Commit e2eca22

Browse files
committed
スペクテイターモード修正
1 parent fa8618d commit e2eca22

File tree

1 file changed

+14
-22
lines changed

1 file changed

+14
-22
lines changed

src/main/java/com/github/elic0de/hungergames/game/HungerGame.java

Lines changed: 14 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)