/* * 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 matteroverdrive.api.events.MOEventDialogInteract; import matteroverdrive.api.quest.IQuestReward; import matteroverdrive.api.quest.QuestStack; import matteroverdrive.entity.EntityVillagerMadScientist; import net.minecraft.entity.monster.EntityCreeper; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; import net.minecraft.init.Items; import net.minecraft.item.ItemBlock; import net.minecraft.item.ItemSpade; import net.minecraft.item.ItemStack; import net.minecraftforge.event.entity.living.LivingDeathEvent; import net.minecraftforge.event.entity.player.EntityItemPickupEvent; import java.util.List; import java.util.Random; /** * Created by Simeon on 11/22/2015. */ public class QuestLogicCocktailOfAscension extends AbstractQuestLogic { public static final int MAX_CREEPER_KILS = 5; public static final int MAX_GUNPOWDER_COUNT = 5; public static final int MAX_MUSHROOM_COUNT = 5; @Override public String modifyInfo(QuestStack questStack, String info) { return String.format(info,"",MAX_GUNPOWDER_COUNT,MAX_MUSHROOM_COUNT); } @Override public boolean isObjectiveCompleted(QuestStack questStack, EntityPlayer entityPlayer, int objectiveIndex) { if (objectiveIndex == 0) { return getCreeperKillCount(questStack) >= MAX_CREEPER_KILS; } else if (objectiveIndex == 1) { return getGunpowderCount(questStack) >= MAX_GUNPOWDER_COUNT; }else if (objectiveIndex == 2) { return getMushroomCount(questStack) >= MAX_MUSHROOM_COUNT; } else if (objectiveIndex == 3) { return hasTalkedTo(questStack); } return false; } @Override public String modifyObjective(QuestStack questStack, EntityPlayer entityPlayer, String objective, int objectiveIndex) { if (objectiveIndex == 0) { return objective.replace("%2$s",Integer.toString(getCreeperKillCount(questStack))).replace("%3$s",Integer.toString(MAX_CREEPER_KILS)); } else if (objectiveIndex == 1) { return objective.replace("%2$s",Integer.toString(getGunpowderCount(questStack))).replace("%3$s",Integer.toString(MAX_GUNPOWDER_COUNT)); } else if (objectiveIndex == 2) { return objective.replace("%2$s",Integer.toString(getMushroomCount(questStack))).replace("%3$s",Integer.toString(MAX_MUSHROOM_COUNT)); } return objective; } @Override public int modifyObjectiveCount(QuestStack questStack, EntityPlayer entityPlayer, int count) { if (questStack.hasGiver() && getCreeperKillCount(questStack) >= MAX_CREEPER_KILS && getGunpowderCount(questStack) >= MAX_GUNPOWDER_COUNT && getMushroomCount(questStack) >= MAX_MUSHROOM_COUNT) { return 4; } return 3; } @Override public void initQuestStack(Random random, QuestStack questStack) { } public int getCreeperKillCount(QuestStack questStack) { if (hasTag(questStack)) { return getTag(questStack).getByte("CreeperKills"); } return 0; } public int getMushroomCount(QuestStack questStack) { if (hasTag(questStack)) { return getTag(questStack).getByte("MushroomCount"); } return 0; } public int getGunpowderCount(QuestStack questStack) { if (hasTag(questStack)) { return getTag(questStack).getByte("GunpowderCount"); } return 0; } public boolean hasTalkedTo(QuestStack questStack) { if (questStack.hasGiver()) { if (hasTag(questStack)) { return getTag(questStack).getBoolean("TalkedToGiver"); } return false; } return true; } @Override public boolean onEvent(QuestStack questStack, Event event, EntityPlayer entityPlayer) { if (getCreeperKillCount(questStack) < MAX_CREEPER_KILS && event instanceof LivingDeathEvent) { if (((LivingDeathEvent) event).entityLiving instanceof EntityCreeper && entityPlayer.getHeldItem() != null && entityPlayer.getHeldItem().getItem() instanceof ItemSpade) { initTag(questStack); byte currentCreeperKillCount = getTag(questStack).getByte("CreeperKills"); getTag(questStack).setByte("CreeperKills",++currentCreeperKillCount); return true; } } else if (event instanceof EntityItemPickupEvent) { ItemStack itemStack = ((EntityItemPickupEvent) event).item.getEntityItem(); if (itemStack != null) { if (itemStack.getItem() instanceof ItemBlock && ((ItemBlock) itemStack.getItem()).field_150939_a == Blocks.red_mushroom && entityPlayer.worldObj.provider.dimensionId == -1) { initTag(questStack); byte mushroomCount = getTag(questStack).getByte("MushroomCount"); if (mushroomCount < MAX_MUSHROOM_COUNT) { int newMushroomCount = Math.min(mushroomCount + itemStack.stackSize,MAX_MUSHROOM_COUNT); int takenMushrooms = newMushroomCount-mushroomCount; itemStack.stackSize-= takenMushrooms; getTag(questStack).setByte("MushroomCount",(byte)newMushroomCount); return true; } } else if (itemStack.getItem() == Items.gunpowder) { initTag(questStack); byte gunpowderCount = getTag(questStack).getByte("GunpowderCount"); if (gunpowderCount < MAX_GUNPOWDER_COUNT) { int newGunpowderCount = Math.min(gunpowderCount + itemStack.stackSize,MAX_MUSHROOM_COUNT); int takenGunpowder = newGunpowderCount-gunpowderCount; itemStack.stackSize-= takenGunpowder; getTag(questStack).setByte("GunpowderCount",(byte) newGunpowderCount); itemStack.stackSize--; return true; } } } } else if (event instanceof MOEventDialogInteract) { if (((MOEventDialogInteract) event).npc instanceof EntityVillagerMadScientist && ((MOEventDialogInteract) event).dialogMessage == EntityVillagerMadScientist.cocktailOfAscensionComplete) { initTag(questStack); getTag(questStack).setBoolean("TalkedToGiver",true); 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) { } }