mirror of
https://github.com/KAMKEEL/CustomNPC-Plus.git
synced 2026-11-12 11:57:29 +00:00
270 lines
11 KiB
Java
270 lines
11 KiB
Java
package noppes.npcs.controllers;
|
|
|
|
import kamkeel.npcs.network.packets.data.AchievementPacket;
|
|
import kamkeel.npcs.network.packets.data.ChatAlertPacket;
|
|
import kamkeel.npcs.network.packets.data.large.PartyDataPacket;
|
|
import net.minecraft.entity.player.EntityPlayer;
|
|
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;
|
|
import noppes.npcs.NoppesUtilPlayer;
|
|
import noppes.npcs.NoppesUtilServer;
|
|
import noppes.npcs.api.entity.IPlayer;
|
|
import noppes.npcs.api.handler.IPartyHandler;
|
|
import noppes.npcs.api.handler.data.IParty;
|
|
import noppes.npcs.constants.EnumQuestCompletion;
|
|
import noppes.npcs.constants.EnumQuestType;
|
|
import noppes.npcs.controllers.data.Party;
|
|
import noppes.npcs.controllers.data.PlayerData;
|
|
import noppes.npcs.controllers.data.Quest;
|
|
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 kamkeel.npcs.network.packets.request.party.PartyInvitePacket.sendInviteData;
|
|
|
|
public class PartyController implements IPartyHandler {
|
|
private static PartyController Instance;
|
|
|
|
private HashMap<UUID, Party> parties = new HashMap<>();
|
|
|
|
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;
|
|
}
|
|
|
|
@Override
|
|
public IParty createParty(IPlayer player) {
|
|
if (player == null)
|
|
return null;
|
|
|
|
if (player.getMCEntity() == null)
|
|
return null;
|
|
|
|
EntityPlayer entityPlayer = (EntityPlayer) player.getMCEntity();
|
|
PlayerData playerData = PlayerData.get(entityPlayer);
|
|
if (playerData.partyUUID != null)
|
|
return getParty(playerData.partyUUID);
|
|
|
|
Party party = new Party();
|
|
party.addPlayer(entityPlayer);
|
|
party.setLeader(entityPlayer);
|
|
this.parties.put(party.getPartyUUID(), party);
|
|
return party;
|
|
}
|
|
|
|
@Override
|
|
public void disbandParty(IPlayer player) {
|
|
if (player == null)
|
|
return;
|
|
|
|
if (player.getMCEntity() == null)
|
|
return;
|
|
|
|
EntityPlayer entityPlayer = (EntityPlayer) player.getMCEntity();
|
|
PlayerData playerData = PlayerData.get(entityPlayer);
|
|
if (playerData.partyUUID != null)
|
|
disbandParty(playerData.partyUUID);
|
|
|
|
return;
|
|
}
|
|
|
|
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(party, partyEvent);
|
|
for (UUID uuid : party.getPlayerUUIDs()) {
|
|
EntityPlayer player = NoppesUtilServer.getPlayer(uuid);
|
|
PlayerData playerData;
|
|
if (player != null) {
|
|
playerData = PlayerData.get(player);
|
|
} else {
|
|
playerData = PlayerDataController.Instance.getPlayerDataCache(uuid.toString());
|
|
}
|
|
if (playerData != null) {
|
|
playerData.partyUUID = null;
|
|
if (player != null) {
|
|
sendInviteData((EntityPlayerMP) player);
|
|
AchievementPacket.sendAchievement((EntityPlayerMP) player, true, "party.disbandAlert", "");
|
|
ChatAlertPacket.sendChatAlert((EntityPlayerMP) player, "\u00A7c", "party.disbandMessage", "!");
|
|
}
|
|
}
|
|
}
|
|
this.parties.remove(partyUUID);
|
|
}
|
|
}
|
|
|
|
public void sendKickMessages(Party party, EntityPlayer kickPlayer, String kickPlayerName) {
|
|
if (party == null)
|
|
return;
|
|
|
|
for (String name : party.getPlayerNames()) {
|
|
EntityPlayer playerMP = NoppesUtilServer.getPlayerByName(name);
|
|
if (playerMP != null) {
|
|
AchievementPacket.sendAchievement((EntityPlayerMP) playerMP, true, "party.kickOtherAlert", kickPlayerName);
|
|
ChatAlertPacket.sendChatAlert((EntityPlayerMP) playerMP, "\u00A7e", kickPlayerName, " \u00A74", "party.kickOtherChat", "!");
|
|
}
|
|
}
|
|
|
|
if (kickPlayer != null) {
|
|
AchievementPacket.sendAchievement((EntityPlayerMP) kickPlayer, true, "party.kickYouAlert", "");
|
|
ChatAlertPacket.sendChatAlert((EntityPlayerMP) kickPlayer, "\u00A74", "party.kickYouChat", "!");
|
|
}
|
|
}
|
|
|
|
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) {
|
|
AchievementPacket.sendAchievement((EntityPlayerMP) playerMP, true, "party.leaveOtherAlert", leavingPlayer.getCommandSenderName());
|
|
ChatAlertPacket.sendChatAlert((EntityPlayerMP) playerMP, "\u00A7e", leavingPlayer.getCommandSenderName(), " \u00A7c", "party.leaveOtherChat", "!");
|
|
}
|
|
}
|
|
AchievementPacket.sendAchievement((EntityPlayerMP) leavingPlayer, true, "party.leaveYouAlert", "");
|
|
ChatAlertPacket.sendChatAlert((EntityPlayerMP) leavingPlayer, "\u00A7c", "party.leaveYouChat", "!");
|
|
}
|
|
|
|
public void pingPartyUpdate(Party party) {
|
|
if (party == null)
|
|
return;
|
|
|
|
NBTTagCompound compound = party.writeToNBT();
|
|
if (party.getQuest() != null) {
|
|
Quest quest = (Quest) party.getQuest();
|
|
Vector<String> vector = quest.questInterface.getPartyQuestLogStatus(party);
|
|
compound.setString("QuestName", quest.getCategory().getName() + ":" + quest.getName());
|
|
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 = PlayerData.get(playerMP);
|
|
if (playerData != null) {
|
|
PartyDataPacket.sendPartyData((EntityPlayerMP) playerMP, compound);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public void pingPartyQuestObjectiveUpdate(Party party) {
|
|
if (party == null)
|
|
return;
|
|
|
|
NBTTagCompound compound = new NBTTagCompound();
|
|
compound.setInteger("QuestPing", 0);
|
|
if (party.getQuest() != null) {
|
|
Quest quest = (Quest) party.getQuest();
|
|
Vector<String> vector = quest.questInterface.getPartyQuestLogStatus(party);
|
|
NBTTagList list = new NBTTagList();
|
|
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 = PlayerData.get(playerMP);
|
|
if (playerData != null) {
|
|
PartyDataPacket.sendPartyData((EntityPlayerMP) playerMP, compound);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public void sendQuestChat(Party party, String... chatAlerts) {
|
|
if (party == null)
|
|
return;
|
|
|
|
for (String name : party.getPlayerNames()) {
|
|
EntityPlayer playerMP = NoppesUtilServer.getPlayerByName(name);
|
|
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
|
|
ChatAlertPacket.sendChatAlert((EntityPlayerMP) playerMP, args);
|
|
}
|
|
}
|
|
}
|
|
|
|
public boolean checkQuestCompletion(Party party, EnumQuestType type) {
|
|
QuestData questData = party.getQuestData();
|
|
if (questData != null) {
|
|
if (questData.quest.type == type || type == null) {
|
|
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);
|
|
PartyController.Instance().sendQuestChat(party, "party.turnedInChat");
|
|
} else {
|
|
PartyController.Instance().sendQuestChat(party, "party.completeChat");
|
|
}
|
|
PartyController.Instance().pingPartyUpdate(party);
|
|
}
|
|
} else {
|
|
questData.isCompleted = false;
|
|
}
|
|
|
|
for (String name : party.getPlayerNames()) {
|
|
EntityPlayer playerMP = NoppesUtilServer.getPlayerByName(name);
|
|
if (playerMP != null) {
|
|
PlayerData playerData = PlayerData.get(playerMP);
|
|
if (playerData != null) {
|
|
if (playerData.questData.getTrackedQuest() != null && questData.quest.getId() == playerData.questData.getTrackedQuest().getId()) {
|
|
NoppesUtilPlayer.sendPartyTrackedQuestData((EntityPlayerMP) playerMP, party);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
QuestItem.pickedUpParty = null;
|
|
QuestItem.pickedUpPlayer = null;
|
|
return true;
|
|
}
|
|
}
|