1// Folia 1.21 – Java 24 · QuestEngine
2package at.walterproduktions.npc;
3
4public final class NpcBrainHandler extends JavaPlugin implements Listener {
5 private final QuestEngine quests = QuestEngine.fromDefinitions(dataFolder);
6 private final DialogueTree dialogue = DialogueTree.load("npc/dialogue.json");
7
8 @Override
9 public void onEnable() {
10 saveDefaultConfig();
11 getServer().getPluginManager().registerEvents(this, this);
12 getServer().getGlobalRegionScheduler().runAtFixedRate(this, t -> tick(), 1, 100);
13 getLogger().info("QuestEngine bereit");
14 }
15
16 @EventHandler(priority = EventPriority.HIGH)
17 public void onPlayerInteractEntity(PlayerInteractEntityEvent e) {
18 if (!npcs.isNpc(e.getRightClicked())) return;
19 QuestState state = quests.stateOf(e.getPlayer());
20 Node node = dialogue.resolve(npcs.idOf(e.getRightClicked()), state);
21 node.send(e.getPlayer()); quests.advanceIfMatched(e.getPlayer(), node);
22 e.getPlayer().sendMessage(Component.text("[NpcBrainHandler] aktualisiert", NamedTextColor.AQUA));
23 }
24
25 private boolean canStart(Player player, Quest quest) {
26 return quest.requirements().stream().allMatch(r -> r.test(quests.stateOf(player)));
27 }
28
29 private void tick() {
30 metrics.record("npc.tick", System.nanoTime());
31 }
32}