Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -216,7 +216,7 @@ public AdminConversationCommands(
.sendMessage(main.parse("<main>Playing test conversation..."));
conversationManager.playConversation(
main.getQuestPlayerManager().getOrCreateQuestPlayer(player.getUniqueId()),
conversationManager.createTestConversation());
conversationManager.createTestConversation(), null);
}));
}

Expand Down Expand Up @@ -313,7 +313,7 @@ public AdminConversationCommands(
+ "</highlight> conversation..."));
conversationManager.playConversation(
main.getQuestPlayerManager().getOrCreateQuestPlayer(player.getUniqueId()),
foundConversation);
foundConversation, null);
}));

final Command.Builder<CommandSender> conversationEditBuilder =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,12 +20,8 @@

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.UUID;
import java.util.*;

import net.kyori.adventure.text.Component;
import org.bukkit.NamespacedKey;
import org.bukkit.configuration.ConfigurationSection;
Expand Down Expand Up @@ -55,6 +51,9 @@
import rocks.gravili.notquests.paper.structs.variables.VariableDataType;

public class ConversationManager {

private final Map<Integer, List<UUID>> activeConversationsOfNPCWithPlayerCache = new HashMap<>();

final ArrayList<ConversationLine> linesForOneFile = new ArrayList<>();
final HashMap<UUID, ArrayList<Component>> chatHistory;
final HashMap<UUID, ArrayList<Component>> conversationChatHistory;
Expand Down Expand Up @@ -158,7 +157,7 @@ public Conversation createTestConversation() {
return testConversation;
}

public void playConversation(final QuestPlayer questPlayer, final Conversation conversation) {
public void playConversation(final QuestPlayer questPlayer, final Conversation conversation, NQNPC npc) {
final Player player = questPlayer.getPlayer();
final ConversationPlayer openConversation = getOpenConversation(questPlayer.getUniqueId());
if (openConversation != null) {
Expand All @@ -170,7 +169,7 @@ public void playConversation(final QuestPlayer questPlayer, final Conversation c
}

final ConversationPlayer conversationPlayer =
new ConversationPlayer(main, questPlayer, player, conversation);
new ConversationPlayer(main, questPlayer, player, conversation, npc);
openConversations.put(questPlayer.getUniqueId(), conversationPlayer);

conversationPlayer.play();
Expand Down Expand Up @@ -546,6 +545,15 @@ public void stopConversation(final ConversationPlayer conversationPlayer) {
"Skipping stopping conversation, as the conversation you tried to stop is already stopped and some other conversation is running instead.");
return;
}
if (conversationPlayer.getNpc() != null) {
if (this.activeConversationsOfNPCWithPlayerCache.containsKey(conversationPlayer.getNpc().getID().getIntegerID())) {
this.activeConversationsOfNPCWithPlayerCache.get(conversationPlayer.getNpc().getID().getIntegerID()).remove(conversationPlayer.getQuestPlayer().getUniqueId());
if (this.activeConversationsOfNPCWithPlayerCache.get(conversationPlayer.getNpc().getID().getIntegerID()).size() == 0) {
this.activeConversationsOfNPCWithPlayerCache.remove(conversationPlayer.getNpc().getID().getIntegerID());
}
}
}

conversationPlayer.getQuestPlayer().sendDebugMessage("Stopping conversation...");
openConversations.remove(conversationPlayer.getQuestPlayer().getUniqueId());
}
Expand Down Expand Up @@ -1037,4 +1045,8 @@ public void removeOldMessages(final Player player) {
// maybe this won't send the huge, 1-component-chat-history again
allConversationHistory.add(collectiveComponent);
}

public Map<Integer, List<UUID>> getActiveConversationsOfNPCWithPlayerCache() {
return this.activeConversationsOfNPCWithPlayerCache;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
import org.bukkit.entity.Player;
import rocks.gravili.notquests.paper.NotQuests;
import rocks.gravili.notquests.paper.conversation.interactionhandlers.ConversationInteractionHandler;
import rocks.gravili.notquests.paper.managers.npc.NQNPC;
import rocks.gravili.notquests.paper.structs.QuestPlayer;
import rocks.gravili.notquests.paper.structs.actions.Action;
import rocks.gravili.notquests.paper.structs.conditions.Condition;
Expand All @@ -33,15 +34,17 @@ public class ConversationPlayer {
private final NotQuests main;
private final QuestPlayer questPlayer;
private final Player player;
private final NQNPC npc;

private final Conversation conversation;
private final ArrayList<ConversationLine> currentPlayerLines;

public ConversationPlayer(
final NotQuests main, final QuestPlayer questPlayer, final Player player, final Conversation conversation) {
final NotQuests main, final QuestPlayer questPlayer, final Player player, final Conversation conversation, NQNPC npc) {
this.main = main;
this.questPlayer = questPlayer;
this.player = player;
this.npc = npc;

this.conversation = conversation;

Expand Down Expand Up @@ -342,4 +345,8 @@ public final ArrayList<ConversationLine> getCurrentPlayerLines() {
public final Conversation getConversation(){
return conversation;
}

public NQNPC getNpc() {
return this.npc;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -424,7 +424,7 @@ public void showQuestOrHandleObjectivesOfArmorStands(final Player player, final
if(main.getConversationManager() != null){
final Conversation foundConversation = main.getConversationManager().getConversationAttachedToArmorstand(armorStand);
if (questPlayer != null && foundConversation != null) {
main.getConversationManager().playConversation(questPlayer, foundConversation);
main.getConversationManager().playConversation(questPlayer, foundConversation, armorStandNQNPC);
if (main.getConfiguration().isArmorStandPreventEditing()) {
event.setCancelled(true);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@

package rocks.gravili.notquests.paper.events.hooks;

import java.util.ArrayList;
import java.util.Locale;
import java.util.concurrent.atomic.AtomicBoolean;
import net.citizensnpcs.api.CitizensAPI;
Expand All @@ -39,8 +40,11 @@
import org.bukkit.inventory.ItemStack;
import org.bukkit.persistence.PersistentDataContainer;
import org.bukkit.persistence.PersistentDataType;
import org.bukkit.scheduler.BukkitRunnable;
import org.bukkit.util.Vector;
import rocks.gravili.notquests.paper.NotQuests;
import rocks.gravili.notquests.paper.conversation.Conversation;
import rocks.gravili.notquests.paper.conversation.ConversationManager;
import rocks.gravili.notquests.paper.managers.npc.ConversationFocus;
import rocks.gravili.notquests.paper.managers.npc.NQNPC;
import rocks.gravili.notquests.paper.managers.npc.NQNPCID;
Expand Down Expand Up @@ -257,10 +261,27 @@ private void onNPCClickEvent(NPCRightClickEvent event) { //Disconnect objectives
main.getQuestManager().sendQuestsPreviewOfQuestShownNPCs(nqNPC, questPlayer);

//Conversations
if(main.getConversationManager() != null){
ConversationManager manager = main.getConversationManager();
if(manager != null){
final Conversation foundConversation = main.getConversationManager().getConversationForNPC(nqNPC);
if (foundConversation != null) {
main.getConversationManager().playConversation(questPlayer, foundConversation);
// Cancel NPC's movement
npc.getNavigator().cancelNavigation();
npc.getNavigator().setPaused(true);
manager.getActiveConversationsOfNPCWithPlayerCache().putIfAbsent(npc.getId(), new ArrayList<>());
manager.getActiveConversationsOfNPCWithPlayerCache().get(npc.getId()).add(player.getUniqueId());
new BukkitRunnable(){
public void run() {
if (!manager.getActiveConversationsOfNPCWithPlayerCache().containsKey(nqNPC.getID().getIntegerID())) {
npc.getNavigator().setPaused(false);
this.cancel();
}
}
}.runTaskTimer(this.main.getMain(), 0L, 30L);
// Try to cancel player's movement
player.getLocation().setDirection(new Vector(0, 0, 0));
player.setVelocity(new Vector(0, 0, 0));
manager.playConversation(questPlayer, foundConversation, nqNPC);
if (main.getDataManager().getConfiguration().isCitizensFocusingEnabled())
new ConversationFocus(main, player, npc.getEntity(), foundConversation).runTaskTimer(main.getMain(), 0, 2);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,7 @@ public void executeInternally(final QuestPlayer questPlayer, Object... objects)
main.getConversationManager().stopConversation(openConversation);
}

main.getConversationManager().playConversation(questPlayer, foundConversation);
main.getConversationManager().playConversation(questPlayer, foundConversation, null);
}

@Override
Expand Down