package joshie.harvest.quests.town.tasks;
import joshie.harvest.api.HFApi;
import joshie.harvest.api.core.ITiered.ToolTier;
import joshie.harvest.api.npc.NPCEntity;
import joshie.harvest.api.quests.HFQuest;
import joshie.harvest.api.town.Town;
import joshie.harvest.core.helpers.InventoryHelper;
import joshie.harvest.core.helpers.TextHelper;
import joshie.harvest.npcs.HFNPCs;
import joshie.harvest.quests.base.QuestDaily;
import joshie.harvest.tools.HFTools;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import javax.annotation.Nullable;
import static joshie.harvest.core.helpers.InventoryHelper.ORE_DICTIONARY;
@HFQuest("collect.materials")
public class QuestCollectWoodStone extends QuestDaily {
private boolean silver;
private boolean wood;
private int amount = 1;
public QuestCollectWoodStone() {
super(HFNPCs.CARPENTER);
}
@Override
public String getDescription(World world, @Nullable EntityPlayer player) {
if (player != null) return getLocalized("desc", amount, (wood ? getLocalized("wood") : getLocalized("stone")));
else return getLocalized("task", amount, (wood ? getLocalized("wood") : getLocalized("stone")),
(wood ? (silver ? getLocalized("axe.silver") : getLocalized("axe")) :
(silver ? getLocalized("pick.silver") : getLocalized("pick"))), (wood ? amount * 10 : amount * 20));
}
@Override
public void onSelectedAsDailyQuest(Town town, World world, BlockPos pos) {
rand.setSeed(HFApi.calendar.getDate(world).hashCode());
wood = rand.nextBoolean();
amount = (8 * (1 + rand.nextInt(16))) + rand.nextInt(16);
if (amount >= 128 && rand.nextInt(30) == 0) {
silver = true;
amount *= 4.5;
}
}
@Override
public boolean isNPCUsed(EntityPlayer player, NPCEntity entity) {
return super.isNPCUsed(player, entity) && InventoryHelper.getHandItemIsIn(player, ORE_DICTIONARY, (wood ? "logWood" : "stone"), amount) != null;
}
@Override
@Nullable
@SideOnly(Side.CLIENT)
public String getLocalizedScript(EntityPlayer player, NPCEntity entity) {
return TextHelper.getRandomSpeech(entity.getNPC(), "harvestfestival.quest.collect.materials.complete", 32);
}
@Override
public void onChatClosed(EntityPlayer player, NPCEntity entity, boolean wasSneaking) {
if (InventoryHelper.takeItemsIfHeld(player, ORE_DICTIONARY, (wood ? "logWood" : "stone"), amount) != null) {
complete(player);
}
}
@Override
public void onQuestCompleted(EntityPlayer player) {
HFApi.player.getRelationsForPlayer(player).affectRelationship(HFNPCs.CARPENTER, 2500);
rewardGold(player, (wood ? amount * 10 : amount * 20));
rewardItem(player, (wood ? HFTools.AXE.getStack((silver ? ToolTier.SILVER : ToolTier.COPPER)) : HFTools.HAMMER.getStack((silver ? ToolTier.SILVER : ToolTier.COPPER))));
}
@Override
public void readFromNBT(NBTTagCompound nbt) {
super.readFromNBT(nbt);
amount = nbt.getShort("Amount");
wood = nbt.getBoolean("Wood");
silver = nbt.getBoolean("Silver");
}
@Override
public NBTTagCompound writeToNBT(NBTTagCompound nbt) {
nbt.setShort("Amount", (short) amount);
nbt.setBoolean("Wood", wood);
nbt.setBoolean("Silver", silver);
return super.writeToNBT(nbt);
}
}