114 lines
2.7 KiB
Java
Executable file
114 lines
2.7 KiB
Java
Executable file
package common.ai;
|
|
|
|
import common.block.Block;
|
|
import common.block.artificial.BlockBed;
|
|
import common.entity.animal.EntityOcelot;
|
|
import common.init.Blocks;
|
|
import common.tileentity.TileEntity;
|
|
import common.tileentity.TileEntityChest;
|
|
import common.util.BlockPos;
|
|
import common.world.State;
|
|
import common.world.World;
|
|
|
|
public class EntityAIOcelotSit extends EntityAIMoveToBlock
|
|
{
|
|
private final EntityOcelot ocelot;
|
|
|
|
public EntityAIOcelotSit(EntityOcelot ocelotIn, double p_i45315_2_)
|
|
{
|
|
super(ocelotIn, p_i45315_2_, 8);
|
|
this.ocelot = ocelotIn;
|
|
}
|
|
|
|
/**
|
|
* Returns whether the EntityAIBase should begin execution.
|
|
*/
|
|
public boolean shouldExecute()
|
|
{
|
|
return this.ocelot.isTamed() && !this.ocelot.isSitting() && super.shouldExecute();
|
|
}
|
|
|
|
/**
|
|
* Returns whether an in-progress EntityAIBase should continue executing
|
|
*/
|
|
public boolean continueExecuting()
|
|
{
|
|
return super.continueExecuting();
|
|
}
|
|
|
|
/**
|
|
* Execute a one shot task or start executing a continuous task
|
|
*/
|
|
public void startExecuting()
|
|
{
|
|
super.startExecuting();
|
|
this.ocelot.getAISit().setSitting(false);
|
|
}
|
|
|
|
/**
|
|
* Resets the task
|
|
*/
|
|
public void resetTask()
|
|
{
|
|
super.resetTask();
|
|
this.ocelot.setSitting(false);
|
|
}
|
|
|
|
/**
|
|
* Updates the task
|
|
*/
|
|
public void updateTask()
|
|
{
|
|
super.updateTask();
|
|
this.ocelot.getAISit().setSitting(false);
|
|
|
|
if (!this.getIsAboveDestination())
|
|
{
|
|
this.ocelot.setSitting(false);
|
|
}
|
|
else if (!this.ocelot.isSitting())
|
|
{
|
|
this.ocelot.setSitting(true);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Return true to set given position as destination
|
|
*/
|
|
protected boolean shouldMoveTo(World worldIn, BlockPos pos)
|
|
{
|
|
if (!worldIn.isAirBlock(pos.up()))
|
|
{
|
|
return false;
|
|
}
|
|
else
|
|
{
|
|
State iblockstate = worldIn.getState(pos);
|
|
Block block = iblockstate.getBlock();
|
|
|
|
if (block == Blocks.chest)
|
|
{
|
|
TileEntity tileentity = worldIn.getTileEntity(pos);
|
|
|
|
if (tileentity instanceof TileEntityChest && ((TileEntityChest)tileentity).numPlayersUsing < 1)
|
|
{
|
|
return true;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (block == Blocks.lit_furnace)
|
|
{
|
|
return true;
|
|
}
|
|
|
|
if (block instanceof BlockBed && iblockstate.getValue(BlockBed.PART) != BlockBed.EnumPartType.HEAD)
|
|
{
|
|
return true;
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|
|
}
|
|
}
|