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

179 lines
7.1 KiB
Java

package noppes.npcs.controllers;
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.NoppesUtilServer;
import noppes.npcs.Server;
import noppes.npcs.constants.EnumPacketClient;
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 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<>();
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) {
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);
Server.sendData((EntityPlayerMP) player, EnumPacketClient.PARTY_MESSAGE, "party.disbandAlert");
Server.sendData((EntityPlayerMP) player, EnumPacketClient.CHAT, "\u00A7c", "party.disbandMessage", "!");
}
}
}
this.parties.remove(partyUUID);
}
}
public void sendKickMessages(Party party, EntityPlayer kickPlayer){
if(kickPlayer == 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.kickOtherAlert", kickPlayer.getCommandSenderName());
Server.sendData((EntityPlayerMP) playerMP, EnumPacketClient.CHAT, "\u00A7e", kickPlayer.getCommandSenderName(), " \u00A74", "party.kickOtherChat", "!");
}
}
Server.sendData((EntityPlayerMP) kickPlayer, EnumPacketClient.PARTY_MESSAGE, "party.kickYouAlert", "");
Server.sendData((EntityPlayerMP) kickPlayer, EnumPacketClient.CHAT, "\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){
Server.sendData((EntityPlayerMP) playerMP, EnumPacketClient.PARTY_MESSAGE, "party.leaveOtherAlert", leavingPlayer.getCommandSenderName());
Server.sendData((EntityPlayerMP) playerMP, EnumPacketClient.CHAT, "\u00A7e", leavingPlayer.getCommandSenderName(), " \u00A7c", "party.leaveOtherChat", "!");
}
}
Server.sendData((EntityPlayerMP) leavingPlayer, EnumPacketClient.PARTY_MESSAGE, "party.leaveYouAlert", "");
Server.sendData((EntityPlayerMP) leavingPlayer, EnumPacketClient.CHAT, "\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);
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);
}
}
}
}
public void sendQuestChat(Party party, String chatAlert){
if(party == null)
return;
for(String name : party.getPlayerNames()){
EntityPlayer playerMP = NoppesUtilServer.getPlayerByName(name);
if(playerMP != null){
Server.sendData((EntityPlayerMP) playerMP, EnumPacketClient.CHAT, "\u00A7a", chatAlert, "!");
}
}
}
public boolean checkQuestCompletion(Party party, EnumQuestType type) {
boolean bo = false;
QuestData questData = party.getQuestData();
if(questData == null)
return bo;
if(questData.quest.type != type && type != null)
return bo;
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.onQuestFinished(player, data.quest);
}
bo = true;
party.setQuest(null);
PartyController.Instance().pingPartyUpdate(party);
PartyController.Instance().sendQuestChat(party, "party.completeChat");
}
} else {
questData.isCompleted = false;
}
// if (this.trackedQuest != null && questData.quest.getId() == this.trackedQuest.getId()) {
// NoppesUtilPlayer.sendTrackedQuestData((EntityPlayerMP) player);
// }
QuestItem.pickedUp = null;
return bo;
}
}