/*
* 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.api.quest.IQuestLogic;
import matteroverdrive.api.quest.IQuestReward;
import matteroverdrive.api.quest.Quest;
import matteroverdrive.api.quest.QuestStack;
import matteroverdrive.entity.player.MOExtendedProperties;
import matteroverdrive.util.MOStringHelper;
import net.minecraft.entity.player.EntityPlayer;
import java.util.List;
import java.util.Random;
/**
* Created by Simeon on 11/19/2015.
*/
public class GenericQuest extends Quest
{
protected IQuestLogic questLogic;
public GenericQuest(IQuestLogic questLogic, String title,int xpReward)
{
super(title,xpReward);
this.questLogic = questLogic;
}
@Override
public boolean canBeAccepted(QuestStack questStack, EntityPlayer entityPlayer)
{
MOExtendedProperties extendedProperties = MOExtendedProperties.get(entityPlayer);
if (extendedProperties != null)
{
return questLogic.canAccept(questStack,entityPlayer) && !extendedProperties.hasCompletedQuest(questStack) && !extendedProperties.hasQuest(questStack);
}
return false;
}
@Override
public String getTitle(QuestStack questStack)
{
return questLogic.modifyTitle(questStack,MOStringHelper.translateToLocal("quest." + title + ".title"));
}
@Override
public String getTitle(QuestStack questStack,EntityPlayer entityPlayer)
{
return questLogic.modifyTitle(questStack,replaceVariables(MOStringHelper.translateToLocal("quest." + title + ".title"),entityPlayer));
}
@Override
public String getInfo(QuestStack questStack, EntityPlayer entityPlayer)
{
return questLogic.modifyInfo(questStack,replaceVariables(MOStringHelper.translateToLocal("quest." + title + ".info"),entityPlayer));
}
@Override
public String getObjective(QuestStack questStack, EntityPlayer entityPlayer, int objectiveIndex)
{
return questLogic.modifyObjective(questStack,entityPlayer,replaceVariables(MOStringHelper.translateToLocal("quest." + title + ".objective."+objectiveIndex),entityPlayer),objectiveIndex);
}
@Override
public int getObjectivesCount(QuestStack questStack, EntityPlayer entityPlayer)
{
return questLogic.modifyObjectiveCount(questStack,entityPlayer,1);
}
@Override
public boolean isObjectiveCompleted(QuestStack questStack, EntityPlayer entityPlayer, int objectiveIndex) {
return questLogic.isObjectiveCompleted(questStack,entityPlayer,objectiveIndex);
}
@Override
public boolean areQuestStacksEqual(QuestStack questStackOne, QuestStack questStackTwo)
{
if (questStackOne.getQuest() instanceof GenericQuest && questStackTwo.getQuest() instanceof GenericQuest)
{
if (((GenericQuest) questStackOne.getQuest()).getQuestLogic() == ((GenericQuest) questStackTwo.getQuest()).getQuestLogic())
{
return ((GenericQuest) questStackTwo.getQuest()).getQuestLogic().areQuestStacksEqual(questStackOne,questStackTwo);
}
}
return false;
}
@Override
public void initQuestStack(Random random,QuestStack questStack)
{
questLogic.initQuestStack(random,questStack);
}
@Override
public void initQuestStack(Random random, QuestStack questStack, EntityPlayer entityPlayer)
{
}
@Override
public boolean onEvent(QuestStack questStack, Event event, EntityPlayer entityPlayer)
{
return questLogic.onEvent(questStack,event,entityPlayer);
}
@Override
public void onCompleted(QuestStack questStack, EntityPlayer entityPlayer)
{
questLogic.onCompleted(questStack,entityPlayer);
}
@Override
public int getXpReward(QuestStack questStack, EntityPlayer entityPlayer)
{
return questLogic.modifyXP(questStack,entityPlayer,xpReward);
}
@Override
public void addToRewards(QuestStack questStack, EntityPlayer entityPlayer, List<IQuestReward> rewards)
{
rewards.addAll(questRewards);
questLogic.modifyRewards(questStack,entityPlayer,rewards);
}
public String replaceVariables(String text,EntityPlayer entityPlayer)
{
if (entityPlayer != null)
{
return text.replace("%1$s",entityPlayer.getDisplayName());
}
return text;
}
public IQuestLogic getQuestLogic()
{
return questLogic;
}
public void setQuestLogic(IQuestLogic questLogic)
{
this.questLogic = questLogic;
}
}