Skip to content

Commit 548abe2

Browse files
authored
Merge pull request #637 from ArikSquad/feat/lobby-parkour-impl
Implement Bed Wars lobby parkour
2 parents acdbf9e + 5bdb069 commit 548abe2

4 files changed

Lines changed: 79 additions & 13 deletions

File tree

type.bedwarslobby/src/main/java/net/swofty/type/bedwarslobby/TypeBedWarsLobbyLoader.java

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import net.swofty.type.bedwarslobby.item.impl.BedWarsMenu;
1414
import net.swofty.type.bedwarslobby.item.impl.Collectibles;
1515
import net.swofty.type.bedwarslobby.launchpad.BedWarsLaunchPads;
16+
import net.swofty.type.bedwarslobby.parkour.BedWarsLobbyParkour;
1617
import net.swofty.type.bedwarslobby.util.BedWarsLobbyMap;
1718
import net.swofty.type.generic.HypixelConst;
1819
import net.swofty.type.generic.HypixelGenericLoader;
@@ -27,10 +28,7 @@
2728
import net.swofty.type.generic.tab.TablistModule;
2829
import net.swofty.type.bedwarslobby.tab.BedWarsPlayersOnlineModule;
2930
import net.swofty.type.lobby.LobbyTypeLoader;
30-
import net.swofty.type.lobby.events.LobbyBlockBreak;
31-
import net.swofty.type.lobby.events.LobbyItemEvents;
32-
import net.swofty.type.lobby.events.LobbyLaunchPadEvents;
33-
import net.swofty.type.lobby.events.LobbyPlayerJoinEvents;
31+
import net.swofty.type.lobby.events.*;
3432
import net.swofty.type.lobby.item.LobbyItem;
3533
import net.swofty.type.lobby.item.LobbyItemHandler;
3634
import net.swofty.type.lobby.item.impl.HidePlayers;
@@ -40,6 +38,7 @@
4038
import net.swofty.type.lobby.launchpad.LaunchPad;
4139
import net.swofty.type.lobby.launchpad.LaunchPadHandler;
4240
import net.swofty.type.lobby.parkour.LobbyParkourManager;
41+
import net.swofty.type.lobby.parkour.Parkour;
4342
import org.jetbrains.annotations.Nullable;
4443
import org.tinylog.Logger;
4544

@@ -50,6 +49,7 @@
5049

5150
public class TypeBedWarsLobbyLoader implements LobbyTypeLoader {
5251
public static BedWarsLobbyMap bedWarsLobbyMap = new BedWarsLobbyMap();
52+
public static LobbyParkourManager parkourManager;
5353

5454
@Getter
5555
private final LobbyItemHandler itemHandler = new LobbyItemHandler();
@@ -59,6 +59,11 @@ public ServerType getType() {
5959
return ServerType.BEDWARS_LOBBY;
6060
}
6161

62+
@Override
63+
public Parkour getParkour() {
64+
return new BedWarsLobbyParkour();
65+
}
66+
6267
@Override
6368
public void onInitialize(MinecraftServer server) {
6469
}
@@ -93,13 +98,20 @@ public void afterInitialize(MinecraftServer server) {
9398
MinecraftServer.getSchedulerManager().buildTask(PlayerHolograms::updateExternalHolograms).delay(TaskSchedule.seconds(5))
9499
.repeat(TaskSchedule.seconds(2))
95100
.schedule();
101+
102+
parkourManager = new LobbyParkourManager(getParkour());
96103
}
97104

98105
@Override
99106
public List<LaunchPad> getLaunchPads() {
100107
return Arrays.asList(BedWarsLaunchPads.values());
101108
}
102109

110+
@Override
111+
public @Nullable LobbyParkourManager getParkourManager() {
112+
return parkourManager;
113+
}
114+
103115
@Override
104116
public Map<Integer, LobbyItem> getHotbarItems() {
105117
return Map.of(
@@ -112,11 +124,6 @@ public Map<Integer, LobbyItem> getHotbarItems() {
112124
);
113125
}
114126

115-
@Override
116-
public LobbyParkourManager getParkourManager() {
117-
return null;
118-
}
119-
120127
@Override
121128
public List<ServiceType> getRequiredServices() {
122129
return List.of(ServiceType.ORCHESTRATOR);
@@ -153,6 +160,7 @@ public List<HypixelEventClass> getTraditionalEvents() {
153160
).toList());
154161
// Add lobby base events
155162
events.add(new LobbyItemEvents());
163+
events.add(new LobbyParkourEvents());
156164
events.add(new LobbyLaunchPadEvents());
157165
events.add(new LobbyPlayerJoinEvents());
158166
events.add(new LobbyBlockBreak());
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package net.swofty.type.bedwarslobby.parkour;
2+
3+
import net.minestom.server.coordinate.BlockVec;
4+
import net.minestom.server.coordinate.Point;
5+
import net.minestom.server.coordinate.Pos;
6+
import net.swofty.type.generic.data.datapoints.DatapointParkourData;
7+
import net.swofty.type.lobby.parkour.Parkour;
8+
9+
import java.util.List;
10+
11+
public class BedWarsLobbyParkour implements Parkour {
12+
13+
@Override
14+
public DatapointParkourData.ParkourType getId() {
15+
return DatapointParkourData.ParkourType.BED_WARS_LOBBY;
16+
}
17+
18+
@Override
19+
public Pos getStartLocation() {
20+
return new Pos(-32.5, 72, -25.5, 135, 0);
21+
}
22+
23+
@Override
24+
public List<Point> getCheckpoints() {
25+
return List.of(
26+
new BlockVec(-34, 72, -27),
27+
new BlockVec(-36, 97, -113),
28+
new BlockVec(95, 92, -111),
29+
new BlockVec(144, 98, 2),
30+
new BlockVec(88, 99, 106),
31+
new BlockVec(45, 92, 117),
32+
new BlockVec(-70, 75, 118),
33+
new BlockVec(-41, 72, 38)
34+
);
35+
}
36+
}

type.generic/src/main/java/net/swofty/type/generic/data/datapoints/DatapointParkourData.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ public DatapointParkourData(String key) {
2626
@Getter
2727
public enum ParkourType {
2828
PROTOTYPE_LOBBY,
29-
MURDER_MYSTERY_LOBBY
29+
MURDER_MYSTERY_LOBBY,
30+
BED_WARS_LOBBY
3031
}
3132
}

type.lobby/src/main/java/net/swofty/type/lobby/parkour/LobbyParkourManager.java

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -146,17 +146,34 @@ public void finishedParkour(HypixelPlayer player) {
146146
long timeTaken = System.currentTimeMillis() - startTime;
147147
DatapointParkourData datapoint = player.getDataHandler().get(HypixelDataHandler.Data.PARKOUR_DATA, DatapointParkourData.class);
148148
Map<DatapointParkourData.ParkourType, Long> data = datapoint.getValue();
149+
150+
long previousTimeTaken = data.getOrDefault(parkour.getId(), 0L);
151+
boolean newRecord = false;
149152
if (data.containsKey(parkour.getId())) {
150-
data.replace(parkour.getId(), Math.min(data.getOrDefault(parkour.getId(), Long.MAX_VALUE), timeTaken));
153+
long previousBest = data.get(parkour.getId());
154+
if (timeTaken < previousBest) {
155+
data.put(parkour.getId(), timeTaken);
156+
newRecord = true;
157+
}
151158
} else {
152159
data.put(parkour.getId(), timeTaken);
160+
newRecord = true;
153161
}
154162
datapoint.setValue(data);
155163
String timeString = String.format("%02d:%02d.%03d",
156164
(timeTaken / 60000),
157165
(timeTaken % 60000) / 1000,
158166
(timeTaken % 1000));
159-
player.sendMessage("§a§lCongratulations! You finished the parkour challenge in §e§l" + timeString + "§a§l!");
167+
168+
if (newRecord) {
169+
player.sendMessage("§a§lThat's a new record of §e§l" + timeString + "§a§l! Try again to get an even better record!");
170+
} else {
171+
String previousTimeString = String.format("%02d:%02d.%03d",
172+
(previousTimeTaken / 60000),
173+
(previousTimeTaken % 60000) / 1000,
174+
(previousTimeTaken % 1000));
175+
player.sendMessage("§a§lYour time of §e§l" + timeString + "§a§l did not beat your previous record of §e§l" + previousTimeString + "§a§l! Try again to beat your old record!");
176+
}
160177

161178
if (HypixelConst.getTypeLoader() instanceof LobbyTypeLoader lobbyLoader) {
162179
player.getInventory().clear();
@@ -182,7 +199,11 @@ public void checkpointPlayer(HypixelPlayer player, int checkpointIndex) {
182199
return;
183200
}
184201
perPlayerStartTime.put(player.getUuid(), new RunData(runData.startTime(), checkpointIndex));
185-
player.sendMessage("§a§lCheckpoint §e§l#" + checkpointIndex + " §areached!");
202+
String timeString = String.format("%02d:%02d.%03d",
203+
((System.currentTimeMillis() - runData.startTime()) / 60000),
204+
((System.currentTimeMillis() - runData.startTime()) % 60000) / 1000,
205+
((System.currentTimeMillis() - runData.startTime()) % 1000));
206+
player.sendMessage("§a§lYou reached §e§lCheckpoint #" + checkpointIndex + " §a§lafter §e§l" + timeString + "§a§l.");
186207
}
187208

188209
public void cancelParkour(HypixelPlayer player) {

0 commit comments

Comments
 (0)