/*
* 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.logic;
import cpw.mods.fml.common.eventhandler.Event;
import cpw.mods.fml.common.gameevent.PlayerEvent;
import matteroverdrive.api.quest.IQuestReward;
import matteroverdrive.api.quest.QuestStack;
import matteroverdrive.data.quest.QuestItem;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import java.util.List;
import java.util.Random;
/**
* Created by Simeon on 12/9/2015.
*/
public class QuestLogicCraft extends QuestLogicRandomItem
{
int minCraftCount;
int maxCraftCount;
int xpPerCraft;
public QuestLogicCraft(ItemStack itemStack)
{
this(itemStack,0,0,0);
}
public QuestLogicCraft(ItemStack itemStack,int minCraftCount,int maxCraftCount)
{
this(itemStack,minCraftCount,maxCraftCount,0);
}
public QuestLogicCraft(ItemStack itemStack,int minCraftCount,int maxCraftCount,int xpPerCraft)
{
init(new QuestItem[]{QuestItem.fromItemStack(itemStack)},minCraftCount,maxCraftCount,xpPerCraft);
}
public QuestLogicCraft(ItemStack[] itemStacks,int minCraftCount,int maxCraftCount,int xpPerCraft)
{
QuestItem[] questItems = new QuestItem[itemStacks.length];
for (int i = 0;i < itemStacks.length;i++)
{
questItems[i] = QuestItem.fromItemStack(itemStacks[i]);
}
init(questItems,minCraftCount,maxCraftCount,xpPerCraft);
}
public QuestLogicCraft(QuestItem questItem,int minCraftCount,int maxCraftCount,int xpPerCraft)
{
init(new QuestItem[]{questItem},minCraftCount,maxCraftCount,xpPerCraft);
}
public QuestLogicCraft(QuestItem[] questItem,int minCraftCount,int maxCraftCount,int xpPerCraft)
{
init(questItem,minCraftCount,maxCraftCount,xpPerCraft);
}
protected void init(QuestItem[] items,int minCraftCount,int maxCraftCount,int xpPerCraft)
{
init(items);
this.minCraftCount = minCraftCount;
this.maxCraftCount = maxCraftCount;
this.xpPerCraft = xpPerCraft;
}
@Override
public String modifyInfo(QuestStack questStack, String info)
{
info = info.replace("$craftMaxAmount",Integer.toString(getMaxCraftCount(questStack)));
ItemStack itemStack = getItem(questStack);
info = info.replace("$craftItem",itemStack != null ? itemStack.getDisplayName() : "Unknown Item");
return info;
}
@Override
public boolean isObjectiveCompleted(QuestStack questStack, EntityPlayer entityPlayer, int objectiveIndex)
{
return getCraftCount(questStack) >= getMaxCraftCount(questStack);
}
public int getCraftCount(QuestStack questStack)
{
if (hasTag(questStack))
{
return getTag(questStack).getInteger("CraftCount");
}
return 0;
}
public void setCraftCount(QuestStack questStack,int count)
{
initTag(questStack);
getTag(questStack).setInteger("CraftCount",count);
}
public int getMaxCraftCount(QuestStack questStack)
{
if (hasTag(questStack))
{
ItemStack itemStack = getItem(questStack);
return itemStack.stackSize + getTag(questStack).getInteger("MaxCraftCount");
}
return 0;
}
@Override
public String modifyObjective(QuestStack questStack, EntityPlayer entityPlayer, String objective, int objectiveIndex)
{
objective = objective.replace("$craftAmount",Integer.toString(getCraftCount(questStack)));
objective = objective.replace("$craftMaxAmount",Integer.toString(getMaxCraftCount(questStack)));
ItemStack itemStack = getItem(questStack);
objective = objective.replace("$craftItem",itemStack != null ? itemStack.getDisplayName() : "Unknown Item");
return objective;
}
@Override
public void initQuestStack(Random random, QuestStack questStack)
{
initTag(questStack);
initItemType(random,questStack);
getTag(questStack).setInteger("MaxCraftCount",random(random,minCraftCount,maxCraftCount));
}
@Override
public boolean onEvent(QuestStack questStack, Event event, EntityPlayer entityPlayer)
{
if (event instanceof PlayerEvent.ItemCraftedEvent)
{
ItemStack itemStack = getItem(questStack);
if (itemStack != null && ((PlayerEvent.ItemCraftedEvent) event).crafting.isItemEqual(itemStack))
{
if (getCraftCount(questStack) < getMaxCraftCount(questStack))
{
setCraftCount(questStack, getCraftCount(questStack) + 1);
if (isObjectiveCompleted(questStack,entityPlayer,0) && autoComplete)
{
questStack.markComplited(entityPlayer,false);
}
return true;
}
}
}
return false;
}
@Override
public void onTaken(QuestStack questStack, EntityPlayer entityPlayer)
{
}
@Override
public void onCompleted(QuestStack questStack, EntityPlayer entityPlayer) {
}
@Override
public void modifyRewards(QuestStack questStack, EntityPlayer entityPlayer, List<IQuestReward> rewards) {
}
@Override
public int modifyXP(QuestStack questStack, EntityPlayer entityPlayer, int originalXp)
{
return originalXp + xpPerCraft * getMaxCraftCount(questStack);
}
}