Haven't used this code in a a few MC versions, but you want to overwrite you're block's getCollisionBoundingBoxFromPool method like so:
/**
* Returns a bounding box from the pool of bounding boxes (this means this box can change after the pool has been
* cleared to be reused)
*/
@Override
public AxisAlignedBB getCollisionBoundingBoxFromPool(World world, int x, int y, int z)
{
return AxisAlignedBB.getAABBPool().addOrModifyAABBInPool(minX, minY, minZ, maxX, maxY, maxZ));
}
With minX, minY, minZ, maxX, maxY, maxZ defining the area you want the collision hitbox to be. (A standard block would have 0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F I think, and a BlockCactus's collision BB would be slightly bigger than a standard block.)
Then override the onEntityCollided method, and put a log statement in there to test if your bounding box is right, like so:
/**
* Triggered whenever an entity collides with this block (enters into the block). Args: world, x, y, z, entity
*/
public void onEntityCollidedWithBlock(World world, int x, int y, int z, Entity entity)
{
System.out.println("Collision detected!");
}