Files
CustomNPC-Plus/src/main/java/noppes/npcs/controllers/PartyController.java
T

230 lines
9.6 KiB
Java
Raw Normal View History

package noppes.npcs.controllers;
2025-01-29 21:50:55 -05:00
import kamkeel.npcs.network.PacketUtil;
import net.minecraft.entity.player.EntityPlayer;
2024-03-01 20:00:09 -05:00
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
import net.minecraft.nbt.NBTTagString;
import noppes.npcs.EventHooks;
2024-03-15 15:43:29 -04:00
import noppes.npcs.NoppesUtilPlayer;
import noppes.npcs.NoppesUtilServer;
2024-03-01 20:00:09 -05:00
import noppes.npcs.Server;
import noppes.npcs.constants.EnumPacketClient;
import noppes.npcs.constants.EnumQuestCompletion;
2024-03-03 00:14:19 -05:00
import noppes.npcs.constants.EnumQuestType;
import noppes.npcs.controllers.data.Party;
import noppes.npcs.controllers.data.PlayerData;
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;
import noppes.npcs.scripted.event.PartyEvent;
import java.util.HashMap;
import java.util.UUID;
import java.util.Vector;
import static noppes.npcs.PacketHandlerServer.sendInviteData;
public class PartyController {
private static PartyController Instance;
private HashMap<UUID, Party> parties = new HashMap<>();
2024-03-03 17:38:40 -05:00
private PartyController() {}
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);
}
public void disbandParty(UUID partyUUID) {
Party party = this.parties.get(partyUUID);
if (party != null) {
PartyEvent.PartyDisbandEvent partyEvent = new PartyEvent.PartyDisbandEvent(party, party.getQuest());
EventHooks.onPartyDisband(partyEvent);
for (UUID uuid: party.getPlayerUUIDs()) {
EntityPlayer player = NoppesUtilServer.getPlayer(uuid);
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);
2025-01-29 21:50:55 -05:00
PacketUtil.sendAchievement((EntityPlayerMP) player, true, "party.disbandAlert", "");
PacketUtil.sendChatAlert((EntityPlayerMP) player, "\u00A7c", "party.disbandMessage", "!");
}
}
}
this.parties.remove(partyUUID);
}
}
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){
2025-01-29 21:50:55 -05:00
PacketUtil.sendAchievement((EntityPlayerMP) playerMP, true, "party.kickOtherAlert", kickPlayerName);
PacketUtil.sendChatAlert((EntityPlayerMP) playerMP, "\u00A7e", kickPlayerName, " \u00A74", "party.kickOtherChat", "!");
2024-03-01 20:00:09 -05:00
}
}
2024-03-06 05:25:33 -05:00
if(kickPlayer != null){
2025-01-29 21:50:55 -05:00
PacketUtil.sendAchievement((EntityPlayerMP) kickPlayer, true, "party.kickYouAlert", "");
PacketUtil.sendChatAlert((EntityPlayerMP) kickPlayer, "\u00A74", "party.kickYouChat", "!");
2024-03-06 05:25:33 -05:00
}
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){
2025-01-29 21:50:55 -05:00
PacketUtil.sendAchievement((EntityPlayerMP) playerMP, true, "party.leaveOtherAlert", leavingPlayer.getCommandSenderName());
PacketUtil.sendChatAlert((EntityPlayerMP) playerMP, "\u00A7e", leavingPlayer.getCommandSenderName(), " \u00A7c", "party.leaveOtherChat", "!");
2024-03-01 20:00:09 -05:00
}
}
2025-01-29 21:50:55 -05:00
PacketUtil.sendAchievement((EntityPlayerMP) leavingPlayer, true, "party.leaveYouAlert", "");
PacketUtil.sendChatAlert((EntityPlayerMP) leavingPlayer, "\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);
}
}
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-01 20:00:09 -05:00
}
2024-03-03 00:14:19 -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);
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());
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
2025-01-29 21:50:55 -05:00
PacketUtil.sendChatAlert((EntityPlayerMP) playerMP, 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
}
}