/**
Copyright (C) 2014 by jabelar
This file is part of jabelar's Minecraft Forge modding examples; as such,
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.
This program 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.
For a copy of the GNU General Public License see <http://www.gnu.org/licenses/>.
*/
package com.blogspot.jabelarminecraft.wildanimals.entities.bigcats;
import net.minecraft.entity.SharedMonsterAttributes;
import net.minecraft.entity.ai.EntityAIBase;
import net.minecraft.entity.ai.EntityAITargetNonTamed;
import net.minecraft.entity.passive.EntityAnimal;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.world.World;
import com.blogspot.jabelarminecraft.wildanimals.entities.ai.bigcat.EntityAISeePlayerBigCat;
public class EntityManEatingLynx extends EntityLynx
{
protected final EntityAIBase aiSeePlayer = new EntityAISeePlayerBigCat(this, 32.0D);
protected final EntityAIBase aiTargetNonTamedAnimal = new EntityAITargetNonTamed(this, EntityAnimal.class, 200, false);
public EntityManEatingLynx(World par1World)
{
super(par1World);
// DEBUG
System.out.println("EntityManEatingLynx constructor()");
this.setSize(0.6F, 0.8F);
// rebuild AI task list specific to this sub-class
clearAITasks();
this.tasks.addTask(1, this.aiSwimming);
this.tasks.addTask(2, this.aiLeapAtTarget);
this.tasks.addTask(3, this.aiAttackOnCollide);
this.tasks.addTask(4, this.aiSeePlayer);
this.tasks.addTask(5, this.aiWander);
this.tasks.addTask(6, this.aiWatchClosest);
this.tasks.addTask(7, this.aiLookIdle);
this.targetTasks.addTask(1, this.aiHurtByTarget);
this.targetTasks.addTask(2, this.aiTargetNonTamedAnimal);
this.setTamed(false);
}
@Override
protected void applyEntityAttributes()
{
super.applyEntityAttributes();
this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).setBaseValue(0.30000001192092896D);
this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(8.0D);
}
@Override
protected void entityInit()
{
super.entityInit();
// note that custom datawatcher objects are created in EntityLynx superclass
}
/**
* Called frequently so the entity can update its state every tick as required. For example, zombies and skeletons
* use this to react to sunlight and start to burn.
*/
@Override
public void onLivingUpdate()
{
super.onLivingUpdate();
if (!this.worldObj.isRemote && this.isShaking && !this.startedShaking && !this.hasPath() && this.onGround)
{
this.startedShaking = true;
this.timeBigCatIsShaking = 0.0F;
this.prevTimeBigCatIsShaking = 0.0F;
this.worldObj.setEntityState(this, (byte)8);
}
}
@Override
public void setTamed(boolean par1)
{
// man-eating lynx can't be tamed
}
/**
* Called when a player interacts with a mob. e.g. gets milk from a cow, gets into the saddle on a pig.
*/
@Override
public boolean interact(EntityPlayer par1EntityPlayer)
{
// no special interaction for a man-eater!
return super.interact(par1EntityPlayer);
}
/**
* Checks if the parameter is an item which this animal can be fed to breed it (wheat, carrots or seeds depending on
* the animal type)
*/
@Override
public boolean isBreedingItem(ItemStack par1ItemStack)
{
return false; // can't breed man-eating lynx
}
/**
* Will return how many at most can spawn in a chunk at once.
*/
@Override
public int getMaxSpawnedInChunk()
{
return 8;
}
}