package joshie.harvest.quests.player.trade;
import joshie.harvest.api.npc.NPCEntity;
import joshie.harvest.api.quests.HFQuest;
import joshie.harvest.api.quests.Quest;
import joshie.harvest.core.helpers.InventoryHelper;
import joshie.harvest.core.helpers.InventoryHelper.SearchType;
import joshie.harvest.npcs.HFNPCs;
import joshie.harvest.quests.Quests;
import joshie.harvest.quests.base.QuestTrade;
import joshie.harvest.tools.HFTools;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import java.util.Set;
import static joshie.harvest.api.core.ITiered.ToolTier.BASIC;
import static joshie.harvest.core.helpers.InventoryHelper.SPECIAL;
@HFQuest("trade.tools")
public class QuestToolTrader extends QuestTrade {
@Override
public boolean canStartQuest(Set<Quest> active, Set<Quest> finished) {
return finished.contains(Quests.JADE_MEET) && !finished.contains(Quests.JENNI_MEET);
}
@Override
public boolean isNPCUsed(EntityPlayer player, NPCEntity entity) {
return entity.getNPC() == HFNPCs.FLOWER_GIRL && hasHeldType(player, SearchType.HOE, SearchType.BUCKET, SearchType.SHEARS);
}
@SideOnly(Side.CLIENT)
@Override
public String getLocalizedScript(EntityPlayer player, NPCEntity entity) {
if (hasHeldType(player, SearchType.HOE)) {
return getLocalized("hoe");
} else if (hasHeldType(player, SearchType.BUCKET)) {
return getLocalized("wateringcan");
} else if (hasHeldType(player, SearchType.SHEARS)) {
return getLocalized("sickle");
} else return null;
}
@Override
public void onChatClosed(EntityPlayer player, NPCEntity entity, boolean isSneaking) {
complete(player);
}
@Override
public void onQuestCompleted(EntityPlayer player) {
if (takeHeldType(player, SearchType.HOE)) {
rewardItem(player, HFTools.HOE.getStack(BASIC));
} else if (takeHeldType(player, SearchType.BUCKET)) {
rewardItem(player, HFTools.WATERING_CAN.getStack(BASIC));
} else if (takeHeldType(player, SearchType.SHEARS)) {
rewardItem(player, HFTools.SICKLE.getStack(BASIC));
}
}
private boolean hasHeldType(EntityPlayer player, SearchType... searches) {
for (SearchType search: searches) {
if (InventoryHelper.getHandItemIsIn(player, SPECIAL, search) != null) return true;
}
return false;
}
private boolean takeHeldType(EntityPlayer player, SearchType... searches) {
for (SearchType search: searches) {
if (InventoryHelper.takeItemsIfHeld(player, SPECIAL, search) != null) return true;
}
return false;
}
}