package joshie.harvest.quests.player.schedule;
import joshie.harvest.api.HFApi;
import joshie.harvest.api.calendar.CalendarDate;
import joshie.harvest.api.calendar.Weekday;
import joshie.harvest.api.npc.NPCEntity;
import joshie.harvest.api.quests.HFQuest;
import joshie.harvest.api.quests.Quest;
import joshie.harvest.buildings.HFBuildings;
import joshie.harvest.calendar.CalendarHelper;
import joshie.harvest.cooking.HFCooking;
import joshie.harvest.cooking.item.ItemMeal.Meal;
import joshie.harvest.npcs.HFNPCs;
import joshie.harvest.quests.Quests;
import joshie.harvest.town.TownHelper;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Items;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import javax.annotation.Nullable;
import java.util.Random;
import java.util.Set;
@HFQuest("schedule.katlin.baking")
public class QuestKatlinSundayBakingFreeCake extends Quest {
private final Meal[] meals;
private CalendarDate date;
public QuestKatlinSundayBakingFreeCake() {
setNPCs(HFNPCs.CAFE_GRANNY);
meals = new Meal[] { Meal.COOKIES, Meal.COOKIES_CHOCOLATE, Meal.PIE_APPLE, Meal.CAKE, Meal.CAKE_CHOCOLATE, Meal.DOUGHNUT, Meal.BUN_JAM };
}
@Override
public boolean canStartQuest(Set<Quest> active, Set<Quest> finished) {
return finished.contains(Quests.KATLIN_MEET) && finished.contains(Quests.TOMAS_MEET);
}
@Override
public boolean isNPCUsed(EntityPlayer player, NPCEntity entity) {
if (entity.getNPC() != HFNPCs.CAFE_GRANNY || !TownHelper.getClosestTownToEntity(player, false).hasBuilding(HFBuildings.CHURCH)) return false;
CalendarDate today = HFApi.calendar.getDate(player.worldObj);
long daytime = CalendarHelper.getTime(player.worldObj);
if (today.getWeekday() == Weekday.SUNDAY && daytime >= 7000L && daytime <= 17000L) {
if (date == null || CalendarHelper.getDays(date, today) >= 7) {
return true;
}
}
return false;
}
@Nullable
@SideOnly(Side.CLIENT)
@Override
public String getLocalizedScript(EntityPlayer player, NPCEntity entity) {
return getLocalized("cake");
}
private ItemStack getRandomBakedGoods(Random rand) {
if (rand.nextInt(10) == 0) return new ItemStack(rand.nextBoolean() ? Items.COOKIE : Items.CAKE, 3);
else return HFCooking.MEAL.getCreativeStack(meals[rand.nextInt(meals.length)], 3);
}
@Override
public void onChatClosed(EntityPlayer player, NPCEntity entity, boolean wasSneaking) {
CalendarDate today = HFApi.calendar.getDate(player.worldObj);
date = today.copy(); //Save the date we received this
syncData(player); //Sync the new data
rewardItem(player, getRandomBakedGoods(player.worldObj.rand));
}
@Override
public void readFromNBT(NBTTagCompound nbt) {
super.readFromNBT(nbt);
if (nbt.hasKey("Date")) {
date = CalendarDate.fromNBT(nbt.getCompoundTag("Date"));
}
}
@Override
public NBTTagCompound writeToNBT(NBTTagCompound nbt) {
super.writeToNBT(nbt);
if (date != null) {
nbt.setTag("Date", date.toNBT());
}
return nbt;
}
}