Skip to content

Commit 272548a

Browse files
Merge pull request #502 from ItzKatze/master
improved player placed block tagging
2 parents 47df115 + 8207b63 commit 272548a

11 files changed

Lines changed: 140 additions & 31 deletions

File tree

type.generic/src/main/java/net/swofty/types/generic/event/actions/custom/collection/ActionCollectionAdd.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ public class ActionCollectionAdd implements SkyBlockEventClass {
2525

2626
@SkyBlockEvent(node = EventNodes.CUSTOM , requireDataLoaded = true)
2727
public void run(CustomBlockBreakEvent event) {
28-
if (SkyBlockConst.isIslandServer()) return;
28+
if (event.getPlayerPlaced()) return;
2929

3030
SkyBlockPlayer player = event.getPlayer();
3131
ItemType type = ItemType.fromMaterial(event.getMaterial());

type.generic/src/main/java/net/swofty/types/generic/event/actions/custom/skill/ActionSkillMiningHandler.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ public class ActionSkillMiningHandler implements SkyBlockEventClass {
1313

1414
@SkyBlockEvent(node = EventNodes.CUSTOM , requireDataLoaded = true)
1515
public void run(CustomBlockBreakEvent event) {
16+
if (event.getPlayerPlaced()) return;
17+
1618
SkyBlockItem item = new SkyBlockItem(event.getMaterial());
1719

1820
if (!item.hasComponent(SkillableMineComponent.class)) return;

type.generic/src/main/java/net/swofty/types/generic/event/actions/player/region/ActionRegionBlockBreak.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -83,11 +83,11 @@ else if (region != null) {
8383
);
8484

8585
// Call custom break event
86-
if (!(block.hasTag(Tag.Boolean("player_placed")) && block.getTag(Tag.Boolean("player_placed")))) {
87-
SkyBlockEventHandler.callSkyBlockEvent(new CustomBlockBreakEvent(
88-
player, material, event.getBlockPosition(), customDrops
89-
));
90-
}
86+
boolean playerPlaced = block.hasTag(Tag.Boolean("player_placed")) && block.getTag(Tag.Boolean("player_placed"));
87+
88+
SkyBlockEventHandler.callSkyBlockEvent(new CustomBlockBreakEvent(
89+
player, material, event.getBlockPosition(), customDrops, playerPlaced
90+
));
9191

9292
// Process each drop with fortune multiplier
9393
for (SkyBlockItem dropItem : customDrops) {

type.generic/src/main/java/net/swofty/types/generic/event/custom/CustomBlockBreakEvent.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,13 @@ public class CustomBlockBreakEvent implements PlayerInstanceEvent {
1515
private final Material material;
1616
private final Point point;
1717
private final List<SkyBlockItem> drops;
18+
private final Boolean playerPlaced;
1819

19-
public CustomBlockBreakEvent(SkyBlockPlayer player, Material material, Point point, List<SkyBlockItem> drops) {
20+
public CustomBlockBreakEvent(SkyBlockPlayer player, Material material, Point point, List<SkyBlockItem> drops, Boolean playerPlaced) {
2021
this.player = player;
2122
this.material = material;
2223
this.point = point;
2324
this.drops = drops;
25+
this.playerPlaced = playerPlaced;
2426
}
2527
}

type.generic/src/main/java/net/swofty/types/generic/gui/inventory/inventories/sbmenu/skills/GUISkills.java

Lines changed: 25 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
public class GUISkills extends SkyBlockInventoryGUI {
2222
private final int[] displaySlots = {
2323
20, 21, 22, 23, 24,
24-
30, 32
24+
30, 31, 32
2525
};
2626

2727
public GUISkills() {
@@ -55,31 +55,40 @@ public ItemStack.Builder getItem(SkyBlockPlayer player) {
5555
set(new GUIClickableItem(slot) {
5656
@Override
5757
public void run(InventoryPreClickEvent e, SkyBlockPlayer player) {
58+
if (category == SkillCategories.CARPENTRY && !player.getMissionData().hasCompleted("give_wool_to_carpenter")) return;
5859
new GUISkillCategory(category, 0).open(player);
5960
}
6061

6162
@Override
6263
public ItemStack.Builder getItem(SkyBlockPlayer player) {
63-
ArrayList<String> lore = new ArrayList<>(skillCategory.getDescription());
64-
lore.add(" ");
64+
ArrayList<String> lore = new ArrayList<>();
65+
if (category == SkillCategories.CARPENTRY && !player.getMissionData().hasCompleted("give_wool_to_carpenter")) {
66+
lore.add("§7Unlock this skill by talking to the");
67+
lore.add("§7Carpenter.");
68+
lore.add("");
69+
lore.add("§bNot unlocked!");
70+
} else {
71+
lore.addAll(skillCategory.getDescription());
72+
lore.add(" ");
6573

66-
Integer nextLevel = player.getSkills().getNextLevel(category);
74+
Integer nextLevel = player.getSkills().getNextLevel(category);
6775

68-
if (nextLevel != null) {
69-
player.getSkills().getDisplay(lore, category, skillCategory.getRewards()[nextLevel - 1].requirement(),
70-
"§7Progress to Level " + StringUtility.getAsRomanNumeral(nextLevel) + ": ");
71-
lore.add(" ");
76+
if (nextLevel != null) {
77+
player.getSkills().getDisplay(lore, category, skillCategory.getRewards()[nextLevel - 1].requirement(),
78+
"§7Progress to Level " + StringUtility.getAsRomanNumeral(nextLevel) + ": ");
79+
lore.add(" ");
7280

73-
SkillCategory.SkillReward[] rewards = skillCategory.getRewards();
74-
SkillCategory.SkillReward reward = rewards[nextLevel - 1];
81+
SkillCategory.SkillReward[] rewards = skillCategory.getRewards();
82+
SkillCategory.SkillReward reward = rewards[nextLevel - 1];
7583

76-
reward.getDisplay(lore);
77-
} else {
78-
lore.add("§cMax Level Reached!");
79-
}
84+
reward.getDisplay(lore);
85+
} else {
86+
lore.add("§cMax Level Reached!");
87+
}
8088

81-
lore.add(" ");
82-
lore.add("§eClick to view!");
89+
lore.add(" ");
90+
lore.add("§eClick to view!");
91+
}
8392

8493
return ItemStackCreator.getStack(
8594
"§a" + skillCategory.getName() + " " +

type.generic/src/main/java/net/swofty/types/generic/mission/MissionSet.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ public enum MissionSet {
2929
TIMBER(MissionTalkToLumberjack.class, MissionBreakOaklog.class, MissionTalkToLumberjackAgain.class),
3030
FIRST_HARVEST(MissionTalkToFarmer.class, MissionCollectWheat.class, MissionTalkToFarmerAgain.class),
3131
BACK_AT_THE_BARNYARD(MissionTalkToFarmHand.class, MissionCraftWheatMinion.class, MissionTalkToFarmhandAgain.class),
32+
CARPENTRY(MissionGiveWoolToCarpenter.class),
3233
;
3334

3435
private final Class<? extends SkyBlockMission>[] missions;

type.generic/src/main/java/net/swofty/types/generic/mission/missions/MissionBreakLog.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package net.swofty.types.generic.mission.missions;
22

33
import net.minestom.server.event.player.PlayerSpawnEvent;
4+
import net.swofty.types.generic.SkyBlockConst;
45
import net.swofty.types.generic.event.EventNodes;
56
import net.swofty.types.generic.event.SkyBlockEvent;
67
import net.swofty.types.generic.event.custom.CustomBlockBreakEvent;
@@ -17,6 +18,8 @@
1718
public class MissionBreakLog extends SkyBlockMission {
1819
@SkyBlockEvent(node = EventNodes.CUSTOM, requireDataLoaded = false)
1920
public void endMission(CustomBlockBreakEvent event) {
21+
if (event.getPlayerPlaced()) return;
22+
2023
MissionData data = event.getPlayer().getMissionData();
2124

2225
if (!data.isCurrentlyActive(MissionBreakLog.class) || data.hasCompleted(MissionBreakLog.class)) return;
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package net.swofty.types.generic.mission.missions;
2+
3+
import net.swofty.types.generic.mission.MissionData;
4+
import net.swofty.types.generic.mission.SkyBlockMission;
5+
import net.swofty.types.generic.region.RegionType;
6+
import net.swofty.types.generic.user.SkyBlockPlayer;
7+
8+
import java.util.Collections;
9+
import java.util.HashMap;
10+
import java.util.Map;
11+
import java.util.Set;
12+
13+
//Opens Carpentry Table Recipe on mission complete
14+
15+
public class MissionGiveWoolToCarpenter extends SkyBlockMission {
16+
17+
@Override
18+
public String getID() {
19+
return "give_wool_to_carpenter";
20+
}
21+
22+
@Override
23+
public String getName() {
24+
return "Give a stack of White Wool to Carpenter";
25+
}
26+
27+
@Override
28+
public Map<String, Object> onStart(SkyBlockPlayer player, MissionData.ActiveMission mission) {
29+
mission.getNewObjectiveText().forEach(player::sendMessage);
30+
return new HashMap<>();
31+
}
32+
33+
@Override
34+
public void onEnd(SkyBlockPlayer player, Map<String, Object> customData, MissionData.ActiveMission mission) {
35+
36+
}
37+
38+
@Override
39+
public Set<RegionType> getValidRegions() {
40+
return Collections.singleton(RegionType.VILLAGE);
41+
}
42+
}

type.generic/src/main/java/net/swofty/types/generic/skill/SkillCategories.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ public enum SkillCategories {
1111
FORAGING(ForagingSkill.class),
1212
ENCHANTING(EnchantingSkill.class),
1313
RUNECRAFTING(RunecraftingSkill.class),
14+
CARPENTRY(CarpentrySkill.class),
1415
;
1516

1617
private final Class<? extends SkillCategory> clazz;

type.hub/src/main/java/net/swofty/type/hub/npcs/NPCCarpenter.java

Lines changed: 57 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,22 @@
11
package net.swofty.type.hub.npcs;
22

3-
import net.kyori.adventure.text.Component;
4-
import net.kyori.adventure.text.event.ClickEvent;
53
import net.minestom.server.coordinate.Pos;
4+
import net.swofty.commons.item.ItemType;
5+
import net.swofty.types.generic.entity.npc.NPCDialogue;
66
import net.swofty.types.generic.entity.npc.NPCParameters;
7-
import net.swofty.types.generic.entity.npc.SkyBlockNPC;
7+
import net.swofty.types.generic.mission.MissionData;
8+
import net.swofty.types.generic.mission.missions.MissionGiveWoolToCarpenter;
89
import net.swofty.types.generic.user.SkyBlockPlayer;
910

10-
public class NPCCarpenter extends SkyBlockNPC {
11+
import java.util.List;
12+
13+
public class NPCCarpenter extends NPCDialogue {
1114

1215
public NPCCarpenter() {
1316
super(new NPCParameters() {
1417
@Override
1518
public String[] holograms(SkyBlockPlayer player) {
16-
return new String[]{9Carpenter", "§e§lCLICK"};
19+
return new String[]{fCarpenter", "§e§lCLICK"};
1720
}
1821

1922
@Override
@@ -40,8 +43,55 @@ public boolean looking() {
4043

4144
@Override
4245
public void onClick(PlayerClickNPCEvent e) {
43-
e.player().sendMessage(Component.text("§cThis Feature is not there yet. §aOpen a Pull request HERE to get it added quickly!")
44-
.clickEvent(ClickEvent.clickEvent(ClickEvent.Action.OPEN_URL, "https://github.com/Swofty-Developments/HypixelSkyBlock")));
46+
if (isInDialogue(e.player())) return;
47+
MissionData data = e.player().getMissionData();
48+
49+
if (!data.isCurrentlyActive(MissionGiveWoolToCarpenter.class) && !data.hasCompleted(MissionGiveWoolToCarpenter.class)) {
50+
setDialogue(e.player(), "initial-hello").thenRun(() -> {
51+
data.startMission(MissionGiveWoolToCarpenter.class);
52+
});
53+
return;
54+
}
55+
if (!data.hasCompleted(MissionGiveWoolToCarpenter.class) && data.isCurrentlyActive(MissionGiveWoolToCarpenter.class)) {
56+
if (e.player().getAmountInInventory(ItemType.WHITE_WOOL) >= 64) {
57+
e.player().takeItem(ItemType.WHITE_WOOL, 64);
58+
setDialogue(e.player(), "completed-quest").thenRun(() -> {
59+
data.endMission(MissionGiveWoolToCarpenter.class);
60+
});
61+
} else {
62+
e.player().sendMessage("§e[NPC] Carpenter§f: Come back with a stack of White Wool!");
63+
}
64+
return;
65+
}
66+
if (data.hasCompleted(MissionGiveWoolToCarpenter.class)) {
67+
setDialogue(e.player(), "spoke-again");
68+
}
4569
}
4670

71+
@Override
72+
public NPCDialogue.DialogueSet[] getDialogueSets(SkyBlockPlayer player) {
73+
return List.of(
74+
NPCDialogue.DialogueSet.builder()
75+
.key("initial-hello").lines(new String[]{
76+
"Hi, " + player.getUsername() + "! Welcome to the §aFurniture Shop§f.",
77+
"Sales are too good right now, I can't keep up with the demand!",
78+
"Could you bring a §astack of White Wool§f to help replenish my stock?",
79+
"Sheep over in The Barn drop wool, but you can also purchase it from the §dWool Weaver§f.",
80+
"She lives in a house not far from here - it's over by the water fountain."
81+
}).build(),
82+
NPCDialogue.DialogueSet.builder()
83+
.key("completed-quest").lines(new String[]{
84+
"Wow, thanks so much for the help!",
85+
"Carpentry is my passion, I always love to teach others.",
86+
"Here's the recipe for the §aCarpentry Table§f. You can place it in your world and craft furniture that you've unlocked!",
87+
"You can now gain Carpentry XP by crafting items. Leveling your §aCarpentry Skill§f unlocks new furniture recipes!",
88+
"Some furniture is available exclusively in the Furniture Shop downstairs. Check it out!"
89+
}).build(),
90+
NPCDialogue.DialogueSet.builder()
91+
.key("spoke-again").lines(new String[]{
92+
"Check out the Furniture Shop downstairs!",
93+
"The Furniture Shop is downstairs. Purchase cool furniture down there!"
94+
}).build()
95+
).stream().toArray(NPCDialogue.DialogueSet[]::new);
96+
}
4797
}

0 commit comments

Comments
 (0)