Skip to content

Commit 8fa7b2e

Browse files
committed
Added the shephard mission
1 parent 8e96442 commit 8fa7b2e

3 files changed

Lines changed: 153 additions & 3 deletions

File tree

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
package net.swofty.types.generic.mission.missions.shepherd;
2+
3+
import net.minestom.server.entity.EntityType;
4+
import net.swofty.types.generic.event.EventNodes;
5+
import net.swofty.types.generic.event.SkyBlockEvent;
6+
import net.swofty.types.generic.event.custom.PlayerKilledSkyBlockMobEvent;
7+
import net.swofty.types.generic.levels.SkyBlockLevelCause;
8+
import net.swofty.types.generic.mission.MissionData;
9+
import net.swofty.types.generic.mission.SkyBlockProgressMission;
10+
import net.swofty.types.generic.region.RegionType;
11+
import net.swofty.types.generic.skill.SkillCategories;
12+
import net.swofty.types.generic.user.SkyBlockPlayer;
13+
14+
import java.util.*;
15+
16+
public class MissionShearSheep extends SkyBlockProgressMission {
17+
18+
@SkyBlockEvent(node = EventNodes.CUSTOM, requireDataLoaded = false)
19+
public void onKilledSheep(PlayerKilledSkyBlockMobEvent event) {
20+
if (event.getKilledMob().getEntityType() != EntityType.SHEEP) return;
21+
22+
MissionData data = event.getPlayer().getMissionData();
23+
if (!data.isCurrentlyActive(this.getClass()) || data.hasCompleted(this.getClass())) return;
24+
25+
MissionData.ActiveMission mission = data.getMission(this.getClass()).getKey();
26+
mission.setMissionProgress(mission.getMissionProgress() + 1);
27+
mission.checkIfMissionEnded(event.getPlayer());
28+
}
29+
30+
@Override
31+
public String getID() {
32+
return "mission_shear_sheep";
33+
}
34+
35+
@Override
36+
public String getName() {
37+
return "Shear Sheep";
38+
}
39+
40+
@Override
41+
public Map<String, Object> onStart(SkyBlockPlayer player, MissionData.ActiveMission mission) {
42+
mission.getNewObjectiveText().forEach(player::sendMessage);
43+
return new HashMap<>();
44+
}
45+
46+
@Override
47+
public void onEnd(SkyBlockPlayer player, Map<String, Object> customData, MissionData.ActiveMission mission) {
48+
mission.getObjectiveCompleteText(new ArrayList<>(List.of("§b20 Farming XP", "§6100 §7Coins"))).forEach(player::sendMessage);
49+
player.getSkills().increase(player, SkillCategories.FARMING, 20D);
50+
player.addCoins(100);
51+
player.getSkyBlockExperience().addExperience(SkyBlockLevelCause.getMissionCause(getID()));
52+
}
53+
54+
@Override
55+
public Set<RegionType> getValidRegions() {
56+
return Collections.singleton(RegionType.SHEPHERD_KEEP);
57+
}
58+
59+
@Override
60+
public Double getAttachedSkyBlockXP() {
61+
return 5D;
62+
}
63+
64+
@Override
65+
public int getMaxProgress() {
66+
return 5;
67+
}
68+
}
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
package net.swofty.types.generic.mission.missions.shepherd;
2+
3+
import net.swofty.types.generic.event.EventNodes;
4+
import net.swofty.types.generic.event.SkyBlockEvent;
5+
import net.swofty.types.generic.event.custom.VillagerSpokenToEvent;
6+
import net.swofty.types.generic.mission.MissionData;
7+
import net.swofty.types.generic.mission.SkyBlockMission;
8+
import net.swofty.types.generic.region.RegionType;
9+
import net.swofty.types.generic.user.SkyBlockPlayer;
10+
11+
import java.util.HashMap;
12+
import java.util.Map;
13+
import java.util.Set;
14+
15+
public class MissionTalkToShepherd extends SkyBlockMission {
16+
@SkyBlockEvent(node = EventNodes.CUSTOM, requireDataLoaded = false)
17+
public void onVillagerSpokenTo(VillagerSpokenToEvent event) {
18+
MissionData data = event.getPlayer().getMissionData();
19+
20+
// Check if this is the Shepherd NPC
21+
if (!event.getVillager().getID().contains("Shepherd")) {
22+
return;
23+
}
24+
25+
if (data.isCurrentlyActive(this.getClass()) || data.hasCompleted(this.getClass())) {
26+
return;
27+
}
28+
29+
data.setSkyBlockPlayer(event.getPlayer());
30+
data.startMission(this.getClass());
31+
}
32+
33+
@Override
34+
public String getID() {
35+
return "talk_to_shepherd";
36+
}
37+
38+
@Override
39+
public String getName() {
40+
return "Talk to the Shepherd";
41+
}
42+
43+
@Override
44+
public Map<String, Object> onStart(SkyBlockPlayer player, MissionData.ActiveMission mission) {
45+
return new HashMap<>();
46+
}
47+
48+
@Override
49+
public void onEnd(SkyBlockPlayer player, Map<String, Object> customData, MissionData.ActiveMission mission) {
50+
// Start the next mission in the chain
51+
player.getMissionData().startMission(MissionShearSheep.class);
52+
}
53+
54+
@Override
55+
public Set<RegionType> getValidRegions() {
56+
return Set.of(RegionType.SHEPHERD_KEEP);
57+
}
58+
}

type.thefarmingislands/src/main/java/net/swofty/type/thefarmingislands/npcs/NPCShepherd.java

Lines changed: 27 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,17 @@
55
import net.minestom.server.coordinate.Pos;
66
import net.swofty.types.generic.entity.npc.NPCParameters;
77
import net.swofty.types.generic.entity.npc.SkyBlockNPC;
8+
import net.swofty.types.generic.mission.MissionData;
9+
import net.swofty.types.generic.mission.missions.shepherd.MissionShearSheep;
10+
import net.swofty.types.generic.mission.missions.shepherd.MissionTalkToShepherd;
811
import net.swofty.types.generic.user.SkyBlockPlayer;
912

1013
public class NPCShepherd extends SkyBlockNPC {
1114
public NPCShepherd() {
1215
super(new NPCParameters() {
1316
@Override
1417
public String[] holograms(SkyBlockPlayer player) {
15-
return new String[]{"Shepherd", "§e§lCLICK"};
18+
return new String[]{"§fShepherd", "§e§lCLICK"};
1619
}
1720

1821
@Override
@@ -39,7 +42,28 @@ public boolean looking() {
3942

4043
@Override
4144
public void onClick(PlayerClickNPCEvent e) {
42-
e.player().sendMessage(Component.text("§cThis Feature is not there yet. §aOpen a Pull request HERE to get it added quickly!")
43-
.clickEvent(ClickEvent.clickEvent(ClickEvent.Action.OPEN_URL, "https://github.com/Swofty-Developments/HypixelSkyBlock")));
45+
MissionData data = e.player().getMissionData();
46+
47+
if (!data.hasCompleted(MissionTalkToShepherd.class) && !data.isCurrentlyActive(MissionTalkToShepherd.class)) {
48+
sendNPCMessage(e.player(), "Howdy! Mind helping shear some sheep around §bShepherd's Keep§f?");
49+
data.setSkyBlockPlayer(e.player());
50+
data.startMission(MissionTalkToShepherd.class);
51+
return;
52+
}
53+
54+
if (!data.hasCompleted(MissionShearSheep.class) && data.isCurrentlyActive(MissionShearSheep.class)) {
55+
sendNPCMessage(e.player(), "You're doing great! Keep shearing those sheep.");
56+
return;
57+
}
58+
59+
if (!data.hasCompleted(MissionShearSheep.class) && !data.isCurrentlyActive(MissionShearSheep.class)) {
60+
// If they talked already but didn't get the shearing mission for some reason, start it
61+
data.setSkyBlockPlayer(e.player());
62+
data.startMission(MissionShearSheep.class);
63+
sendNPCMessage(e.player(), "Shear a few sheep and come back to me.");
64+
return;
65+
}
66+
67+
sendNPCMessage(e.player(), "Thanks for helping out with the flock!");
4468
}
4569
}

0 commit comments

Comments
 (0)