Skip to content

Commit 9b9fa0b

Browse files
refactor: replace Runnable with event for game start (#79)
* feat(game): add start event and listener implementation * chore(game): register new listener and update constructor usage * docs(event): add missing documentation --------- Co-authored-by: theEvilReaper <theEvilReaper@users.noreply.github.com>
1 parent 4283507 commit 9b9fa0b

4 files changed

Lines changed: 78 additions & 34 deletions

File tree

game/src/main/java/net/onelitefeather/cygnus/Cygnus.java

Lines changed: 7 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
package net.onelitefeather.cygnus;
22

3-
import net.minestom.server.utils.PacketSendingUtils;
3+
import net.onelitefeather.cygnus.event.GameStartEvent;
4+
import net.onelitefeather.cygnus.listener.game.GameStartListener;
45
import net.onelitefeather.cygnus.map.GameMapProvider;
56
import net.onelitefeather.cygnus.map.event.GameMapLoadedEvent;
6-
import net.onelitefeather.cygnus.utils.Items;
77
import net.theevilreaper.aves.map.provider.AbstractMapProvider;
88
import net.theevilreaper.aves.util.Strings;
99
import net.theevilreaper.aves.util.TimeFormat;
@@ -122,9 +122,9 @@ private void handleAllPageFound() {
122122
private void initListener() {
123123
Supplier<Phase> phaseSupplier = this.linearPhaseSeries::getCurrentPhase;
124124
var manager = MinecraftServer.getGlobalEventHandler();
125-
manager.addListener(GameMapLoadedEvent.class, event -> {
126-
this.pageProvider.loadPageData(event.gameMap().getPageFaces());
127-
});
125+
manager.addListener(GameMapLoadedEvent.class, event ->
126+
this.pageProvider.loadPageData(event.gameMap().getPageFaces())
127+
);
128128
manager.addListener(PlayerSpawnEvent.class, new PlayerSpawnListener(player -> this.mapProvider.teleportToSpawn(player, false), phaseSupplier));
129129
PlayerQuitListener quitListener = new PlayerQuitListener(phaseSupplier, teamService, this.staminaService::forceStopSlenderBar, this.gameConfig.minPlayers());
130130
manager.addListener(PlayerDisconnectEvent.class, quitListener);
@@ -146,6 +146,7 @@ private void registerGameListener() {
146146
SlenderBarTrigger trigger = new SlenderBarTrigger(this.staminaService::getSlenderBar, this::triggerViewRuleUpdate);
147147
new SlenderItemListener(trigger, manager);
148148
manager.addListener(GameFinishEvent.class, new GameFinishListener());
149+
manager.addListener(GameStartEvent.class, new GameStartListener(this.teamService, this.ambientProvider, this.staminaService, this.pageProvider));
149150
manager.addListener(PlayerDeathEvent.class, new PlayerDeathListener(phaseSupplier, this.teamService));
150151
manager.addListener(PlayerEntityInteractEvent.class, new PlayerPageInteractListener(this.pageProvider));
151152
manager.addListener(PageEvent.class, new GamePageListener(this.pageProvider));
@@ -171,7 +172,7 @@ private void initPhases() {
171172
LobbyPhase lobbyPhase = new LobbyPhase(gameMapLoader, staminaInitializer, this.gameConfig.lobbyTime(), this.gameConfig.minPlayers());
172173
this.linearPhaseSeries.add(lobbyPhase);
173174
this.linearPhaseSeries.add(new WaitingPhase(this.view, instanceSwitch, teamInitializer));
174-
this.linearPhaseSeries.add(new GamePhase(this.view, this::triggerGameStart, this::finishGame, this.gameConfig.gameTime()));
175+
this.linearPhaseSeries.add(new GamePhase(this.view, this::finishGame, this.gameConfig.gameTime()));
175176
this.linearPhaseSeries.add(new RestartPhase());
176177
}
177178

@@ -191,29 +192,6 @@ private void finishGame() {
191192
);
192193
}
193194

194-
private void triggerGameStart() {
195-
var slenderPlayer = this.teamService.getTeams().get(Helper.SLENDER_ID).getPlayers().stream().findFirst().get();
196-
slenderPlayer.setTag(Tags.HIDDEN, (byte) 1);
197-
slenderPlayer.sendMessage(Messages.SLENDER_JOIN_PART);
198-
Items.setSlenderEye(slenderPlayer);
199-
this.staminaService.start();
200-
this.pageProvider.spawn();
201-
this.ambientProvider.startTask();
202-
var message = Messages.getSurvivorJoinMessage(String.valueOf(this.pageProvider.getMaxPageAmount()));
203-
this.teamService.getTeams().get(Helper.SURVIVOR_ID).getPlayers().forEach(player -> {
204-
player.sendMessage(message);
205-
player.setTag(Tags.HIDDEN, (byte) 0);
206-
});
207-
TeamHelper.updateTabList(this.teamService);
208-
PacketSendingUtils.broadcastPlayPacket(slenderPlayer.getMetadataPacket());
209-
MinecraftServer.getConnectionManager().getOnlinePlayers().stream().filter(p -> !p.getUuid().equals(slenderPlayer.getUuid())).forEach(p -> {
210-
slenderPlayer.updateOldViewer(p);
211-
});
212-
GameMapProvider gameMapProvider = (GameMapProvider) this.mapProvider;
213-
MinecraftServer.getConnectionManager().getOnlinePlayers().forEach(player -> player.setRespawnPoint(gameMapProvider.getActiveMap().getSpawn()));
214-
PacketSendingUtils.broadcastPlayPacket(slenderPlayer.getMetadataPacket());
215-
}
216-
217195
private void triggerViewRuleUpdate(@NotNull Player player) {
218196
ViewRuleUpdater.updateViewer(player, this.teamService.getTeams().get(Helper.SURVIVOR_ID));
219197
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package net.onelitefeather.cygnus.event;
2+
3+
import net.minestom.server.event.Event;
4+
5+
/**
6+
* The event will be called when the game starts.
7+
*
8+
* @author theEvilReaper
9+
* @version 1.0.0
10+
* @see net.onelitefeather.cygnus.phase.GamePhase
11+
* @since 2.3.1
12+
*/
13+
public class GameStartEvent implements Event {
14+
}
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
package net.onelitefeather.cygnus.listener.game;
2+
3+
import net.minestom.server.MinecraftServer;
4+
import net.minestom.server.utils.PacketSendingUtils;
5+
import net.onelitefeather.cygnus.ambient.AmbientProvider;
6+
import net.onelitefeather.cygnus.common.Messages;
7+
import net.onelitefeather.cygnus.common.Tags;
8+
import net.onelitefeather.cygnus.common.page.PageProvider;
9+
import net.onelitefeather.cygnus.common.util.Helper;
10+
import net.onelitefeather.cygnus.event.GameStartEvent;
11+
import net.onelitefeather.cygnus.stamina.StaminaService;
12+
import net.onelitefeather.cygnus.utils.Items;
13+
import net.onelitefeather.cygnus.utils.TeamHelper;
14+
import net.theevilreaper.xerus.api.team.TeamService;
15+
16+
import java.util.function.Consumer;
17+
18+
public final class GameStartListener implements Consumer<GameStartEvent> {
19+
20+
private final TeamService teamService;
21+
private final AmbientProvider ambientProvider;
22+
private final StaminaService staminaService;
23+
private final PageProvider pageProvider;
24+
25+
public GameStartListener(TeamService teamService, AmbientProvider ambientProvider, StaminaService staminaService, PageProvider pageProvider) {
26+
this.teamService = teamService;
27+
this.ambientProvider = ambientProvider;
28+
this.staminaService = staminaService;
29+
this.pageProvider = pageProvider;
30+
}
31+
32+
@Override
33+
public void accept(GameStartEvent event) {
34+
var slenderPlayer = this.teamService.getTeams().get(Helper.SLENDER_ID).getPlayers().stream().findFirst().get();
35+
slenderPlayer.setTag(Tags.HIDDEN, (byte) 1);
36+
slenderPlayer.sendMessage(Messages.SLENDER_JOIN_PART);
37+
Items.setSlenderEye(slenderPlayer);
38+
this.staminaService.start();
39+
this.pageProvider.spawn();
40+
this.ambientProvider.startTask();
41+
var message = Messages.getSurvivorJoinMessage(String.valueOf(this.pageProvider.getMaxPageAmount()));
42+
this.teamService.getTeams().get(Helper.SURVIVOR_ID).getPlayers().forEach(player -> {
43+
player.sendMessage(message);
44+
player.setTag(Tags.HIDDEN, (byte) 0);
45+
});
46+
TeamHelper.updateTabList(this.teamService);
47+
PacketSendingUtils.broadcastPlayPacket(slenderPlayer.getMetadataPacket());
48+
MinecraftServer.getConnectionManager().getOnlinePlayers()
49+
.stream()
50+
.filter(p -> !p.equals(slenderPlayer))
51+
.forEach(slenderPlayer::updateOldViewer);
52+
PacketSendingUtils.broadcastPlayPacket(slenderPlayer.getMetadataPacket());
53+
}
54+
}

game/src/main/java/net/onelitefeather/cygnus/phase/GamePhase.java

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package net.onelitefeather.cygnus.phase;
22

3+
import net.minestom.server.event.EventDispatcher;
4+
import net.onelitefeather.cygnus.event.GameStartEvent;
35
import net.theevilreaper.xerus.api.phase.TickDirection;
46
import net.theevilreaper.xerus.api.phase.TimedPhase;
57
import net.minestom.server.MinecraftServer;
@@ -20,19 +22,16 @@
2022
public final class GamePhase extends TimedPhase {
2123

2224
private final GameView gameView;
23-
private final Runnable startRunnable;
2425
private @Nullable GameFinishEvent finishEvent;
2526

2627
/**
2728
* Creates a new instance from the {@link GamePhase}.
2829
*
2930
* @param gameView the view to update
30-
* @param startRunnable the runnable to execute on start
3131
* @param endRunnable the runnable to execute on end
3232
*/
3333
public GamePhase(
3434
GameView gameView,
35-
Runnable startRunnable,
3635
Runnable endRunnable,
3736
int gameTime
3837
) {
@@ -41,7 +40,6 @@ public GamePhase(
4140
this.setTickDirection(TickDirection.DOWN);
4241
this.setEndTicks(0);
4342
this.gameView = gameView;
44-
this.startRunnable = startRunnable;
4543
this.setFinishedCallback(endRunnable);
4644
}
4745

@@ -59,7 +57,7 @@ public void setFinishEvent(GameFinishEvent finishEvent) {
5957
public void onStart() {
6058
super.onStart();
6159
addListener(PlayerTickEvent.class, new CygnusPlayerTickListener());
62-
this.startRunnable.run();
60+
EventDispatcher.call(new GameStartEvent());
6361
}
6462

6563
@Override

0 commit comments

Comments
 (0)