/* * This file is part of Matter Overdrive * Copyright (c) 2015., Simeon Radivoev, All rights reserved. * * Matter Overdrive is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Matter Overdrive is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Matter Overdrive. If not, see <http://www.gnu.org/licenses>. */ package matteroverdrive.data.quest; import cpw.mods.fml.common.eventhandler.Event; import matteroverdrive.MatterOverdrive; import matteroverdrive.api.quest.QuestStack; import matteroverdrive.entity.player.MOExtendedProperties; import matteroverdrive.network.packet.client.quest.PacketUpdateQuest; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraftforge.common.util.Constants; import org.apache.logging.log4j.Level; import java.util.ArrayList; import java.util.EnumSet; import java.util.List; /** * Created by Simeon on 11/19/2015. */ public class PlayerQuestData { List<QuestStack> activeQuests; List<QuestStack> completedQuests; MOExtendedProperties extendedProperties; public PlayerQuestData(MOExtendedProperties extendedProperties) { activeQuests = new ArrayList<>(); completedQuests = new ArrayList<>(); this.extendedProperties = extendedProperties; } public void writeToNBT(NBTTagCompound tagCompound,EnumSet<DataType> dataTypes) { if (dataTypes.contains(DataType.COMPLETED_QUESTS)) { if (completedQuests.size() > 0) { NBTTagList activeQuestsTagList = new NBTTagList(); for (QuestStack questStack : completedQuests) { NBTTagCompound questStackNBT = new NBTTagCompound(); questStack.writeToNBT(questStackNBT); activeQuestsTagList.appendTag(questStackNBT); } tagCompound.setTag("CompletedQuests", activeQuestsTagList); } } if (dataTypes.contains(DataType.ACTIVE_QUESTS)) { if (activeQuests.size() > 0) { NBTTagList activeQuestsTagList = new NBTTagList(); for (QuestStack questStack : activeQuests) { NBTTagCompound questStackNBT = new NBTTagCompound(); questStack.writeToNBT(questStackNBT); activeQuestsTagList.appendTag(questStackNBT); } tagCompound.setTag("ActiveQuests", activeQuestsTagList); } } } public void readFromNBT(NBTTagCompound tagCompound,EnumSet<DataType> dataTypes) { if (dataTypes.contains(DataType.COMPLETED_QUESTS)) { completedQuests.clear(); try { if (tagCompound.hasKey("CompletedQuests", Constants.NBT.TAG_LIST)) { NBTTagList activeQuestsTagList = tagCompound.getTagList("CompletedQuests", Constants.NBT.TAG_COMPOUND); for (int i = 0; i < activeQuestsTagList.tagCount(); i++) { completedQuests.add(QuestStack.loadFromNBT(activeQuestsTagList.getCompoundTagAt(i))); } } } catch (Exception e) { MatterOverdrive.log.log(Level.ERROR, e, "There was a problem while loading Completed Quests"); } } if (dataTypes.contains(DataType.ACTIVE_QUESTS)) { activeQuests.clear(); try { if (tagCompound.hasKey("ActiveQuests", Constants.NBT.TAG_LIST)) { NBTTagList activeQuestsTagList = tagCompound.getTagList("ActiveQuests", Constants.NBT.TAG_COMPOUND); for (int i = 0; i < activeQuestsTagList.tagCount(); i++) { activeQuests.add(QuestStack.loadFromNBT(activeQuestsTagList.getCompoundTagAt(i))); } } } catch (Exception e) { MatterOverdrive.log.log(Level.ERROR, e, "There was a problem while loading Active Quests"); } } } public void manageQuestCompletion() { int i = 0; while (i < activeQuests.size()) { if (activeQuests.get(i).isCompleted()) { QuestStack questStack = activeQuests.remove(i); extendedProperties.onQuestCompleted(questStack,i); }else { i++; } } } public boolean hasCompletedQuest(QuestStack quest) { for (QuestStack q : completedQuests) { if (q.getQuest().areQuestStacksEqual(q,quest)) { return true; } } return false; } public boolean hasQuest(QuestStack questStack) { for (QuestStack q : activeQuests) { if (q.getQuest().areQuestStacksEqual(q,questStack)) { return true; } } return false; } public QuestStack addQuest(QuestStack questStack) { if(questStack.getQuest() != null && activeQuests.add(questStack)) { return questStack; } return null; } public void addQuestToCompleted(QuestStack questStack) { if (questStack.getQuest() != null && !completedQuests.contains(questStack)) { completedQuests.add(questStack); } } public void onEvent(Event event) { if (extendedProperties != null && extendedProperties.getPlayer() != null && extendedProperties.getPlayer() instanceof EntityPlayerMP) { for (int i = 0; i < activeQuests.size(); i++) { if (activeQuests.get(i).getQuest() != null) { if (activeQuests.get(i).getQuest().onEvent(activeQuests.get(i), event, extendedProperties.getPlayer())) { //MatterOverdrive.packetPipeline.sendTo(new PacketSyncQuests(this,EnumSet.of(DataType.ACTIVE_QUESTS)),(EntityPlayerMP) extendedProperties.getPlayer()); MatterOverdrive.packetPipeline.sendTo(new PacketUpdateQuest(i, this,PacketUpdateQuest.UPDATE_QUEST), (EntityPlayerMP) extendedProperties.getPlayer()); } } } } } public void clearActiveQuests() { activeQuests.clear(); } public void clearCompletedQuests() { completedQuests.clear(); } public void removeQuest(QuestStack questStack) { activeQuests.remove(questStack); } public QuestStack removeQuest(int id) { return activeQuests.remove(id); } public List<QuestStack> getActiveQuests() { return activeQuests; } public List<QuestStack> getCompletedQuests() { return completedQuests; } public enum DataType { ACTIVE_QUESTS,COMPLETED_QUESTS } }