2024-01-10 22:14:00 -06:00
|
|
|
package noppes.npcs.controllers;
|
|
|
|
|
|
2024-01-11 18:24:33 -06:00
|
|
|
import net.minecraft.entity.player.EntityPlayer;
|
2024-03-01 20:00:09 -05:00
|
|
|
import net.minecraft.entity.player.EntityPlayerMP;
|
2024-03-01 20:51:25 -05:00
|
|
|
import net.minecraft.nbt.NBTTagCompound;
|
|
|
|
|
import net.minecraft.nbt.NBTTagList;
|
|
|
|
|
import net.minecraft.nbt.NBTTagString;
|
2024-03-06 05:05:16 -05:00
|
|
|
import noppes.npcs.EventHooks;
|
2024-03-15 15:43:29 -04:00
|
|
|
import noppes.npcs.NoppesUtilPlayer;
|
2024-01-11 18:24:33 -06:00
|
|
|
import noppes.npcs.NoppesUtilServer;
|
2024-03-01 20:00:09 -05:00
|
|
|
import noppes.npcs.Server;
|
|
|
|
|
import noppes.npcs.constants.EnumPacketClient;
|
2024-03-01 20:51:25 -05:00
|
|
|
import noppes.npcs.constants.EnumQuestCompletion;
|
2024-03-03 00:14:19 -05:00
|
|
|
import noppes.npcs.constants.EnumQuestType;
|
2024-01-10 22:14:00 -06:00
|
|
|
import noppes.npcs.controllers.data.Party;
|
2024-01-11 18:24:33 -06:00
|
|
|
import noppes.npcs.controllers.data.PlayerData;
|
2024-03-01 20:51:25 -05:00
|
|
|
import noppes.npcs.controllers.data.Quest;
|
2024-03-03 00:14:19 -05:00
|
|
|
import noppes.npcs.controllers.data.QuestData;
|
|
|
|
|
import noppes.npcs.quests.QuestInterface;
|
|
|
|
|
import noppes.npcs.quests.QuestItem;
|
2024-03-06 05:05:16 -05:00
|
|
|
import noppes.npcs.scripted.event.PartyEvent;
|
2024-01-10 22:14:00 -06:00
|
|
|
|
|
|
|
|
import java.util.HashMap;
|
|
|
|
|
import java.util.UUID;
|
2024-03-01 20:51:25 -05:00
|
|
|
import java.util.Vector;
|
|
|
|
|
|
|
|
|
|
import static noppes.npcs.PacketHandlerServer.sendInviteData;
|
2024-01-10 22:14:00 -06:00
|
|
|
|
|
|
|
|
public class PartyController {
|
|
|
|
|
private static PartyController Instance;
|
|
|
|
|
|
|
|
|
|
private HashMap<UUID, Party> parties = new HashMap<>();
|
|
|
|
|
|
2024-03-03 17:38:40 -05:00
|
|
|
private PartyController() {}
|
2024-01-10 22:14:00 -06:00
|
|
|
|
|
|
|
|
public static PartyController Instance() {
|
|
|
|
|
if (Instance == null) {
|
|
|
|
|
Instance = new PartyController();
|
|
|
|
|
}
|
|
|
|
|
return Instance;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public Party createParty() {
|
|
|
|
|
Party party = new Party();
|
|
|
|
|
this.parties.put(party.getPartyUUID(), party);
|
|
|
|
|
return party;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public Party getParty(UUID partyUUID) {
|
|
|
|
|
return this.parties.get(partyUUID);
|
|
|
|
|
}
|
|
|
|
|
|
2024-01-11 18:24:33 -06:00
|
|
|
public void disbandParty(UUID partyUUID) {
|
|
|
|
|
Party party = this.parties.get(partyUUID);
|
|
|
|
|
if (party != null) {
|
2024-03-06 05:05:16 -05:00
|
|
|
PartyEvent.PartyDisbandEvent partyEvent = new PartyEvent.PartyDisbandEvent(party, party.getQuest());
|
|
|
|
|
EventHooks.onPartyDisband(partyEvent);
|
2024-01-11 18:24:33 -06:00
|
|
|
for (UUID uuid: party.getPlayerUUIDs()) {
|
|
|
|
|
EntityPlayer player = NoppesUtilServer.getPlayer(uuid);
|
2024-03-01 20:51:25 -05:00
|
|
|
PlayerData playerData;
|
|
|
|
|
if(player != null){
|
|
|
|
|
playerData = PlayerDataController.Instance.getPlayerData(player);
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
playerData = PlayerDataController.Instance.getPlayerDataCache(uuid.toString());
|
|
|
|
|
}
|
|
|
|
|
if(playerData != null){
|
|
|
|
|
playerData.partyUUID = null;
|
|
|
|
|
if(player != null){
|
|
|
|
|
sendInviteData((EntityPlayerMP) player);
|
|
|
|
|
Server.sendData((EntityPlayerMP) player, EnumPacketClient.PARTY_MESSAGE, "party.disbandAlert");
|
|
|
|
|
Server.sendData((EntityPlayerMP) player, EnumPacketClient.CHAT, "\u00A7c", "party.disbandMessage", "!");
|
|
|
|
|
}
|
|
|
|
|
}
|
2024-01-11 18:24:33 -06:00
|
|
|
}
|
|
|
|
|
this.parties.remove(partyUUID);
|
|
|
|
|
}
|
2024-01-10 22:14:00 -06:00
|
|
|
}
|
2024-03-01 20:00:09 -05:00
|
|
|
|
2024-03-06 05:25:33 -05:00
|
|
|
public void sendKickMessages(Party party, EntityPlayer kickPlayer, String kickPlayerName){
|
|
|
|
|
if(party == null)
|
2024-03-01 20:00:09 -05:00
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
for(String name : party.getPlayerNames()){
|
|
|
|
|
EntityPlayer playerMP = NoppesUtilServer.getPlayerByName(name);
|
|
|
|
|
if(playerMP != null){
|
2024-03-06 05:25:33 -05:00
|
|
|
Server.sendData((EntityPlayerMP) playerMP, EnumPacketClient.PARTY_MESSAGE, "party.kickOtherAlert", kickPlayerName);
|
|
|
|
|
Server.sendData((EntityPlayerMP) playerMP, EnumPacketClient.CHAT, "\u00A7e", kickPlayerName, " \u00A74", "party.kickOtherChat", "!");
|
2024-03-01 20:00:09 -05:00
|
|
|
}
|
|
|
|
|
}
|
2024-03-06 05:25:33 -05:00
|
|
|
|
|
|
|
|
if(kickPlayer != null){
|
|
|
|
|
Server.sendData((EntityPlayerMP) kickPlayer, EnumPacketClient.PARTY_MESSAGE, "party.kickYouAlert", "");
|
|
|
|
|
Server.sendData((EntityPlayerMP) kickPlayer, EnumPacketClient.CHAT, "\u00A74", "party.kickYouChat", "!");
|
|
|
|
|
}
|
2024-03-01 20:00:09 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void sendLeavingMessages(Party party, EntityPlayer leavingPlayer){
|
|
|
|
|
if(leavingPlayer == null || party == null)
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
for(String name : party.getPlayerNames()){
|
|
|
|
|
EntityPlayer playerMP = NoppesUtilServer.getPlayerByName(name);
|
|
|
|
|
if(playerMP != null){
|
|
|
|
|
Server.sendData((EntityPlayerMP) playerMP, EnumPacketClient.PARTY_MESSAGE, "party.leaveOtherAlert", leavingPlayer.getCommandSenderName());
|
2024-03-01 20:51:25 -05:00
|
|
|
Server.sendData((EntityPlayerMP) playerMP, EnumPacketClient.CHAT, "\u00A7e", leavingPlayer.getCommandSenderName(), " \u00A7c", "party.leaveOtherChat", "!");
|
2024-03-01 20:00:09 -05:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
Server.sendData((EntityPlayerMP) leavingPlayer, EnumPacketClient.PARTY_MESSAGE, "party.leaveYouAlert", "");
|
2024-03-01 20:51:25 -05:00
|
|
|
Server.sendData((EntityPlayerMP) leavingPlayer, EnumPacketClient.CHAT, "\u00A7c", "party.leaveYouChat", "!");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void pingPartyUpdate(Party party){
|
|
|
|
|
if(party == null)
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
NBTTagCompound compound = party.writeToNBT();
|
2024-03-02 17:13:50 -05:00
|
|
|
if (party.getQuest() != null) {
|
|
|
|
|
Quest quest = (Quest) party.getQuest();
|
|
|
|
|
Vector<String> vector = quest.questInterface.getPartyQuestLogStatus(party);
|
2024-03-15 15:43:29 -04:00
|
|
|
compound.setString("QuestName", quest.getCategory().getName() + ":" + quest.getName());
|
2024-03-02 17:13:50 -05:00
|
|
|
NBTTagList list = new NBTTagList();
|
|
|
|
|
for (String s : vector) {
|
|
|
|
|
list.appendTag(new NBTTagString(s));
|
|
|
|
|
}
|
|
|
|
|
compound.setTag("QuestProgress", list);
|
|
|
|
|
if(quest.completion == EnumQuestCompletion.Npc && quest.questInterface.isPartyCompleted(party)) {
|
|
|
|
|
compound.setString("QuestCompleteWith", quest.completerNpc);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2024-03-01 20:51:25 -05:00
|
|
|
for(String name : party.getPlayerNames()){
|
|
|
|
|
EntityPlayer playerMP = NoppesUtilServer.getPlayerByName(name);
|
|
|
|
|
if(playerMP != null){
|
|
|
|
|
PlayerData playerData = PlayerDataController.Instance.getPlayerData(playerMP);
|
|
|
|
|
if(playerData != null){
|
2024-03-01 20:56:24 -05:00
|
|
|
Server.sendData((EntityPlayerMP) playerMP, EnumPacketClient.PARTY_DATA, compound);
|
2024-03-01 20:51:25 -05:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2024-03-01 20:00:09 -05:00
|
|
|
}
|
2024-03-03 00:14:19 -05:00
|
|
|
|
2024-03-06 05:05:16 -05:00
|
|
|
public void pingPartyQuestObjectiveUpdate(Party party){
|
|
|
|
|
if(party == null)
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
NBTTagCompound compound = new NBTTagCompound();
|
2024-03-07 04:50:10 -05:00
|
|
|
compound.setInteger("QuestPing", 0);
|
2024-03-06 05:05:16 -05:00
|
|
|
if (party.getQuest() != null) {
|
|
|
|
|
Quest quest = (Quest) party.getQuest();
|
|
|
|
|
Vector<String> vector = quest.questInterface.getPartyQuestLogStatus(party);
|
|
|
|
|
NBTTagList list = new NBTTagList();
|
2024-03-15 15:43:29 -04:00
|
|
|
compound.setString("QuestName", quest.getCategory().getName() + ":" + quest.getName());
|
2024-03-06 05:05:16 -05:00
|
|
|
for (String s : vector) {
|
|
|
|
|
list.appendTag(new NBTTagString(s));
|
|
|
|
|
}
|
|
|
|
|
compound.setTag("QuestProgress", list);
|
|
|
|
|
if(quest.completion == EnumQuestCompletion.Npc && quest.questInterface.isPartyCompleted(party)) {
|
|
|
|
|
compound.setString("QuestCompleteWith", quest.completerNpc);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
for(String name : party.getPlayerNames()){
|
|
|
|
|
EntityPlayer playerMP = NoppesUtilServer.getPlayerByName(name);
|
|
|
|
|
if(playerMP != null){
|
|
|
|
|
PlayerData playerData = PlayerDataController.Instance.getPlayerData(playerMP);
|
|
|
|
|
if(playerData != null){
|
|
|
|
|
Server.sendData((EntityPlayerMP) playerMP, EnumPacketClient.PARTY_DATA, compound);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2024-03-05 14:39:13 -05:00
|
|
|
public void sendQuestChat(Party party, String... chatAlerts) {
|
|
|
|
|
if (party == null)
|
2024-03-03 00:14:19 -05:00
|
|
|
return;
|
|
|
|
|
|
2024-03-05 14:39:13 -05:00
|
|
|
for (String name : party.getPlayerNames()) {
|
2024-03-03 00:14:19 -05:00
|
|
|
EntityPlayer playerMP = NoppesUtilServer.getPlayerByName(name);
|
2024-03-05 14:39:13 -05:00
|
|
|
if (playerMP != null) {
|
|
|
|
|
Object[] args = new Object[2 + chatAlerts.length];
|
|
|
|
|
args[0] = "\u00A7a";
|
|
|
|
|
|
|
|
|
|
System.arraycopy(chatAlerts, 0, args, 1, chatAlerts.length);
|
|
|
|
|
args[args.length - 1] = "!"; // Add "!" at the end
|
|
|
|
|
|
|
|
|
|
// Pass args to Server.sendData using spread operator
|
|
|
|
|
Server.sendData((EntityPlayerMP) playerMP, EnumPacketClient.CHAT, args);
|
2024-03-03 00:14:19 -05:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public boolean checkQuestCompletion(Party party, EnumQuestType type) {
|
|
|
|
|
QuestData questData = party.getQuestData();
|
2024-03-07 04:16:34 -05:00
|
|
|
if(questData != null){
|
2024-03-07 04:50:10 -05:00
|
|
|
if(questData.quest.type == type || type == null){
|
2024-03-07 04:16:34 -05:00
|
|
|
QuestInterface inter = questData.quest.questInterface;
|
|
|
|
|
if(inter.isPartyCompleted(party)){
|
|
|
|
|
if((!questData.isCompleted && questData.quest.completion == EnumQuestCompletion.Npc) || questData.quest.instantPartyComplete(party)){
|
|
|
|
|
questData.isCompleted = true;
|
|
|
|
|
if (questData.quest.completion == EnumQuestCompletion.Npc) {
|
|
|
|
|
EventHooks.onPartyFinished(party, questData.quest);
|
2024-03-07 18:47:24 -05:00
|
|
|
PartyController.Instance().sendQuestChat(party, "party.turnedInChat");
|
|
|
|
|
} else {
|
|
|
|
|
PartyController.Instance().sendQuestChat(party, "party.completeChat");
|
2024-03-07 04:16:34 -05:00
|
|
|
}
|
|
|
|
|
PartyController.Instance().pingPartyUpdate(party);
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
questData.isCompleted = false;
|
2024-03-03 00:14:19 -05:00
|
|
|
}
|
2024-03-07 04:16:34 -05:00
|
|
|
|
2024-03-15 15:43:29 -04:00
|
|
|
for (String name : party.getPlayerNames()) {
|
|
|
|
|
EntityPlayer playerMP = NoppesUtilServer.getPlayerByName(name);
|
|
|
|
|
if (playerMP != null) {
|
|
|
|
|
PlayerData playerData = PlayerDataController.Instance.getPlayerData(playerMP);
|
|
|
|
|
if(playerData != null){
|
|
|
|
|
if (playerData.questData.getTrackedQuest() != null && questData.quest.getId() == playerData.questData.getTrackedQuest().getId()) {
|
|
|
|
|
NoppesUtilPlayer.sendPartyTrackedQuestData((EntityPlayerMP) playerMP, party);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2024-03-03 00:14:19 -05:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2024-03-07 04:16:34 -05:00
|
|
|
QuestItem.pickedUpParty = null;
|
|
|
|
|
QuestItem.pickedUpPlayer = null;
|
|
|
|
|
return true;
|
2024-03-03 00:14:19 -05:00
|
|
|
}
|
2024-01-10 22:14:00 -06:00
|
|
|
}
|