package joshie.harvest.cooking.tile; import joshie.harvest.api.cooking.Utensil; import joshie.harvest.cooking.HFCooking; import joshie.harvest.cooking.tile.TileCooking.TileCookingTicking; import joshie.harvest.core.HFTrackers; import joshie.harvest.core.achievements.HFAchievements; import joshie.harvest.core.helpers.SpawnItemHelper; import joshie.harvest.core.lib.HFSounds; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.util.SoundCategory; public class TileOven extends TileCookingTicking { public float prevLidAngle; public float lidAngle; private boolean animating; private boolean up = true; private EntityPlayer givePlayer; private int giveTimer = 0; @Override public Utensil getUtensil() { return HFCooking.OVEN; } @Override public void giveToPlayer(EntityPlayer player) { if (givePlayer == null) { //Play the sound if we can remove an ingredient worldObj.playSound(null, getPos().getX(), getPos().getY() + 0.5D, getPos().getZ(), HFSounds.OVEN_DOOR, SoundCategory.BLOCKS, 2F, worldObj.rand.nextFloat() * 0.1F + 0.9F); if (worldObj.isRemote) animating = true; givePlayer = player; giveTimer = 15; } } @Override public boolean addIngredient(ItemStack stack) { boolean ret = super.addIngredient(stack); if (ret) { //Play the sound if we add an ingredient worldObj.playSound(null, getPos().getX(), getPos().getY() + 0.5D, getPos().getZ(), HFSounds.OVEN_DOOR, SoundCategory.BLOCKS, 2F, worldObj.rand.nextFloat() * 0.1F + 0.9F); if (worldObj.isRemote) animating = true; return true; } else return false; } @Override public void update() { super.update(); if (giveTimer > 0) { giveTimer--; if (giveTimer <= 0) { for (ItemStack stack: getResult()) { if (stack.hasTagCompound()) { givePlayer.addStat(HFAchievements.cooking); } HFTrackers.getPlayerTrackerFromPlayer(givePlayer).getTracking().addAsObtained(stack); SpawnItemHelper.addToPlayerInventory(givePlayer, stack); } result.clear(); //Clear out the result givePlayer = null; giveTimer = 0; } } //Only do render updates on the client if (worldObj.isRemote) { prevLidAngle = lidAngle; float f1 = 0.025F; if (animating) { if (up) { lidAngle -= f1; } else { lidAngle += f1; } if (lidAngle < -0.25F) { lidAngle = -0.25F; up = false; //Once we hit critical, go down instead } if (lidAngle > 0.0F) { lidAngle = 0.0F; animating = false; up = true; } } } } @Override public void animate() { super.animate(); if (getCookTimer() == 1) worldObj.playSound(null, getPos(), HFSounds.OVEN, SoundCategory.BLOCKS, 2F, 1F); else if (getCookTimer() >= getCookingTime() - 1) { worldObj.playSound(null, getPos(), HFSounds.OVEN_DONE, SoundCategory.BLOCKS, 2F, 1F); } } }