Skip to content

Commit 6a31426

Browse files
committed
feat: unified NPCs
1 parent afe2042 commit 6a31426

78 files changed

Lines changed: 561 additions & 471 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

type.deepcaverns/src/main/java/net/swofty/type/deepcaverns/npcs/NPCLiftOperator.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
import net.minestom.server.coordinate.Pos;
44
import net.swofty.type.deepcaverns.gui.GUILiftOperator;
55
import net.swofty.type.generic.data.datapoints.DatapointToggles;
6+
import net.swofty.type.generic.entity.npc.HypixelNPC;
7+
import net.swofty.type.generic.entity.npc.configuration.HumanConfiguration;
68
import net.swofty.type.generic.user.HypixelPlayer;
79
import net.swofty.type.skyblockgeneric.user.SkyBlockPlayer;
810

@@ -93,6 +95,6 @@ public DialogueSet[] dialogues(HypixelPlayer player) {
9395
"Be careful not to fall down the shaft though, it's a long fall!",
9496
"Good luck on your adventures."
9597
}).build()
96-
).toArray(NPCDialogue.DialogueSet[]::new);
98+
).toArray(DialogueSet[]::new);
9799
}
98100
}

type.deepcaverns/src/main/java/net/swofty/type/deepcaverns/npcs/NPCWalter.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@
44
import net.minestom.server.coordinate.Pos;
55
import net.minestom.server.item.ItemStack;
66
import net.swofty.type.deepcaverns.gui.GUIShopWalter;
7+
import net.swofty.type.generic.entity.npc.HypixelNPC;
78
import net.swofty.type.generic.entity.npc.NPCOption;
9+
import net.swofty.type.generic.entity.npc.configuration.HumanConfiguration;
810
import net.swofty.type.generic.user.HypixelPlayer;
911
import net.swofty.type.generic.utility.MathUtility;
1012
import net.swofty.type.skyblockgeneric.item.SkyBlockItem;
@@ -95,6 +97,6 @@ public DialogueSet[] dialogues(HypixelPlayer player) {
9597
.key("donate_cube_no_requirements").lines(new String[]{ // when donating the cube without requirements met
9698
"Mmh... you're missing something to become a Platinum-level donor...",
9799
}).abiPhone(true).build()
98-
).toArray(NPCDialogue.DialogueSet[]::new);
100+
).toArray(DialogueSet[]::new);
99101
}
100102
}

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

Lines changed: 19 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@
1010
import net.swofty.type.generic.entity.hologram.PlayerHolograms;
1111
import net.swofty.type.generic.entity.npc.configuration.AnimalConfiguration;
1212
import net.swofty.type.generic.entity.npc.configuration.HumanConfiguration;
13-
import net.swofty.type.generic.entity.npc.configuration.VillagerConfiguration;
1413
import net.swofty.type.generic.entity.npc.configuration.NPCConfiguration;
14+
import net.swofty.type.generic.entity.npc.configuration.VillagerConfiguration;
1515
import net.swofty.type.generic.entity.npc.impl.NPCAnimalEntityImpl;
1616
import net.swofty.type.generic.entity.npc.impl.NPCEntityImpl;
1717
import net.swofty.type.generic.entity.npc.impl.NPCVillagerEntityImpl;
@@ -23,7 +23,7 @@
2323
import java.util.concurrent.ConcurrentHashMap;
2424

2525
public abstract class HypixelNPC {
26-
private static final int SPAWN_DISTANCE = 16;
26+
private static final int SPAWN_DISTANCE = 48;
2727
private static final int LOOK_DISTANCE = 5;
2828

2929
@Getter
@@ -39,7 +39,7 @@ public abstract class HypixelNPC {
3939

4040
public HypixelNPC(NPCConfiguration configuration) {
4141
this.parameters = configuration;
42-
String className = getClass().getSimpleName().replace("NPC", "");
42+
String className = getClass().getSimpleName().replace("NPC", "").replace("Villager", "");
4343
this.name = className.replaceAll("(?<=.)(?=\\p{Lu})", " ");
4444
this.dialogueController = new DialogueController(this);
4545
}
@@ -86,24 +86,29 @@ public static void updateForPlayer(HypixelPlayer player) {
8686
Pos position = config.position(player);
8787

8888
Entity entity;
89-
if (config instanceof HumanConfiguration humanConfig) {
90-
entity = new NPCEntityImpl(
89+
float yOffset = 0.0f;
90+
switch (config) {
91+
case HumanConfiguration humanConfig -> entity = new NPCEntityImpl(
9192
holograms[holograms.length - 1],
9293
humanConfig.texture(player),
9394
humanConfig.signature(player),
9495
holograms);
95-
} else if (config instanceof VillagerConfiguration villagerConfig) {
96-
entity = new NPCVillagerEntityImpl(villagerConfig.profession());
97-
} else if (config instanceof AnimalConfiguration animalConfig) {
98-
entity = new NPCAnimalEntityImpl(
99-
holograms[holograms.length - 1],
100-
animalConfig.entityType());
101-
} else {
102-
throw new IllegalStateException("Unknown NPCConfiguration type: " + config.getClass().getName());
96+
case VillagerConfiguration villagerConfig -> {
97+
entity = new NPCVillagerEntityImpl(holograms[holograms.length - 1], villagerConfig.profession());
98+
yOffset = 0.2f;
99+
}
100+
case AnimalConfiguration animalConfig -> {
101+
entity = new NPCAnimalEntityImpl(
102+
holograms[holograms.length - 1],
103+
animalConfig.entityType());
104+
yOffset = animalConfig.hologramYOffset();
105+
}
106+
default ->
107+
throw new IllegalStateException("Unknown NPCConfiguration type: " + config.getClass().getName());
103108
}
104109

105110
PlayerHolograms.ExternalPlayerHologram holo = PlayerHolograms.ExternalPlayerHologram.builder()
106-
.pos(position.add(0, 1.1, 0))
111+
.pos(position.add(0, 1.1 + yOffset, 0))
107112
.text(Arrays.copyOfRange(holograms, 0, holograms.length - 1))
108113
.player(player)
109114
.build();

type.generic/src/main/java/net/swofty/type/generic/entity/npc/configuration/AnimalConfiguration.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,10 @@
22

33
import net.minestom.server.entity.EntityType;
44

5-
public abstract class AnimalConfiguration extends NPCConfiguration {
5+
public abstract class AnimalConfiguration implements NPCConfiguration {
66

77
public abstract EntityType entityType();
88

9+
public abstract float hologramYOffset();
10+
911
}

type.generic/src/main/java/net/swofty/type/generic/entity/npc/configuration/HumanConfiguration.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
import net.swofty.type.generic.user.HypixelPlayer;
44

5-
public abstract class HumanConfiguration extends NPCConfiguration {
5+
public abstract class HumanConfiguration implements NPCConfiguration {
66

77
public abstract String texture(HypixelPlayer player);
88

type.generic/src/main/java/net/swofty/type/generic/entity/npc/configuration/NPCConfiguration.java

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,18 @@
22

33
import net.minestom.server.coordinate.Pos;
44
import net.swofty.type.generic.user.HypixelPlayer;
5-
import net.swofty.type.generic.entity.npc.HypixelNPC;
6-
import net.swofty.type.generic.entity.npc.configuration.HumanConfiguration;
75

8-
public abstract class NPCConfiguration {
6+
public interface NPCConfiguration {
97

10-
public abstract String[] holograms(HypixelPlayer player);
8+
String[] holograms(HypixelPlayer player);
119

12-
public abstract Pos position(HypixelPlayer player);
10+
Pos position(HypixelPlayer player);
1311

14-
public boolean looking() {
12+
default boolean looking() {
1513
return false;
1614
}
1715

18-
public boolean visible(HypixelPlayer player) {
16+
default boolean visible(HypixelPlayer player) {
1917
return true;
2018
}
2119
}

type.generic/src/main/java/net/swofty/type/generic/entity/npc/configuration/VillagerConfiguration.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
import net.minestom.server.entity.VillagerProfession;
44

5-
public abstract class VillagerConfiguration extends NPCConfiguration {
5+
public abstract class VillagerConfiguration implements NPCConfiguration {
66

77
public abstract VillagerProfession profession();
88

type.generic/src/main/java/net/swofty/type/generic/entity/npc/impl/NPCVillagerEntityImpl.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package net.swofty.type.generic.entity.npc.impl;
22

33
import lombok.Getter;
4+
import net.kyori.adventure.text.Component;
5+
import net.minestom.server.component.DataComponents;
46
import net.minestom.server.coordinate.Pos;
57
import net.minestom.server.entity.EntityCreature;
68
import net.minestom.server.entity.EntityType;
@@ -9,16 +11,20 @@
911
import net.minestom.server.entity.metadata.villager.VillagerMeta;
1012
import net.minestom.server.instance.Instance;
1113
import net.swofty.type.generic.user.HypixelPlayer;
14+
import org.jetbrains.annotations.NotNull;
1215

1316
import java.util.ArrayList;
1417

1518
@Getter
1619
public class NPCVillagerEntityImpl extends EntityCreature {
1720
private final ArrayList<HypixelPlayer> inRangeOf = new ArrayList<>();
1821

19-
public NPCVillagerEntityImpl(VillagerProfession profession) {
22+
public NPCVillagerEntityImpl(@NotNull String bottomDisplay, VillagerProfession profession) {
2023
super(EntityType.VILLAGER);
2124

25+
this.setCustomNameVisible(true);
26+
this.set(DataComponents.CUSTOM_NAME, Component.text(bottomDisplay));
27+
2228
VillagerMeta meta = (VillagerMeta) this.entityMeta;
2329
meta.setVillagerData(new VillagerMeta.VillagerData(
2430
VillagerType.PLAINS, profession, VillagerMeta.Level.EXPERT)

type.goldmine/src/main/java/net/swofty/type/goldmine/npcs/NPCGoldForger.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
import net.minestom.server.coordinate.Pos;
44
import net.swofty.type.generic.data.datapoints.DatapointToggles;
5+
import net.swofty.type.generic.entity.npc.HypixelNPC;
6+
import net.swofty.type.generic.entity.npc.configuration.HumanConfiguration;
57
import net.swofty.type.generic.user.HypixelPlayer;
68
import net.swofty.type.goldmine.gui.GUIShopGoldForger;
79
import net.swofty.type.skyblockgeneric.user.SkyBlockPlayer;
@@ -55,7 +57,7 @@ public void onClick(NPCInteractEvent e) {
5557

5658
@Override
5759
public DialogueSet[] dialogues(HypixelPlayer player) {
58-
return new NPCDialogue.DialogueSet[] {
60+
return new DialogueSet[] {
5961
DialogueSet.builder()
6062
.key("hello").lines(new String[]{
6163
"I love goooold!",

type.goldmine/src/main/java/net/swofty/type/goldmine/npcs/NPCIronForger.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
import net.minestom.server.coordinate.Pos;
44
import net.swofty.type.generic.data.datapoints.DatapointToggles;
5+
import net.swofty.type.generic.entity.npc.HypixelNPC;
6+
import net.swofty.type.generic.entity.npc.configuration.HumanConfiguration;
57
import net.swofty.type.generic.user.HypixelPlayer;
68
import net.swofty.type.goldmine.gui.GUIShopIronForger;
79
import net.swofty.type.skyblockgeneric.user.SkyBlockPlayer;
@@ -55,7 +57,7 @@ public void onClick(NPCInteractEvent e) {
5557

5658
@Override
5759
public DialogueSet[] dialogues(HypixelPlayer player) {
58-
return new NPCDialogue.DialogueSet[] {
60+
return new DialogueSet[] {
5961
DialogueSet.builder()
6062
.key("hello").lines(new String[]{
6163
"For my wares, you'll have to pay the iron price!",

0 commit comments

Comments
 (0)