44public abstract class LobbyManager {
45 private final Deque<LobbyNode> active =
new LinkedList<>();
47 private final int playerCapacity;
48 private final int gameCapacity;
49 private final int lobbyCooldown;
50 private final int gameCooldown;
51 private final int minimumRequired;
53 protected LobbyManager(
int gameCapacity,
int playerCapacity,
int minimumRequired,
int lobbyCooldown,
int gameCooldown) {
54 this.playerCapacity = playerCapacity;
55 this.gameCapacity = gameCapacity;
56 this.lobbyCooldown = lobbyCooldown;
57 this.gameCooldown = gameCooldown;
58 this.minimumRequired = minimumRequired;
61 public final void enter(
Player player) {
68 if (lobby.getActiveSize() >= playerCapacity) {
69 exceededPlayerCapacity(player);
73 lobby.addActivity(player, lobby.createActivity(player));
76 if (minimumRequired > -1 && lobby.getActiveSize() == 1) {
77 lobby.cooldown(lobbyCooldown);
83 public final void leave(
Player player) {
90 lobby.removeActivity(player);
94 public final void sequenceActive() {
95 Iterator<LobbyNode> iterator = active.iterator();
97 while (iterator.hasNext()) {
100 if (node.finished()) {
112 protected abstract LobbyNode createLobby();
114 protected void onEnter(
Player player) {
118 protected void onLeave(
Player player) {
122 protected void exceededGameCapacity(
Player player) {
126 protected void exceededPlayerCapacity(
Player player) {
132 if (node.contains(player)) {
141 if (node.inLobby()) {
146 if (active.size() >= 1 + gameCapacity) {
151 active.addFirst(activity);
152 activity.lobby =
true;
156 public boolean canStart(
LobbyNode node) {
167 if (activeGames >= gameCapacity) {
170 if (mob.isPlayer()) {
171 exceededGameCapacity(mob.getPlayer());
179 node.
groupMessage(
"This activity requires at least " + minimumRequired +
" players to start.");
186 public int getGameCapacity() {
190 public int getPlayerCapacity() {
191 return playerCapacity;
194 public int getMinimumRequired() {
195 return minimumRequired;
198 public int getGameCooldown() {
202 public int getLobbyCooldown() {
203 return lobbyCooldown;
void cooldown(int cooldown)
void forEachActivity(BiConsumer< Mob, Activity > activity)
final void groupMessage(String message)