Skip to content

Commit 4ee69fb

Browse files
Merge pull request Swofty-Developments#625 from ArikSquad/feat/the-park-finished
Gustave Mission & The Park dialogues
2 parents 1f3fb75 + b1a0ca7 commit 4ee69fb

29 files changed

Lines changed: 1539 additions & 18 deletions

configuration/skyblock/Minestom.regions.csv

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,8 @@ dark_thicket,DARK_THICKET,-333,148,-24,-415,59,-122,THE_PARK
8989
trial_of_fire,TRIALS_OF_FIRE,-369,120,-100,-357,101,-88,THE_PARK
9090
jungle,JUNGLE_ISLAND,-417,149,-130,-507,68,-18,THE_PARK
9191
savanna,SAVANNA_WOODLAND,-467,155,-20,-383,56,102,THE_PARK
92+
viking,VIKING_LONGHOUSE,-349,50,53,-315,131,94,THE_PARK
93+
melody,MELODY_PLATEAU,-434,100,63,-399,132,101,THE_PARK
9294
sherry,SHERRYS_SHOWROOM,21,98,86,7,76,108,JERRYS_WORKSHOP
9395
jerry,JERRYS_WORKSHOP,139,183,200,-163,30,-167,JERRYS_WORKSHOP
9496
terry,TERRYS_SHACK,-87,94,30,-95,76,21,JERRYS_WORKSHOP

configuration/skyblock/items/vanilla/blocks/wood/spruce.yml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,12 @@ items:
2222
material: SPRUCE_WOOD
2323
rarity: COMMON
2424
components:
25+
- id: CUSTOM_DROP
26+
rules:
27+
- drops:
28+
- item: SPRUCE_LOG
29+
chance: 1
30+
amount: 1
2531
- id: SELLABLE
2632
value: 2.0
2733
- id: PLACEABLE

type.generic/src/main/java/net/swofty/type/generic/entity/npc/DialogueController.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,11 @@ public void cancelDialogue(HypixelPlayer player) {
6464
}
6565

6666
private void handleLineSendingLoop(HypixelPlayer player, HypixelNPC.DialogueSet dialogueSet) {
67-
npc.sendNPCMessage(player, dialogueSet.lines()[0]);
67+
if (dialogueSet.sound() != null) {
68+
npc.sendNPCMessage(player, dialogueSet.lines()[0], dialogueSet.sound());
69+
} else {
70+
npc.sendNPCMessage(player, dialogueSet.lines()[0]);
71+
}
6872

6973
String[] newLines = new String[dialogueSet.lines().length - 1];
7074
System.arraycopy(dialogueSet.lines(), 1, newLines, 0, dialogueSet.lines().length - 1);
@@ -85,6 +89,7 @@ private void handleLineSendingLoop(HypixelPlayer player, HypixelNPC.DialogueSet
8589
handleLineSendingLoop(player, HypixelNPC.DialogueSet.builder()
8690
.key(dialogueSet.key())
8791
.lines(newLines)
92+
.sound(dialogueSet.sound())
8893
.build());
8994
}
9095
}).delay(TaskSchedule.seconds(2)).schedule();

type.generic/src/main/java/net/swofty/type/generic/entity/npc/HypixelNPC.java

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -231,10 +231,14 @@ public void unregister() {
231231
}
232232

233233
public void sendNPCMessage(HypixelPlayer player, String message) {
234-
player.sendMessage("§e[NPC] " + getName() + "§f: " + message);
235-
player.playSound(Sound.sound().type(Key.key("entity.villager.celebrate")).volume(1.0f).pitch(0.8f + new Random().nextFloat() * 0.4f).build());
234+
sendNPCMessage(player, message, Sound.sound().type(Key.key("entity.villager.celebrate")).volume(1.0f).pitch(0.8f + new Random().nextFloat() * 0.4f).build());
236235
}
237236

237+
public void sendNPCMessage(HypixelPlayer player, String message, Sound sound) {
238+
player.sendMessage("§e[NPC] " + getName() + "§f: " + message);
239+
player.playSound(sound);
240+
}
241+
238242
protected DialogueController dialogue() {
239243
return dialogueController;
240244
}
@@ -299,7 +303,7 @@ public Map.Entry<PlayerHolograms.ExternalPlayerHologram, Entity> get(HypixelNPC
299303
}
300304

301305
@Builder
302-
public record DialogueSet(String key, String[] lines) {
306+
public record DialogueSet(String key, String[] lines, Sound sound) {
303307
public static final DialogueSet[] EMPTY = new DialogueSet[0];
304308
}
305309
}

type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/data/SkyBlockDataHandler.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -362,6 +362,9 @@ DatapointPetData.class, new DatapointPetData("pet_data")),
362362
QUIVER("quiver", false, false, false,
363363
DatapointQuiver.class, new DatapointQuiver("quiver")),
364364

365+
RACE_BEST_TIME("race_best_time", false, false, false, DatapointMapStringLong.class,
366+
new DatapointMapStringLong("race_best_time")),
367+
365368
ACCESSORY_BAG("accessory_bag", false, false, false,
366369
DatapointAccessoryBag.class, new DatapointAccessoryBag("accessory_bag")),
367370

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
package net.swofty.type.skyblockgeneric.event.actions.race;
2+
3+
import net.kyori.adventure.key.Key;
4+
import net.kyori.adventure.sound.Sound;
5+
import net.minestom.server.coordinate.Pos;
6+
import net.minestom.server.event.player.PlayerDisconnectEvent;
7+
import net.minestom.server.event.player.PlayerMoveEvent;
8+
import net.minestom.server.event.player.PlayerSpawnEvent;
9+
import net.swofty.type.generic.HypixelConst;
10+
import net.swofty.type.generic.event.EventNodes;
11+
import net.swofty.type.generic.event.HypixelEvent;
12+
import net.swofty.type.generic.event.HypixelEventClass;
13+
import net.swofty.type.skyblockgeneric.race.RaceInstance;
14+
import net.swofty.type.skyblockgeneric.race.RaceManager;
15+
import net.swofty.type.skyblockgeneric.user.SkyBlockPlayer;
16+
17+
import java.util.HashMap;
18+
import java.util.UUID;
19+
20+
public class RaceEvents implements HypixelEventClass {
21+
22+
private final HashMap<UUID, Long> lastClickedTimes = new HashMap<>();
23+
24+
@HypixelEvent(node = EventNodes.PLAYER, requireDataLoaded = false)
25+
public void onPlayerJoin(PlayerSpawnEvent event) {
26+
SkyBlockPlayer player = (SkyBlockPlayer) event.getPlayer();
27+
if (!(HypixelConst.getTypeLoader() instanceof RaceInstance raceInstance)) {
28+
return;
29+
}
30+
RaceManager race = raceInstance.getRace();
31+
if (race == null) return;
32+
33+
race.updateForPlayer(HypixelConst.getInstanceContainer(), player);
34+
}
35+
36+
@HypixelEvent(node = EventNodes.PLAYER, requireDataLoaded = false)
37+
public void onPlayerDisconnect(PlayerDisconnectEvent event) {
38+
SkyBlockPlayer player = (SkyBlockPlayer) event.getPlayer();
39+
if (!(HypixelConst.getTypeLoader() instanceof RaceInstance raceInstance)) {
40+
return;
41+
}
42+
RaceManager race = raceInstance.getRace();
43+
if (race == null) return;
44+
if (!race.getPerPlayerStartTime().containsKey(player.getUuid())) return;
45+
race.cancelRace(player);
46+
}
47+
48+
@HypixelEvent(node = EventNodes.PLAYER, requireDataLoaded = true)
49+
public void onPlayerMove(PlayerMoveEvent event) {
50+
SkyBlockPlayer player = (SkyBlockPlayer) event.getPlayer();
51+
if (!(HypixelConst.getTypeLoader() instanceof RaceInstance raceInstance)) {
52+
return;
53+
}
54+
RaceManager race = raceInstance.getRace();
55+
56+
if (lastClickedTimes.containsKey(player.getUuid()) && lastClickedTimes.get(player.getUuid()) >= System.currentTimeMillis() - 500) return;
57+
if (race == null) return;
58+
59+
Pos playerPos = event.getPlayer().getPosition();
60+
61+
if (playerPos.samePoint(race.getRace().startPosition(), 0.5)) {
62+
if (!race.getPerPlayerStartTime().containsKey(player.getUuid()) || race.getPerPlayerStartTime().get(player.getUuid()).lastCheckpointIndex() == -1) {
63+
player.playSound(Sound.sound(
64+
Key.key("block.note_block.pling"), Sound.Source.NEUTRAL,
65+
.3f, 0.75f
66+
));
67+
68+
race.startRace(player);
69+
lastClickedTimes.put(player.getUuid(), System.currentTimeMillis());
70+
return;
71+
}
72+
}
73+
74+
for (int i = 0; i < race.getRace().getCheckpoints().size(); i++) {
75+
if (playerPos.samePoint(race.getRace().getCheckpoints().get(i), 0.5)) {
76+
race.checkpointPlayer(player, i);
77+
lastClickedTimes.put(player.getUuid(), System.currentTimeMillis());
78+
break;
79+
}
80+
}
81+
82+
if (playerPos.samePoint(race.getRace().endPosition(), 0.5)) {
83+
race.finishedRace(player);
84+
lastClickedTimes.put(player.getUuid(), System.currentTimeMillis());
85+
}
86+
}
87+
88+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package net.swofty.type.skyblockgeneric.event.custom;
2+
3+
import lombok.AllArgsConstructor;
4+
import lombok.Getter;
5+
import net.minestom.server.entity.Player;
6+
import net.minestom.server.event.trait.PlayerEvent;
7+
import net.swofty.type.skyblockgeneric.race.Race;
8+
9+
@Getter
10+
@AllArgsConstructor
11+
public class ActionPlayerFinishRace implements PlayerEvent {
12+
13+
private final Player player;
14+
private final Race race;
15+
private final long time;
16+
17+
}

type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/gui/inventories/GUIClaimReward.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import net.swofty.type.generic.gui.inventory.item.GUIClickableItem;
1111
import net.swofty.type.generic.user.HypixelPlayer;
1212
import net.swofty.type.skyblockgeneric.item.SkyBlockItem;
13+
import net.swofty.type.skyblockgeneric.item.updater.NonPlayerItemUpdater;
1314
import net.swofty.type.skyblockgeneric.user.SkyBlockPlayer;
1415

1516
import java.util.List;
@@ -48,7 +49,7 @@ public void run(InventoryPreClickEvent e, HypixelPlayer p) {
4849
@Override
4950
public ItemStack.Builder getItem(HypixelPlayer player) {
5051
return ItemStackCreator.appendLore(
51-
new SkyBlockItem(rewardItem).getDisplayItem(),
52+
new NonPlayerItemUpdater(new SkyBlockItem(rewardItem)).getUpdatedItem(),
5253
List.of(
5354
"",
5455
"§eClick to claim!"

type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/mission/missions/thepark/savanna/MissionGiveMelodyAcaciaLogs.java

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,11 @@
11
package net.swofty.type.skyblockgeneric.mission.missions.thepark.savanna;
22

33
import net.minestom.server.coordinate.Pos;
4-
import net.swofty.commons.skyblock.item.ItemType;
5-
import net.swofty.type.skyblockgeneric.gui.inventories.GUIClaimReward;
64
import net.swofty.type.skyblockgeneric.levels.SkyBlockLevelCause;
75
import net.swofty.type.skyblockgeneric.mission.LocationAssociatedMission;
86
import net.swofty.type.skyblockgeneric.mission.MissionData;
97
import net.swofty.type.skyblockgeneric.mission.SkyBlockMission;
10-
import net.swofty.type.skyblockgeneric.mission.missions.thepark.birchpark.MissionClaimTheTrousers;
118
import net.swofty.type.skyblockgeneric.mission.missions.thepark.jungle.MissionTalkToMolbert;
12-
import net.swofty.type.skyblockgeneric.mission.missions.thepark.spruce.MissionTalkToGustave;
139
import net.swofty.type.skyblockgeneric.region.RegionType;
1410
import net.swofty.type.skyblockgeneric.skill.SkillCategories;
1511
import net.swofty.type.skyblockgeneric.user.SkyBlockPlayer;
@@ -65,7 +61,6 @@ public void onEnd(SkyBlockPlayer player, Map<String, Object> customData, Mission
6561
player.getSkills().increase(player, SkillCategories.FORAGING, 1500D);
6662

6763
player.getMissionData().startMission(MissionTalkToMolbert.class);
68-
player.getMissionData().startMission(MissionTalkToGustave.class);
6964
}
7065

7166
@Override

type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/mission/missions/thepark/spruce/MissionGiveKellySpruceLogs.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import net.swofty.type.skyblockgeneric.mission.MissionData;
66
import net.swofty.type.skyblockgeneric.mission.SkyBlockMission;
77
import net.swofty.type.skyblockgeneric.mission.missions.thepark.darkthicket.MissionTravelToTheDarkThicket;
8+
import net.swofty.type.skyblockgeneric.mission.missions.thepark.spruce.race.MissionTalkToGustave;
89
import net.swofty.type.skyblockgeneric.region.RegionType;
910
import net.swofty.type.skyblockgeneric.user.SkyBlockPlayer;
1011

@@ -36,6 +37,7 @@ public Map<String, Object> onStart(SkyBlockPlayer player, MissionData.ActiveMiss
3637
@Override
3738
public void onEnd(SkyBlockPlayer player, Map<String, Object> customData, MissionData.ActiveMission mission) {
3839
player.getMissionData().startMission(MissionTravelToTheDarkThicket.class);
40+
player.getMissionData().startMission(MissionTalkToGustave.class);
3941
}
4042

4143
@Override

0 commit comments

Comments
 (0)